flwr-nightly 1.9.0.dev20240426__py3-none-any.whl → 1.9.0.dev20240430__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of flwr-nightly might be problematic. Click here for more details.
- flwr/client/__init__.py +1 -1
- flwr/client/app.py +17 -93
- flwr/client/grpc_rere_client/client_interceptor.py +9 -1
- flwr/client/supernode/__init__.py +2 -0
- flwr/client/supernode/app.py +166 -4
- flwr/common/logger.py +26 -0
- flwr/common/message.py +72 -82
- flwr/common/record/recordset.py +5 -4
- flwr/common/secure_aggregation/crypto/symmetric_encryption.py +15 -0
- flwr/server/app.py +105 -1
- flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +3 -1
- flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +174 -0
- flwr/simulation/app.py +16 -1
- flwr/simulation/run_simulation.py +3 -0
- {flwr_nightly-1.9.0.dev20240426.dist-info → flwr_nightly-1.9.0.dev20240430.dist-info}/METADATA +1 -1
- {flwr_nightly-1.9.0.dev20240426.dist-info → flwr_nightly-1.9.0.dev20240430.dist-info}/RECORD +19 -18
- {flwr_nightly-1.9.0.dev20240426.dist-info → flwr_nightly-1.9.0.dev20240430.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.9.0.dev20240426.dist-info → flwr_nightly-1.9.0.dev20240430.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.9.0.dev20240426.dist-info → flwr_nightly-1.9.0.dev20240430.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Copyright 2024 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 server interceptor."""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
import base64
|
|
19
|
+
from logging import INFO
|
|
20
|
+
from typing import Any, Callable, Sequence, Set, Tuple, Union
|
|
21
|
+
|
|
22
|
+
import grpc
|
|
23
|
+
from cryptography.hazmat.primitives.asymmetric import ec
|
|
24
|
+
|
|
25
|
+
from flwr.common.logger import log
|
|
26
|
+
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
|
27
|
+
bytes_to_public_key,
|
|
28
|
+
generate_shared_key,
|
|
29
|
+
public_key_to_bytes,
|
|
30
|
+
verify_hmac,
|
|
31
|
+
)
|
|
32
|
+
from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
|
33
|
+
CreateNodeRequest,
|
|
34
|
+
CreateNodeResponse,
|
|
35
|
+
DeleteNodeRequest,
|
|
36
|
+
DeleteNodeResponse,
|
|
37
|
+
GetRunRequest,
|
|
38
|
+
GetRunResponse,
|
|
39
|
+
PingRequest,
|
|
40
|
+
PingResponse,
|
|
41
|
+
PullTaskInsRequest,
|
|
42
|
+
PullTaskInsResponse,
|
|
43
|
+
PushTaskResRequest,
|
|
44
|
+
PushTaskResResponse,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
_PUBLIC_KEY_HEADER = "public-key"
|
|
48
|
+
_AUTH_TOKEN_HEADER = "auth-token"
|
|
49
|
+
|
|
50
|
+
Request = Union[
|
|
51
|
+
CreateNodeRequest,
|
|
52
|
+
DeleteNodeRequest,
|
|
53
|
+
PullTaskInsRequest,
|
|
54
|
+
PushTaskResRequest,
|
|
55
|
+
GetRunRequest,
|
|
56
|
+
PingRequest,
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
Response = Union[
|
|
60
|
+
CreateNodeResponse,
|
|
61
|
+
DeleteNodeResponse,
|
|
62
|
+
PullTaskInsResponse,
|
|
63
|
+
PushTaskResResponse,
|
|
64
|
+
GetRunResponse,
|
|
65
|
+
PingResponse,
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _get_value_from_tuples(
|
|
70
|
+
key_string: str, tuples: Sequence[Tuple[str, Union[str, bytes]]]
|
|
71
|
+
) -> bytes:
|
|
72
|
+
value = next((value for key, value in tuples if key == key_string), "")
|
|
73
|
+
if isinstance(value, str):
|
|
74
|
+
return value.encode()
|
|
75
|
+
|
|
76
|
+
return value
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
|
|
80
|
+
"""Server interceptor for client authentication."""
|
|
81
|
+
|
|
82
|
+
def __init__(
|
|
83
|
+
self,
|
|
84
|
+
client_public_keys: Set[bytes],
|
|
85
|
+
private_key: ec.EllipticCurvePrivateKey,
|
|
86
|
+
public_key: ec.EllipticCurvePublicKey,
|
|
87
|
+
):
|
|
88
|
+
self.server_private_key = private_key
|
|
89
|
+
self.client_public_keys = client_public_keys
|
|
90
|
+
self.encoded_server_public_key = base64.urlsafe_b64encode(
|
|
91
|
+
public_key_to_bytes(public_key)
|
|
92
|
+
)
|
|
93
|
+
log(
|
|
94
|
+
INFO,
|
|
95
|
+
"Client authentication enabled with %d known public keys",
|
|
96
|
+
len(client_public_keys),
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
def intercept_service(
|
|
100
|
+
self,
|
|
101
|
+
continuation: Callable[[Any], Any],
|
|
102
|
+
handler_call_details: grpc.HandlerCallDetails,
|
|
103
|
+
) -> grpc.RpcMethodHandler:
|
|
104
|
+
"""Flower server interceptor authentication logic.
|
|
105
|
+
|
|
106
|
+
Intercept all unary calls from clients and authenticate clients by validating
|
|
107
|
+
auth metadata sent by the client. Continue RPC call if client is authenticated,
|
|
108
|
+
else, terminate RPC call by setting context to abort.
|
|
109
|
+
"""
|
|
110
|
+
# One of the method handlers in
|
|
111
|
+
# `flwr.server.superlink.fleet.grpc_rere.fleet_server.FleetServicer`
|
|
112
|
+
method_handler: grpc.RpcMethodHandler = continuation(handler_call_details)
|
|
113
|
+
return self._generic_auth_unary_method_handler(method_handler)
|
|
114
|
+
|
|
115
|
+
def _generic_auth_unary_method_handler(
|
|
116
|
+
self, method_handler: grpc.RpcMethodHandler
|
|
117
|
+
) -> grpc.RpcMethodHandler:
|
|
118
|
+
def _generic_method_handler(
|
|
119
|
+
request: Request,
|
|
120
|
+
context: grpc.ServicerContext,
|
|
121
|
+
) -> Response:
|
|
122
|
+
client_public_key_bytes = base64.urlsafe_b64decode(
|
|
123
|
+
_get_value_from_tuples(
|
|
124
|
+
_PUBLIC_KEY_HEADER, context.invocation_metadata()
|
|
125
|
+
)
|
|
126
|
+
)
|
|
127
|
+
is_public_key_known = client_public_key_bytes in self.client_public_keys
|
|
128
|
+
if not is_public_key_known:
|
|
129
|
+
context.abort(grpc.StatusCode.UNAUTHENTICATED, "Access denied")
|
|
130
|
+
|
|
131
|
+
if isinstance(request, CreateNodeRequest):
|
|
132
|
+
context.send_initial_metadata(
|
|
133
|
+
(
|
|
134
|
+
(
|
|
135
|
+
_PUBLIC_KEY_HEADER,
|
|
136
|
+
self.encoded_server_public_key,
|
|
137
|
+
),
|
|
138
|
+
)
|
|
139
|
+
)
|
|
140
|
+
elif isinstance(
|
|
141
|
+
request,
|
|
142
|
+
(
|
|
143
|
+
DeleteNodeRequest,
|
|
144
|
+
PullTaskInsRequest,
|
|
145
|
+
PushTaskResRequest,
|
|
146
|
+
GetRunRequest,
|
|
147
|
+
PingRequest,
|
|
148
|
+
),
|
|
149
|
+
):
|
|
150
|
+
hmac_value = base64.urlsafe_b64decode(
|
|
151
|
+
_get_value_from_tuples(
|
|
152
|
+
_AUTH_TOKEN_HEADER, context.invocation_metadata()
|
|
153
|
+
)
|
|
154
|
+
)
|
|
155
|
+
client_public_key = bytes_to_public_key(client_public_key_bytes)
|
|
156
|
+
shared_secret = generate_shared_key(
|
|
157
|
+
self.server_private_key,
|
|
158
|
+
client_public_key,
|
|
159
|
+
)
|
|
160
|
+
verify = verify_hmac(
|
|
161
|
+
shared_secret, request.SerializeToString(True), hmac_value
|
|
162
|
+
)
|
|
163
|
+
if not verify:
|
|
164
|
+
context.abort(grpc.StatusCode.UNAUTHENTICATED, "Access denied")
|
|
165
|
+
else:
|
|
166
|
+
context.abort(grpc.StatusCode.UNAUTHENTICATED, "Access denied")
|
|
167
|
+
|
|
168
|
+
return method_handler.unary_unary(request, context) # type: ignore
|
|
169
|
+
|
|
170
|
+
return grpc.unary_unary_rpc_method_handler(
|
|
171
|
+
_generic_method_handler,
|
|
172
|
+
request_deserializer=method_handler.request_deserializer,
|
|
173
|
+
response_serializer=method_handler.response_serializer,
|
|
174
|
+
)
|
flwr/simulation/app.py
CHANGED
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
"""Flower simulation app."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
import asyncio
|
|
19
|
+
import logging
|
|
18
20
|
import sys
|
|
19
21
|
import threading
|
|
20
22
|
import traceback
|
|
@@ -27,7 +29,7 @@ from ray.util.scheduling_strategies import NodeAffinitySchedulingStrategy
|
|
|
27
29
|
|
|
28
30
|
from flwr.client import ClientFn
|
|
29
31
|
from flwr.common import EventType, event
|
|
30
|
-
from flwr.common.logger import log
|
|
32
|
+
from flwr.common.logger import log, set_logger_propagation
|
|
31
33
|
from flwr.server.client_manager import ClientManager
|
|
32
34
|
from flwr.server.history import History
|
|
33
35
|
from flwr.server.server import Server, init_defaults, run_fl
|
|
@@ -156,6 +158,7 @@ def start_simulation(
|
|
|
156
158
|
is an advanced feature. For all details, please refer to the Ray documentation:
|
|
157
159
|
https://docs.ray.io/en/latest/ray-core/scheduling/index.html
|
|
158
160
|
|
|
161
|
+
|
|
159
162
|
Returns
|
|
160
163
|
-------
|
|
161
164
|
hist : flwr.server.history.History
|
|
@@ -167,6 +170,18 @@ def start_simulation(
|
|
|
167
170
|
{"num_clients": len(clients_ids) if clients_ids is not None else num_clients},
|
|
168
171
|
)
|
|
169
172
|
|
|
173
|
+
# Set logger propagation
|
|
174
|
+
loop: Optional[asyncio.AbstractEventLoop] = None
|
|
175
|
+
try:
|
|
176
|
+
loop = asyncio.get_running_loop()
|
|
177
|
+
except RuntimeError:
|
|
178
|
+
loop = None
|
|
179
|
+
finally:
|
|
180
|
+
if loop and loop.is_running():
|
|
181
|
+
# Set logger propagation to False to prevent duplicated log output in Colab.
|
|
182
|
+
logger = logging.getLogger("flwr")
|
|
183
|
+
_ = set_logger_propagation(logger, False)
|
|
184
|
+
|
|
170
185
|
# Initialize server and server config
|
|
171
186
|
initialized_server, initialized_config = init_defaults(
|
|
172
187
|
server=server,
|
|
@@ -28,6 +28,7 @@ import grpc
|
|
|
28
28
|
|
|
29
29
|
from flwr.client import ClientApp
|
|
30
30
|
from flwr.common import EventType, event, log
|
|
31
|
+
from flwr.common.logger import set_logger_propagation
|
|
31
32
|
from flwr.common.typing import ConfigsRecordValues
|
|
32
33
|
from flwr.server.driver import Driver, GrpcDriver
|
|
33
34
|
from flwr.server.run_serverapp import run
|
|
@@ -364,6 +365,8 @@ def _run_simulation(
|
|
|
364
365
|
|
|
365
366
|
finally:
|
|
366
367
|
if run_in_thread:
|
|
368
|
+
# Set logger propagation to False to prevent duplicated log output in Colab.
|
|
369
|
+
logger = set_logger_propagation(logger, False)
|
|
367
370
|
log(DEBUG, "Starting Simulation Engine on a new thread.")
|
|
368
371
|
simulation_engine_th = threading.Thread(target=_main_loop, args=args)
|
|
369
372
|
simulation_engine_th.start()
|
{flwr_nightly-1.9.0.dev20240426.dist-info → flwr_nightly-1.9.0.dev20240430.dist-info}/RECORD
RENAMED
|
@@ -27,15 +27,15 @@ flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=BJvyU78wnym8R7kh
|
|
|
27
27
|
flwr/cli/run/__init__.py,sha256=oCd6HmQDx-sqver1gecgx-uMA38BLTSiiKpl7RGNceg,789
|
|
28
28
|
flwr/cli/run/run.py,sha256=jr_J7Cbcyuj1MXIbuwU86htHdFI7XogsBrdGl7P4aYY,2334
|
|
29
29
|
flwr/cli/utils.py,sha256=px-M-IlBLu6Ez-Sc9tWhsJRjWurRaZTmxB9ASz8wurk,4119
|
|
30
|
-
flwr/client/__init__.py,sha256=
|
|
31
|
-
flwr/client/app.py,sha256=
|
|
30
|
+
flwr/client/__init__.py,sha256=CivBxRFjK6gXHN5kUUf9UaZQHa_NHlEM867WWB-H0D8,1268
|
|
31
|
+
flwr/client/app.py,sha256=rzfaHiXxrtjwyhHrHb3epRD6NNw07YzL5DoZO6eW7RA,22313
|
|
32
32
|
flwr/client/client.py,sha256=Vp9UkOkoHdNfn6iMYZsj_5m_GICiFfUlKEVaLad-YhM,8183
|
|
33
33
|
flwr/client/client_app.py,sha256=-Cs0084tLQUoBCeYZdG2KgU7cjp95_ZJ4MfjoaN4Fzk,8636
|
|
34
34
|
flwr/client/dpfedavg_numpy_client.py,sha256=9Tnig4iml2J88HBKNahegjXjbfvIQyBtaIQaqjbeqsA,7435
|
|
35
35
|
flwr/client/grpc_client/__init__.py,sha256=LsnbqXiJhgQcB0XzAlUQgPx011Uf7Y7yabIC1HxivJ8,735
|
|
36
36
|
flwr/client/grpc_client/connection.py,sha256=KWbBwuvn1-2wjrAKteydGCZC_7A2zmEjk3DycQWafrA,8993
|
|
37
37
|
flwr/client/grpc_rere_client/__init__.py,sha256=avn6W_vHEM_yZEB1S7hCZgnTbXb6ZujqRP_vAzyXu-0,752
|
|
38
|
-
flwr/client/grpc_rere_client/client_interceptor.py,sha256=
|
|
38
|
+
flwr/client/grpc_rere_client/client_interceptor.py,sha256=rDBXRVo-d-rflxJ6Kw3eDfBmvChdUHkzRw5eP-bpe6Y,4903
|
|
39
39
|
flwr/client/grpc_rere_client/connection.py,sha256=gSSJJ9pSe5SgUb1Ey-xcrVK6xArUkwq0yGdav0h2kww,9597
|
|
40
40
|
flwr/client/heartbeat.py,sha256=cx37mJBH8LyoIN4Lks85wtqT1mnU5GulQnr4pGCvAq0,2404
|
|
41
41
|
flwr/client/message_handler/__init__.py,sha256=abHvBRJJiiaAMNgeILQbMOa6h8WqMK2BcnvxwQZFpic,719
|
|
@@ -54,8 +54,8 @@ flwr/client/node_state_tests.py,sha256=gPwz0zf2iuDSa11jedkur_u3Xm7lokIDG5ALD2MCv
|
|
|
54
54
|
flwr/client/numpy_client.py,sha256=u76GWAdHmJM88Agm2EgLQSvO8Jnk225mJTk-_TmPjFE,10283
|
|
55
55
|
flwr/client/rest_client/__init__.py,sha256=ThwOnkMdzxo_UuyTI47Q7y9oSpuTgNT2OuFvJCfuDiw,735
|
|
56
56
|
flwr/client/rest_client/connection.py,sha256=MspqM5RjrQe09_2BUEEVGstA5x9Qz_RWdXXraOic3i8,11520
|
|
57
|
-
flwr/client/supernode/__init__.py,sha256=
|
|
58
|
-
flwr/client/supernode/app.py,sha256=
|
|
57
|
+
flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
|
|
58
|
+
flwr/client/supernode/app.py,sha256=6OWaD_4ZfguN6sukDfhbZzCgDmsSqHPlAmtcyU6TfJQ,9052
|
|
59
59
|
flwr/client/typing.py,sha256=c9EvjlEjasxn1Wqx6bGl6Xg6vM1gMFfmXht-E2i5J-k,1006
|
|
60
60
|
flwr/common/__init__.py,sha256=dHOptgKxna78CEQLD5Yu0QIsoSgpIIw5AhIUZCHDWAU,3721
|
|
61
61
|
flwr/common/address.py,sha256=iTAN9jtmIGMrWFnx9XZQl45ZEtQJVZZLYPRBSNVARGI,1882
|
|
@@ -67,8 +67,8 @@ flwr/common/differential_privacy_constants.py,sha256=c7b7tqgvT7yMK0XN9ndiTBs4mQf
|
|
|
67
67
|
flwr/common/dp.py,sha256=Hc3lLHihjexbJaD_ft31gdv9XRcwOTgDBwJzICuok3A,2004
|
|
68
68
|
flwr/common/exit_handlers.py,sha256=2Nt0wLhc17KQQsLPFSRAjjhUiEFfJK6tNozdGiIY4Fs,2812
|
|
69
69
|
flwr/common/grpc.py,sha256=Yx_YFK24cU4U81RpXrdVwEVY_jTy4RE19cHtBxE2XOE,2460
|
|
70
|
-
flwr/common/logger.py,sha256=
|
|
71
|
-
flwr/common/message.py,sha256=
|
|
70
|
+
flwr/common/logger.py,sha256=s1ZTh6nCeGZh0MxbCG8zHYZAeQ9JNDpw8k6qtxSCCzM,6920
|
|
71
|
+
flwr/common/message.py,sha256=78SN-HZpqbsnap5JFbdnmqR1dL0juK1zDRiixg3Jbl4,12686
|
|
72
72
|
flwr/common/object_ref.py,sha256=ELoUCAFO-vbjJC41CGpa-WBG2SLYe3ErW-d9YCG3zqA,4961
|
|
73
73
|
flwr/common/parameter.py,sha256=-bFAUayToYDF50FZGrBC1hQYJCQDtB2bbr3ZuVLMtdE,2095
|
|
74
74
|
flwr/common/pyproject.py,sha256=EI_ovbCHGmhYrdPx0RSDi5EkFZFof-8m1PA54c0ZTjc,1385
|
|
@@ -77,14 +77,14 @@ flwr/common/record/configsrecord.py,sha256=VKeFEYa6cneyStqQlUOaKj12by5ZI_NXYR25L
|
|
|
77
77
|
flwr/common/record/conversion_utils.py,sha256=n3I3SI2P6hUjyxbWNc0QAch-SEhfMK6Hm-UUaplAlUc,1393
|
|
78
78
|
flwr/common/record/metricsrecord.py,sha256=Yv99oRa3LzFgSfwl903S8sB8rAgr3Sv6i6ovW7pdHsA,3923
|
|
79
79
|
flwr/common/record/parametersrecord.py,sha256=WSqtRrYvI-mRzkEwv5s-EG-yE5uizJ8zy9aczwRG-1E,4849
|
|
80
|
-
flwr/common/record/recordset.py,sha256=
|
|
80
|
+
flwr/common/record/recordset.py,sha256=ZIDX_ZMpSRwFyD9PZQBDSM_UhRzzafgna8hDJj-egZ4,4533
|
|
81
81
|
flwr/common/record/typeddict.py,sha256=2NW8JF27p1uNWaqDbJ7bMkItA5x4ygYT8aHrf8NaqnE,3879
|
|
82
82
|
flwr/common/recordset_compat.py,sha256=BjxeuvlCaP94yIiKOyFFTRBUH_lprFWSLo8U8q3BDbs,13798
|
|
83
83
|
flwr/common/retry_invoker.py,sha256=dQY5fPIKhy9OiFswZhLxA9fB455u-DYCvDVcFJmrPDk,11707
|
|
84
84
|
flwr/common/secure_aggregation/__init__.py,sha256=29nHIUO2L8-KhNHQ2KmIgRo_4CPkq4LgLCUN0on5FgI,731
|
|
85
85
|
flwr/common/secure_aggregation/crypto/__init__.py,sha256=dz7pVx2aPrHxr_AwgO5mIiTzu4PcvUxRq9NLBbFcsf8,738
|
|
86
86
|
flwr/common/secure_aggregation/crypto/shamir.py,sha256=yY35ZgHlB4YyGW_buG-1X-0M-ejXuQzISgYLgC_Z9TY,2792
|
|
87
|
-
flwr/common/secure_aggregation/crypto/symmetric_encryption.py,sha256=
|
|
87
|
+
flwr/common/secure_aggregation/crypto/symmetric_encryption.py,sha256=zlACMLahJEIqhcss0-1xz_iCXUGTlL2G-i9hi8spu-8,4707
|
|
88
88
|
flwr/common/secure_aggregation/ndarrays_arithmetic.py,sha256=66mNQCz64r7qzvXwFrXP6zz7YMi8EkTOABN7KulkKc4,3026
|
|
89
89
|
flwr/common/secure_aggregation/quantization.py,sha256=appui7GGrkRPsupF59TkapeV4Na_CyPi73JtJ1pimdI,2310
|
|
90
90
|
flwr/common/secure_aggregation/secaggplus_constants.py,sha256=Fh7-n6pgL4TUnHpNYXo8iW-n5cOGQgQa-c7RcU80tqQ,2183
|
|
@@ -124,7 +124,7 @@ flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPc
|
|
|
124
124
|
flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
|
|
125
125
|
flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
126
|
flwr/server/__init__.py,sha256=dNLbXIERZ6X9aA_Bit3R9AARwcaZZzEfDuFmEx8VVOE,1785
|
|
127
|
-
flwr/server/app.py,sha256=
|
|
127
|
+
flwr/server/app.py,sha256=W5AzN9Gg3nQVnekXgCOzpN3dlpP3T-oh-N2ugdfuF7o,28282
|
|
128
128
|
flwr/server/client_manager.py,sha256=T8UDSRJBVD3fyIDI7NTAA-NA7GPrMNNgH2OAF54RRxE,6127
|
|
129
129
|
flwr/server/client_proxy.py,sha256=4G-oTwhb45sfWLx2uZdcXD98IZwdTS6F88xe3akCdUg,2399
|
|
130
130
|
flwr/server/compat/__init__.py,sha256=VxnJtJyOjNFQXMNi9hIuzNlZM5n0Hj1p3aq_Pm2udw4,892
|
|
@@ -174,9 +174,10 @@ flwr/server/superlink/fleet/grpc_bidi/__init__.py,sha256=mgGJGjwT6VU7ovC1gdnnqtt
|
|
|
174
174
|
flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py,sha256=57b3UL5-baGdLwgCtB0dCUTTSbmmfMAXcXV5bjPZNWQ,5993
|
|
175
175
|
flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=LSOmabFXAQxKycQOliplKmigbmVwdm-D4CI-hJ0Pav0,6458
|
|
176
176
|
flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=kuD7R1yB1Ite0sNfvjsrnZu83LWGk8fP-yihE1mjQm0,4887
|
|
177
|
-
flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=
|
|
177
|
+
flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=_zWknjP7CRjwLDvofzmv1QoSI8Qq1cZC5nNw9nkSS7I,11932
|
|
178
178
|
flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=bEJOMWbSlqkw-y5ZHtEXczhoSlAxErcRYffmTMQAV8M,758
|
|
179
179
|
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=YGn1IPpuX-6NDgaG1UbyREbI9iAyKDimZuNeWxbG6s0,3387
|
|
180
|
+
flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=3EuoVOb5pXrN52XlDGjEfJdXYmcfFunZeYYMlDlu7ug,5902
|
|
180
181
|
flwr/server/superlink/fleet/message_handler/__init__.py,sha256=hEY0l61ojH8Iz30_K1btm1HJ6J49iZJSFUsVYqUTw3A,731
|
|
181
182
|
flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=lG3BkiONcikDVowK0An06V7p2SNkwGbWE5hfN2xlsZw,3622
|
|
182
183
|
flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=VKDvDq5H8koOUztpmQacVzGJXPLEEkL1Vmolxt3mvnY,735
|
|
@@ -203,14 +204,14 @@ flwr/server/workflow/secure_aggregation/__init__.py,sha256=3XlgDOjD_hcukTGl6Bc1B
|
|
|
203
204
|
flwr/server/workflow/secure_aggregation/secagg_workflow.py,sha256=wpAkYPId0nfK6SgpUAtsCni4_MQLd-uqJ81tUKu3xlI,5838
|
|
204
205
|
flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=BRqhlnVe8CYNoUvb_KCfRXay02NTT6a-pCrMaOqAxGc,29038
|
|
205
206
|
flwr/simulation/__init__.py,sha256=hpoKzdovrH0_Cf8HIcXxQxyUUb3BiSk-WUNLf5STHcc,1400
|
|
206
|
-
flwr/simulation/app.py,sha256=
|
|
207
|
+
flwr/simulation/app.py,sha256=Fjq3krpzx9GUW1oYLHPn_Wq2tzjyqVBa9bxRbtuNVBQ,14380
|
|
207
208
|
flwr/simulation/ray_transport/__init__.py,sha256=FsaAnzC4cw4DqoouBCix6496k29jACkfeIam55BvW9g,734
|
|
208
209
|
flwr/simulation/ray_transport/ray_actor.py,sha256=_wv2eP7qxkCZ-6rMyYWnjLrGPBZRxjvTPjaVk8zIaQ4,19367
|
|
209
210
|
flwr/simulation/ray_transport/ray_client_proxy.py,sha256=oDu4sEPIOu39vrNi-fqDAe10xtNUXMO49bM2RWfRcyw,6738
|
|
210
211
|
flwr/simulation/ray_transport/utils.py,sha256=TYdtfg1P9VfTdLMOJlifInGpxWHYs9UfUqIv2wfkRLA,2392
|
|
211
|
-
flwr/simulation/run_simulation.py,sha256=
|
|
212
|
-
flwr_nightly-1.9.0.
|
|
213
|
-
flwr_nightly-1.9.0.
|
|
214
|
-
flwr_nightly-1.9.0.
|
|
215
|
-
flwr_nightly-1.9.0.
|
|
216
|
-
flwr_nightly-1.9.0.
|
|
212
|
+
flwr/simulation/run_simulation.py,sha256=jSzL7vZJ6Cg76yAyuWt7X8WzwkZ26krpurRAIHXhrNk,15896
|
|
213
|
+
flwr_nightly-1.9.0.dev20240430.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
214
|
+
flwr_nightly-1.9.0.dev20240430.dist-info/METADATA,sha256=2a9zRPdWPIMNrE6-zIuOfaygal8wUPe-hDQfhLrRxjk,15260
|
|
215
|
+
flwr_nightly-1.9.0.dev20240430.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
216
|
+
flwr_nightly-1.9.0.dev20240430.dist-info/entry_points.txt,sha256=DBrrf685V2W9NbbchQwvuqBEpj5ik8tMZNoZg_W2bZY,363
|
|
217
|
+
flwr_nightly-1.9.0.dev20240430.dist-info/RECORD,,
|
{flwr_nightly-1.9.0.dev20240426.dist-info → flwr_nightly-1.9.0.dev20240430.dist-info}/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|