flwr-nightly 1.22.0.dev20250915__py3-none-any.whl → 1.22.0.dev20250917__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.py +2 -0
- flwr/cli/new/new.py +2 -2
- flwr/cli/new/templates/app/README.flowertune.md.tpl +1 -1
- flwr/cli/new/templates/app/code/client.baseline.py.tpl +64 -47
- flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +56 -90
- flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +1 -23
- flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +37 -58
- flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +39 -44
- flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -14
- flwr/cli/new/templates/app/code/server.baseline.py.tpl +27 -29
- flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +3 -3
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
- flwr/cli/pull.py +100 -0
- flwr/cli/utils.py +17 -0
- flwr/common/constant.py +2 -0
- flwr/proto/control_pb2.py +7 -3
- flwr/proto/control_pb2.pyi +24 -0
- flwr/proto/control_pb2_grpc.py +34 -0
- flwr/proto/control_pb2_grpc.pyi +13 -0
- flwr/server/app.py +13 -0
- flwr/serverapp/strategy/__init__.py +8 -0
- flwr/serverapp/strategy/fedavg.py +23 -2
- flwr/serverapp/strategy/fedavgm.py +198 -0
- flwr/serverapp/strategy/fedmedian.py +71 -0
- flwr/serverapp/strategy/fedprox.py +174 -0
- flwr/serverapp/strategy/fedtrimmedavg.py +176 -0
- flwr/serverapp/strategy/strategy_utils_tests.py +20 -1
- flwr/simulation/app.py +1 -1
- flwr/simulation/run_simulation.py +25 -30
- flwr/superlink/artifact_provider/__init__.py +22 -0
- flwr/superlink/artifact_provider/artifact_provider.py +37 -0
- flwr/superlink/servicer/control/control_grpc.py +3 -0
- flwr/superlink/servicer/control/control_servicer.py +59 -2
- {flwr_nightly-1.22.0.dev20250915.dist-info → flwr_nightly-1.22.0.dev20250917.dist-info}/METADATA +6 -16
- {flwr_nightly-1.22.0.dev20250915.dist-info → flwr_nightly-1.22.0.dev20250917.dist-info}/RECORD +37 -30
- {flwr_nightly-1.22.0.dev20250915.dist-info → flwr_nightly-1.22.0.dev20250917.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.22.0.dev20250915.dist-info → flwr_nightly-1.22.0.dev20250917.dist-info}/entry_points.txt +0 -0
@@ -143,6 +143,15 @@ def run_simulation_from_cli() -> None:
|
|
143
143
|
run = Run.create_empty(run_id)
|
144
144
|
run.override_config = override_config
|
145
145
|
|
146
|
+
# Create Context
|
147
|
+
server_app_context = Context(
|
148
|
+
run_id=run_id,
|
149
|
+
node_id=0,
|
150
|
+
node_config=UserConfig(),
|
151
|
+
state=RecordDict(),
|
152
|
+
run_config=fused_config,
|
153
|
+
)
|
154
|
+
|
146
155
|
_ = _run_simulation(
|
147
156
|
server_app_attr=server_app_attr,
|
148
157
|
client_app_attr=client_app_attr,
|
@@ -153,7 +162,7 @@ def run_simulation_from_cli() -> None:
|
|
153
162
|
run=run,
|
154
163
|
enable_tf_gpu_growth=args.enable_tf_gpu_growth,
|
155
164
|
verbose_logging=args.verbose,
|
156
|
-
|
165
|
+
server_app_context=server_app_context,
|
157
166
|
is_app=True,
|
158
167
|
exit_event=EventType.CLI_FLOWER_SIMULATION_LEAVE,
|
159
168
|
)
|
@@ -241,13 +250,12 @@ def run_simulation(
|
|
241
250
|
def run_serverapp_th(
|
242
251
|
server_app_attr: Optional[str],
|
243
252
|
server_app: Optional[ServerApp],
|
244
|
-
|
253
|
+
server_app_context: Context,
|
245
254
|
grid: Grid,
|
246
255
|
app_dir: str,
|
247
256
|
f_stop: threading.Event,
|
248
257
|
has_exception: threading.Event,
|
249
258
|
enable_tf_gpu_growth: bool,
|
250
|
-
run_id: int,
|
251
259
|
ctx_queue: "Queue[Context]",
|
252
260
|
) -> threading.Thread:
|
253
261
|
"""Run SeverApp in a thread."""
|
@@ -258,7 +266,6 @@ def run_serverapp_th(
|
|
258
266
|
exception_event: threading.Event,
|
259
267
|
_grid: Grid,
|
260
268
|
_server_app_dir: str,
|
261
|
-
_server_app_run_config: UserConfig,
|
262
269
|
_server_app_attr: Optional[str],
|
263
270
|
_server_app: Optional[ServerApp],
|
264
271
|
_ctx_queue: "Queue[Context]",
|
@@ -272,19 +279,10 @@ def run_serverapp_th(
|
|
272
279
|
log(INFO, "Enabling GPU growth for Tensorflow on the server thread.")
|
273
280
|
enable_gpu_growth()
|
274
281
|
|
275
|
-
# Initialize Context
|
276
|
-
context = Context(
|
277
|
-
run_id=run_id,
|
278
|
-
node_id=0,
|
279
|
-
node_config={},
|
280
|
-
state=RecordDict(),
|
281
|
-
run_config=_server_app_run_config,
|
282
|
-
)
|
283
|
-
|
284
282
|
# Run ServerApp
|
285
283
|
updated_context = _run(
|
286
284
|
grid=_grid,
|
287
|
-
context=
|
285
|
+
context=server_app_context,
|
288
286
|
server_app_dir=_server_app_dir,
|
289
287
|
server_app_attr=_server_app_attr,
|
290
288
|
loaded_server_app=_server_app,
|
@@ -310,7 +308,6 @@ def run_serverapp_th(
|
|
310
308
|
has_exception,
|
311
309
|
grid,
|
312
310
|
app_dir,
|
313
|
-
server_app_run_config,
|
314
311
|
server_app_attr,
|
315
312
|
server_app,
|
316
313
|
ctx_queue,
|
@@ -335,7 +332,7 @@ def _main_loop(
|
|
335
332
|
client_app_attr: Optional[str] = None,
|
336
333
|
server_app: Optional[ServerApp] = None,
|
337
334
|
server_app_attr: Optional[str] = None,
|
338
|
-
|
335
|
+
server_app_context: Optional[Context] = None,
|
339
336
|
) -> Context:
|
340
337
|
"""Start ServerApp on a separate thread, then launch Simulation Engine."""
|
341
338
|
# Initialize StateFactory
|
@@ -346,13 +343,15 @@ def _main_loop(
|
|
346
343
|
server_app_thread_has_exception = threading.Event()
|
347
344
|
serverapp_th = None
|
348
345
|
success = True
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
346
|
+
if server_app_context is None:
|
347
|
+
server_app_context = Context(
|
348
|
+
run_id=run.run_id,
|
349
|
+
node_id=0,
|
350
|
+
node_config=UserConfig(),
|
351
|
+
state=RecordDict(),
|
352
|
+
run_config=UserConfig(),
|
353
|
+
)
|
354
|
+
updated_context = server_app_context
|
356
355
|
try:
|
357
356
|
# Register run
|
358
357
|
log(DEBUG, "Pre-registering run with id %s", run.run_id)
|
@@ -361,9 +360,6 @@ def _main_loop(
|
|
361
360
|
run.running_at = run.starting_at
|
362
361
|
state_factory.state().run_ids[run.run_id] = RunRecord(run=run) # type: ignore
|
363
362
|
|
364
|
-
if server_app_run_config is None:
|
365
|
-
server_app_run_config = {}
|
366
|
-
|
367
363
|
# Initialize Grid
|
368
364
|
grid = InMemoryGrid(state_factory=state_factory)
|
369
365
|
grid.set_run(run_id=run.run_id)
|
@@ -373,13 +369,12 @@ def _main_loop(
|
|
373
369
|
serverapp_th = run_serverapp_th(
|
374
370
|
server_app_attr=server_app_attr,
|
375
371
|
server_app=server_app,
|
376
|
-
|
372
|
+
server_app_context=server_app_context,
|
377
373
|
grid=grid,
|
378
374
|
app_dir=app_dir,
|
379
375
|
f_stop=f_stop,
|
380
376
|
has_exception=server_app_thread_has_exception,
|
381
377
|
enable_tf_gpu_growth=enable_tf_gpu_growth,
|
382
|
-
run_id=run.run_id,
|
383
378
|
ctx_queue=output_context_queue,
|
384
379
|
)
|
385
380
|
|
@@ -438,7 +433,7 @@ def _run_simulation(
|
|
438
433
|
backend_config: Optional[BackendConfig] = None,
|
439
434
|
client_app_attr: Optional[str] = None,
|
440
435
|
server_app_attr: Optional[str] = None,
|
441
|
-
|
436
|
+
server_app_context: Optional[Context] = None,
|
442
437
|
app_dir: str = "",
|
443
438
|
flwr_dir: Optional[str] = None,
|
444
439
|
run: Optional[Run] = None,
|
@@ -502,7 +497,7 @@ def _run_simulation(
|
|
502
497
|
client_app_attr,
|
503
498
|
server_app,
|
504
499
|
server_app_attr,
|
505
|
-
|
500
|
+
server_app_context,
|
506
501
|
)
|
507
502
|
# Detect if there is an Asyncio event loop already running.
|
508
503
|
# If yes, disable logger propagation. In environmnets
|
@@ -0,0 +1,22 @@
|
|
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
|
+
"""ArtifactProvider for SuperLink."""
|
16
|
+
|
17
|
+
|
18
|
+
from .artifact_provider import ArtifactProvider
|
19
|
+
|
20
|
+
__all__ = [
|
21
|
+
"ArtifactProvider",
|
22
|
+
]
|
@@ -0,0 +1,37 @@
|
|
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
|
+
"""Abstract base class for ArtifactProvider."""
|
16
|
+
|
17
|
+
|
18
|
+
from abc import ABC, abstractmethod
|
19
|
+
from typing import Optional
|
20
|
+
|
21
|
+
|
22
|
+
class ArtifactProvider(ABC):
|
23
|
+
"""ArtifactProvider interface for providing artifact download links."""
|
24
|
+
|
25
|
+
@abstractmethod
|
26
|
+
def get_url(self, run_id: int) -> Optional[str]:
|
27
|
+
"""Return the artifact download link for the given run ID."""
|
28
|
+
|
29
|
+
@property
|
30
|
+
@abstractmethod
|
31
|
+
def output_dir(self) -> str:
|
32
|
+
"""Permanent storage directory."""
|
33
|
+
|
34
|
+
@property
|
35
|
+
@abstractmethod
|
36
|
+
def tmp_dir(self) -> str:
|
37
|
+
"""Temporary storage directory."""
|
@@ -31,6 +31,7 @@ from flwr.server.superlink.linkstate import LinkStateFactory
|
|
31
31
|
from flwr.supercore.ffs import FfsFactory
|
32
32
|
from flwr.supercore.license_plugin import LicensePlugin
|
33
33
|
from flwr.supercore.object_store import ObjectStoreFactory
|
34
|
+
from flwr.superlink.artifact_provider import ArtifactProvider
|
34
35
|
|
35
36
|
from .control_event_log_interceptor import ControlEventLogInterceptor
|
36
37
|
from .control_license_interceptor import ControlLicenseInterceptor
|
@@ -56,6 +57,7 @@ def run_control_api_grpc(
|
|
56
57
|
auth_plugin: Optional[ControlAuthPlugin] = None,
|
57
58
|
authz_plugin: Optional[ControlAuthzPlugin] = None,
|
58
59
|
event_log_plugin: Optional[EventLogWriterPlugin] = None,
|
60
|
+
artifact_provider: Optional[ArtifactProvider] = None,
|
59
61
|
) -> grpc.Server:
|
60
62
|
"""Run Control API (gRPC, request-response)."""
|
61
63
|
license_plugin: Optional[LicensePlugin] = get_license_plugin()
|
@@ -68,6 +70,7 @@ def run_control_api_grpc(
|
|
68
70
|
objectstore_factory=objectstore_factory,
|
69
71
|
is_simulation=is_simulation,
|
70
72
|
auth_plugin=auth_plugin,
|
73
|
+
artifact_provider=artifact_provider,
|
71
74
|
)
|
72
75
|
interceptors: list[grpc.ServerInterceptor] = []
|
73
76
|
if license_plugin is not None:
|
@@ -29,7 +29,9 @@ from flwr.common.auth_plugin import ControlAuthPlugin
|
|
29
29
|
from flwr.common.constant import (
|
30
30
|
FAB_MAX_SIZE,
|
31
31
|
LOG_STREAM_INTERVAL,
|
32
|
+
NO_ARTIFACT_PROVIDER_MESSAGE,
|
32
33
|
NO_USER_AUTH_MESSAGE,
|
34
|
+
PULL_UNFINISHED_RUN_MESSAGE,
|
33
35
|
RUN_ID_NOT_FOUND_MESSAGE,
|
34
36
|
Status,
|
35
37
|
SubStatus,
|
@@ -49,6 +51,8 @@ from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
|
49
51
|
GetLoginDetailsResponse,
|
50
52
|
ListRunsRequest,
|
51
53
|
ListRunsResponse,
|
54
|
+
PullArtifactsRequest,
|
55
|
+
PullArtifactsResponse,
|
52
56
|
StartRunRequest,
|
53
57
|
StartRunResponse,
|
54
58
|
StopRunRequest,
|
@@ -59,6 +63,7 @@ from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
|
59
63
|
from flwr.server.superlink.linkstate import LinkState, LinkStateFactory
|
60
64
|
from flwr.supercore.ffs import FfsFactory
|
61
65
|
from flwr.supercore.object_store import ObjectStore, ObjectStoreFactory
|
66
|
+
from flwr.superlink.artifact_provider import ArtifactProvider
|
62
67
|
|
63
68
|
from .control_user_auth_interceptor import shared_account_info
|
64
69
|
|
@@ -73,14 +78,16 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
73
78
|
objectstore_factory: ObjectStoreFactory,
|
74
79
|
is_simulation: bool,
|
75
80
|
auth_plugin: Optional[ControlAuthPlugin] = None,
|
81
|
+
artifact_provider: Optional[ArtifactProvider] = None,
|
76
82
|
) -> None:
|
77
83
|
self.linkstate_factory = linkstate_factory
|
78
84
|
self.ffs_factory = ffs_factory
|
79
85
|
self.objectstore_factory = objectstore_factory
|
80
86
|
self.is_simulation = is_simulation
|
81
87
|
self.auth_plugin = auth_plugin
|
88
|
+
self.artifact_provider = artifact_provider
|
82
89
|
|
83
|
-
def StartRun(
|
90
|
+
def StartRun( # pylint: disable=too-many-locals
|
84
91
|
self, request: StartRunRequest, context: grpc.ServicerContext
|
85
92
|
) -> StartRunResponse:
|
86
93
|
"""Create run ID."""
|
@@ -126,11 +133,20 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
126
133
|
flwr_aid,
|
127
134
|
)
|
128
135
|
|
136
|
+
# Initialize node config
|
137
|
+
node_config = {}
|
138
|
+
if self.artifact_provider is not None:
|
139
|
+
node_config = {
|
140
|
+
"output_dir": self.artifact_provider.output_dir,
|
141
|
+
"tmp_dir": self.artifact_provider.tmp_dir,
|
142
|
+
}
|
143
|
+
|
129
144
|
# Create an empty context for the Run
|
130
145
|
context = Context(
|
131
146
|
run_id=run_id,
|
132
147
|
node_id=0,
|
133
|
-
|
148
|
+
# Dict is invariant in mypy
|
149
|
+
node_config=node_config, # type: ignore[arg-type]
|
134
150
|
state=RecordDict(),
|
135
151
|
run_config={},
|
136
152
|
)
|
@@ -335,6 +351,47 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
335
351
|
refresh_token=credentials.refresh_token,
|
336
352
|
)
|
337
353
|
|
354
|
+
def PullArtifacts(
|
355
|
+
self, request: PullArtifactsRequest, context: grpc.ServicerContext
|
356
|
+
) -> PullArtifactsResponse:
|
357
|
+
"""Pull artifacts for a given run ID."""
|
358
|
+
log(INFO, "ControlServicer.PullArtifacts")
|
359
|
+
|
360
|
+
# Check if artifact provider is configured
|
361
|
+
if self.artifact_provider is None:
|
362
|
+
context.abort(
|
363
|
+
grpc.StatusCode.UNIMPLEMENTED,
|
364
|
+
NO_ARTIFACT_PROVIDER_MESSAGE,
|
365
|
+
)
|
366
|
+
raise grpc.RpcError() # This line is unreachable
|
367
|
+
|
368
|
+
# Init link state
|
369
|
+
state = self.linkstate_factory.state()
|
370
|
+
|
371
|
+
# Retrieve run ID and run
|
372
|
+
run_id = request.run_id
|
373
|
+
run = state.get_run(run_id)
|
374
|
+
|
375
|
+
# Exit if `run_id` not found
|
376
|
+
if not run:
|
377
|
+
context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
|
378
|
+
raise grpc.RpcError() # This line is unreachable
|
379
|
+
|
380
|
+
# Exit if the run is not finished yet
|
381
|
+
if run.status.status != Status.FINISHED:
|
382
|
+
context.abort(
|
383
|
+
grpc.StatusCode.FAILED_PRECONDITION, PULL_UNFINISHED_RUN_MESSAGE
|
384
|
+
)
|
385
|
+
|
386
|
+
# Check if `flwr_aid` matches the run's `flwr_aid` when user auth is enabled
|
387
|
+
if self.auth_plugin:
|
388
|
+
flwr_aid = shared_account_info.get().flwr_aid
|
389
|
+
_check_flwr_aid_in_run(flwr_aid=flwr_aid, run=run, context=context)
|
390
|
+
|
391
|
+
# Call artifact provider
|
392
|
+
download_url = self.artifact_provider.get_url(run_id)
|
393
|
+
return PullArtifactsResponse(url=download_url)
|
394
|
+
|
338
395
|
|
339
396
|
def _create_list_runs_response(
|
340
397
|
run_ids: set[int], state: LinkState, store: ObjectStore
|
{flwr_nightly-1.22.0.dev20250915.dist-info → flwr_nightly-1.22.0.dev20250917.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: flwr-nightly
|
3
|
-
Version: 1.22.0.
|
3
|
+
Version: 1.22.0.dev20250917
|
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
|
@@ -102,25 +102,15 @@ Meet the Flower community on [flower.ai](https://flower.ai)!
|
|
102
102
|
|
103
103
|
Flower's goal is to make federated learning accessible to everyone. This series of tutorials introduces the fundamentals of federated learning and how to implement them in Flower.
|
104
104
|
|
105
|
-
0. **What is Federated Learning
|
105
|
+
0. **[What is Federated Learning?](https://flower.ai/docs/framework/main/en/tutorial-series-what-is-federated-learning.html)**
|
106
106
|
|
107
|
-
|
107
|
+
1. **[An Introduction to Federated Learning](https://flower.ai/docs/framework/main/en/tutorial-series-get-started-with-flower-pytorch.html)**
|
108
108
|
|
109
|
-
|
109
|
+
2. **[Using Strategies in Federated Learning](https://flower.ai/docs/framework/main/en/tutorial-series-use-a-federated-learning-strategy-pytorch.html)**
|
110
110
|
|
111
|
-
|
111
|
+
3. **[Customize a Flower Strategy](https://flower.ai/docs/framework/main/en/tutorial-series-build-a-strategy-from-scratch-pytorch.html)**
|
112
112
|
|
113
|
-
|
114
|
-
|
115
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb))
|
116
|
-
|
117
|
-
3. **Building Strategies for Federated Learning**
|
118
|
-
|
119
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb))
|
120
|
-
|
121
|
-
4. **Custom Clients for Federated Learning**
|
122
|
-
|
123
|
-
[](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))
|
113
|
+
4. **[Communicate Custom Messages](https://flower.ai/docs/framework/main/en/tutorial-series-customize-the-client-pytorch.html)**
|
124
114
|
|
125
115
|
Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.
|
126
116
|
|
{flwr_nightly-1.22.0.dev20250915.dist-info → flwr_nightly-1.22.0.dev20250917.dist-info}/RECORD
RENAMED
@@ -4,7 +4,7 @@ flwr/app/error.py,sha256=0PwA-E_CAs5P_nWAA0kksVO1A44t4CNLEf7u-Su-uJ0,2342
|
|
4
4
|
flwr/app/exception.py,sha256=WX45Yviu_CmYrYd8JHNjRkSsb-g4Br7XvVLKuVxwSdI,1298
|
5
5
|
flwr/app/metadata.py,sha256=rdMBn0zhIOYmCvmGENQWSQqDwcxwsMJzCle4PQdlc_Y,7331
|
6
6
|
flwr/cli/__init__.py,sha256=EfMGmHoobET6P2blBt_eOByXL8299MgFfB7XNdaPQ6I,720
|
7
|
-
flwr/cli/app.py,sha256=
|
7
|
+
flwr/cli/app.py,sha256=qYMZtPXzDXZpigmerRz4WF3lA3D0Y1lVufzgWB8Nd9A,1899
|
8
8
|
flwr/cli/auth_plugin/__init__.py,sha256=FyaoqPzcxlBTFfJ2sBRC5USwQLmAhFr5KuBwfMO4bmo,1052
|
9
9
|
flwr/cli/auth_plugin/oidc_cli_plugin.py,sha256=kQteGRB9-DmC7K5F9TBmUc8ndSBR7WyT27ygWUUuX_g,5402
|
10
10
|
flwr/cli/build.py,sha256=hE54Q_eMdWLpVKSVC2aQaUxVaiUlWnAosGNvIPSEg6Y,7284
|
@@ -18,19 +18,19 @@ flwr/cli/login/__init__.py,sha256=B1SXKU3HCQhWfFDMJhlC7FOl8UsvH4mxysxeBnrfyUE,80
|
|
18
18
|
flwr/cli/login/login.py,sha256=RM1Jiv_VFm3oz4rTHSr3D87X90lW3WzErjBBU7WviWY,4309
|
19
19
|
flwr/cli/ls.py,sha256=3YK7cpoImJ7PbjlP_JgYRQWz1GymX2q7Reu-mKJEpao,10957
|
20
20
|
flwr/cli/new/__init__.py,sha256=QA1E2QtzPvFCjLTUHnFnJbufuFiGyT_0Y53Wpbvg1F0,790
|
21
|
-
flwr/cli/new/new.py,sha256=
|
21
|
+
flwr/cli/new/new.py,sha256=GvXapfYMrUQMktn1qJ3bfxfXeK0IAsxsxHBIGfPg3sE,10535
|
22
22
|
flwr/cli/new/templates/__init__.py,sha256=FpjWCfIySU2DB4kh0HOXLAjlZNNFDTVU4w3HoE2TzcI,725
|
23
23
|
flwr/cli/new/templates/app/.gitignore.tpl,sha256=HZJcGQoxp7aUzaPg8Uqch3kNrIESwr9yjimDxJYgXVY,3104
|
24
24
|
flwr/cli/new/templates/app/LICENSE.tpl,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
25
25
|
flwr/cli/new/templates/app/README.baseline.md.tpl,sha256=oClo5eR0iLuPzBT7uS3ikhNRAnySz_lhkHFElixKyJM,9640
|
26
|
-
flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=
|
26
|
+
flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=2-W0HAseLWOe1JJU0TsNocp63D14N7jLwWhtYjxlfxs,3494
|
27
27
|
flwr/cli/new/templates/app/README.md.tpl,sha256=uI8vUMCEGA1-WJ8-9EUFCnNtofWFkJNOxaR1V6r_Su4,1908
|
28
28
|
flwr/cli/new/templates/app/__init__.py,sha256=LbR0ksGiF566JcHM_H5m1Tc4-oYUEilWFlcXR-Oe6bI,729
|
29
29
|
flwr/cli/new/templates/app/code/__init__.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
30
30
|
flwr/cli/new/templates/app/code/__init__.py,sha256=zXa2YU1swzHxOKDQbwlDMEwVPOUswVeosjkiXNMTgFo,736
|
31
31
|
flwr/cli/new/templates/app/code/__init__.py.tpl,sha256=J0Gn74E7khpLyKJVNqOPu7ev93vkcu1PZugsbxtABMw,52
|
32
32
|
flwr/cli/new/templates/app/code/__init__.pytorch_legacy_api.py.tpl,sha256=mKIS8MK_X8T9NlmcX1-_c9Bbexc-ueqDIBI7uN6c4dE,45
|
33
|
-
flwr/cli/new/templates/app/code/client.baseline.py.tpl,sha256=
|
33
|
+
flwr/cli/new/templates/app/code/client.baseline.py.tpl,sha256=w8xYWhVAb5AFDLj206Nxz5U-xbzDBv0px2FFvE5wRTM,2438
|
34
34
|
flwr/cli/new/templates/app/code/client.huggingface.py.tpl,sha256=SIZZ3s-6u8IU8cFfsqu6ZU8zjhfI1m1SWauOSUcW8TA,3015
|
35
35
|
flwr/cli/new/templates/app/code/client.jax.py.tpl,sha256=uFCIPwAHYiRAgh2W3nRni_Oig02ZzRF-ofUG5O19zcE,2125
|
36
36
|
flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=CHU2IBIzI2YENZZuvTsAlSdL94DK19wMYMIhr-JgwZ8,3422
|
@@ -41,13 +41,13 @@ flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=0qqEe-RRjkHGOH8gsD9
|
|
41
41
|
flwr/cli/new/templates/app/code/client.tensorflow.py.tpl,sha256=8o55KXpsbF_rv6o98ZNYJDCazjwMp_RPTaSzDfT7Qlw,2682
|
42
42
|
flwr/cli/new/templates/app/code/dataset.baseline.py.tpl,sha256=jbd_exHAk2-Blu_kVutjPO6a_dkJQWb232zxSeXIZ1k,1453
|
43
43
|
flwr/cli/new/templates/app/code/flwr_tune/__init__.py,sha256=Xq5fEn5yZkw6HAJi10T_3HRBoqN5_5pNqJHY4wXvD5k,748
|
44
|
-
flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl,sha256=
|
44
|
+
flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl,sha256=p6BzTbP-mXkFANiVC7iz3YlskOidWaLC341IJyrUotQ,2951
|
45
45
|
flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl,sha256=1NA2Sf-EviNtOaYN4dnFk6v2tcZVsY3-eXY84wOXVng,3059
|
46
|
-
flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl,sha256=
|
47
|
-
flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl,sha256=
|
48
|
-
flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl,sha256=
|
49
|
-
flwr/cli/new/templates/app/code/model.baseline.py.tpl,sha256=
|
50
|
-
flwr/cli/new/templates/app/code/server.baseline.py.tpl,sha256=
|
46
|
+
flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl,sha256=UCLEKUpXarkz9tMFtDrxmLv6QuKe5zCimTuoopQedUM,1717
|
47
|
+
flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl,sha256=qe9Om3P2ERvvSj2NN5RSEKgNgztWatCpWtC8SkS_T_M,2420
|
48
|
+
flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl,sha256=M6CzBY-gtIqLOu2xTtABXOVgBnqKOu7d6Vn2sazmYuI,2444
|
49
|
+
flwr/cli/new/templates/app/code/model.baseline.py.tpl,sha256=P6jTuN9reJfdthiN3mOUHiA4xrtDh5TTUcAV6210-hU,2104
|
50
|
+
flwr/cli/new/templates/app/code/server.baseline.py.tpl,sha256=hliBSfHSzg4bi6PxMlj4oGFfvzvi-4DzoaI67VZbJeQ,1111
|
51
51
|
flwr/cli/new/templates/app/code/server.huggingface.py.tpl,sha256=_2Mv-SqGSMf7sMdbMEmvROzedvNaVHvhIIO3eYAhVYU,1252
|
52
52
|
flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=RW-rh7ogcJ3_BD66bJxTw-ZoP7c-4SK8hVHc-e0SSVY,1029
|
53
53
|
flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=J8rIe6RL2ndODVJD79xShRKBH70HljFSCi4s_RJ-xLQ,1200
|
@@ -66,8 +66,8 @@ flwr/cli/new/templates/app/code/task.pytorch_legacy_api.py.tpl,sha256=XlJqA4Ix_P
|
|
66
66
|
flwr/cli/new/templates/app/code/task.sklearn.py.tpl,sha256=vHdhtMp0FHxbYafXyhDT9aKmmmA0Jvpx5Oum1Yu9lWY,1850
|
67
67
|
flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=impgWN7MfztmcWF4xh1llcZGsgTvrb1HD5ZE0t-8U08,1731
|
68
68
|
flwr/cli/new/templates/app/code/utils.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
69
|
-
flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=
|
70
|
-
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=
|
69
|
+
flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=mPIMPfneVYV03l8jWRgWZ0V5Kh_pJw-AMUvkhcKkmL8,3182
|
70
|
+
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=wqYW4bWcf12m0U2njR995lySSesFvnHB-eSkPWz-QdM,2501
|
71
71
|
flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=xHGF38i7oFpvnFvqfqLdtc08CkHRYsenbLz3q1dhCXk,2020
|
72
72
|
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=fdDhwmPoMirJ095cU_vFCBf0ILQlAoa1fdnHb2LM1yk,1471
|
73
73
|
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=PAjPT2v06sBZxacNiyMJloDwocCK5tFcGQmMXOoBqc8,1542
|
@@ -76,10 +76,11 @@ flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=SE4H23OFkQbqNU64nYf
|
|
76
76
|
flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl,sha256=docQbs3MuRR-yT24lVz7N2sQL3Sj49EHuOCuRj_0djQ,1508
|
77
77
|
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=apauU_PUmLEbt2rjckKniEbzdRs1EnMri_qgtHtBJZ8,1484
|
78
78
|
flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=LQpDKJTEnRKj5Ygn5FkT44SxlnLVprkPlbrGaFf5Q50,1508
|
79
|
+
flwr/cli/pull.py,sha256=dHiMe6x8w8yRoFNKpjA-eiPD6eFiHz4Vah5HZrqNpuo,3364
|
79
80
|
flwr/cli/run/__init__.py,sha256=RPyB7KbYTFl6YRiilCch6oezxrLQrl1kijV7BMGkLbA,790
|
80
81
|
flwr/cli/run/run.py,sha256=ECa0kup9dn15O70H74QdgUsEaeErbzDqVX_U0zZO5IM,8173
|
81
82
|
flwr/cli/stop.py,sha256=TR9F61suTxNUzGIktUdoBhXwdRtCdvzGhy3qCuvcfBg,5000
|
82
|
-
flwr/cli/utils.py,sha256=
|
83
|
+
flwr/cli/utils.py,sha256=sMctnDYHv-zu9FG67aV0vy_zs3gkkXclQicBD_67WWg,13805
|
83
84
|
flwr/client/__init__.py,sha256=boIhKaK6I977zrILmoTutNx94x5jB0e6F1gnAjaRJnI,1250
|
84
85
|
flwr/client/client.py,sha256=3HAchxvknKG9jYbB7swNyDj-e5vUWDuMKoLvbT7jCVM,7895
|
85
86
|
flwr/client/client_app.py,sha256=zVhi-l3chAb06ozFsKwix3hU_RpOLjST13Ha50AVIPE,16918
|
@@ -116,7 +117,7 @@ flwr/common/args.py,sha256=Nq2u4yePbkSY0CWFamn0hZY6Rms8G1xYDeDGIcLIITE,5849
|
|
116
117
|
flwr/common/auth_plugin/__init__.py,sha256=DktrRcGZrRarLf7Jb_UlHtOyLp9_-kEplyq6PS5-vOA,988
|
117
118
|
flwr/common/auth_plugin/auth_plugin.py,sha256=mM7SuphO4OsVAVJR1GErYVgYT83ZjxDzS_gha12bT9E,4855
|
118
119
|
flwr/common/config.py,sha256=glcZDjco-amw1YfQcYTFJ4S1pt9APoexT-mf1QscuHs,13960
|
119
|
-
flwr/common/constant.py,sha256=
|
120
|
+
flwr/common/constant.py,sha256=zopMTlEgz8TxMSh59ueef6VutHSdfb3XRStl1W5yBZ4,9013
|
120
121
|
flwr/common/context.py,sha256=Be8obQR_OvEDy1OmshuUKxGRQ7Qx89mf5F4xlhkR10s,2407
|
121
122
|
flwr/common/date.py,sha256=1ZT2cRSpC2DJqprOVTLXYCR_O2_OZR0zXO_brJ3LqWc,1554
|
122
123
|
flwr/common/differential_privacy.py,sha256=FdlpdpPl_H_2HJa8CQM1iCUGBBQ5Dc8CzxmHERM-EoE,6148
|
@@ -181,10 +182,10 @@ flwr/proto/clientappio_pb2.py,sha256=vJjzwWydhg7LruK8cvRAeVQeHPsJztgdIW9nyiPBZF0
|
|
181
182
|
flwr/proto/clientappio_pb2.pyi,sha256=XbFvpZvvrS7QcH5AFXfpRGl4hQvhd3QdKO6x0oTlCCU,165
|
182
183
|
flwr/proto/clientappio_pb2_grpc.py,sha256=iobNROP0qvn5zddx7k-uIi_dJWP3T_BRp_kbKq086i8,17550
|
183
184
|
flwr/proto/clientappio_pb2_grpc.pyi,sha256=Ytf1O1ktKB0Vsuc3AWLIErGjIJYokzKYzi2uA7mdMeg,4785
|
184
|
-
flwr/proto/control_pb2.py,sha256=
|
185
|
-
flwr/proto/control_pb2.pyi,sha256=
|
186
|
-
flwr/proto/control_pb2_grpc.py,sha256=
|
187
|
-
flwr/proto/control_pb2_grpc.pyi,sha256=
|
185
|
+
flwr/proto/control_pb2.py,sha256=Sz7PTdb7YGBs2N-FX6GiOVueY9PN0cF85XbwBkK9_BE,6183
|
186
|
+
flwr/proto/control_pb2.pyi,sha256=2OLPt6ztVcLzzISqfRqW4yrA-nawIPLwVDoTjBnSS5U,10592
|
187
|
+
flwr/proto/control_pb2_grpc.py,sha256=R4ykPqGblqEpOdVskoSfMeS-pZdyMT3CMBQUtTzHbgQ,12282
|
188
|
+
flwr/proto/control_pb2_grpc.pyi,sha256=7U9aOP4dYamnc4ZtTrEQEYYz0kFNI_fT88LRxwClA0U,3504
|
188
189
|
flwr/proto/error_pb2.py,sha256=PQVWrfjVPo88ql_KgV9nCxyQNCcV9PVfmcw7sOzTMro,1084
|
189
190
|
flwr/proto/error_pb2.pyi,sha256=ZNH4HhJTU_KfMXlyCeg8FwU-fcUYxTqEmoJPtWtHikc,734
|
190
191
|
flwr/proto/error_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
@@ -239,7 +240,7 @@ flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPc
|
|
239
240
|
flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
|
240
241
|
flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
241
242
|
flwr/server/__init__.py,sha256=LQQHiuL2jy7TpNaKastRdGsexlxSt5ZWAQNVqitDnrY,1598
|
242
|
-
flwr/server/app.py,sha256=
|
243
|
+
flwr/server/app.py,sha256=SUWdNUcl-Sy8h2MiC8Etr50GDJuGq58Ekqtr5XQ-Xrg,29951
|
243
244
|
flwr/server/client_manager.py,sha256=5jCGavVli7XdupvWWo7ru3PdFTlRU8IGvHFSSoUVLRs,6227
|
244
245
|
flwr/server/client_proxy.py,sha256=sv0E9AldBYOvc3pusqFh-GnyreeMfsXQ1cuTtxTq_wY,2399
|
245
246
|
flwr/server/compat/__init__.py,sha256=0IsttWvY15qO98_1GyzVC-vR1e_ZPXOdu2qUlOkYMPE,886
|
@@ -332,26 +333,30 @@ flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=DkayCsnlAy
|
|
332
333
|
flwr/serverapp/__init__.py,sha256=ZujKNXULwhWYQhFnxOOT5Wi9MRq2JCWFhAAj7ouiQ78,884
|
333
334
|
flwr/serverapp/dp_fixed_clipping.py,sha256=wbP4W7CaUHXdll8ZSVUnTBSEWrnWM00CGk63rOR-Q2s,12133
|
334
335
|
flwr/serverapp/exception.py,sha256=5cuH-2AafvihzosWDdDjuMmHdDqZ1XxHvCqZXNBVklw,1334
|
335
|
-
flwr/serverapp/strategy/__init__.py,sha256=
|
336
|
+
flwr/serverapp/strategy/__init__.py,sha256=MJNWeBWzpQDfqhhpND5LncxPVK91kUo_Yzu6IMFdLCc,1492
|
336
337
|
flwr/serverapp/strategy/dp_fixed_clipping.py,sha256=wbP4W7CaUHXdll8ZSVUnTBSEWrnWM00CGk63rOR-Q2s,12133
|
337
338
|
flwr/serverapp/strategy/fedadagrad.py,sha256=fD65P6OEERa_pxq847e1UZpA083AcWR44XavYB0naGM,6343
|
338
339
|
flwr/serverapp/strategy/fedadam.py,sha256=s3xPIqhopy6yPTeFxevSPnc7a6BcKnKsvo2AaO6Z_xs,7138
|
339
|
-
flwr/serverapp/strategy/fedavg.py,sha256=
|
340
|
+
flwr/serverapp/strategy/fedavg.py,sha256=Bq_nlmngzJbjqX1fF1mevXGVN6-pwglHv-6yNrs6lkA,12035
|
341
|
+
flwr/serverapp/strategy/fedavgm.py,sha256=VlByltWzUYCoiVIWPFRqsqLKNWjlOlO2INK8SUxEjzk,8327
|
342
|
+
flwr/serverapp/strategy/fedmedian.py,sha256=b31Dk0LQBbQxi_f-jeSbWHI7iOBugcuBSN2Az-_a75E,2596
|
340
343
|
flwr/serverapp/strategy/fedopt.py,sha256=kqT0uV2IUE93O72XEVa1JJo61dcwbZEoT9KmYTjR2tE,8477
|
344
|
+
flwr/serverapp/strategy/fedprox.py,sha256=XkkLTk3XpXAj0QoAzHqAvcAlPjrNlX11ISAu5u2x6X8,7026
|
345
|
+
flwr/serverapp/strategy/fedtrimmedavg.py,sha256=4-QxgAQGo_7vB_L7qDYy28d95OBt9MeDa92yaTRMHqk,7166
|
341
346
|
flwr/serverapp/strategy/fedxgb_bagging.py,sha256=ktDjzov4y0BRecioq788umCEtcuwElou9olBizQKOnM,3282
|
342
347
|
flwr/serverapp/strategy/fedyogi.py,sha256=1Ripr4Hi2cdeTOLiFOXtMKvOxR3BsUQwc7bbTrXN4LM,6653
|
343
348
|
flwr/serverapp/strategy/result.py,sha256=E0Hl2VLnZAgQJjE2GDoKsK7JX-kPPU2KXc47Axt6hGw,4295
|
344
349
|
flwr/serverapp/strategy/strategy.py,sha256=8uJGGm1ROLZERQ_dkRS7Z_rs-yK6XCE0UxXtIdFiEWk,10789
|
345
350
|
flwr/serverapp/strategy/strategy_utils.py,sha256=hiwS7k-Hx6_c4NZXoKpHucS5CBKb7f8GppXRBSMt3Us,10851
|
346
|
-
flwr/serverapp/strategy/strategy_utils_tests.py,sha256=
|
351
|
+
flwr/serverapp/strategy/strategy_utils_tests.py,sha256=_adS23Lrv1QA6V_3oZ7P_csMd8RqDObFeIhOkFnNtTg,10690
|
347
352
|
flwr/simulation/__init__.py,sha256=Gg6OsP1Z-ixc3-xxzvl7j7rz2Fijy9rzyEPpxgAQCeM,1556
|
348
|
-
flwr/simulation/app.py,sha256=
|
353
|
+
flwr/simulation/app.py,sha256=b_bDyZFwBf2zpKs37Vmd5cFJSzDRE0fL-8uqA0UkAv4,10393
|
349
354
|
flwr/simulation/legacy_app.py,sha256=nMISQqW0otJL1-2Kfd94O6BLlGS2IEmEPKTM2WGKrIs,15861
|
350
355
|
flwr/simulation/ray_transport/__init__.py,sha256=ogd-0AMv2U-wBZ1r3sHWaDIOIrVqr88Xi6C8o4Dviy0,734
|
351
356
|
flwr/simulation/ray_transport/ray_actor.py,sha256=JN3xTqFIr5Z750k92CcA_uavzOHhSWDwE2WCaecvpks,19147
|
352
357
|
flwr/simulation/ray_transport/ray_client_proxy.py,sha256=2kVUDrJe2ViOJEuB0v_Xb3XUwK9yKNwDwrYQXTJDdco,7506
|
353
358
|
flwr/simulation/ray_transport/utils.py,sha256=KrexpWYCF-dAF3UHc9yDbPQWO-ahMT-BbD8nURLgiHk,2393
|
354
|
-
flwr/simulation/run_simulation.py,sha256
|
359
|
+
flwr/simulation/run_simulation.py,sha256=LrM5iI0Rf_QqrnqvJ1muKxKFlrInA3I8-SF-uIIsPik,20666
|
355
360
|
flwr/simulation/simulationio_connection.py,sha256=mzS1C6EEREwQDPceDo30anAasmTDLb9qqV2tXlBhOUA,3494
|
356
361
|
flwr/supercore/__init__.py,sha256=pqkFoow_E6UhbBlhmoD1gmTH-33yJRhBsIZqxRPFZ7U,755
|
357
362
|
flwr/supercore/app_utils.py,sha256=K76Zt6R670b1hUmxOsNc1WUCVYvF7lejXPcCO9K0Q0g,1753
|
@@ -383,12 +388,14 @@ flwr/supercore/superexec/plugin/simulation_exec_plugin.py,sha256=upn5zE-YKkl_jTw
|
|
383
388
|
flwr/supercore/superexec/run_superexec.py,sha256=8hUlaVPVNnhePQ9OUgen4yy0fSGZAVggBGzm-33iJPw,6630
|
384
389
|
flwr/supercore/utils.py,sha256=ebuHMbeA8eXisX0oMPqBK3hk7uVnIE_yiqWVz8YbkpQ,1324
|
385
390
|
flwr/superlink/__init__.py,sha256=GNSuJ4-N6Z8wun2iZNlXqENt5beUyzC0Gi_tN396bbM,707
|
391
|
+
flwr/superlink/artifact_provider/__init__.py,sha256=pgZEcVPKRE874LSu3cgy0HbwSJBIpVy_HxQOmne4PAs,810
|
392
|
+
flwr/superlink/artifact_provider/artifact_provider.py,sha256=Gnlg2M2SOqCruji2B0U3ov68NJWKin9scmnWJTiSnNA,1267
|
386
393
|
flwr/superlink/servicer/__init__.py,sha256=ZC-kILcUGeh6IxJsfu24cTzUqIGXmQfEKsGfhsnhBpM,717
|
387
394
|
flwr/superlink/servicer/control/__init__.py,sha256=qhUTMt_Mg4lxslCJYn5hDSrA-lXf5ya3617BT8kR-2Y,803
|
388
395
|
flwr/superlink/servicer/control/control_event_log_interceptor.py,sha256=HauUd7Xq-b1TFZmZVl9wpBITfDttn8-1_KhlEq-HJ8M,5966
|
389
|
-
flwr/superlink/servicer/control/control_grpc.py,sha256=
|
396
|
+
flwr/superlink/servicer/control/control_grpc.py,sha256=BYm2QELbUAV_mHr0K-ZU726jjgoFXTo4M0-C6MXFzTg,4244
|
390
397
|
flwr/superlink/servicer/control/control_license_interceptor.py,sha256=T3AzmRt-PPwyTq3hrdpmZHQd5_CpPOk7TtnFZrB-JRY,3349
|
391
|
-
flwr/superlink/servicer/control/control_servicer.py,sha256=
|
398
|
+
flwr/superlink/servicer/control/control_servicer.py,sha256=zY1ARksabr776eLQDy48wDmEx9t-VXTOnHq1h5Mt61U,16143
|
392
399
|
flwr/superlink/servicer/control/control_user_auth_interceptor.py,sha256=9Aqhrt_UX80FXbIQVXUrqDHs5rD5CA7vEn0Bh-zPiYU,6232
|
393
400
|
flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
|
394
401
|
flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
|
@@ -404,7 +411,7 @@ flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca
|
|
404
411
|
flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
|
405
412
|
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=nIHRu38EWK-rpNOkcgBRAAKwYQQWFeCwu0lkO7OPZGQ,10239
|
406
413
|
flwr/supernode/start_client_internal.py,sha256=Y9S1-QlO2WP6eo4JvWzIpfaCoh2aoE7bjEYyxNNnlyg,20777
|
407
|
-
flwr_nightly-1.22.0.
|
408
|
-
flwr_nightly-1.22.0.
|
409
|
-
flwr_nightly-1.22.0.
|
410
|
-
flwr_nightly-1.22.0.
|
414
|
+
flwr_nightly-1.22.0.dev20250917.dist-info/METADATA,sha256=NGqW090jvJZ7dg66AQQr9jKb4SF7DdF78xwqFuhtFUE,14559
|
415
|
+
flwr_nightly-1.22.0.dev20250917.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
416
|
+
flwr_nightly-1.22.0.dev20250917.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
|
417
|
+
flwr_nightly-1.22.0.dev20250917.dist-info/RECORD,,
|
{flwr_nightly-1.22.0.dev20250915.dist-info → flwr_nightly-1.22.0.dev20250917.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|