flwr 1.21.0__py3-none-any.whl → 1.22.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.py +2 -0
- flwr/cli/new/new.py +9 -7
- 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/client.huggingface.py.tpl +68 -30
- flwr/cli/new/templates/app/code/client.jax.py.tpl +63 -42
- flwr/cli/new/templates/app/code/client.mlx.py.tpl +80 -51
- flwr/cli/new/templates/app/code/client.numpy.py.tpl +36 -13
- flwr/cli/new/templates/app/code/client.pytorch.py.tpl +71 -46
- flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl +55 -0
- flwr/cli/new/templates/app/code/client.sklearn.py.tpl +75 -30
- flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +69 -44
- flwr/cli/new/templates/app/code/client.xgboost.py.tpl +110 -0
- 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/code/server.huggingface.py.tpl +23 -19
- flwr/cli/new/templates/app/code/server.jax.py.tpl +27 -14
- flwr/cli/new/templates/app/code/server.mlx.py.tpl +29 -19
- flwr/cli/new/templates/app/code/server.numpy.py.tpl +30 -17
- flwr/cli/new/templates/app/code/server.pytorch.py.tpl +36 -26
- flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl +31 -0
- flwr/cli/new/templates/app/code/server.sklearn.py.tpl +29 -21
- flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +28 -19
- flwr/cli/new/templates/app/code/server.xgboost.py.tpl +56 -0
- flwr/cli/new/templates/app/code/task.huggingface.py.tpl +16 -20
- flwr/cli/new/templates/app/code/task.jax.py.tpl +1 -1
- flwr/cli/new/templates/app/code/task.numpy.py.tpl +1 -1
- flwr/cli/new/templates/app/code/task.pytorch.py.tpl +14 -27
- flwr/cli/new/templates/app/code/{task.pytorch_msg_api.py.tpl → task.pytorch_legacy_api.py.tpl} +27 -14
- flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +1 -2
- flwr/cli/new/templates/app/code/task.xgboost.py.tpl +67 -0
- flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +4 -4
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +2 -2
- flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +4 -4
- flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +2 -2
- 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.pytorch_msg_api.toml.tpl → pyproject.pytorch_legacy_api.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/new/templates/app/pyproject.xgboost.toml.tpl +61 -0
- flwr/cli/pull.py +100 -0
- flwr/cli/utils.py +17 -0
- flwr/clientapp/mod/__init__.py +4 -1
- flwr/clientapp/mod/centraldp_mods.py +156 -40
- flwr/clientapp/mod/localdp_mod.py +169 -0
- flwr/clientapp/typing.py +22 -0
- flwr/common/constant.py +3 -0
- flwr/common/exit/exit_code.py +4 -0
- flwr/common/record/typeddict.py +12 -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 +26 -0
- flwr/serverapp/strategy/bulyan.py +238 -0
- flwr/serverapp/strategy/dp_adaptive_clipping.py +335 -0
- flwr/serverapp/strategy/dp_fixed_clipping.py +71 -49
- flwr/serverapp/strategy/fedadagrad.py +0 -3
- flwr/serverapp/strategy/fedadam.py +0 -3
- flwr/serverapp/strategy/fedavg.py +89 -64
- flwr/serverapp/strategy/fedavgm.py +198 -0
- flwr/serverapp/strategy/fedmedian.py +105 -0
- flwr/serverapp/strategy/fedprox.py +174 -0
- flwr/serverapp/strategy/fedtrimmedavg.py +176 -0
- flwr/serverapp/strategy/fedxgb_bagging.py +117 -0
- flwr/serverapp/strategy/fedxgb_cyclic.py +220 -0
- flwr/serverapp/strategy/fedyogi.py +0 -3
- flwr/serverapp/strategy/krum.py +112 -0
- flwr/serverapp/strategy/multikrum.py +247 -0
- flwr/serverapp/strategy/qfedavg.py +252 -0
- flwr/serverapp/strategy/strategy_utils.py +48 -0
- flwr/simulation/app.py +1 -1
- flwr/simulation/run_simulation.py +25 -30
- flwr/supercore/cli/flower_superexec.py +26 -1
- flwr/supercore/constant.py +19 -0
- flwr/supercore/superexec/plugin/exec_plugin.py +11 -1
- flwr/supercore/superexec/run_superexec.py +16 -2
- 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-1.21.0.dist-info → flwr-1.22.0.dist-info}/METADATA +6 -16
- {flwr-1.21.0.dist-info → flwr-1.22.0.dist-info}/RECORD +93 -74
- flwr/cli/new/templates/app/code/client.pytorch_msg_api.py.tpl +0 -80
- flwr/cli/new/templates/app/code/server.pytorch_msg_api.py.tpl +0 -41
- flwr/serverapp/dp_fixed_clipping.py +0 -352
- flwr/serverapp/strategy/strategy_utils_tests.py +0 -304
- /flwr/cli/new/templates/app/code/{__init__.pytorch_msg_api.py.tpl → __init__.pytorch_legacy_api.py.tpl} +0 -0
- {flwr-1.21.0.dist-info → flwr-1.22.0.dist-info}/WHEEL +0 -0
- {flwr-1.21.0.dist-info → flwr-1.22.0.dist-info}/entry_points.txt +0 -0
|
@@ -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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: flwr
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.22.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
|
|
@@ -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
|
|
|
@@ -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,68 +18,73 @@ 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=nIuUrQSGDjI4kqnymlq-rOT0RU3AHwZrat3abqHhCwM,10598
|
|
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
|
-
flwr/cli/new/templates/app/code/__init__.
|
|
33
|
-
flwr/cli/new/templates/app/code/client.baseline.py.tpl,sha256=
|
|
34
|
-
flwr/cli/new/templates/app/code/client.huggingface.py.tpl,sha256=
|
|
35
|
-
flwr/cli/new/templates/app/code/client.jax.py.tpl,sha256=
|
|
36
|
-
flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=
|
|
37
|
-
flwr/cli/new/templates/app/code/client.numpy.py.tpl,sha256=
|
|
38
|
-
flwr/cli/new/templates/app/code/client.pytorch.py.tpl,sha256=
|
|
39
|
-
flwr/cli/new/templates/app/code/client.
|
|
40
|
-
flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=
|
|
41
|
-
flwr/cli/new/templates/app/code/client.tensorflow.py.tpl,sha256=
|
|
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=w8xYWhVAb5AFDLj206Nxz5U-xbzDBv0px2FFvE5wRTM,2438
|
|
34
|
+
flwr/cli/new/templates/app/code/client.huggingface.py.tpl,sha256=SIZZ3s-6u8IU8cFfsqu6ZU8zjhfI1m1SWauOSUcW8TA,3015
|
|
35
|
+
flwr/cli/new/templates/app/code/client.jax.py.tpl,sha256=uFCIPwAHYiRAgh2W3nRni_Oig02ZzRF-ofUG5O19zcE,2125
|
|
36
|
+
flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=CHU2IBIzI2YENZZuvTsAlSdL94DK19wMYMIhr-JgwZ8,3422
|
|
37
|
+
flwr/cli/new/templates/app/code/client.numpy.py.tpl,sha256=1_WEoOPe9jJeK-7FZgYuDUqY8mC0vxgqA83d-h201Gk,1381
|
|
38
|
+
flwr/cli/new/templates/app/code/client.pytorch.py.tpl,sha256=fYoh-dTu07LkqNYvwcxQnbgVvH4Yo4eiGEcyHECbsnU,2473
|
|
39
|
+
flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl,sha256=fuxVmZpjHIueNy_aHWF81531vmi8DGu4CYjYDqmUwWo,1705
|
|
40
|
+
flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=0qqEe-RRjkHGOH8gsD9e83ae-kyyYixhyBgzVHjYpzk,3500
|
|
41
|
+
flwr/cli/new/templates/app/code/client.tensorflow.py.tpl,sha256=8o55KXpsbF_rv6o98ZNYJDCazjwMp_RPTaSzDfT7Qlw,2682
|
|
42
|
+
flwr/cli/new/templates/app/code/client.xgboost.py.tpl,sha256=-ipRV8gqpbEg7Mht77Yyqs1viL-3JYSVZR47I7xeG4c,3493
|
|
42
43
|
flwr/cli/new/templates/app/code/dataset.baseline.py.tpl,sha256=jbd_exHAk2-Blu_kVutjPO6a_dkJQWb232zxSeXIZ1k,1453
|
|
43
44
|
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=
|
|
45
|
+
flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl,sha256=p6BzTbP-mXkFANiVC7iz3YlskOidWaLC341IJyrUotQ,2951
|
|
45
46
|
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=
|
|
51
|
-
flwr/cli/new/templates/app/code/server.huggingface.py.tpl,sha256=
|
|
52
|
-
flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=
|
|
53
|
-
flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=
|
|
54
|
-
flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=
|
|
55
|
-
flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=
|
|
56
|
-
flwr/cli/new/templates/app/code/server.
|
|
57
|
-
flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=
|
|
58
|
-
flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=
|
|
47
|
+
flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl,sha256=UCLEKUpXarkz9tMFtDrxmLv6QuKe5zCimTuoopQedUM,1717
|
|
48
|
+
flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl,sha256=qe9Om3P2ERvvSj2NN5RSEKgNgztWatCpWtC8SkS_T_M,2420
|
|
49
|
+
flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl,sha256=M6CzBY-gtIqLOu2xTtABXOVgBnqKOu7d6Vn2sazmYuI,2444
|
|
50
|
+
flwr/cli/new/templates/app/code/model.baseline.py.tpl,sha256=P6jTuN9reJfdthiN3mOUHiA4xrtDh5TTUcAV6210-hU,2104
|
|
51
|
+
flwr/cli/new/templates/app/code/server.baseline.py.tpl,sha256=hliBSfHSzg4bi6PxMlj4oGFfvzvi-4DzoaI67VZbJeQ,1111
|
|
52
|
+
flwr/cli/new/templates/app/code/server.huggingface.py.tpl,sha256=_2Mv-SqGSMf7sMdbMEmvROzedvNaVHvhIIO3eYAhVYU,1252
|
|
53
|
+
flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=RW-rh7ogcJ3_BD66bJxTw-ZoP7c-4SK8hVHc-e0SSVY,1029
|
|
54
|
+
flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=J8rIe6RL2ndODVJD79xShRKBH70HljFSCi4s_RJ-xLQ,1200
|
|
55
|
+
flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=T3hcKbPw3uL5lXEP-MuVJXIBXjzva5sWJXfpQqarUwA,955
|
|
56
|
+
flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=epARqfcQ-EQsdZwaaaUp5y4OSTBT6CiFGlNRocw-23A,1158
|
|
57
|
+
flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl,sha256=gvBsGA_Jg9kAH8xTxjzTjMcvBtciuccOwQFbO7ey8tU,916
|
|
58
|
+
flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=ehQ5VRgBn92WeFl6kupwJnuxSNkKvE-EvKde6A9mNQo,1377
|
|
59
|
+
flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=2-WTOPd-ewdLd9QmSlflIH7ix7zxAzPEOZoyiPBOy8c,1010
|
|
60
|
+
flwr/cli/new/templates/app/code/server.xgboost.py.tpl,sha256=fwtCRyCG2hDSH1zVMyZv7zA7wsdKNPfpugDSZjxCs5Q,1746
|
|
59
61
|
flwr/cli/new/templates/app/code/strategy.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
|
60
|
-
flwr/cli/new/templates/app/code/task.huggingface.py.tpl,sha256=
|
|
61
|
-
flwr/cli/new/templates/app/code/task.jax.py.tpl,sha256=
|
|
62
|
+
flwr/cli/new/templates/app/code/task.huggingface.py.tpl,sha256=piBbY3Dg60bQnCg15uzMw0QiL5SDOYX4YhQouy-X2zI,3164
|
|
63
|
+
flwr/cli/new/templates/app/code/task.jax.py.tpl,sha256=Fb0XgdTAQplM-ZCusI081XA9asO3gHptH772S-Xcyy8,1525
|
|
62
64
|
flwr/cli/new/templates/app/code/task.mlx.py.tpl,sha256=YxH5z4s5kOh5_9DIY9pvzqURckLDfgdanTA68_iM_Wo,2946
|
|
63
|
-
flwr/cli/new/templates/app/code/task.numpy.py.tpl,sha256=
|
|
64
|
-
flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=
|
|
65
|
-
flwr/cli/new/templates/app/code/task.
|
|
65
|
+
flwr/cli/new/templates/app/code/task.numpy.py.tpl,sha256=CwUJPnN3z6GjP8-KVGWzx7RYRJsl0wLFZ72xscvl3RM,126
|
|
66
|
+
flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=RKA5lV6O6OnVKZ2r75pbzwy9arg5o2lzXqG2kNrLIUU,3446
|
|
67
|
+
flwr/cli/new/templates/app/code/task.pytorch_legacy_api.py.tpl,sha256=XlJqA4Ix_PloO_zJLhjiN5vDj16w3I4CPVGdmbe8asE,3800
|
|
66
68
|
flwr/cli/new/templates/app/code/task.sklearn.py.tpl,sha256=vHdhtMp0FHxbYafXyhDT9aKmmmA0Jvpx5Oum1Yu9lWY,1850
|
|
67
|
-
flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=
|
|
69
|
+
flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=impgWN7MfztmcWF4xh1llcZGsgTvrb1HD5ZE0t-8U08,1731
|
|
70
|
+
flwr/cli/new/templates/app/code/task.xgboost.py.tpl,sha256=0xO8jQvrHuB1llVDopQPOmt5Hn6rBw8umzoNwiZZs-o,2135
|
|
68
71
|
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=
|
|
71
|
-
flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=
|
|
72
|
-
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=
|
|
73
|
-
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=
|
|
74
|
-
flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=
|
|
75
|
-
flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=
|
|
76
|
-
flwr/cli/new/templates/app/pyproject.
|
|
77
|
-
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=
|
|
78
|
-
flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=
|
|
72
|
+
flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=mPIMPfneVYV03l8jWRgWZ0V5Kh_pJw-AMUvkhcKkmL8,3182
|
|
73
|
+
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=wqYW4bWcf12m0U2njR995lySSesFvnHB-eSkPWz-QdM,2501
|
|
74
|
+
flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=xHGF38i7oFpvnFvqfqLdtc08CkHRYsenbLz3q1dhCXk,2020
|
|
75
|
+
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=fdDhwmPoMirJ095cU_vFCBf0ILQlAoa1fdnHb2LM1yk,1471
|
|
76
|
+
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=PAjPT2v06sBZxacNiyMJloDwocCK5tFcGQmMXOoBqc8,1542
|
|
77
|
+
flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=Kb_O2iQfzwc6FTy3fWqtQYc3FwY6x9SUgQPGqZR_ILg,1409
|
|
78
|
+
flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=SE4H23OFkQbqNU64nYf38igqrT4cJGA7XxEtSnNxJqg,1490
|
|
79
|
+
flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl,sha256=docQbs3MuRR-yT24lVz7N2sQL3Sj49EHuOCuRj_0djQ,1508
|
|
80
|
+
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=apauU_PUmLEbt2rjckKniEbzdRs1EnMri_qgtHtBJZ8,1484
|
|
81
|
+
flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=LQpDKJTEnRKj5Ygn5FkT44SxlnLVprkPlbrGaFf5Q50,1508
|
|
82
|
+
flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl,sha256=504pHibNRGFe-DLnzqHLYhKeF_n8BPMv0Xog5EfnZ0M,1661
|
|
83
|
+
flwr/cli/pull.py,sha256=dHiMe6x8w8yRoFNKpjA-eiPD6eFiHz4Vah5HZrqNpuo,3364
|
|
79
84
|
flwr/cli/run/__init__.py,sha256=RPyB7KbYTFl6YRiilCch6oezxrLQrl1kijV7BMGkLbA,790
|
|
80
85
|
flwr/cli/run/run.py,sha256=ECa0kup9dn15O70H74QdgUsEaeErbzDqVX_U0zZO5IM,8173
|
|
81
86
|
flwr/cli/stop.py,sha256=TR9F61suTxNUzGIktUdoBhXwdRtCdvzGhy3qCuvcfBg,5000
|
|
82
|
-
flwr/cli/utils.py,sha256=
|
|
87
|
+
flwr/cli/utils.py,sha256=sMctnDYHv-zu9FG67aV0vy_zs3gkkXclQicBD_67WWg,13805
|
|
83
88
|
flwr/client/__init__.py,sha256=boIhKaK6I977zrILmoTutNx94x5jB0e6F1gnAjaRJnI,1250
|
|
84
89
|
flwr/client/client.py,sha256=3HAchxvknKG9jYbB7swNyDj-e5vUWDuMKoLvbT7jCVM,7895
|
|
85
90
|
flwr/client/client_app.py,sha256=zVhi-l3chAb06ozFsKwix3hU_RpOLjST13Ha50AVIPE,16918
|
|
@@ -108,15 +113,17 @@ flwr/client/rest_client/connection.py,sha256=fyiS1aXTv71jWczx7mSco94LYJTBXgTF-p2
|
|
|
108
113
|
flwr/client/run_info_store.py,sha256=MaJ3UQ-07hWtK67wnWu0zR29jrk0fsfgJX506dvEOfE,4042
|
|
109
114
|
flwr/client/typing.py,sha256=Jw3rawDzI_-ZDcRmEQcs5gZModY7oeQlEeltYsdOhlU,1048
|
|
110
115
|
flwr/clientapp/__init__.py,sha256=uoTjvIynfGvMhsmc7iYK-5qJ0AdKKjCbx7WTKc0KeSk,828
|
|
111
|
-
flwr/clientapp/mod/__init__.py,sha256=
|
|
112
|
-
flwr/clientapp/mod/centraldp_mods.py,sha256=
|
|
116
|
+
flwr/clientapp/mod/__init__.py,sha256=w18mDPUmjlm5P_er2GJ7l6Zbh8qyiHfMKoVqXxaTxdE,1024
|
|
117
|
+
flwr/clientapp/mod/centraldp_mods.py,sha256=bL2NMxbin9nj2OYSHbuOvIPk0rKH6xyAxG-pbtP9ISY,8954
|
|
118
|
+
flwr/clientapp/mod/localdp_mod.py,sha256=L3kQK3kjc-vwlhJcBwFIK6EiwBYlpHQkv4jiR7K9abQ,5642
|
|
119
|
+
flwr/clientapp/typing.py,sha256=x1GvXWy112RqZh27liJqz-yZ7SSCOwiOSmAQsUxk9MY,853
|
|
113
120
|
flwr/common/__init__.py,sha256=5GCLVk399Az_rTJHNticRlL0Sl_oPw_j5_LuFKfX7-M,4171
|
|
114
121
|
flwr/common/address.py,sha256=9JucdTwlc-jpeJkRKeUboZoacUtErwSVtnDR9kAtLqE,4119
|
|
115
122
|
flwr/common/args.py,sha256=Nq2u4yePbkSY0CWFamn0hZY6Rms8G1xYDeDGIcLIITE,5849
|
|
116
123
|
flwr/common/auth_plugin/__init__.py,sha256=DktrRcGZrRarLf7Jb_UlHtOyLp9_-kEplyq6PS5-vOA,988
|
|
117
124
|
flwr/common/auth_plugin/auth_plugin.py,sha256=mM7SuphO4OsVAVJR1GErYVgYT83ZjxDzS_gha12bT9E,4855
|
|
118
125
|
flwr/common/config.py,sha256=glcZDjco-amw1YfQcYTFJ4S1pt9APoexT-mf1QscuHs,13960
|
|
119
|
-
flwr/common/constant.py,sha256=
|
|
126
|
+
flwr/common/constant.py,sha256=y3yKgr1UxAWveUkw29z8KM2hKsZJqhHUqPPhKQeef80,9045
|
|
120
127
|
flwr/common/context.py,sha256=Be8obQR_OvEDy1OmshuUKxGRQ7Qx89mf5F4xlhkR10s,2407
|
|
121
128
|
flwr/common/date.py,sha256=1ZT2cRSpC2DJqprOVTLXYCR_O2_OZR0zXO_brJ3LqWc,1554
|
|
122
129
|
flwr/common/differential_privacy.py,sha256=FdlpdpPl_H_2HJa8CQM1iCUGBBQ5Dc8CzxmHERM-EoE,6148
|
|
@@ -126,7 +133,7 @@ flwr/common/event_log_plugin/__init__.py,sha256=ts3VAL3Fk6Grp1EK_1Qg_V-BfOof9F86
|
|
|
126
133
|
flwr/common/event_log_plugin/event_log_plugin.py,sha256=4SkVa1Ic-sPlICJShBuggXmXDcQtWQ1KDby4kthFNF0,2064
|
|
127
134
|
flwr/common/exit/__init__.py,sha256=8W7xaO1iw0vacgmQW7FTFbSh7csNv6XfsgIlnIbNF6U,978
|
|
128
135
|
flwr/common/exit/exit.py,sha256=DcXJfbpW1g-pQJqSZmps-1MZydd7T7RaarghIf2e4tU,3636
|
|
129
|
-
flwr/common/exit/exit_code.py,sha256=
|
|
136
|
+
flwr/common/exit/exit_code.py,sha256=Xa1NFGny2cefZ62kZZOfT8eii__PolMWCHxYmxoSQ2s,5416
|
|
130
137
|
flwr/common/exit/exit_handler.py,sha256=uzDdWwhKgc1w5csZS52b86kjmEApmDZKwMn_X0zDZZo,2126
|
|
131
138
|
flwr/common/exit/signal_handler.py,sha256=wqxykrwgmpFzmEMhpnlM7RtO0PnqIvYiSB1qYahZ5Sk,3710
|
|
132
139
|
flwr/common/grpc.py,sha256=nHnFC7E84pZVTvd6BhcSYWnGd0jf8t5UmGea04qvilM,9806
|
|
@@ -147,7 +154,7 @@ flwr/common/record/configrecord.py,sha256=G7U0q39kB0Kyi0zMxFmPxcVemL9NgwVS1qjvI4
|
|
|
147
154
|
flwr/common/record/conversion_utils.py,sha256=wbNCzy7oAqaA3-arhls_EqRZYXRC4YrWIoE-Gy82fJ0,1191
|
|
148
155
|
flwr/common/record/metricrecord.py,sha256=KOyJjJbvFV6IwBPbgm92FZ_0_hXpMHuwfCi1rh5Zddk,8954
|
|
149
156
|
flwr/common/record/recorddict.py,sha256=p7hBimFpKM1XKUe6OAkR_7pYGzGL_EwUJUvJ8odZEcY,14986
|
|
150
|
-
flwr/common/record/typeddict.py,sha256=
|
|
157
|
+
flwr/common/record/typeddict.py,sha256=NkHvzTEiicrLstryvTb-2O-sMvtsLgsOjAbostSf1z0,4102
|
|
151
158
|
flwr/common/recorddict_compat.py,sha256=D5SqXWkqBddn5b6K_5UoH7aZ11UaN3lDTlzvHx3-rqk,14119
|
|
152
159
|
flwr/common/retry_invoker.py,sha256=uQeDcgoTgmFwhJ0mkDE2eNz2acF9eShaqMOO5boGrPQ,15285
|
|
153
160
|
flwr/common/secure_aggregation/__init__.py,sha256=MgW6uHGhyFLBAYQqa1Vzs5n2Gc0d4yEw1_NmerFir70,731
|
|
@@ -181,10 +188,10 @@ flwr/proto/clientappio_pb2.py,sha256=vJjzwWydhg7LruK8cvRAeVQeHPsJztgdIW9nyiPBZF0
|
|
|
181
188
|
flwr/proto/clientappio_pb2.pyi,sha256=XbFvpZvvrS7QcH5AFXfpRGl4hQvhd3QdKO6x0oTlCCU,165
|
|
182
189
|
flwr/proto/clientappio_pb2_grpc.py,sha256=iobNROP0qvn5zddx7k-uIi_dJWP3T_BRp_kbKq086i8,17550
|
|
183
190
|
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=
|
|
191
|
+
flwr/proto/control_pb2.py,sha256=Sz7PTdb7YGBs2N-FX6GiOVueY9PN0cF85XbwBkK9_BE,6183
|
|
192
|
+
flwr/proto/control_pb2.pyi,sha256=2OLPt6ztVcLzzISqfRqW4yrA-nawIPLwVDoTjBnSS5U,10592
|
|
193
|
+
flwr/proto/control_pb2_grpc.py,sha256=R4ykPqGblqEpOdVskoSfMeS-pZdyMT3CMBQUtTzHbgQ,12282
|
|
194
|
+
flwr/proto/control_pb2_grpc.pyi,sha256=7U9aOP4dYamnc4ZtTrEQEYYz0kFNI_fT88LRxwClA0U,3504
|
|
188
195
|
flwr/proto/error_pb2.py,sha256=PQVWrfjVPo88ql_KgV9nCxyQNCcV9PVfmcw7sOzTMro,1084
|
|
189
196
|
flwr/proto/error_pb2.pyi,sha256=ZNH4HhJTU_KfMXlyCeg8FwU-fcUYxTqEmoJPtWtHikc,734
|
|
190
197
|
flwr/proto/error_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
@@ -239,7 +246,7 @@ flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPc
|
|
|
239
246
|
flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
|
|
240
247
|
flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
241
248
|
flwr/server/__init__.py,sha256=LQQHiuL2jy7TpNaKastRdGsexlxSt5ZWAQNVqitDnrY,1598
|
|
242
|
-
flwr/server/app.py,sha256=
|
|
249
|
+
flwr/server/app.py,sha256=SUWdNUcl-Sy8h2MiC8Etr50GDJuGq58Ekqtr5XQ-Xrg,29951
|
|
243
250
|
flwr/server/client_manager.py,sha256=5jCGavVli7XdupvWWo7ru3PdFTlRU8IGvHFSSoUVLRs,6227
|
|
244
251
|
flwr/server/client_proxy.py,sha256=sv0E9AldBYOvc3pusqFh-GnyreeMfsXQ1cuTtxTq_wY,2399
|
|
245
252
|
flwr/server/compat/__init__.py,sha256=0IsttWvY15qO98_1GyzVC-vR1e_ZPXOdu2qUlOkYMPE,886
|
|
@@ -330,32 +337,42 @@ flwr/server/workflow/secure_aggregation/__init__.py,sha256=vGkycLb65CxdaMkKsANxQ
|
|
|
330
337
|
flwr/server/workflow/secure_aggregation/secagg_workflow.py,sha256=b_pKk7gmbahwyj0ftOOLXvu-AMtRHEc82N9PJTEO8dc,5839
|
|
331
338
|
flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=DkayCsnlAya6Y2PZsueLgoUCMRtV-GbnW08RfWx_SXM,29460
|
|
332
339
|
flwr/serverapp/__init__.py,sha256=ZujKNXULwhWYQhFnxOOT5Wi9MRq2JCWFhAAj7ouiQ78,884
|
|
333
|
-
flwr/serverapp/dp_fixed_clipping.py,sha256=wbP4W7CaUHXdll8ZSVUnTBSEWrnWM00CGk63rOR-Q2s,12133
|
|
334
340
|
flwr/serverapp/exception.py,sha256=5cuH-2AafvihzosWDdDjuMmHdDqZ1XxHvCqZXNBVklw,1334
|
|
335
|
-
flwr/serverapp/strategy/__init__.py,sha256=
|
|
336
|
-
flwr/serverapp/strategy/
|
|
337
|
-
flwr/serverapp/strategy/
|
|
338
|
-
flwr/serverapp/strategy/
|
|
339
|
-
flwr/serverapp/strategy/
|
|
341
|
+
flwr/serverapp/strategy/__init__.py,sha256=dezK2TKSffjjBVXW18ATRxJLTuQ7I2M1dPuNi5y-_6c,1968
|
|
342
|
+
flwr/serverapp/strategy/bulyan.py,sha256=lSFOZof5NDzDFS6206rp6V_08LsitSHIHOOckcLt4_E,9306
|
|
343
|
+
flwr/serverapp/strategy/dp_adaptive_clipping.py,sha256=mssiVGMgfJw8DeP6_pBSZUKWmaXvYeG-B-p7RSt2tAU,13600
|
|
344
|
+
flwr/serverapp/strategy/dp_fixed_clipping.py,sha256=C_faT0ggzeUB2bGv_r1Vss-fv7-UhDrpmfiHATESI0w,12832
|
|
345
|
+
flwr/serverapp/strategy/fedadagrad.py,sha256=faFsuKZziPTCLeNrJOyKbPTNo-1xrIZOz7SWT5rdjJs,6269
|
|
346
|
+
flwr/serverapp/strategy/fedadam.py,sha256=NsY_V6TGFAfCeA9vmqaLpvB_T5siJEtKozKGdxJssAI,7064
|
|
347
|
+
flwr/serverapp/strategy/fedavg.py,sha256=Bq_nlmngzJbjqX1fF1mevXGVN6-pwglHv-6yNrs6lkA,12035
|
|
348
|
+
flwr/serverapp/strategy/fedavgm.py,sha256=FtFmBGLzuUQ_7JWk85Xh19d8sP0YDwqczGTliGzZyGs,8333
|
|
349
|
+
flwr/serverapp/strategy/fedmedian.py,sha256=yhGg6WGWYEbn3oYMfnCBm1F7v9u5LHYVsSAYvdI9Pns,4498
|
|
340
350
|
flwr/serverapp/strategy/fedopt.py,sha256=kqT0uV2IUE93O72XEVa1JJo61dcwbZEoT9KmYTjR2tE,8477
|
|
341
|
-
flwr/serverapp/strategy/
|
|
351
|
+
flwr/serverapp/strategy/fedprox.py,sha256=J1KrcE5DFko6i4608iICv1G0t9MPXspjibPd-SF_HT8,7028
|
|
352
|
+
flwr/serverapp/strategy/fedtrimmedavg.py,sha256=58xDPc_YO41QM8jXn0gZ79PFzO8zo3Mh3UlkF0UBbIA,7168
|
|
353
|
+
flwr/serverapp/strategy/fedxgb_bagging.py,sha256=QAnsQXTE1qzj1qGkZ8mCOfmSKJ2pO_gG9YgmJH-EV6s,5189
|
|
354
|
+
flwr/serverapp/strategy/fedxgb_cyclic.py,sha256=yedhRJ7dEz-Yi5yEiS9zki_LKHPHAk962PWCYLLDLoY,8752
|
|
355
|
+
flwr/serverapp/strategy/fedyogi.py,sha256=Y9RFBQaNch3fPgGXF7OfnTH6eOpavZxpMWxWVIC9_SY,6579
|
|
356
|
+
flwr/serverapp/strategy/krum.py,sha256=kcy8TQuJC_qkYJ7jtn26lx2VYYBHlQC_LjNWOuCw9ZQ,4848
|
|
357
|
+
flwr/serverapp/strategy/multikrum.py,sha256=bv44TzMQHh1NEp3ilt0ANoR5xHJ4kpb0qxzSzXD_lx0,9865
|
|
358
|
+
flwr/serverapp/strategy/qfedavg.py,sha256=EM1tO_ovkybOBeW-h1PYX0lszCUAVHT6hUpwXykAEps,10204
|
|
342
359
|
flwr/serverapp/strategy/result.py,sha256=E0Hl2VLnZAgQJjE2GDoKsK7JX-kPPU2KXc47Axt6hGw,4295
|
|
343
360
|
flwr/serverapp/strategy/strategy.py,sha256=8uJGGm1ROLZERQ_dkRS7Z_rs-yK6XCE0UxXtIdFiEWk,10789
|
|
344
|
-
flwr/serverapp/strategy/strategy_utils.py,sha256=
|
|
345
|
-
flwr/serverapp/strategy/strategy_utils_tests.py,sha256=o32XHujd9PLCB-YZMI2AttWLlvUXHe9yuxgiCrCkpgU,10209
|
|
361
|
+
flwr/serverapp/strategy/strategy_utils.py,sha256=hiwS7k-Hx6_c4NZXoKpHucS5CBKb7f8GppXRBSMt3Us,10851
|
|
346
362
|
flwr/simulation/__init__.py,sha256=Gg6OsP1Z-ixc3-xxzvl7j7rz2Fijy9rzyEPpxgAQCeM,1556
|
|
347
|
-
flwr/simulation/app.py,sha256=
|
|
363
|
+
flwr/simulation/app.py,sha256=b_bDyZFwBf2zpKs37Vmd5cFJSzDRE0fL-8uqA0UkAv4,10393
|
|
348
364
|
flwr/simulation/legacy_app.py,sha256=nMISQqW0otJL1-2Kfd94O6BLlGS2IEmEPKTM2WGKrIs,15861
|
|
349
365
|
flwr/simulation/ray_transport/__init__.py,sha256=ogd-0AMv2U-wBZ1r3sHWaDIOIrVqr88Xi6C8o4Dviy0,734
|
|
350
366
|
flwr/simulation/ray_transport/ray_actor.py,sha256=JN3xTqFIr5Z750k92CcA_uavzOHhSWDwE2WCaecvpks,19147
|
|
351
367
|
flwr/simulation/ray_transport/ray_client_proxy.py,sha256=2kVUDrJe2ViOJEuB0v_Xb3XUwK9yKNwDwrYQXTJDdco,7506
|
|
352
368
|
flwr/simulation/ray_transport/utils.py,sha256=KrexpWYCF-dAF3UHc9yDbPQWO-ahMT-BbD8nURLgiHk,2393
|
|
353
|
-
flwr/simulation/run_simulation.py,sha256
|
|
369
|
+
flwr/simulation/run_simulation.py,sha256=LrM5iI0Rf_QqrnqvJ1muKxKFlrInA3I8-SF-uIIsPik,20666
|
|
354
370
|
flwr/simulation/simulationio_connection.py,sha256=mzS1C6EEREwQDPceDo30anAasmTDLb9qqV2tXlBhOUA,3494
|
|
355
371
|
flwr/supercore/__init__.py,sha256=pqkFoow_E6UhbBlhmoD1gmTH-33yJRhBsIZqxRPFZ7U,755
|
|
356
372
|
flwr/supercore/app_utils.py,sha256=K76Zt6R670b1hUmxOsNc1WUCVYvF7lejXPcCO9K0Q0g,1753
|
|
357
373
|
flwr/supercore/cli/__init__.py,sha256=EDl2aO-fuQfxSbL-T1W9RAfA2N0hpWHmqX_GSwblJbQ,845
|
|
358
|
-
flwr/supercore/cli/flower_superexec.py,sha256=
|
|
374
|
+
flwr/supercore/cli/flower_superexec.py,sha256=JtqYrEWVu3BxLkjavsdohTOwvMwzuFqWP5j4Mo9dqsk,6155
|
|
375
|
+
flwr/supercore/constant.py,sha256=F9kRjisedaZcoyGvUITSDmIG12QDSCpo2LlM_l-q6jM,820
|
|
359
376
|
flwr/supercore/corestate/__init__.py,sha256=Vau6-L_JG5QzNqtCTa9xCKGGljc09wY8avZmIjSJemg,774
|
|
360
377
|
flwr/supercore/corestate/corestate.py,sha256=rDAWWeG5DcpCyQso9Z3RhwL4zr2IroPlRMcDzqoSu8s,2328
|
|
361
378
|
flwr/supercore/ffs/__init__.py,sha256=U3KXwG_SplEvchat27K0LYPoPHzh-cwwT_NHsGlYMt8,908
|
|
@@ -376,18 +393,20 @@ flwr/supercore/superexec/__init__.py,sha256=XKX208hZ6a9gZ4KT9kMqfpCtp_8VGxekzKFf
|
|
|
376
393
|
flwr/supercore/superexec/plugin/__init__.py,sha256=GNwq8uNdE8RB7ywEFRAvKjLFzgS3YXgz39-HBGsemWw,1035
|
|
377
394
|
flwr/supercore/superexec/plugin/base_exec_plugin.py,sha256=fL-Ufc9Dp56OhWOzNSJUc7HumbkuSDYqZKwde2opG4g,2074
|
|
378
395
|
flwr/supercore/superexec/plugin/clientapp_exec_plugin.py,sha256=9FT6ufEqV5K9g4FaAB9lVDbIv-VCH5LcxT4YKy23roE,1035
|
|
379
|
-
flwr/supercore/superexec/plugin/exec_plugin.py,sha256=
|
|
396
|
+
flwr/supercore/superexec/plugin/exec_plugin.py,sha256=4WtCQ4bsuFRlfCbg91ZcPAsX8htrCCo_fFh1DKo3cCQ,2764
|
|
380
397
|
flwr/supercore/superexec/plugin/serverapp_exec_plugin.py,sha256=IwRzdPV-cSKwrP2krGh0De4IkAuxsmgK0WU6J-2GXqM,1035
|
|
381
398
|
flwr/supercore/superexec/plugin/simulation_exec_plugin.py,sha256=upn5zE-YKkl_jTw8RzmeyQ58PU_UAlQ7CqnBXXdng8I,1060
|
|
382
|
-
flwr/supercore/superexec/run_superexec.py,sha256=
|
|
399
|
+
flwr/supercore/superexec/run_superexec.py,sha256=JiwKq9s_WPpk0S9MSi1lIgMZU120NOZLf4GlObHzI_k,7217
|
|
383
400
|
flwr/supercore/utils.py,sha256=ebuHMbeA8eXisX0oMPqBK3hk7uVnIE_yiqWVz8YbkpQ,1324
|
|
384
401
|
flwr/superlink/__init__.py,sha256=GNSuJ4-N6Z8wun2iZNlXqENt5beUyzC0Gi_tN396bbM,707
|
|
402
|
+
flwr/superlink/artifact_provider/__init__.py,sha256=pgZEcVPKRE874LSu3cgy0HbwSJBIpVy_HxQOmne4PAs,810
|
|
403
|
+
flwr/superlink/artifact_provider/artifact_provider.py,sha256=Gnlg2M2SOqCruji2B0U3ov68NJWKin9scmnWJTiSnNA,1267
|
|
385
404
|
flwr/superlink/servicer/__init__.py,sha256=ZC-kILcUGeh6IxJsfu24cTzUqIGXmQfEKsGfhsnhBpM,717
|
|
386
405
|
flwr/superlink/servicer/control/__init__.py,sha256=qhUTMt_Mg4lxslCJYn5hDSrA-lXf5ya3617BT8kR-2Y,803
|
|
387
406
|
flwr/superlink/servicer/control/control_event_log_interceptor.py,sha256=HauUd7Xq-b1TFZmZVl9wpBITfDttn8-1_KhlEq-HJ8M,5966
|
|
388
|
-
flwr/superlink/servicer/control/control_grpc.py,sha256=
|
|
407
|
+
flwr/superlink/servicer/control/control_grpc.py,sha256=BYm2QELbUAV_mHr0K-ZU726jjgoFXTo4M0-C6MXFzTg,4244
|
|
389
408
|
flwr/superlink/servicer/control/control_license_interceptor.py,sha256=T3AzmRt-PPwyTq3hrdpmZHQd5_CpPOk7TtnFZrB-JRY,3349
|
|
390
|
-
flwr/superlink/servicer/control/control_servicer.py,sha256=
|
|
409
|
+
flwr/superlink/servicer/control/control_servicer.py,sha256=zY1ARksabr776eLQDy48wDmEx9t-VXTOnHq1h5Mt61U,16143
|
|
391
410
|
flwr/superlink/servicer/control/control_user_auth_interceptor.py,sha256=9Aqhrt_UX80FXbIQVXUrqDHs5rD5CA7vEn0Bh-zPiYU,6232
|
|
392
411
|
flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
|
|
393
412
|
flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
|
|
@@ -403,7 +422,7 @@ flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca
|
|
|
403
422
|
flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
|
|
404
423
|
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=nIHRu38EWK-rpNOkcgBRAAKwYQQWFeCwu0lkO7OPZGQ,10239
|
|
405
424
|
flwr/supernode/start_client_internal.py,sha256=Y9S1-QlO2WP6eo4JvWzIpfaCoh2aoE7bjEYyxNNnlyg,20777
|
|
406
|
-
flwr-1.
|
|
407
|
-
flwr-1.
|
|
408
|
-
flwr-1.
|
|
409
|
-
flwr-1.
|
|
425
|
+
flwr-1.22.0.dist-info/METADATA,sha256=EHDVbi_cohl_3vebYXd3-eznZ3Y358A_muSWoPo329E,14539
|
|
426
|
+
flwr-1.22.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
427
|
+
flwr-1.22.0.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
|
|
428
|
+
flwr-1.22.0.dist-info/RECORD,,
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
"""$project_name: A Flower / $framework_str app."""
|
|
2
|
-
|
|
3
|
-
import torch
|
|
4
|
-
from flwr.app import ArrayRecord, Context, Message, MetricRecord, RecordDict
|
|
5
|
-
from flwr.clientapp import ClientApp
|
|
6
|
-
|
|
7
|
-
from $import_name.task import Net, load_data
|
|
8
|
-
from $import_name.task import test as test_fn
|
|
9
|
-
from $import_name.task import train as train_fn
|
|
10
|
-
|
|
11
|
-
# Flower ClientApp
|
|
12
|
-
app = ClientApp()
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
@app.train()
|
|
16
|
-
def train(msg: Message, context: Context):
|
|
17
|
-
"""Train the model on local data."""
|
|
18
|
-
|
|
19
|
-
# Load the model and initialize it with the received weights
|
|
20
|
-
model = Net()
|
|
21
|
-
model.load_state_dict(msg.content["arrays"].to_torch_state_dict())
|
|
22
|
-
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
|
23
|
-
model.to(device)
|
|
24
|
-
|
|
25
|
-
# Load the data
|
|
26
|
-
partition_id = context.node_config["partition-id"]
|
|
27
|
-
num_partitions = context.node_config["num-partitions"]
|
|
28
|
-
trainloader, _ = load_data(partition_id, num_partitions)
|
|
29
|
-
|
|
30
|
-
# Call the training function
|
|
31
|
-
train_loss = train_fn(
|
|
32
|
-
model,
|
|
33
|
-
trainloader,
|
|
34
|
-
context.run_config["local-epochs"],
|
|
35
|
-
msg.content["config"]["lr"],
|
|
36
|
-
device,
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
# Construct and return reply Message
|
|
40
|
-
model_record = ArrayRecord(model.state_dict())
|
|
41
|
-
metrics = {
|
|
42
|
-
"train_loss": train_loss,
|
|
43
|
-
"num-examples": len(trainloader.dataset),
|
|
44
|
-
}
|
|
45
|
-
metric_record = MetricRecord(metrics)
|
|
46
|
-
content = RecordDict({"arrays": model_record, "metrics": metric_record})
|
|
47
|
-
return Message(content=content, reply_to=msg)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
@app.evaluate()
|
|
51
|
-
def evaluate(msg: Message, context: Context):
|
|
52
|
-
"""Evaluate the model on local data."""
|
|
53
|
-
|
|
54
|
-
# Load the model and initialize it with the received weights
|
|
55
|
-
model = Net()
|
|
56
|
-
model.load_state_dict(msg.content["arrays"].to_torch_state_dict())
|
|
57
|
-
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
|
58
|
-
model.to(device)
|
|
59
|
-
|
|
60
|
-
# Load the data
|
|
61
|
-
partition_id = context.node_config["partition-id"]
|
|
62
|
-
num_partitions = context.node_config["num-partitions"]
|
|
63
|
-
_, valloader = load_data(partition_id, num_partitions)
|
|
64
|
-
|
|
65
|
-
# Call the evaluation function
|
|
66
|
-
eval_loss, eval_acc = test_fn(
|
|
67
|
-
model,
|
|
68
|
-
valloader,
|
|
69
|
-
device,
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
# Construct and return reply Message
|
|
73
|
-
metrics = {
|
|
74
|
-
"eval_loss": eval_loss,
|
|
75
|
-
"eval_acc": eval_acc,
|
|
76
|
-
"num-examples": len(valloader.dataset),
|
|
77
|
-
}
|
|
78
|
-
metric_record = MetricRecord(metrics)
|
|
79
|
-
content = RecordDict({"metrics": metric_record})
|
|
80
|
-
return Message(content=content, reply_to=msg)
|