flwr 1.24.0__py3-none-any.whl → 1.25.0__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/app_cmd/review.py +13 -3
- flwr/cli/federation/show.py +4 -3
- flwr/cli/ls.py +44 -3
- flwr/cli/new/new.py +106 -297
- flwr/cli/run/run.py +12 -17
- flwr/cli/run_utils.py +23 -5
- flwr/cli/stop.py +1 -1
- flwr/cli/supernode/ls.py +10 -5
- flwr/cli/utils.py +0 -137
- flwr/client/grpc_adapter_client/connection.py +2 -2
- flwr/client/grpc_rere_client/connection.py +6 -3
- flwr/client/rest_client/connection.py +6 -4
- flwr/common/serde.py +6 -0
- flwr/common/typing.py +6 -0
- flwr/proto/fleet_pb2.py +10 -10
- flwr/proto/fleet_pb2.pyi +5 -1
- flwr/proto/run_pb2.py +24 -24
- flwr/proto/run_pb2.pyi +10 -1
- flwr/server/app.py +1 -0
- flwr/server/superlink/fleet/message_handler/message_handler.py +41 -2
- flwr/server/superlink/linkstate/in_memory_linkstate.py +34 -0
- flwr/server/superlink/linkstate/linkstate.py +32 -0
- flwr/server/superlink/linkstate/sqlite_linkstate.py +60 -3
- flwr/supercore/constant.py +3 -0
- flwr/supercore/utils.py +190 -0
- flwr/superlink/servicer/control/control_grpc.py +2 -0
- flwr/superlink/servicer/control/control_servicer.py +88 -5
- flwr/supernode/nodestate/in_memory_nodestate.py +62 -1
- flwr/supernode/nodestate/nodestate.py +45 -0
- flwr/supernode/servicer/clientappio/clientappio_servicer.py +7 -1
- flwr/supernode/start_client_internal.py +7 -4
- {flwr-1.24.0.dist-info → flwr-1.25.0.dist-info}/METADATA +2 -4
- {flwr-1.24.0.dist-info → flwr-1.25.0.dist-info}/RECORD +35 -96
- flwr/cli/new/templates/__init__.py +0 -15
- flwr/cli/new/templates/app/.gitignore.tpl +0 -163
- flwr/cli/new/templates/app/LICENSE.tpl +0 -202
- flwr/cli/new/templates/app/README.baseline.md.tpl +0 -127
- flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -68
- flwr/cli/new/templates/app/README.md.tpl +0 -37
- flwr/cli/new/templates/app/__init__.py +0 -15
- flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -1
- flwr/cli/new/templates/app/code/__init__.py +0 -15
- flwr/cli/new/templates/app/code/__init__.py.tpl +0 -1
- flwr/cli/new/templates/app/code/__init__.pytorch_legacy_api.py.tpl +0 -1
- flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -75
- flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -93
- flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -71
- flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -102
- flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -46
- flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -80
- flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl +0 -55
- flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -108
- flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -82
- flwr/cli/new/templates/app/code/client.xgboost.py.tpl +0 -110
- flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -36
- flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -15
- flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -92
- flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -87
- flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -56
- flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -73
- flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -78
- flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -66
- flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -43
- flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -42
- flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -39
- flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -41
- flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -38
- flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -41
- flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl +0 -31
- flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -44
- flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -38
- flwr/cli/new/templates/app/code/server.xgboost.py.tpl +0 -56
- flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -1
- flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -98
- flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -57
- flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -102
- flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -7
- flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -99
- flwr/cli/new/templates/app/code/task.pytorch_legacy_api.py.tpl +0 -111
- flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -67
- flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -52
- flwr/cli/new/templates/app/code/task.xgboost.py.tpl +0 -67
- flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -1
- flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -146
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -80
- flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -65
- flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -52
- flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -56
- flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -49
- flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -53
- flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl +0 -53
- flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -52
- flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -53
- flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +0 -61
- {flwr-1.24.0.dist-info → flwr-1.25.0.dist-info}/WHEEL +0 -0
- {flwr-1.24.0.dist-info → flwr-1.25.0.dist-info}/entry_points.txt +0 -0
|
@@ -19,7 +19,7 @@ from collections.abc import Sequence
|
|
|
19
19
|
from dataclasses import dataclass
|
|
20
20
|
from threading import Lock, RLock
|
|
21
21
|
|
|
22
|
-
from flwr.common import Context, Error, Message
|
|
22
|
+
from flwr.common import Context, Error, Message, now
|
|
23
23
|
from flwr.common.constant import ErrorCode
|
|
24
24
|
from flwr.common.inflatable import (
|
|
25
25
|
get_all_nested_objects,
|
|
@@ -27,6 +27,7 @@ from flwr.common.inflatable import (
|
|
|
27
27
|
no_object_id_recompute,
|
|
28
28
|
)
|
|
29
29
|
from flwr.common.typing import Run
|
|
30
|
+
from flwr.supercore.constant import MESSAGE_TIME_ENTRY_MAX_AGE_SECONDS
|
|
30
31
|
from flwr.supercore.corestate.in_memory_corestate import InMemoryCoreState
|
|
31
32
|
from flwr.supercore.object_store import ObjectStore
|
|
32
33
|
|
|
@@ -45,6 +46,14 @@ class MessageEntry:
|
|
|
45
46
|
is_retrieved: bool = False
|
|
46
47
|
|
|
47
48
|
|
|
49
|
+
@dataclass
|
|
50
|
+
class TimeEntry:
|
|
51
|
+
"""Data class to represent a time entry."""
|
|
52
|
+
|
|
53
|
+
starting_at: float
|
|
54
|
+
finished_at: float | None = None
|
|
55
|
+
|
|
56
|
+
|
|
48
57
|
class InMemoryNodeState(
|
|
49
58
|
NodeState, InMemoryCoreState
|
|
50
59
|
): # pylint: disable=too-many-instance-attributes
|
|
@@ -63,6 +72,9 @@ class InMemoryNodeState(
|
|
|
63
72
|
# Store run ID to Context mapping
|
|
64
73
|
self.ctx_store: dict[int, Context] = {}
|
|
65
74
|
self.lock_ctx_store = Lock()
|
|
75
|
+
# Store msg ID to TimeEntry mapping
|
|
76
|
+
self.time_store: dict[str, TimeEntry] = {}
|
|
77
|
+
self.lock_time_store = Lock()
|
|
66
78
|
|
|
67
79
|
def set_node_id(self, node_id: int | None) -> None:
|
|
68
80
|
"""Set the node ID."""
|
|
@@ -208,3 +220,52 @@ class InMemoryNodeState(
|
|
|
208
220
|
|
|
209
221
|
# Store the error reply message
|
|
210
222
|
self.store_message(error_reply)
|
|
223
|
+
|
|
224
|
+
def record_message_processing_start(self, message_id: str) -> None:
|
|
225
|
+
"""Record the start time of message processing based on the message ID."""
|
|
226
|
+
with self.lock_time_store:
|
|
227
|
+
self.time_store[message_id] = TimeEntry(starting_at=now().timestamp())
|
|
228
|
+
|
|
229
|
+
def record_message_processing_end(self, message_id: str) -> None:
|
|
230
|
+
"""Record the end time of message processing based on the message ID."""
|
|
231
|
+
with self.lock_time_store:
|
|
232
|
+
if message_id not in self.time_store:
|
|
233
|
+
raise ValueError(
|
|
234
|
+
f"Cannot record end time: Message ID {message_id} not found."
|
|
235
|
+
)
|
|
236
|
+
entry = self.time_store[message_id]
|
|
237
|
+
entry.finished_at = now().timestamp()
|
|
238
|
+
|
|
239
|
+
def get_message_processing_duration(self, message_id: str) -> float:
|
|
240
|
+
"""Get the message processing duration based on the message ID."""
|
|
241
|
+
# Cleanup old message processing times
|
|
242
|
+
self._cleanup_old_message_times()
|
|
243
|
+
with self.lock_time_store:
|
|
244
|
+
if message_id not in self.time_store:
|
|
245
|
+
raise ValueError(f"Message ID {message_id} not found.")
|
|
246
|
+
|
|
247
|
+
entry = self.time_store[message_id]
|
|
248
|
+
if entry.starting_at is None or entry.finished_at is None:
|
|
249
|
+
raise ValueError(
|
|
250
|
+
f"Start time or end time for message ID {message_id} is missing."
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
duration = entry.finished_at - entry.starting_at
|
|
254
|
+
return duration
|
|
255
|
+
|
|
256
|
+
def _cleanup_old_message_times(self) -> None:
|
|
257
|
+
"""Remove time entries older than MESSAGE_TIME_ENTRY_MAX_AGE_SECONDS."""
|
|
258
|
+
with self.lock_time_store:
|
|
259
|
+
cutoff = now().timestamp() - MESSAGE_TIME_ENTRY_MAX_AGE_SECONDS
|
|
260
|
+
# Find message IDs for entries that have a finishing_at time
|
|
261
|
+
# before the cutoff, and those that don't exist in msg_store
|
|
262
|
+
to_delete = [
|
|
263
|
+
msg_id
|
|
264
|
+
for msg_id, entry in self.time_store.items()
|
|
265
|
+
if (entry.finished_at and entry.finished_at < cutoff)
|
|
266
|
+
or msg_id not in self.msg_store
|
|
267
|
+
]
|
|
268
|
+
|
|
269
|
+
# Delete the identified entries
|
|
270
|
+
for msg_id in to_delete:
|
|
271
|
+
del self.time_store[msg_id]
|
|
@@ -168,3 +168,48 @@ class NodeState(CoreState):
|
|
|
168
168
|
Sequence[int]
|
|
169
169
|
Sequence of run IDs with pending messages.
|
|
170
170
|
"""
|
|
171
|
+
|
|
172
|
+
@abstractmethod
|
|
173
|
+
def record_message_processing_start(self, message_id: str) -> None:
|
|
174
|
+
"""Record the start time of message processing based on the message ID.
|
|
175
|
+
|
|
176
|
+
Parameters
|
|
177
|
+
----------
|
|
178
|
+
message_id : str
|
|
179
|
+
The ID of the message associated with the start time.
|
|
180
|
+
"""
|
|
181
|
+
|
|
182
|
+
@abstractmethod
|
|
183
|
+
def record_message_processing_end(self, message_id: str) -> None:
|
|
184
|
+
"""Record the end time of message processing based on the message ID.
|
|
185
|
+
|
|
186
|
+
Parameters
|
|
187
|
+
----------
|
|
188
|
+
message_id : str
|
|
189
|
+
The ID of the message associated with the end time.
|
|
190
|
+
|
|
191
|
+
Raises
|
|
192
|
+
------
|
|
193
|
+
ValueError
|
|
194
|
+
If the message ID is not found.
|
|
195
|
+
"""
|
|
196
|
+
|
|
197
|
+
@abstractmethod
|
|
198
|
+
def get_message_processing_duration(self, message_id: str) -> float:
|
|
199
|
+
"""Get the message processing duration based on the message ID.
|
|
200
|
+
|
|
201
|
+
Parameters
|
|
202
|
+
----------
|
|
203
|
+
message_id : str
|
|
204
|
+
The ID of the message.
|
|
205
|
+
|
|
206
|
+
Returns
|
|
207
|
+
-------
|
|
208
|
+
float
|
|
209
|
+
The processing duration in seconds.
|
|
210
|
+
|
|
211
|
+
Raises
|
|
212
|
+
------
|
|
213
|
+
ValueError
|
|
214
|
+
If the message ID is not found, or if start/end times are missing.
|
|
215
|
+
"""
|
|
@@ -223,6 +223,9 @@ class ClientAppIoServicer(clientappio_pb2_grpc.ClientAppIoServicer):
|
|
|
223
223
|
# Retrieve message for this run
|
|
224
224
|
message = state.get_messages(run_ids=[run_id], is_reply=False)[0]
|
|
225
225
|
|
|
226
|
+
# Record message processing start time
|
|
227
|
+
state.record_message_processing_start(message_id=message.metadata.message_id)
|
|
228
|
+
|
|
226
229
|
# Retrieve the object tree for the message
|
|
227
230
|
object_tree = store.get_object_tree(message.metadata.message_id)
|
|
228
231
|
|
|
@@ -254,7 +257,10 @@ class ClientAppIoServicer(clientappio_pb2_grpc.ClientAppIoServicer):
|
|
|
254
257
|
objects_to_push |= set(store.preregister(run_id, object_tree))
|
|
255
258
|
# Save the message to the state
|
|
256
259
|
state.store_message(message_from_proto(request.messages_list[0]))
|
|
257
|
-
|
|
260
|
+
# Record message processing end time
|
|
261
|
+
state.record_message_processing_end(
|
|
262
|
+
message_id=request.messages_list[0].metadata.reply_to_message_id
|
|
263
|
+
)
|
|
258
264
|
return PushAppMessagesResponse(objects_to_push=objects_to_push)
|
|
259
265
|
|
|
260
266
|
def SendAppHeartbeat(
|
|
@@ -432,7 +432,7 @@ def _pull_and_store_message( # pylint: disable=too-many-positional-arguments
|
|
|
432
432
|
def _push_messages(
|
|
433
433
|
state: NodeState,
|
|
434
434
|
object_store: ObjectStore,
|
|
435
|
-
send: Callable[[Message, ObjectTree], set[str]],
|
|
435
|
+
send: Callable[[Message, ObjectTree, float], set[str]],
|
|
436
436
|
push_object: Callable[[int, str, bytes], None],
|
|
437
437
|
) -> None:
|
|
438
438
|
"""Push reply messages to the SuperLink."""
|
|
@@ -480,9 +480,12 @@ def _push_messages(
|
|
|
480
480
|
|
|
481
481
|
# Send the message
|
|
482
482
|
try:
|
|
483
|
-
|
|
483
|
+
clientapp_runtime = state.get_message_processing_duration(
|
|
484
|
+
message_id=message.metadata.reply_to_message_id,
|
|
485
|
+
)
|
|
486
|
+
# Send the reply message with its ObjectTree and ClientApp runtime
|
|
484
487
|
# Get the IDs of objects to send
|
|
485
|
-
ids_obj_to_send = send(message, object_tree)
|
|
488
|
+
ids_obj_to_send = send(message, object_tree, clientapp_runtime)
|
|
486
489
|
|
|
487
490
|
# Push object contents from the ObjectStore
|
|
488
491
|
run_id = message.metadata.run_id
|
|
@@ -539,7 +542,7 @@ def _init_connection( # pylint: disable=too-many-positional-arguments
|
|
|
539
542
|
tuple[
|
|
540
543
|
int,
|
|
541
544
|
Callable[[], tuple[Message, ObjectTree] | None],
|
|
542
|
-
Callable[[Message, ObjectTree], set[str]],
|
|
545
|
+
Callable[[Message, ObjectTree, float], set[str]],
|
|
543
546
|
Callable[[int], Run],
|
|
544
547
|
Callable[[str, int], Fab],
|
|
545
548
|
Callable[[int, str], bytes],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: flwr
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.25.0
|
|
4
4
|
Summary: Flower: A Friendly Federated AI Framework
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
|
|
@@ -180,7 +180,7 @@ Quickstart examples:
|
|
|
180
180
|
- [Quickstart (Pandas)](https://github.com/adap/flower/tree/main/examples/quickstart-pandas)
|
|
181
181
|
- [Quickstart (JAX)](https://github.com/adap/flower/tree/main/examples/quickstart-jax)
|
|
182
182
|
- [Quickstart (MONAI)](https://github.com/adap/flower/tree/main/examples/quickstart-monai)
|
|
183
|
-
- [Quickstart (scikit-learn)](https://github.com/adap/flower/tree/main/examples/sklearn
|
|
183
|
+
- [Quickstart (scikit-learn)](https://github.com/adap/flower/tree/main/examples/quickstart-sklearn)
|
|
184
184
|
- [Quickstart (Android [TFLite])](https://github.com/adap/flower/tree/main/examples/android)
|
|
185
185
|
- [Quickstart (iOS [CoreML])](https://github.com/adap/flower/tree/main/examples/ios)
|
|
186
186
|
- [Quickstart (MLX)](https://github.com/adap/flower/tree/main/examples/quickstart-mlx)
|
|
@@ -197,10 +197,8 @@ Other [examples](https://github.com/adap/flower/tree/main/examples):
|
|
|
197
197
|
- [Advanced Flower with TensorFlow/Keras](https://github.com/adap/flower/tree/main/examples/advanced-tensorflow)
|
|
198
198
|
- [Advanced Flower with PyTorch](https://github.com/adap/flower/tree/main/examples/advanced-pytorch)
|
|
199
199
|
- [Comprehensive Flower+XGBoost](https://github.com/adap/flower/tree/main/examples/xgboost-comprehensive)
|
|
200
|
-
- [Flower through Docker Compose and with Grafana dashboard](https://github.com/adap/flower/tree/main/examples/flower-via-docker-compose)
|
|
201
200
|
- [Flower with KaplanMeierFitter from the lifelines library](https://github.com/adap/flower/tree/main/examples/federated-kaplan-meier-fitter)
|
|
202
201
|
- [Sample Level Privacy with Opacus](https://github.com/adap/flower/tree/main/examples/opacus)
|
|
203
|
-
- [Sample Level Privacy with TensorFlow-Privacy](https://github.com/adap/flower/tree/main/examples/tensorflow-privacy)
|
|
204
202
|
- [Flower with a Tabular Dataset](https://github.com/adap/flower/tree/main/examples/fl-tabular)
|
|
205
203
|
|
|
206
204
|
## Community
|
|
@@ -7,7 +7,7 @@ flwr/cli/__init__.py,sha256=EfMGmHoobET6P2blBt_eOByXL8299MgFfB7XNdaPQ6I,720
|
|
|
7
7
|
flwr/cli/app.py,sha256=4qmEhpM5tuc77CNkE7CUPXr8d13S_A6Vau91GUTelGw,3167
|
|
8
8
|
flwr/cli/app_cmd/__init__.py,sha256=O_vTzS2u-n27fBYnDbjTMMKQQ2Bz80Y4JqGBHSAnK40,856
|
|
9
9
|
flwr/cli/app_cmd/publish.py,sha256=nnXU3rlh15dZ1Vn0LKZsOZcMvQ6ESN1GGWw9bqRhjBA,9688
|
|
10
|
-
flwr/cli/app_cmd/review.py,sha256=
|
|
10
|
+
flwr/cli/app_cmd/review.py,sha256=Fee5wnCrdFC4OktODyOlUTWAuZCQ3Nn0jcMbu0_BzVw,8828
|
|
11
11
|
flwr/cli/auth_plugin/__init__.py,sha256=qpebWV9uLpx72_J8yTVgT1DlH2Y9MK_RraDoTYEqv-w,1359
|
|
12
12
|
flwr/cli/auth_plugin/auth_plugin.py,sha256=H3y8oErskZxp5WdDCkFuj4B7C2ql6NLCqXns7T1YDtw,2994
|
|
13
13
|
flwr/cli/auth_plugin/noop_auth_plugin.py,sha256=jxCKUKs5yFb3W2p2ZUN9b7k9otVDk56Uzohr3n9Jwek,3242
|
|
@@ -19,92 +19,31 @@ flwr/cli/constant.py,sha256=LtxufmhkEqNWQ9doWbbbkUKa12vN_RK_Of5u0So-GHA,1729
|
|
|
19
19
|
flwr/cli/example.py,sha256=SNTorkKPrx1rOryGREUyZu8TcOc1-vFv1zEddaysdY0,2216
|
|
20
20
|
flwr/cli/federation/__init__.py,sha256=Nx1muSlCUZkUCBLFH-nkdx1ku-LtnKsEJ2PmnMwpGn4,836
|
|
21
21
|
flwr/cli/federation/ls.py,sha256=56Rk81YDfeeAdeca3o5cUmp0a6ntkLNK9f_CRD-4ZtU,4939
|
|
22
|
-
flwr/cli/federation/show.py,sha256=
|
|
22
|
+
flwr/cli/federation/show.py,sha256=431ONxWe4CxmUgPdSkekvQEyruSvnW8b2oKOrEsTG8Y,10087
|
|
23
23
|
flwr/cli/install.py,sha256=yhgUWd_Psyc18DaoQHEQ5Ji45ZQ-3LclueM9uRxUEPw,10063
|
|
24
24
|
flwr/cli/log.py,sha256=ZWveENLdDC0Dm10YIMcc3qdGV1aO-2YZXyHBhnB6ofI,7848
|
|
25
25
|
flwr/cli/login/__init__.py,sha256=B1SXKU3HCQhWfFDMJhlC7FOl8UsvH4mxysxeBnrfyUE,800
|
|
26
26
|
flwr/cli/login/login.py,sha256=_nJKmDNVUkWRW6GnzTTNm3BmwCVjSxswtngHQfcDmZ4,4623
|
|
27
|
-
flwr/cli/ls.py,sha256=
|
|
27
|
+
flwr/cli/ls.py,sha256=KQwQbF45TbhCNtBi9uZaTVuG56xVMSAMCmqN8IuPogU,13510
|
|
28
28
|
flwr/cli/new/__init__.py,sha256=QA1E2QtzPvFCjLTUHnFnJbufuFiGyT_0Y53Wpbvg1F0,790
|
|
29
|
-
flwr/cli/new/new.py,sha256=
|
|
30
|
-
flwr/cli/new/templates/__init__.py,sha256=FpjWCfIySU2DB4kh0HOXLAjlZNNFDTVU4w3HoE2TzcI,725
|
|
31
|
-
flwr/cli/new/templates/app/.gitignore.tpl,sha256=HZJcGQoxp7aUzaPg8Uqch3kNrIESwr9yjimDxJYgXVY,3104
|
|
32
|
-
flwr/cli/new/templates/app/LICENSE.tpl,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
|
33
|
-
flwr/cli/new/templates/app/README.baseline.md.tpl,sha256=oClo5eR0iLuPzBT7uS3ikhNRAnySz_lhkHFElixKyJM,9640
|
|
34
|
-
flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=2-W0HAseLWOe1JJU0TsNocp63D14N7jLwWhtYjxlfxs,3494
|
|
35
|
-
flwr/cli/new/templates/app/README.md.tpl,sha256=uI8vUMCEGA1-WJ8-9EUFCnNtofWFkJNOxaR1V6r_Su4,1908
|
|
36
|
-
flwr/cli/new/templates/app/__init__.py,sha256=LbR0ksGiF566JcHM_H5m1Tc4-oYUEilWFlcXR-Oe6bI,729
|
|
37
|
-
flwr/cli/new/templates/app/code/__init__.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
|
38
|
-
flwr/cli/new/templates/app/code/__init__.py,sha256=zXa2YU1swzHxOKDQbwlDMEwVPOUswVeosjkiXNMTgFo,736
|
|
39
|
-
flwr/cli/new/templates/app/code/__init__.py.tpl,sha256=J0Gn74E7khpLyKJVNqOPu7ev93vkcu1PZugsbxtABMw,52
|
|
40
|
-
flwr/cli/new/templates/app/code/__init__.pytorch_legacy_api.py.tpl,sha256=mKIS8MK_X8T9NlmcX1-_c9Bbexc-ueqDIBI7uN6c4dE,45
|
|
41
|
-
flwr/cli/new/templates/app/code/client.baseline.py.tpl,sha256=w8xYWhVAb5AFDLj206Nxz5U-xbzDBv0px2FFvE5wRTM,2438
|
|
42
|
-
flwr/cli/new/templates/app/code/client.huggingface.py.tpl,sha256=SIZZ3s-6u8IU8cFfsqu6ZU8zjhfI1m1SWauOSUcW8TA,3015
|
|
43
|
-
flwr/cli/new/templates/app/code/client.jax.py.tpl,sha256=uFCIPwAHYiRAgh2W3nRni_Oig02ZzRF-ofUG5O19zcE,2125
|
|
44
|
-
flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=CHU2IBIzI2YENZZuvTsAlSdL94DK19wMYMIhr-JgwZ8,3422
|
|
45
|
-
flwr/cli/new/templates/app/code/client.numpy.py.tpl,sha256=1_WEoOPe9jJeK-7FZgYuDUqY8mC0vxgqA83d-h201Gk,1381
|
|
46
|
-
flwr/cli/new/templates/app/code/client.pytorch.py.tpl,sha256=fYoh-dTu07LkqNYvwcxQnbgVvH4Yo4eiGEcyHECbsnU,2473
|
|
47
|
-
flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl,sha256=fuxVmZpjHIueNy_aHWF81531vmi8DGu4CYjYDqmUwWo,1705
|
|
48
|
-
flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=0qqEe-RRjkHGOH8gsD9e83ae-kyyYixhyBgzVHjYpzk,3500
|
|
49
|
-
flwr/cli/new/templates/app/code/client.tensorflow.py.tpl,sha256=8o55KXpsbF_rv6o98ZNYJDCazjwMp_RPTaSzDfT7Qlw,2682
|
|
50
|
-
flwr/cli/new/templates/app/code/client.xgboost.py.tpl,sha256=-ipRV8gqpbEg7Mht77Yyqs1viL-3JYSVZR47I7xeG4c,3493
|
|
51
|
-
flwr/cli/new/templates/app/code/dataset.baseline.py.tpl,sha256=jbd_exHAk2-Blu_kVutjPO6a_dkJQWb232zxSeXIZ1k,1453
|
|
52
|
-
flwr/cli/new/templates/app/code/flwr_tune/__init__.py,sha256=Xq5fEn5yZkw6HAJi10T_3HRBoqN5_5pNqJHY4wXvD5k,748
|
|
53
|
-
flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl,sha256=p6BzTbP-mXkFANiVC7iz3YlskOidWaLC341IJyrUotQ,2951
|
|
54
|
-
flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl,sha256=1NA2Sf-EviNtOaYN4dnFk6v2tcZVsY3-eXY84wOXVng,3059
|
|
55
|
-
flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl,sha256=UCLEKUpXarkz9tMFtDrxmLv6QuKe5zCimTuoopQedUM,1717
|
|
56
|
-
flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl,sha256=qe9Om3P2ERvvSj2NN5RSEKgNgztWatCpWtC8SkS_T_M,2420
|
|
57
|
-
flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl,sha256=M6CzBY-gtIqLOu2xTtABXOVgBnqKOu7d6Vn2sazmYuI,2444
|
|
58
|
-
flwr/cli/new/templates/app/code/model.baseline.py.tpl,sha256=P6jTuN9reJfdthiN3mOUHiA4xrtDh5TTUcAV6210-hU,2104
|
|
59
|
-
flwr/cli/new/templates/app/code/server.baseline.py.tpl,sha256=hliBSfHSzg4bi6PxMlj4oGFfvzvi-4DzoaI67VZbJeQ,1111
|
|
60
|
-
flwr/cli/new/templates/app/code/server.huggingface.py.tpl,sha256=_2Mv-SqGSMf7sMdbMEmvROzedvNaVHvhIIO3eYAhVYU,1252
|
|
61
|
-
flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=RW-rh7ogcJ3_BD66bJxTw-ZoP7c-4SK8hVHc-e0SSVY,1029
|
|
62
|
-
flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=J8rIe6RL2ndODVJD79xShRKBH70HljFSCi4s_RJ-xLQ,1200
|
|
63
|
-
flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=T3hcKbPw3uL5lXEP-MuVJXIBXjzva5sWJXfpQqarUwA,955
|
|
64
|
-
flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=epARqfcQ-EQsdZwaaaUp5y4OSTBT6CiFGlNRocw-23A,1158
|
|
65
|
-
flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl,sha256=gvBsGA_Jg9kAH8xTxjzTjMcvBtciuccOwQFbO7ey8tU,916
|
|
66
|
-
flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=ehQ5VRgBn92WeFl6kupwJnuxSNkKvE-EvKde6A9mNQo,1377
|
|
67
|
-
flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=2-WTOPd-ewdLd9QmSlflIH7ix7zxAzPEOZoyiPBOy8c,1010
|
|
68
|
-
flwr/cli/new/templates/app/code/server.xgboost.py.tpl,sha256=fwtCRyCG2hDSH1zVMyZv7zA7wsdKNPfpugDSZjxCs5Q,1746
|
|
69
|
-
flwr/cli/new/templates/app/code/strategy.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
|
70
|
-
flwr/cli/new/templates/app/code/task.huggingface.py.tpl,sha256=piBbY3Dg60bQnCg15uzMw0QiL5SDOYX4YhQouy-X2zI,3164
|
|
71
|
-
flwr/cli/new/templates/app/code/task.jax.py.tpl,sha256=Fb0XgdTAQplM-ZCusI081XA9asO3gHptH772S-Xcyy8,1525
|
|
72
|
-
flwr/cli/new/templates/app/code/task.mlx.py.tpl,sha256=YxH5z4s5kOh5_9DIY9pvzqURckLDfgdanTA68_iM_Wo,2946
|
|
73
|
-
flwr/cli/new/templates/app/code/task.numpy.py.tpl,sha256=CwUJPnN3z6GjP8-KVGWzx7RYRJsl0wLFZ72xscvl3RM,126
|
|
74
|
-
flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=Mc-O7kLdBYSz4dLtrJGFh8_Is5agq7hMfHH8G5So9fM,3461
|
|
75
|
-
flwr/cli/new/templates/app/code/task.pytorch_legacy_api.py.tpl,sha256=XlJqA4Ix_PloO_zJLhjiN5vDj16w3I4CPVGdmbe8asE,3800
|
|
76
|
-
flwr/cli/new/templates/app/code/task.sklearn.py.tpl,sha256=vHdhtMp0FHxbYafXyhDT9aKmmmA0Jvpx5Oum1Yu9lWY,1850
|
|
77
|
-
flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=impgWN7MfztmcWF4xh1llcZGsgTvrb1HD5ZE0t-8U08,1731
|
|
78
|
-
flwr/cli/new/templates/app/code/task.xgboost.py.tpl,sha256=0xO8jQvrHuB1llVDopQPOmt5Hn6rBw8umzoNwiZZs-o,2135
|
|
79
|
-
flwr/cli/new/templates/app/code/utils.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
|
80
|
-
flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=yj8Hwa6TCk_p4LzGLICfan0kr9XY84GUAYKsnBrp9po,3182
|
|
81
|
-
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=I1kerPViFarJCJy9bMJ8iUzyjjyN8YuCr4NKIOQOOlU,2501
|
|
82
|
-
flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=sp1cCcsZMyPPfM_2TOCHdnEUSEEVMIyDJIUp3u9Y5HI,2020
|
|
83
|
-
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=Q96m1Taa1G1yvQAmc0JXqo1zBxK6ZbyTlChxUSjJN_0,1471
|
|
84
|
-
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=LSO9_NWq-awCnDlRc2p-q82QqJtGUETHDOt_yF7mvSM,1542
|
|
85
|
-
flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=W0S-ICbndTu5WpvuPQPH4ipR4va76Acv9sRz7P460C8,1409
|
|
86
|
-
flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=MsoW2HVqVcdfa7hGahnV87Ee198GsxB48_b6WGXkP4E,1490
|
|
87
|
-
flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl,sha256=WID8ekdB7wlPYryrlcCPM0xw2kzubwqFc6_yiIeoY74,1508
|
|
88
|
-
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=8yQeX0yvLLpqjm6TOksrL9JmqaZE3WWs7nJrlO7Ssas,1484
|
|
89
|
-
flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=0EOfQ24SXAiWd-z-1r3Ad9vscCrjKfe5-tgev55XURs,1500
|
|
90
|
-
flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl,sha256=YwgeVboJ8Q9xqCoEa-fUa8-rWZltBe0u_KyfEzn8n-c,1661
|
|
29
|
+
flwr/cli/new/new.py,sha256=VKrwkpd_voU4YwCVPIBPeFZjZiLW9OGpMPX_tpvPAE0,8315
|
|
91
30
|
flwr/cli/pull.py,sha256=WRQOVxovWNX0kRnjUwCyFwyVmAEQY54EpQKFGEGUVUk,3530
|
|
92
31
|
flwr/cli/run/__init__.py,sha256=RPyB7KbYTFl6YRiilCch6oezxrLQrl1kijV7BMGkLbA,790
|
|
93
|
-
flwr/cli/run/run.py,sha256
|
|
94
|
-
flwr/cli/run_utils.py,sha256=
|
|
95
|
-
flwr/cli/stop.py,sha256=
|
|
32
|
+
flwr/cli/run/run.py,sha256=-o2Um7G5QSrPJ0kc2_36ANMuSc-e6k5UvmSBfJTQxFs,9983
|
|
33
|
+
flwr/cli/run_utils.py,sha256=fCP66XdL5gWZPE2B-Nb5kbEI9slmPLFe3x6fbmD0kkw,5079
|
|
34
|
+
flwr/cli/stop.py,sha256=5k1G_yU-gSmqF2h3VpxpFgQM3PpUWnNRT-8ioFBRtNU,5482
|
|
96
35
|
flwr/cli/supernode/__init__.py,sha256=DBkjoPo2hS2Y-ghJxwLbrAbCQFBgD82_Itl2_892UBo,917
|
|
97
|
-
flwr/cli/supernode/ls.py,sha256=
|
|
36
|
+
flwr/cli/supernode/ls.py,sha256=8xcidpuUWw48ommYzOR_7MMdI989pI9nRSbzIXhOGXE,8955
|
|
98
37
|
flwr/cli/supernode/register.py,sha256=2aQTT2wEp2pxxuIacC6FQkN8q_QKifZhWjD7LNw1R2A,6527
|
|
99
38
|
flwr/cli/supernode/unregister.py,sha256=PXugcJJrM7cP3HbULjgcO22DciDP2uWN7YNgce4hv5E,4632
|
|
100
|
-
flwr/cli/utils.py,sha256=
|
|
39
|
+
flwr/cli/utils.py,sha256=GWlonSmHUdezWf-7UTX4QmlWH7686R3SDQqiovYfomI,20528
|
|
101
40
|
flwr/client/__init__.py,sha256=xwkPJfdeWxIIfmiPE5vnmnY_JbTlErP0Qs9eBP6qRFg,1252
|
|
102
41
|
flwr/client/client.py,sha256=3HAchxvknKG9jYbB7swNyDj-e5vUWDuMKoLvbT7jCVM,7895
|
|
103
42
|
flwr/client/dpfedavg_numpy_client.py,sha256=ELDHyEJcTB-FlLhHC-JXy8HuB3ZFHfT0HL3g1VSWY5w,7451
|
|
104
43
|
flwr/client/grpc_adapter_client/__init__.py,sha256=RQWP5mFPROLHKgombiRvPXVWSoVrQ81wvZm0-lOuuBA,742
|
|
105
|
-
flwr/client/grpc_adapter_client/connection.py,sha256=
|
|
44
|
+
flwr/client/grpc_adapter_client/connection.py,sha256=rr3NA7d-BYsWNTu1VRE9966FxToLLECLBAVNhf5uFoo,4242
|
|
106
45
|
flwr/client/grpc_rere_client/__init__.py,sha256=i7iS0Lt8B7q0E2L72e4F_YrKm6ClRKnd71PNA6PW2O0,752
|
|
107
|
-
flwr/client/grpc_rere_client/connection.py,sha256=
|
|
46
|
+
flwr/client/grpc_rere_client/connection.py,sha256=_DbWVlt6Y_vc9xGCfimnIE7Bvckwph21RENgKVHHjUM,13821
|
|
108
47
|
flwr/client/grpc_rere_client/grpc_adapter.py,sha256=NlYVdKSyZ2hrKdYgIsz3-kmMaQI3Nj2fe3gXeTMyZjM,7565
|
|
109
48
|
flwr/client/grpc_rere_client/node_auth_client_interceptor.py,sha256=rIUo64KOSYMC-GlfTvIYgeouAX8i6eOd5Rq2Yi9UFMY,2437
|
|
110
49
|
flwr/client/message_handler/__init__.py,sha256=0lyljDVqre3WljiZbPcwCCf8GiIaSVI_yo_ylEyPwSE,719
|
|
@@ -119,7 +58,7 @@ flwr/client/mod/secure_aggregation/secaggplus_mod.py,sha256=8dK3v58tZztbdxzWW6VC
|
|
|
119
58
|
flwr/client/mod/utils.py,sha256=FUgD2TfcWqSeF6jUKZ4i6Ke56U4Nrv85AeVb93s6R9g,1201
|
|
120
59
|
flwr/client/numpy_client.py,sha256=0RqxyVRAo_6oc8eZqSPC10chJk8hjz-8aUpgxCre950,9590
|
|
121
60
|
flwr/client/rest_client/__init__.py,sha256=MBiuK62hj439m9rtwSwI184Hth6Tt5GbmpNMyl3zkZY,735
|
|
122
|
-
flwr/client/rest_client/connection.py,sha256=
|
|
61
|
+
flwr/client/rest_client/connection.py,sha256=cr45qNcSU5fsehYbqXpwDHiZkPdxR9SWhRoENV0bwwE,17525
|
|
123
62
|
flwr/client/run_info_store.py,sha256=3lINm9f7f6tgZJ3Dx-e9E9DrVhrrjXNYii0RnBDS79w,4002
|
|
124
63
|
flwr/client/typing.py,sha256=SfM-8BWSQww_PSU-B1ScRDDWCyjgI0QF8WGRpfPBUYs,1057
|
|
125
64
|
flwr/clientapp/__init__.py,sha256=dsXH29kvCk1meJj9UYMCIak8zehuuhVp0uDJ2COU_1c,829
|
|
@@ -174,10 +113,10 @@ flwr/common/secure_aggregation/ndarrays_arithmetic.py,sha256=Of0Y3A_pG5jzO4WUH_8
|
|
|
174
113
|
flwr/common/secure_aggregation/quantization.py,sha256=ssFZpiRyj9ltIh0Ai3vGkDqWFO4SoqgoD1mDU9XqMEM,2400
|
|
175
114
|
flwr/common/secure_aggregation/secaggplus_constants.py,sha256=dGYhWOBMMDJcQH4_tQNC8-Efqm-ecEUNN9ANz59UnCk,2182
|
|
176
115
|
flwr/common/secure_aggregation/secaggplus_utils.py,sha256=E_xU-Zd45daO1em7M6C2wOjFXVtJf-6tl7fp-7xq1wo,3214
|
|
177
|
-
flwr/common/serde.py,sha256=
|
|
116
|
+
flwr/common/serde.py,sha256=THx4cyTkooT2Rsx0po2tnXkihMheKfcSiXe3AMhVt_0,22315
|
|
178
117
|
flwr/common/serde_utils.py,sha256=Vk49PnZWRgo0NrvBhFqH-Li7sMFVVgyrs3Ck7kHB-ZE,5820
|
|
179
118
|
flwr/common/telemetry.py,sha256=H05fpO7nOvvb2FSGOsGIIwMbBaQo59FBgwqk0YafW9M,8921
|
|
180
|
-
flwr/common/typing.py,sha256=
|
|
119
|
+
flwr/common/typing.py,sha256=OUSnJHUd2D1N04FPNFg-s8AUON55sIjOSkd2VH7e044,7334
|
|
181
120
|
flwr/common/version.py,sha256=7GAGzPn73Mkh09qhrjbmjZQtcqVhBuzhFBaK4Mk4VRk,1325
|
|
182
121
|
flwr/compat/__init__.py,sha256=gbfDQKKKMZzi3GswyVRgyLdDlHiWj3wU6dg7y6m5O_s,752
|
|
183
122
|
flwr/compat/client/__init__.py,sha256=qpbo0lcxdNL4qy5KHqiGm8OLxSxkYgI_-dLh5rwhtcI,746
|
|
@@ -213,8 +152,8 @@ flwr/proto/federation_pb2.py,sha256=x8hwIFsw87e7STmvq5qL90RmcImCGw5oOqbke7xaykA,
|
|
|
213
152
|
flwr/proto/federation_pb2.pyi,sha256=_At18SzwJjlf3k3FXjVi3Op59rs2i5XcIeBSPlvfXr0,2215
|
|
214
153
|
flwr/proto/federation_pb2_grpc.py,sha256=HPErt9uXJPbY8jLtTNFr941z82uMm7cOx10hTHgcwZM,902
|
|
215
154
|
flwr/proto/federation_pb2_grpc.pyi,sha256=fMwjLr-QCljWBa8uk0fvMCytnrF1-IzFLCbezqEmvdU,1071
|
|
216
|
-
flwr/proto/fleet_pb2.py,sha256=
|
|
217
|
-
flwr/proto/fleet_pb2.pyi,sha256=
|
|
155
|
+
flwr/proto/fleet_pb2.py,sha256=HnxtM2pqVdn2xhl3e1NlLazpSMaGoUUEG9Nd17egxqU,6543
|
|
156
|
+
flwr/proto/fleet_pb2.pyi,sha256=MOuD26tWyNu2InVza-xHJD57ctthha1qKZyGYaxTUTY,10497
|
|
218
157
|
flwr/proto/fleet_pb2_grpc.py,sha256=oR-Tw12sQiAQ_jhqGsGASPG6jdMg0Rgwb7_z_NknOOk,23702
|
|
219
158
|
flwr/proto/fleet_pb2_grpc.pyi,sha256=k3C0pxqvparcfrFoCWkb0gVhVeDLh4y8dH2zUa7GbQE,10227
|
|
220
159
|
flwr/proto/grpcadapter_pb2.py,sha256=sPB1FbcNIjw5plvQqhd_vynO0-59n9U7G882l6o1z6Y,2101
|
|
@@ -241,8 +180,8 @@ flwr/proto/recorddict_pb2.py,sha256=L2mNSyIVWA2dcI1xWI3gj0nktuDHYgxbbLuVRQKVU74,
|
|
|
241
180
|
flwr/proto/recorddict_pb2.pyi,sha256=BYgVNk985Ww4dCXCjDGg1YU6q7MuMqbDa0usGVH3ktg,15208
|
|
242
181
|
flwr/proto/recorddict_pb2_grpc.py,sha256=kw9_kXNcRe3y6j6HquG1P1MqccFFAogfi48djxbOLDE,902
|
|
243
182
|
flwr/proto/recorddict_pb2_grpc.pyi,sha256=fMwjLr-QCljWBa8uk0fvMCytnrF1-IzFLCbezqEmvdU,1071
|
|
244
|
-
flwr/proto/run_pb2.py,sha256=
|
|
245
|
-
flwr/proto/run_pb2.pyi,sha256=
|
|
183
|
+
flwr/proto/run_pb2.py,sha256=8tQDMyiBjw_-S6jiJpFd_-dDrMq9ZhyPyWwnmFu3qek,5101
|
|
184
|
+
flwr/proto/run_pb2.pyi,sha256=t42qPzJTY1GVUUrkdIjdoPfAKlsXlUw9A8vBpwgbHsI,10852
|
|
246
185
|
flwr/proto/run_pb2_grpc.py,sha256=l5u1Ww6JxVLVN784Z2OQbkQ-tAf5yYGh6QbNDc4F5II,895
|
|
247
186
|
flwr/proto/run_pb2_grpc.pyi,sha256=fMwjLr-QCljWBa8uk0fvMCytnrF1-IzFLCbezqEmvdU,1071
|
|
248
187
|
flwr/proto/serverappio_pb2.py,sha256=fqZA5baD7lerWBn1Pb9PWhXlDvsb8pLOJ99DV4cYh-4,4045
|
|
@@ -259,7 +198,7 @@ flwr/proto/transport_pb2_grpc.py,sha256=jYsbV3KYdp4TaNfWxv3ljFEvB-Yjsa8MIPtTH-vV
|
|
|
259
198
|
flwr/proto/transport_pb2_grpc.pyi,sha256=qd2cOXq6HBZtwRfPpKuni27NGMJCAxyP5R95Vk8WWDU,2073
|
|
260
199
|
flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
261
200
|
flwr/server/__init__.py,sha256=LQQHiuL2jy7TpNaKastRdGsexlxSt5ZWAQNVqitDnrY,1598
|
|
262
|
-
flwr/server/app.py,sha256=
|
|
201
|
+
flwr/server/app.py,sha256=rncuCdcyied2JNqQQaV1QOGTGEWRH2ZuZV0GCLvzNnQ,31821
|
|
263
202
|
flwr/server/client_manager.py,sha256=3WOqNWh5dlqPRG-DMGwXiyvGNEYS_jKqXKkFIkMqWLQ,6187
|
|
264
203
|
flwr/server/client_proxy.py,sha256=QS_RGgjSZ8V4StAHH8zc7W9_os2FyO4wNqkbylQMBTY,2341
|
|
265
204
|
flwr/server/compat/__init__.py,sha256=0IsttWvY15qO98_1GyzVC-vR1e_ZPXOdu2qUlOkYMPE,886
|
|
@@ -318,7 +257,7 @@ flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=ahDJJ1e-lDxBpeBMgPk7YZt
|
|
|
318
257
|
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=DtHuDP7fvgO-iamI48ACr0TQcD20eBYwMicHKIjhmXQ,12583
|
|
319
258
|
flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py,sha256=h3pPs--wdiomaCuGOg5fr3wwYVfwi-PK-tVArrr_bg8,5669
|
|
320
259
|
flwr/server/superlink/fleet/message_handler/__init__.py,sha256=fHsRV0KvJ8HtgSA4_YBsEzuhJLjO8p6xx4aCY2oE1p4,731
|
|
321
|
-
flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=
|
|
260
|
+
flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=9K88lwHADwq7o9XqzG3PPVzVz3cTUTBrQC8R6IVN1Rc,12165
|
|
322
261
|
flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=Lzc93nA7tDqoy-zRUaPG316oqFiZX1HUCL5ELaXY_xw,735
|
|
323
262
|
flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=cDWDQBf79F9tZ1mXOErc-nsnY4zFP9Tcv7Fs-bQIdiU,9616
|
|
324
263
|
flwr/server/superlink/fleet/vce/__init__.py,sha256=XOKbAWOzlCqEOQ3M2cBYkH7HKA7PxlbCJMunt-ty-DY,784
|
|
@@ -327,10 +266,10 @@ flwr/server/superlink/fleet/vce/backend/backend.py,sha256=HPOXhT40bFwCA9pz8w2sAT
|
|
|
327
266
|
flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=LhVmM2Mi6kOskOyDFnbIb7AH304J0eUU1r2B32bzUFc,7193
|
|
328
267
|
flwr/server/superlink/fleet/vce/vce_api.py,sha256=A62Vx3r71bNI-v10IUen_27fDJoYXsOyvBM3JrkTvho,13609
|
|
329
268
|
flwr/server/superlink/linkstate/__init__.py,sha256=OtsgvDTnZLU3k0sUbkHbqoVwW6ql2FDmb6uT6DbNkZo,1064
|
|
330
|
-
flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=
|
|
331
|
-
flwr/server/superlink/linkstate/linkstate.py,sha256=
|
|
269
|
+
flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=QHpm9Or8LH-c8xMRSk19MnsYHtvd8Lk2mEo08bMMCAY,32030
|
|
270
|
+
flwr/server/superlink/linkstate/linkstate.py,sha256=9Mnk3kRZ70CuzGktFlm3dwnOanNuXY95mK9q-cgclWY,17304
|
|
332
271
|
flwr/server/superlink/linkstate/linkstate_factory.py,sha256=dtn3xvp4uGek_vtbHyLnn0OZNOcQn6_dpNNX-r8lwAc,2866
|
|
333
|
-
flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=
|
|
272
|
+
flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=IAjMHcXi24n7gtFF-qwUHBqnwgXIxmPlPtL0Wl2ANy8,51143
|
|
334
273
|
flwr/server/superlink/linkstate/utils.py,sha256=ZKaunvXhzb4eqxy91zH3xlF22cpNimeRzTJCNdoZ57s,14019
|
|
335
274
|
flwr/server/superlink/serverappio/__init__.py,sha256=Fy4zJuoccZe5mZSEIpOmQvU6YeXFBa1M4eZuXXmJcn8,717
|
|
336
275
|
flwr/server/superlink/serverappio/serverappio_grpc.py,sha256=2NFPynJMpYpT9C98Fr4n0QrTTjWBWbeUzlHcc6pg2kY,2279
|
|
@@ -385,7 +324,7 @@ flwr/supercore/__init__.py,sha256=pqkFoow_E6UhbBlhmoD1gmTH-33yJRhBsIZqxRPFZ7U,75
|
|
|
385
324
|
flwr/supercore/app_utils.py,sha256=K76Zt6R670b1hUmxOsNc1WUCVYvF7lejXPcCO9K0Q0g,1753
|
|
386
325
|
flwr/supercore/cli/__init__.py,sha256=EDl2aO-fuQfxSbL-T1W9RAfA2N0hpWHmqX_GSwblJbQ,845
|
|
387
326
|
flwr/supercore/cli/flower_superexec.py,sha256=IQIGzxgaeLNMNzGXGemfYK3lp8God5bTkXpVkbeP_ig,6109
|
|
388
|
-
flwr/supercore/constant.py,sha256=
|
|
327
|
+
flwr/supercore/constant.py,sha256=88dDhPgi8ZjBBgiEUsCWtCzEV5yREc_9Dlja2UeHV_8,2286
|
|
389
328
|
flwr/supercore/corestate/__init__.py,sha256=Vau6-L_JG5QzNqtCTa9xCKGGljc09wY8avZmIjSJemg,774
|
|
390
329
|
flwr/supercore/corestate/corestate.py,sha256=EZg4gPXqVOXwS7t0tlPfedajoWj5T80oeDBNxpV2y2I,2874
|
|
391
330
|
flwr/supercore/corestate/in_memory_corestate.py,sha256=9qa6RuRZfCp6vs-ARYdiZjCL31VOAAxw0a_VkBXR5zY,5116
|
|
@@ -417,7 +356,7 @@ flwr/supercore/superexec/plugin/exec_plugin.py,sha256=iRRZcnTcM3wMwkkUElmfFka31a
|
|
|
417
356
|
flwr/supercore/superexec/plugin/serverapp_exec_plugin.py,sha256=IwRzdPV-cSKwrP2krGh0De4IkAuxsmgK0WU6J-2GXqM,1035
|
|
418
357
|
flwr/supercore/superexec/plugin/simulation_exec_plugin.py,sha256=upn5zE-YKkl_jTw8RzmeyQ58PU_UAlQ7CqnBXXdng8I,1060
|
|
419
358
|
flwr/supercore/superexec/run_superexec.py,sha256=yeV6_eI0XFfPyNwnlgqchR9jI80FzSI80oyekrIlO2M,7144
|
|
420
|
-
flwr/supercore/utils.py,sha256=
|
|
359
|
+
flwr/supercore/utils.py,sha256=AKspWRUwaFE84JHP7_GkqJCB1uOWt9QL0K2GAQZf0Yo,7412
|
|
421
360
|
flwr/superlink/__init__.py,sha256=GNSuJ4-N6Z8wun2iZNlXqENt5beUyzC0Gi_tN396bbM,707
|
|
422
361
|
flwr/superlink/artifact_provider/__init__.py,sha256=pgZEcVPKRE874LSu3cgy0HbwSJBIpVy_HxQOmne4PAs,810
|
|
423
362
|
flwr/superlink/artifact_provider/artifact_provider.py,sha256=Gt1UUojVOa4WDgv8unU20MoETSMd5rSPF9eIITBNJY0,1236
|
|
@@ -431,24 +370,24 @@ flwr/superlink/servicer/__init__.py,sha256=ZC-kILcUGeh6IxJsfu24cTzUqIGXmQfEKsGfh
|
|
|
431
370
|
flwr/superlink/servicer/control/__init__.py,sha256=qhUTMt_Mg4lxslCJYn5hDSrA-lXf5ya3617BT8kR-2Y,803
|
|
432
371
|
flwr/superlink/servicer/control/control_account_auth_interceptor.py,sha256=AJs7GE-fyUBLcUEUzB058TpFzC7gyDOL17THvYkJTn8,6529
|
|
433
372
|
flwr/superlink/servicer/control/control_event_log_interceptor.py,sha256=r9LjF5VkrE1sZIcml-sO2uOPAwpvr6dj4tFchqoDcR4,5965
|
|
434
|
-
flwr/superlink/servicer/control/control_grpc.py,sha256=
|
|
373
|
+
flwr/superlink/servicer/control/control_grpc.py,sha256=AD7q2eo7RvXEhntcfVLgoKAR7AWfD_Z56Qw51wGLanY,4218
|
|
435
374
|
flwr/superlink/servicer/control/control_license_interceptor.py,sha256=8d28soJ0mLLhpSGCpuY2YzgbX0vVO7Sqe2DcApEgILc,3336
|
|
436
|
-
flwr/superlink/servicer/control/control_servicer.py,sha256=
|
|
375
|
+
flwr/superlink/servicer/control/control_servicer.py,sha256=xfS8c0fxH8n3TW4uVp4nFLfTJD7KJtorOwdzS7Svzp8,25376
|
|
437
376
|
flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
|
|
438
377
|
flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
|
|
439
378
|
flwr/supernode/cli/flower_supernode.py,sha256=1HdhlGaVo51_7w3AL1hE5zfIVJMow0Ngi_F3Js01djs,10815
|
|
440
379
|
flwr/supernode/cli/flwr_clientapp.py,sha256=W3tAyqSfeHbPhqBC4Pfo9bsyFdkBKPqdKlhGmeUKwKg,3173
|
|
441
380
|
flwr/supernode/nodestate/__init__.py,sha256=CyLLObbmmVgfRO88UCM0VMait1dL57mUauUDfuSHsbU,976
|
|
442
|
-
flwr/supernode/nodestate/in_memory_nodestate.py,sha256=
|
|
443
|
-
flwr/supernode/nodestate/nodestate.py,sha256=
|
|
381
|
+
flwr/supernode/nodestate/in_memory_nodestate.py,sha256=DBhpDsPmitkOr86pW78_0aiG_jWgjjCXerFONXsyOSE,10578
|
|
382
|
+
flwr/supernode/nodestate/nodestate.py,sha256=RWrsHS1nndK67-T6YSmi85qRb_t_wM7fjLb16YS-87Y,6217
|
|
444
383
|
flwr/supernode/nodestate/nodestate_factory.py,sha256=i-1cv42R9LBM1nyasTHuTHSqlyJxVSRtUK2BMzqT-Ss,1631
|
|
445
384
|
flwr/supernode/runtime/__init__.py,sha256=JQdqd2EMTn-ORMeTvewYYh52ls0YKP68jrps1qioxu4,718
|
|
446
385
|
flwr/supernode/runtime/run_clientapp.py,sha256=-JsN3h7jQC12vzDBmImzYmyccI3LveIu-Z7eE-QNF-Y,9461
|
|
447
386
|
flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca8gxdEo,717
|
|
448
387
|
flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
|
|
449
|
-
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=
|
|
450
|
-
flwr/supernode/start_client_internal.py,sha256=
|
|
451
|
-
flwr-1.
|
|
452
|
-
flwr-1.
|
|
453
|
-
flwr-1.
|
|
454
|
-
flwr-1.
|
|
388
|
+
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=jBSg83_LhxQmoB1-SsgwpVf7eq_VZBRi4Q2ccYYbmdw,11637
|
|
389
|
+
flwr/supernode/start_client_internal.py,sha256=wTSde-BO9Y19CuI4k4aeZ7ichF5rttfrGc-uJ-dgEBQ,26135
|
|
390
|
+
flwr-1.25.0.dist-info/METADATA,sha256=S4oKSngNKgw05po43jhlisP6rGlO2ozS5_NnDFClMII,14334
|
|
391
|
+
flwr-1.25.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
392
|
+
flwr-1.25.0.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
|
|
393
|
+
flwr-1.25.0.dist-info/RECORD,,
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Copyright 2025 Flower Labs GmbH. All Rights Reserved.
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
# ==============================================================================
|
|
15
|
-
"""Flower CLI `new` command templates."""
|