flwr-nightly 1.10.0.dev20240711__py3-none-any.whl → 1.10.0.dev20240712__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/app.py +37 -11
- flwr/client/grpc_adapter_client/connection.py +1 -1
- flwr/client/grpc_client/connection.py +1 -1
- flwr/client/grpc_rere_client/connection.py +3 -2
- flwr/client/node_state.py +8 -3
- flwr/client/node_state_tests.py +1 -1
- flwr/client/rest_client/connection.py +4 -3
- flwr/client/supernode/app.py +13 -7
- flwr/common/config.py +3 -3
- flwr/common/context.py +13 -2
- flwr/server/compat/legacy_context.py +1 -1
- flwr/server/run_serverapp.py +3 -1
- flwr/server/superlink/fleet/vce/vce_api.py +3 -1
- flwr/simulation/ray_transport/ray_client_proxy.py +3 -1
- flwr/superexec/app.py +3 -3
- {flwr_nightly-1.10.0.dev20240711.dist-info → flwr_nightly-1.10.0.dev20240712.dist-info}/METADATA +1 -1
- {flwr_nightly-1.10.0.dev20240711.dist-info → flwr_nightly-1.10.0.dev20240712.dist-info}/RECORD +20 -20
- {flwr_nightly-1.10.0.dev20240711.dist-info → flwr_nightly-1.10.0.dev20240712.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.10.0.dev20240711.dist-info → flwr_nightly-1.10.0.dev20240712.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.10.0.dev20240711.dist-info → flwr_nightly-1.10.0.dev20240712.dist-info}/entry_points.txt +0 -0
flwr/client/app.py
CHANGED
|
@@ -18,7 +18,7 @@ import signal
|
|
|
18
18
|
import sys
|
|
19
19
|
import time
|
|
20
20
|
from dataclasses import dataclass
|
|
21
|
-
from logging import
|
|
21
|
+
from logging import ERROR, INFO, WARN
|
|
22
22
|
from pathlib import Path
|
|
23
23
|
from typing import Callable, ContextManager, Dict, Optional, Tuple, Type, Union
|
|
24
24
|
|
|
@@ -160,6 +160,7 @@ def start_client(
|
|
|
160
160
|
event(EventType.START_CLIENT_ENTER)
|
|
161
161
|
_start_client_internal(
|
|
162
162
|
server_address=server_address,
|
|
163
|
+
node_config={},
|
|
163
164
|
load_client_app_fn=None,
|
|
164
165
|
client_fn=client_fn,
|
|
165
166
|
client=client,
|
|
@@ -181,6 +182,7 @@ def start_client(
|
|
|
181
182
|
def _start_client_internal(
|
|
182
183
|
*,
|
|
183
184
|
server_address: str,
|
|
185
|
+
node_config: Dict[str, str],
|
|
184
186
|
load_client_app_fn: Optional[Callable[[str, str], ClientApp]] = None,
|
|
185
187
|
client_fn: Optional[ClientFnExt] = None,
|
|
186
188
|
client: Optional[Client] = None,
|
|
@@ -193,7 +195,6 @@ def _start_client_internal(
|
|
|
193
195
|
] = None,
|
|
194
196
|
max_retries: Optional[int] = None,
|
|
195
197
|
max_wait_time: Optional[float] = None,
|
|
196
|
-
partition_id: Optional[int] = None,
|
|
197
198
|
flwr_dir: Optional[Path] = None,
|
|
198
199
|
) -> None:
|
|
199
200
|
"""Start a Flower client node which connects to a Flower server.
|
|
@@ -204,6 +205,8 @@ def _start_client_internal(
|
|
|
204
205
|
The IPv4 or IPv6 address of the server. If the Flower
|
|
205
206
|
server runs on the same machine on port 8080, then `server_address`
|
|
206
207
|
would be `"[::]:8080"`.
|
|
208
|
+
node_config: Dict[str, str]
|
|
209
|
+
The configuration of the node.
|
|
207
210
|
load_client_app_fn : Optional[Callable[[], ClientApp]] (default: None)
|
|
208
211
|
A function that can be used to load a `ClientApp` instance.
|
|
209
212
|
client_fn : Optional[ClientFnExt]
|
|
@@ -238,9 +241,6 @@ def _start_client_internal(
|
|
|
238
241
|
The maximum duration before the client stops trying to
|
|
239
242
|
connect to the server in case of connection error.
|
|
240
243
|
If set to None, there is no limit to the total time.
|
|
241
|
-
partition_id: Optional[int] (default: None)
|
|
242
|
-
The data partition index associated with this node. Better suited for
|
|
243
|
-
prototyping purposes.
|
|
244
244
|
flwr_dir: Optional[Path] (default: None)
|
|
245
245
|
The fully resolved path containing installed Flower Apps.
|
|
246
246
|
"""
|
|
@@ -295,7 +295,7 @@ def _start_client_internal(
|
|
|
295
295
|
log(WARN, "Connection attempt failed, retrying...")
|
|
296
296
|
else:
|
|
297
297
|
log(
|
|
298
|
-
|
|
298
|
+
WARN,
|
|
299
299
|
"Connection attempt failed, retrying in %.2f seconds",
|
|
300
300
|
retry_state.actual_wait,
|
|
301
301
|
)
|
|
@@ -319,7 +319,9 @@ def _start_client_internal(
|
|
|
319
319
|
on_backoff=_on_backoff,
|
|
320
320
|
)
|
|
321
321
|
|
|
322
|
-
|
|
322
|
+
# NodeState gets initialized when the first connection is established
|
|
323
|
+
node_state: Optional[NodeState] = None
|
|
324
|
+
|
|
323
325
|
runs: Dict[int, Run] = {}
|
|
324
326
|
|
|
325
327
|
while not app_state_tracker.interrupt:
|
|
@@ -334,9 +336,33 @@ def _start_client_internal(
|
|
|
334
336
|
) as conn:
|
|
335
337
|
receive, send, create_node, delete_node, get_run = conn
|
|
336
338
|
|
|
337
|
-
# Register node
|
|
338
|
-
if
|
|
339
|
-
create_node
|
|
339
|
+
# Register node when connecting the first time
|
|
340
|
+
if node_state is None:
|
|
341
|
+
if create_node is None:
|
|
342
|
+
if transport not in ["grpc-bidi", None]:
|
|
343
|
+
raise NotImplementedError(
|
|
344
|
+
"All transports except `grpc-bidi` require "
|
|
345
|
+
"an implementation for `create_node()`.'"
|
|
346
|
+
)
|
|
347
|
+
# gRPC-bidi doesn't have the concept of node_id,
|
|
348
|
+
# so we set it to -1
|
|
349
|
+
node_state = NodeState(
|
|
350
|
+
node_id=-1,
|
|
351
|
+
node_config={},
|
|
352
|
+
partition_id=None,
|
|
353
|
+
)
|
|
354
|
+
else:
|
|
355
|
+
# Call create_node fn to register node
|
|
356
|
+
node_id: Optional[int] = ( # pylint: disable=assignment-from-none
|
|
357
|
+
create_node()
|
|
358
|
+
) # pylint: disable=not-callable
|
|
359
|
+
if node_id is None:
|
|
360
|
+
raise ValueError("Node registration failed")
|
|
361
|
+
node_state = NodeState(
|
|
362
|
+
node_id=node_id,
|
|
363
|
+
node_config=node_config,
|
|
364
|
+
partition_id=None,
|
|
365
|
+
)
|
|
340
366
|
|
|
341
367
|
app_state_tracker.register_signal_handler()
|
|
342
368
|
while not app_state_tracker.interrupt:
|
|
@@ -580,7 +606,7 @@ def _init_connection(transport: Optional[str], server_address: str) -> Tuple[
|
|
|
580
606
|
Tuple[
|
|
581
607
|
Callable[[], Optional[Message]],
|
|
582
608
|
Callable[[Message], None],
|
|
583
|
-
Optional[Callable[[],
|
|
609
|
+
Optional[Callable[[], Optional[int]]],
|
|
584
610
|
Optional[Callable[[], None]],
|
|
585
611
|
Optional[Callable[[int], Run]],
|
|
586
612
|
]
|
|
@@ -44,7 +44,7 @@ def grpc_adapter( # pylint: disable=R0913
|
|
|
44
44
|
Tuple[
|
|
45
45
|
Callable[[], Optional[Message]],
|
|
46
46
|
Callable[[Message], None],
|
|
47
|
-
Optional[Callable[[],
|
|
47
|
+
Optional[Callable[[], Optional[int]]],
|
|
48
48
|
Optional[Callable[[], None]],
|
|
49
49
|
Optional[Callable[[int], Run]],
|
|
50
50
|
]
|
|
@@ -72,7 +72,7 @@ def grpc_connection( # pylint: disable=R0913, R0915
|
|
|
72
72
|
Tuple[
|
|
73
73
|
Callable[[], Optional[Message]],
|
|
74
74
|
Callable[[Message], None],
|
|
75
|
-
Optional[Callable[[],
|
|
75
|
+
Optional[Callable[[], Optional[int]]],
|
|
76
76
|
Optional[Callable[[], None]],
|
|
77
77
|
Optional[Callable[[int], Run]],
|
|
78
78
|
]
|
|
@@ -79,7 +79,7 @@ def grpc_request_response( # pylint: disable=R0913, R0914, R0915
|
|
|
79
79
|
Tuple[
|
|
80
80
|
Callable[[], Optional[Message]],
|
|
81
81
|
Callable[[Message], None],
|
|
82
|
-
Optional[Callable[[],
|
|
82
|
+
Optional[Callable[[], Optional[int]]],
|
|
83
83
|
Optional[Callable[[], None]],
|
|
84
84
|
Optional[Callable[[int], Run]],
|
|
85
85
|
]
|
|
@@ -176,7 +176,7 @@ def grpc_request_response( # pylint: disable=R0913, R0914, R0915
|
|
|
176
176
|
if not ping_stop_event.is_set():
|
|
177
177
|
ping_stop_event.wait(next_interval)
|
|
178
178
|
|
|
179
|
-
def create_node() ->
|
|
179
|
+
def create_node() -> Optional[int]:
|
|
180
180
|
"""Set create_node."""
|
|
181
181
|
# Call FleetAPI
|
|
182
182
|
create_node_request = CreateNodeRequest(ping_interval=PING_DEFAULT_INTERVAL)
|
|
@@ -189,6 +189,7 @@ def grpc_request_response( # pylint: disable=R0913, R0914, R0915
|
|
|
189
189
|
nonlocal node, ping_thread
|
|
190
190
|
node = cast(Node, create_node_response.node)
|
|
191
191
|
ping_thread = start_ping_loop(ping, ping_stop_event)
|
|
192
|
+
return node.node_id
|
|
192
193
|
|
|
193
194
|
def delete_node() -> None:
|
|
194
195
|
"""Set delete_node."""
|
flwr/client/node_state.py
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
from dataclasses import dataclass
|
|
19
19
|
from pathlib import Path
|
|
20
|
-
from typing import
|
|
20
|
+
from typing import Dict, Optional
|
|
21
21
|
|
|
22
22
|
from flwr.common import Context, RecordSet
|
|
23
23
|
from flwr.common.config import get_fused_config
|
|
@@ -35,8 +35,11 @@ class RunInfo:
|
|
|
35
35
|
class NodeState:
|
|
36
36
|
"""State of a node where client nodes execute runs."""
|
|
37
37
|
|
|
38
|
-
def __init__(
|
|
39
|
-
self
|
|
38
|
+
def __init__(
|
|
39
|
+
self, node_id: int, node_config: Dict[str, str], partition_id: Optional[int]
|
|
40
|
+
) -> None:
|
|
41
|
+
self.node_id = node_id
|
|
42
|
+
self.node_config = node_config
|
|
40
43
|
self.run_infos: Dict[int, RunInfo] = {}
|
|
41
44
|
self._partition_id = partition_id
|
|
42
45
|
|
|
@@ -52,6 +55,8 @@ class NodeState:
|
|
|
52
55
|
self.run_infos[run_id] = RunInfo(
|
|
53
56
|
initial_run_config=initial_run_config,
|
|
54
57
|
context=Context(
|
|
58
|
+
node_id=self.node_id,
|
|
59
|
+
node_config=self.node_config,
|
|
55
60
|
state=RecordSet(),
|
|
56
61
|
run_config=initial_run_config.copy(),
|
|
57
62
|
partition_id=self._partition_id,
|
flwr/client/node_state_tests.py
CHANGED
|
@@ -41,7 +41,7 @@ def test_multirun_in_node_state() -> None:
|
|
|
41
41
|
expected_values = {0: "1", 1: "1" * 3, 2: "1" * 2, 3: "1", 5: "1"}
|
|
42
42
|
|
|
43
43
|
# NodeState
|
|
44
|
-
node_state = NodeState(partition_id=None)
|
|
44
|
+
node_state = NodeState(node_id=0, node_config={}, partition_id=None)
|
|
45
45
|
|
|
46
46
|
for task in tasks:
|
|
47
47
|
run_id = task.run_id
|
|
@@ -90,7 +90,7 @@ def http_request_response( # pylint: disable=,R0913, R0914, R0915
|
|
|
90
90
|
Tuple[
|
|
91
91
|
Callable[[], Optional[Message]],
|
|
92
92
|
Callable[[Message], None],
|
|
93
|
-
Optional[Callable[[],
|
|
93
|
+
Optional[Callable[[], Optional[int]]],
|
|
94
94
|
Optional[Callable[[], None]],
|
|
95
95
|
Optional[Callable[[int], Run]],
|
|
96
96
|
]
|
|
@@ -237,19 +237,20 @@ def http_request_response( # pylint: disable=,R0913, R0914, R0915
|
|
|
237
237
|
if not ping_stop_event.is_set():
|
|
238
238
|
ping_stop_event.wait(next_interval)
|
|
239
239
|
|
|
240
|
-
def create_node() ->
|
|
240
|
+
def create_node() -> Optional[int]:
|
|
241
241
|
"""Set create_node."""
|
|
242
242
|
req = CreateNodeRequest(ping_interval=PING_DEFAULT_INTERVAL)
|
|
243
243
|
|
|
244
244
|
# Send the request
|
|
245
245
|
res = _request(req, CreateNodeResponse, PATH_CREATE_NODE)
|
|
246
246
|
if res is None:
|
|
247
|
-
return
|
|
247
|
+
return None
|
|
248
248
|
|
|
249
249
|
# Remember the node and the ping-loop thread
|
|
250
250
|
nonlocal node, ping_thread
|
|
251
251
|
node = res.node
|
|
252
252
|
ping_thread = start_ping_loop(ping, ping_stop_event)
|
|
253
|
+
return node.node_id
|
|
253
254
|
|
|
254
255
|
def delete_node() -> None:
|
|
255
256
|
"""Set delete_node."""
|
flwr/client/supernode/app.py
CHANGED
|
@@ -29,7 +29,12 @@ from cryptography.hazmat.primitives.serialization import (
|
|
|
29
29
|
|
|
30
30
|
from flwr.client.client_app import ClientApp, LoadClientAppError
|
|
31
31
|
from flwr.common import EventType, event
|
|
32
|
-
from flwr.common.config import
|
|
32
|
+
from flwr.common.config import (
|
|
33
|
+
get_flwr_dir,
|
|
34
|
+
get_project_config,
|
|
35
|
+
get_project_dir,
|
|
36
|
+
parse_config_args,
|
|
37
|
+
)
|
|
33
38
|
from flwr.common.constant import (
|
|
34
39
|
TRANSPORT_TYPE_GRPC_ADAPTER,
|
|
35
40
|
TRANSPORT_TYPE_GRPC_RERE,
|
|
@@ -67,7 +72,7 @@ def run_supernode() -> None:
|
|
|
67
72
|
authentication_keys=authentication_keys,
|
|
68
73
|
max_retries=args.max_retries,
|
|
69
74
|
max_wait_time=args.max_wait_time,
|
|
70
|
-
|
|
75
|
+
node_config=parse_config_args(args.node_config),
|
|
71
76
|
flwr_dir=get_flwr_dir(args.flwr_dir),
|
|
72
77
|
)
|
|
73
78
|
|
|
@@ -93,6 +98,7 @@ def run_client_app() -> None:
|
|
|
93
98
|
|
|
94
99
|
_start_client_internal(
|
|
95
100
|
server_address=args.superlink,
|
|
101
|
+
node_config=parse_config_args(args.node_config),
|
|
96
102
|
load_client_app_fn=load_fn,
|
|
97
103
|
transport=args.transport,
|
|
98
104
|
root_certificates=root_certificates,
|
|
@@ -389,11 +395,11 @@ def _parse_args_common(parser: argparse.ArgumentParser) -> None:
|
|
|
389
395
|
help="The SuperNode's public key (as a path str) to enable authentication.",
|
|
390
396
|
)
|
|
391
397
|
parser.add_argument(
|
|
392
|
-
"--
|
|
393
|
-
type=
|
|
394
|
-
help="
|
|
395
|
-
"
|
|
396
|
-
"
|
|
398
|
+
"--node-config",
|
|
399
|
+
type=str,
|
|
400
|
+
help="A comma separated list of key/value pairs (separated by `=`) to "
|
|
401
|
+
"configure the SuperNode. "
|
|
402
|
+
"E.g. --node-config 'key1=\"value1\",partition-id=0,num-partitions=100'",
|
|
397
403
|
)
|
|
398
404
|
|
|
399
405
|
|
flwr/common/config.py
CHANGED
|
@@ -121,16 +121,16 @@ def flatten_dict(raw_dict: Dict[str, Any], parent_key: str = "") -> Dict[str, st
|
|
|
121
121
|
|
|
122
122
|
|
|
123
123
|
def parse_config_args(
|
|
124
|
-
|
|
124
|
+
config: Optional[str],
|
|
125
125
|
separator: str = ",",
|
|
126
126
|
) -> Dict[str, str]:
|
|
127
127
|
"""Parse separator separated list of key-value pairs separated by '='."""
|
|
128
128
|
overrides: Dict[str, str] = {}
|
|
129
129
|
|
|
130
|
-
if
|
|
130
|
+
if config is None:
|
|
131
131
|
return overrides
|
|
132
132
|
|
|
133
|
-
overrides_list =
|
|
133
|
+
overrides_list = config.split(separator)
|
|
134
134
|
if (
|
|
135
135
|
len(overrides_list) == 1
|
|
136
136
|
and "=" not in overrides_list
|
flwr/common/context.py
CHANGED
|
@@ -27,6 +27,11 @@ class Context:
|
|
|
27
27
|
|
|
28
28
|
Parameters
|
|
29
29
|
----------
|
|
30
|
+
node_id : int
|
|
31
|
+
The ID that identifies the node.
|
|
32
|
+
node_config : Dict[str, str]
|
|
33
|
+
A config (key/value mapping) unique to the node and independent of the
|
|
34
|
+
`run_config`. This config persists across all runs this node participates in.
|
|
30
35
|
state : RecordSet
|
|
31
36
|
Holds records added by the entity in a given run and that will stay local.
|
|
32
37
|
This means that the data it holds will never leave the system it's running from.
|
|
@@ -44,16 +49,22 @@ class Context:
|
|
|
44
49
|
simulation or proto typing setups.
|
|
45
50
|
"""
|
|
46
51
|
|
|
52
|
+
node_id: int
|
|
53
|
+
node_config: Dict[str, str]
|
|
47
54
|
state: RecordSet
|
|
48
|
-
partition_id: Optional[int]
|
|
49
55
|
run_config: Dict[str, str]
|
|
56
|
+
partition_id: Optional[int]
|
|
50
57
|
|
|
51
|
-
def __init__(
|
|
58
|
+
def __init__( # pylint: disable=too-many-arguments
|
|
52
59
|
self,
|
|
60
|
+
node_id: int,
|
|
61
|
+
node_config: Dict[str, str],
|
|
53
62
|
state: RecordSet,
|
|
54
63
|
run_config: Dict[str, str],
|
|
55
64
|
partition_id: Optional[int] = None,
|
|
56
65
|
) -> None:
|
|
66
|
+
self.node_id = node_id
|
|
67
|
+
self.node_config = node_config
|
|
57
68
|
self.state = state
|
|
58
69
|
self.run_config = run_config
|
|
59
70
|
self.partition_id = partition_id
|
flwr/server/run_serverapp.py
CHANGED
|
@@ -78,7 +78,9 @@ def run(
|
|
|
78
78
|
server_app = _load()
|
|
79
79
|
|
|
80
80
|
# Initialize Context
|
|
81
|
-
context = Context(
|
|
81
|
+
context = Context(
|
|
82
|
+
node_id=0, node_config={}, state=RecordSet(), run_config=server_app_run_config
|
|
83
|
+
)
|
|
82
84
|
|
|
83
85
|
# Call ServerApp
|
|
84
86
|
server_app(driver=driver, context=context)
|
|
@@ -284,7 +284,9 @@ def start_vce(
|
|
|
284
284
|
# Construct mapping of NodeStates
|
|
285
285
|
node_states: Dict[int, NodeState] = {}
|
|
286
286
|
for node_id, partition_id in nodes_mapping.items():
|
|
287
|
-
node_states[node_id] = NodeState(
|
|
287
|
+
node_states[node_id] = NodeState(
|
|
288
|
+
node_id=node_id, node_config={}, partition_id=partition_id
|
|
289
|
+
)
|
|
288
290
|
|
|
289
291
|
# Load backend config
|
|
290
292
|
log(DEBUG, "Supported backends: %s", list(supported_backends.keys()))
|
|
@@ -59,7 +59,9 @@ class RayActorClientProxy(ClientProxy):
|
|
|
59
59
|
|
|
60
60
|
self.app_fn = _load_app
|
|
61
61
|
self.actor_pool = actor_pool
|
|
62
|
-
self.proxy_state = NodeState(
|
|
62
|
+
self.proxy_state = NodeState(
|
|
63
|
+
node_id=node_id, node_config={}, partition_id=self.partition_id
|
|
64
|
+
)
|
|
63
65
|
|
|
64
66
|
def _submit_job(self, message: Message, timeout: Optional[float]) -> Message:
|
|
65
67
|
"""Sumbit a message to the ActorPool."""
|
flwr/superexec/app.py
CHANGED
|
@@ -127,11 +127,11 @@ def _try_obtain_certificates(
|
|
|
127
127
|
return None
|
|
128
128
|
# Check if certificates are provided
|
|
129
129
|
if args.ssl_certfile and args.ssl_keyfile and args.ssl_ca_certfile:
|
|
130
|
-
if not Path
|
|
130
|
+
if not Path(args.ssl_ca_certfile).is_file():
|
|
131
131
|
sys.exit("Path argument `--ssl-ca-certfile` does not point to a file.")
|
|
132
|
-
if not Path
|
|
132
|
+
if not Path(args.ssl_certfile).is_file():
|
|
133
133
|
sys.exit("Path argument `--ssl-certfile` does not point to a file.")
|
|
134
|
-
if not Path
|
|
134
|
+
if not Path(args.ssl_keyfile).is_file():
|
|
135
135
|
sys.exit("Path argument `--ssl-keyfile` does not point to a file.")
|
|
136
136
|
certificates = (
|
|
137
137
|
Path(args.ssl_ca_certfile).read_bytes(), # CA certificate
|
{flwr_nightly-1.10.0.dev20240711.dist-info → flwr_nightly-1.10.0.dev20240712.dist-info}/RECORD
RENAMED
|
@@ -53,17 +53,17 @@ flwr/cli/run/__init__.py,sha256=oCd6HmQDx-sqver1gecgx-uMA38BLTSiiKpl7RGNceg,789
|
|
|
53
53
|
flwr/cli/run/run.py,sha256=eFYZwHOw9pHo_jxtS-UQIf7LVIOiNwjnJdaykcZQz5Q,4969
|
|
54
54
|
flwr/cli/utils.py,sha256=l65Ul0YsSBPuypk0uorAtEDmLEYiUrzpCXi6zCg9mJ4,4506
|
|
55
55
|
flwr/client/__init__.py,sha256=wzJZsYJIHf_8-PMzvfbinyzzjgh1UP1vLrAw2_yEbKI,1345
|
|
56
|
-
flwr/client/app.py,sha256=
|
|
56
|
+
flwr/client/app.py,sha256=60e0vEmMNRusDheu7laQRqe87FhFyVzxIZKAhLrRLAo,26268
|
|
57
57
|
flwr/client/client.py,sha256=Vp9UkOkoHdNfn6iMYZsj_5m_GICiFfUlKEVaLad-YhM,8183
|
|
58
58
|
flwr/client/client_app.py,sha256=cvY-km3JEOWKxUio4xvksNFBk2FQQXliUfQTlDty71w,9648
|
|
59
59
|
flwr/client/dpfedavg_numpy_client.py,sha256=ylZ-LpBIKmL1HCiS8kq4pkp2QGalc8rYEzDHdRG3VRQ,7435
|
|
60
60
|
flwr/client/grpc_adapter_client/__init__.py,sha256=QyNWIbsq9DpyMk7oemiO1P3TBFfkfkctnJ1JoAkTl3s,742
|
|
61
|
-
flwr/client/grpc_adapter_client/connection.py,sha256=
|
|
61
|
+
flwr/client/grpc_adapter_client/connection.py,sha256=fM6QTIrcDGIXux7nzxOY3qNUfBGxVl1W7861iGSy5wA,3873
|
|
62
62
|
flwr/client/grpc_client/__init__.py,sha256=LsnbqXiJhgQcB0XzAlUQgPx011Uf7Y7yabIC1HxivJ8,735
|
|
63
|
-
flwr/client/grpc_client/connection.py,sha256=
|
|
63
|
+
flwr/client/grpc_client/connection.py,sha256=7J3YlvvBrky3f8UJ99U9IsPECGtcY8rvXsyr_Ol8qyY,9311
|
|
64
64
|
flwr/client/grpc_rere_client/__init__.py,sha256=MK-oSoV3kwUEQnIwl0GN4OpiHR7eLOrMA8ikunET130,752
|
|
65
65
|
flwr/client/grpc_rere_client/client_interceptor.py,sha256=sYPEznuQPdy2BPDlvM9FK0ZRRucb4NfwUee1Z_mN82E,4954
|
|
66
|
-
flwr/client/grpc_rere_client/connection.py,sha256=
|
|
66
|
+
flwr/client/grpc_rere_client/connection.py,sha256=nC4Usb1qok2liVxwlbQokUNwRRRD10_GIscbspqqz_c,10338
|
|
67
67
|
flwr/client/grpc_rere_client/grpc_adapter.py,sha256=woljH8yr1pyLH4W4Azogyy7Nafn6y9DHBnDCIIVKwCw,4711
|
|
68
68
|
flwr/client/heartbeat.py,sha256=cx37mJBH8LyoIN4Lks85wtqT1mnU5GulQnr4pGCvAq0,2404
|
|
69
69
|
flwr/client/message_handler/__init__.py,sha256=QxxQuBNpFPTHx3KiUNvQSlqMKlEnbRR1kFfc1KVje08,719
|
|
@@ -77,19 +77,19 @@ flwr/client/mod/secure_aggregation/__init__.py,sha256=A7DzZ3uvXTUkuHBzrxJMWQQD4R
|
|
|
77
77
|
flwr/client/mod/secure_aggregation/secagg_mod.py,sha256=wI9tuIEvMUETz-wVIEbPYvh-1nK9CEylBLGoVpNhL94,1095
|
|
78
78
|
flwr/client/mod/secure_aggregation/secaggplus_mod.py,sha256=fZTfIELkYS64lpgxQKL66s-QHjCn-159qfLoNoIMJjc,19699
|
|
79
79
|
flwr/client/mod/utils.py,sha256=UAJXiB0wwVyLkCkpW_i5BXikdBR65p8sNFr7VNHm2nk,1226
|
|
80
|
-
flwr/client/node_state.py,sha256=
|
|
81
|
-
flwr/client/node_state_tests.py,sha256=
|
|
80
|
+
flwr/client/node_state.py,sha256=Yh-3-YQtnUfAjMxz356cUQp40UFfdM1yw-n_Ir50JBk,2971
|
|
81
|
+
flwr/client/node_state_tests.py,sha256=DAZk3Ir3HSN24xx42l0u9n5Q7sTgw8Jps4QRhwGew3A,2258
|
|
82
82
|
flwr/client/numpy_client.py,sha256=u76GWAdHmJM88Agm2EgLQSvO8Jnk225mJTk-_TmPjFE,10283
|
|
83
83
|
flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
|
|
84
|
-
flwr/client/rest_client/connection.py,sha256=
|
|
84
|
+
flwr/client/rest_client/connection.py,sha256=aY_UzrNyE8g-xPAK_POZZZ93mERHTe-pOhNP-uZ8GyU,12147
|
|
85
85
|
flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
|
|
86
|
-
flwr/client/supernode/app.py,sha256=
|
|
86
|
+
flwr/client/supernode/app.py,sha256=cg8momLzMnFrDBNJsSRDYrn8zHuJ-4UC3wIHf51aBXQ,15385
|
|
87
87
|
flwr/client/typing.py,sha256=RJGVF64Z0nqW-qmdFuFaY4Jig3dMUFgNhFi-5dq-8-I,1069
|
|
88
88
|
flwr/common/__init__.py,sha256=4cBLNNnNTwHDnL_HCxhU5ILCSZ6fYh3A_aMBtlvHTVw,3721
|
|
89
89
|
flwr/common/address.py,sha256=wRu1Luezx1PWadwV9OA_KNko01oVvbRnPqfzaDn8QOk,1882
|
|
90
|
-
flwr/common/config.py,sha256=
|
|
90
|
+
flwr/common/config.py,sha256=7OF4R43st8teFXBWmV92noGEYVe00wT29QMs6od8mlI,4994
|
|
91
91
|
flwr/common/constant.py,sha256=qNmxEV3_pOO7MeTAA9qwIh4KoCPStcX3Gm8GRPIRx_4,2890
|
|
92
|
-
flwr/common/context.py,sha256=
|
|
92
|
+
flwr/common/context.py,sha256=iW-rDC0dTzwyvLSWdtaeHMZM7l5XAf6dg2TdVw0lg68,2643
|
|
93
93
|
flwr/common/date.py,sha256=OcQuwpb2HxcblTqYm6H223ufop5UZw5N_fzalbpOVzY,891
|
|
94
94
|
flwr/common/differential_privacy.py,sha256=WZWrL7C9XaB9l9NDkLDI5PvM7jwcoTTFu08ZVG8-M5Q,6113
|
|
95
95
|
flwr/common/differential_privacy_constants.py,sha256=c7b7tqgvT7yMK0XN9ndiTBs4mQf6d3qk6K7KBZGlV4Q,1074
|
|
@@ -180,14 +180,14 @@ flwr/server/compat/__init__.py,sha256=VxnJtJyOjNFQXMNi9hIuzNlZM5n0Hj1p3aq_Pm2udw
|
|
|
180
180
|
flwr/server/compat/app.py,sha256=u0elxfiLjGouCMQIy5KnCpeCHdc3s0qvojUm8unInIs,3421
|
|
181
181
|
flwr/server/compat/app_utils.py,sha256=B9pec7LnYACzowXKZTZNu3SNS-fSaHfefwvRyAQa4Nc,3456
|
|
182
182
|
flwr/server/compat/driver_client_proxy.py,sha256=BxTDo7i89VAG2tuF4x7zogSVn2bXPMr0H2H0lERzW9c,5444
|
|
183
|
-
flwr/server/compat/legacy_context.py,sha256
|
|
183
|
+
flwr/server/compat/legacy_context.py,sha256=-c2J_tPDFahDILl80XFrgkdRLfpHWDu5W3DQP3nKdls,1814
|
|
184
184
|
flwr/server/criterion.py,sha256=ypbAexbztzGUxNen9RCHF91QeqiEQix4t4Ih3E-42MM,1061
|
|
185
185
|
flwr/server/driver/__init__.py,sha256=bikRv6CjTwSvYh7tf10gziU5o2YotOWhhftz2tr3KDc,886
|
|
186
186
|
flwr/server/driver/driver.py,sha256=NT_yaeit7_kZEIsCEqOWPID1GrVD3ywH4xZ2wtIh5lM,5217
|
|
187
187
|
flwr/server/driver/grpc_driver.py,sha256=4Azmzq4RWzcLbOqBBEF-I78krWVWZ6bT0U42S25zMvY,9659
|
|
188
188
|
flwr/server/driver/inmemory_driver.py,sha256=RcK94_NtjGZ4aZDIscnU7A3Uv1u8jGx29-xcbjQvZTM,6444
|
|
189
189
|
flwr/server/history.py,sha256=bBOHKyX1eQONIsUx4EUU-UnAk1i0EbEl8ioyMq_UWQ8,5063
|
|
190
|
-
flwr/server/run_serverapp.py,sha256=
|
|
190
|
+
flwr/server/run_serverapp.py,sha256=iq62xuSPYndmsYiJRpRkT9cTfQpZ0FgsWLncktUvh98,9486
|
|
191
191
|
flwr/server/server.py,sha256=wsXsxMZ9SQ0B42nBnUlcV83NJPycgrgg5bFwcQ4BYBE,17821
|
|
192
192
|
flwr/server/server_app.py,sha256=1hul76ospG8L_KooK_ewn1sWPNTNYLTtZMeGNOBNruA,6267
|
|
193
193
|
flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
|
|
@@ -239,7 +239,7 @@ flwr/server/superlink/fleet/vce/__init__.py,sha256=36MHKiefnJeyjwMQzVUK4m06Ojon3
|
|
|
239
239
|
flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=oBIzmnrSSRvH_H0vRGEGWhWzQQwqe3zn6e13RsNwlIY,1466
|
|
240
240
|
flwr/server/superlink/fleet/vce/backend/backend.py,sha256=iG3KSIY7DzNfcxmuLfTs7VdQJnqPCvvn5DFkTWKG5lI,2227
|
|
241
241
|
flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=pIJm6YXZw-Jv3okRgred1yjm7b3EWuj1BvtyBd3Fk08,7422
|
|
242
|
-
flwr/server/superlink/fleet/vce/vce_api.py,sha256=
|
|
242
|
+
flwr/server/superlink/fleet/vce/vce_api.py,sha256=253x7nGgAbLZzJmSKNxii_xZDrF_8fC0hpbj4bIQ7SY,11800
|
|
243
243
|
flwr/server/superlink/state/__init__.py,sha256=Gj2OTFLXvA-mAjBvwuKDM3rDrVaQPcIoybSa2uskMTE,1003
|
|
244
244
|
flwr/server/superlink/state/in_memory_state.py,sha256=fb-f4RGiqXON0DC7aSEMNuNIjH406BhBYrNNX5Kza2g,13061
|
|
245
245
|
flwr/server/superlink/state/sqlite_state.py,sha256=dO374mTkvhWQSiwbqwUXVnAYHev-j2mHaX9v8wFmmMA,29044
|
|
@@ -260,17 +260,17 @@ flwr/simulation/__init__.py,sha256=9x8OCkK3jpFAPJB1aeEMOddz6V58bExQPtwE8Z3q-RY,1
|
|
|
260
260
|
flwr/simulation/app.py,sha256=8NDXoQ8oC11khXIGnydrsUh5JfaH7c2Fwzix8vDFK1I,15144
|
|
261
261
|
flwr/simulation/ray_transport/__init__.py,sha256=wzcEEwUUlulnXsg6raCA1nGpP3LlAQDtJ8zNkCXcVbA,734
|
|
262
262
|
flwr/simulation/ray_transport/ray_actor.py,sha256=3j0HgzjrlYjnzdTRy8aA4Nf6VoUvxi1hGRQkGSU5z6c,19020
|
|
263
|
-
flwr/simulation/ray_transport/ray_client_proxy.py,sha256=
|
|
263
|
+
flwr/simulation/ray_transport/ray_client_proxy.py,sha256=lcrYLHeAud6AT0TgzKLK14yi3ijZpqMWS4oKj5M1A3A,7009
|
|
264
264
|
flwr/simulation/ray_transport/utils.py,sha256=TYdtfg1P9VfTdLMOJlifInGpxWHYs9UfUqIv2wfkRLA,2392
|
|
265
265
|
flwr/simulation/run_simulation.py,sha256=qGP8sHKAzJT9nGeqMw36iCsVXm4ZFMBisCORuTswr-g,17277
|
|
266
266
|
flwr/superexec/__init__.py,sha256=9h94ogLxi6eJ3bUuJYq3E3pApThSabTPiSmPAGlTkHE,800
|
|
267
|
-
flwr/superexec/app.py,sha256=
|
|
267
|
+
flwr/superexec/app.py,sha256=1ZGSErFo3AQeIQOARKM1DN99fCuH451PeM1bDasBjRQ,6157
|
|
268
268
|
flwr/superexec/deployment.py,sha256=xv5iQWuaMeeL0XE5KMLWq3gRU4lvsGu1-_oPIXi5x9E,3955
|
|
269
269
|
flwr/superexec/exec_grpc.py,sha256=u-rztpOleqSGqgvNE-ZLw1HchNsBHU1-eB3m52GZ0pQ,1852
|
|
270
270
|
flwr/superexec/exec_servicer.py,sha256=4R1f_9v0vly_bXpIYaXAeV1tO5LAy1AYygGGGNZmlQk,2194
|
|
271
271
|
flwr/superexec/executor.py,sha256=TMQMMf-vv0htlv6v-eEBI67J1WL3Yz7dp_Fm1lgMEyU,1718
|
|
272
|
-
flwr_nightly-1.10.0.
|
|
273
|
-
flwr_nightly-1.10.0.
|
|
274
|
-
flwr_nightly-1.10.0.
|
|
275
|
-
flwr_nightly-1.10.0.
|
|
276
|
-
flwr_nightly-1.10.0.
|
|
272
|
+
flwr_nightly-1.10.0.dev20240712.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
273
|
+
flwr_nightly-1.10.0.dev20240712.dist-info/METADATA,sha256=ueea2HUP0m4iFuOa_T3u2lD-93HGTmfD-ulaZv7LKJg,15632
|
|
274
|
+
flwr_nightly-1.10.0.dev20240712.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
275
|
+
flwr_nightly-1.10.0.dev20240712.dist-info/entry_points.txt,sha256=7qBQcA-bDGDxnJmLd9FYqglFQubjCNqyg9M8a-lukps,336
|
|
276
|
+
flwr_nightly-1.10.0.dev20240712.dist-info/RECORD,,
|
{flwr_nightly-1.10.0.dev20240711.dist-info → flwr_nightly-1.10.0.dev20240712.dist-info}/LICENSE
RENAMED
|
File without changes
|
{flwr_nightly-1.10.0.dev20240711.dist-info → flwr_nightly-1.10.0.dev20240712.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|