flwr-nightly 1.7.0.dev20240118__py3-none-any.whl → 1.7.0.dev20240119__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.

@@ -25,7 +25,6 @@ from .typing import ConfigsRecordValues, ConfigsScalar
25
25
  class ConfigsRecord:
26
26
  """Configs record."""
27
27
 
28
- keep_input: bool
29
28
  data: Dict[str, ConfigsRecordValues] = field(default_factory=dict)
30
29
 
31
30
  def __init__(
@@ -47,12 +46,13 @@ class ConfigsRecord:
47
46
  to True, the data is duplicated in memory. If memory is a concern, set
48
47
  it to False.
49
48
  """
50
- self.keep_input = keep_input
51
49
  self.data = {}
52
50
  if configs_dict:
53
- self.set_configs(configs_dict)
51
+ self.set_configs(configs_dict, keep_input=keep_input)
54
52
 
55
- def set_configs(self, configs_dict: Dict[str, ConfigsRecordValues]) -> None:
53
+ def set_configs(
54
+ self, configs_dict: Dict[str, ConfigsRecordValues], keep_input: bool = True
55
+ ) -> None:
56
56
  """Add configs to the record.
57
57
 
58
58
  Parameters
@@ -61,6 +61,11 @@ class ConfigsRecord:
61
61
  A dictionary that stores basic types (i.e. `str`,`int`, `float`, `bytes` as
62
62
  defined in `ConfigsRecordValues`) and list of such types (see
63
63
  `ConfigsScalarList`).
64
+ keep_input : bool (default: True)
65
+ A boolean indicating whether config passed should be deleted from the input
66
+ dictionary immediately after adding them to the record. When set
67
+ to True, the data is duplicated in memory. If memory is a concern, set
68
+ it to False.
64
69
  """
65
70
  if any(not isinstance(k, str) for k in configs_dict.keys()):
66
71
  raise TypeError(f"Not all keys are of valid type. Expected {str}")
@@ -88,7 +93,7 @@ class ConfigsRecord:
88
93
  is_valid(value)
89
94
 
90
95
  # Add configs to record
91
- if self.keep_input:
96
+ if keep_input:
92
97
  # Copy
93
98
  self.data = configs_dict.copy()
94
99
  else:
@@ -96,3 +101,7 @@ class ConfigsRecord:
96
101
  for key in list(configs_dict.keys()):
97
102
  self.data[key] = configs_dict[key]
98
103
  del configs_dict[key]
104
+
105
+ def __getitem__(self, key: str) -> ConfigsRecordValues:
106
+ """Retrieve an element stored in record."""
107
+ return self.data[key]
@@ -0,0 +1,77 @@
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
+ """FlowerContext and Metadata."""
16
+
17
+
18
+ from dataclasses import dataclass
19
+
20
+ from .recordset import RecordSet
21
+
22
+
23
+ @dataclass
24
+ class Metadata:
25
+ """A dataclass holding metadata associated with the current task.
26
+
27
+ Parameters
28
+ ----------
29
+ run_id : int
30
+ An identifier for the current run.
31
+ task_id : str
32
+ An identifier for the current task.
33
+ group_id : str
34
+ An identifier for grouping tasks. In some settings
35
+ this is used as the FL round.
36
+ ttl : str
37
+ Time-to-live for this task.
38
+ task_type : str
39
+ A string that encodes the action to be executed on
40
+ the receiving end.
41
+ """
42
+
43
+ run_id: int
44
+ task_id: str
45
+ group_id: str
46
+ ttl: str
47
+ task_type: str
48
+
49
+
50
+ @dataclass
51
+ class FlowerContext:
52
+ """State of your application from the viewpoint of the entity using it.
53
+
54
+ Parameters
55
+ ----------
56
+ in_message : RecordSet
57
+ Holds records sent by another entity (e.g. sent by the server-side
58
+ logic to a client, or vice-versa)
59
+ out_message : RecordSet
60
+ Holds records added by the current entity. This `RecordSet` will
61
+ be sent out (e.g. back to the server-side for aggregation of
62
+ parameter, or to the client to perform a certain task)
63
+ local : RecordSet
64
+ Holds record added by the current entity and that will stay local.
65
+ This means that the data it holds will never leave the system it's running from.
66
+ This can be used as an intermediate storage or scratchpad when
67
+ executing middleware layers. It can also be used as a memory to access
68
+ at different points during the lifecycle of this entity (e.g. across
69
+ multiple rounds)
70
+ metadata : Metadata
71
+ A dataclass including information about the task to be executed.
72
+ """
73
+
74
+ in_message: RecordSet
75
+ out_message: RecordSet
76
+ local: RecordSet
77
+ metadata: Metadata
@@ -25,7 +25,6 @@ from .typing import MetricsRecordValues, MetricsScalar
25
25
  class MetricsRecord:
26
26
  """Metrics record."""
27
27
 
28
- keep_input: bool
29
28
  data: Dict[str, MetricsRecordValues] = field(default_factory=dict)
30
29
 
31
30
  def __init__(
@@ -46,12 +45,13 @@ class MetricsRecord:
46
45
  to True, the data is duplicated in memory. If memory is a concern, set
47
46
  it to False.
48
47
  """
49
- self.keep_input = keep_input
50
48
  self.data = {}
51
49
  if metrics_dict:
52
- self.set_metrics(metrics_dict)
50
+ self.set_metrics(metrics_dict, keep_input=keep_input)
53
51
 
54
- def set_metrics(self, metrics_dict: Dict[str, MetricsRecordValues]) -> None:
52
+ def set_metrics(
53
+ self, metrics_dict: Dict[str, MetricsRecordValues], keep_input: bool = True
54
+ ) -> None:
55
55
  """Add metrics to the record.
56
56
 
57
57
  Parameters
@@ -59,13 +59,20 @@ class MetricsRecord:
59
59
  metrics_dict : Dict[str, MetricsRecordValues]
60
60
  A dictionary that stores basic types (i.e. `int`, `float` as defined
61
61
  in `MetricsScalar`) and list of such types (see `MetricsScalarList`).
62
+ keep_input : bool (default: True)
63
+ A boolean indicating whether metrics should be deleted from the input
64
+ dictionary immediately after adding them to the record. When set
65
+ to True, the data is duplicated in memory. If memory is a concern, set
66
+ it to False.
62
67
  """
63
68
  if any(not isinstance(k, str) for k in metrics_dict.keys()):
64
69
  raise TypeError(f"Not all keys are of valid type. Expected {str}.")
65
70
 
66
71
  def is_valid(value: MetricsScalar) -> None:
67
72
  """Check if value is of expected type."""
68
- if not isinstance(value, get_args(MetricsScalar)):
73
+ if not isinstance(value, get_args(MetricsScalar)) or isinstance(
74
+ value, bool
75
+ ):
69
76
  raise TypeError(
70
77
  "Not all values are of valid type."
71
78
  f" Expected {MetricsRecordValues} but you passed {type(value)}."
@@ -86,7 +93,7 @@ class MetricsRecord:
86
93
  is_valid(value)
87
94
 
88
95
  # Add metrics to record
89
- if self.keep_input:
96
+ if keep_input:
90
97
  # Copy
91
98
  self.data = metrics_dict.copy()
92
99
  else:
@@ -94,3 +101,7 @@ class MetricsRecord:
94
101
  for key in list(metrics_dict.keys()):
95
102
  self.data[key] = metrics_dict[key]
96
103
  del metrics_dict[key]
104
+
105
+ def __getitem__(self, key: str) -> MetricsRecordValues:
106
+ """Retrieve an element stored in record."""
107
+ return self.data[key]
@@ -59,7 +59,6 @@ class ParametersRecord:
59
59
  PyTorch's state_dict, but holding serialised tensors instead.
60
60
  """
61
61
 
62
- keep_input: bool
63
62
  data: OrderedDict[str, Array] = field(default_factory=OrderedDict[str, Array])
64
63
 
65
64
  def __init__(
@@ -82,25 +81,29 @@ class ParametersRecord:
82
81
  parameters after adding it to the record, set this flag to True. When set
83
82
  to True, the data is duplicated in memory.
84
83
  """
85
- self.keep_input = keep_input
86
84
  self.data = OrderedDict()
87
85
  if array_dict:
88
- self.set_parameters(array_dict)
86
+ self.set_parameters(array_dict, keep_input=keep_input)
89
87
 
90
- def set_parameters(self, array_dict: OrderedDict[str, Array]) -> None:
88
+ def set_parameters(
89
+ self, array_dict: OrderedDict[str, Array], keep_input: bool = False
90
+ ) -> None:
91
91
  """Add parameters to record.
92
92
 
93
93
  Parameters
94
94
  ----------
95
95
  array_dict : OrderedDict[str, Array]
96
96
  A dictionary that stores serialized array-like or tensor-like objects.
97
+ keep_input : bool (default: False)
98
+ A boolean indicating whether parameters should be deleted from the input
99
+ dictionary immediately after adding them to the record.
97
100
  """
98
101
  if any(not isinstance(k, str) for k in array_dict.keys()):
99
102
  raise TypeError(f"Not all keys are of valid type. Expected {str}")
100
103
  if any(not isinstance(v, Array) for v in array_dict.values()):
101
104
  raise TypeError(f"Not all values are of valid type. Expected {Array}")
102
105
 
103
- if self.keep_input:
106
+ if keep_input:
104
107
  # Copy
105
108
  self.data = OrderedDict(array_dict)
106
109
  else:
@@ -108,3 +111,7 @@ class ParametersRecord:
108
111
  for key in list(array_dict.keys()):
109
112
  self.data[key] = array_dict[key]
110
113
  del array_dict[key]
114
+
115
+ def __getitem__(self, key: str) -> Array:
116
+ """Retrieve an element stored in record."""
117
+ return self.data[key]
flwr/common/typing.py CHANGED
@@ -50,8 +50,8 @@ MetricsScalar = Union[int, float]
50
50
  MetricsScalarList = Union[List[int], List[float]]
51
51
  MetricsRecordValues = Union[MetricsScalar, MetricsScalarList]
52
52
  # Value types for common.ConfigsRecord
53
- ConfigsScalar = Union[MetricsScalar, str, bytes]
54
- ConfigsScalarList = Union[MetricsScalarList, List[str], List[bytes]]
53
+ ConfigsScalar = Union[MetricsScalar, str, bytes, bool]
54
+ ConfigsScalarList = Union[MetricsScalarList, List[str], List[bytes], List[bool]]
55
55
  ConfigsRecordValues = Union[ConfigsScalar, ConfigsScalarList]
56
56
 
57
57
  Metrics = Dict[str, Scalar]
flwr/proto/task_pb2.py CHANGED
@@ -16,7 +16,7 @@ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
16
16
  from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
17
17
 
18
18
 
19
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/task.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xbe\x02\n\x04Task\x12\"\n\x08producer\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\"\n\x08\x63onsumer\x18\x02 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x12\n\ncreated_at\x18\x03 \x01(\t\x12\x14\n\x0c\x64\x65livered_at\x18\x04 \x01(\t\x12\x0b\n\x03ttl\x18\x05 \x01(\t\x12\x10\n\x08\x61ncestry\x18\x06 \x03(\t\x12)\n\x02sa\x18\x07 \x01(\x0b\x32\x1d.flwr.proto.SecureAggregation\x12<\n\x15legacy_server_message\x18\x65 \x01(\x0b\x32\x19.flwr.proto.ServerMessageB\x02\x18\x01\x12<\n\x15legacy_client_message\x18\x66 \x01(\x0b\x32\x19.flwr.proto.ClientMessageB\x02\x18\x01\"\\\n\x07TaskIns\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x12\x12\x1e\n\x04task\x18\x04 \x01(\x0b\x32\x10.flwr.proto.Task\"\\\n\x07TaskRes\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x12\x12\x1e\n\x04task\x18\x04 \x01(\x0b\x32\x10.flwr.proto.Task\"\xf3\x03\n\x05Value\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06sint64\x18\x02 \x01(\x12H\x00\x12\x0e\n\x04\x62ool\x18\x03 \x01(\x08H\x00\x12\x10\n\x06string\x18\x04 \x01(\tH\x00\x12\x0f\n\x05\x62ytes\x18\x05 \x01(\x0cH\x00\x12\x33\n\x0b\x64ouble_list\x18\x15 \x01(\x0b\x32\x1c.flwr.proto.Value.DoubleListH\x00\x12\x33\n\x0bsint64_list\x18\x16 \x01(\x0b\x32\x1c.flwr.proto.Value.Sint64ListH\x00\x12/\n\tbool_list\x18\x17 \x01(\x0b\x32\x1a.flwr.proto.Value.BoolListH\x00\x12\x33\n\x0bstring_list\x18\x18 \x01(\x0b\x32\x1c.flwr.proto.Value.StringListH\x00\x12\x31\n\nbytes_list\x18\x19 \x01(\x0b\x32\x1b.flwr.proto.Value.BytesListH\x00\x1a\x1a\n\nDoubleList\x12\x0c\n\x04vals\x18\x01 \x03(\x01\x1a\x1a\n\nSint64List\x12\x0c\n\x04vals\x18\x01 \x03(\x12\x1a\x18\n\x08\x42oolList\x12\x0c\n\x04vals\x18\x01 \x03(\x08\x1a\x1a\n\nStringList\x12\x0c\n\x04vals\x18\x01 \x03(\t\x1a\x19\n\tBytesList\x12\x0c\n\x04vals\x18\x01 \x03(\x0c\x42\x07\n\x05value\"\xa0\x01\n\x11SecureAggregation\x12\x44\n\x0cnamed_values\x18\x01 \x03(\x0b\x32..flwr.proto.SecureAggregation.NamedValuesEntry\x1a\x45\n\x10NamedValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.flwr.proto.Value:\x02\x38\x01\x62\x06proto3')
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/task.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xd1\x02\n\x04Task\x12\"\n\x08producer\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\"\n\x08\x63onsumer\x18\x02 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x12\n\ncreated_at\x18\x03 \x01(\t\x12\x14\n\x0c\x64\x65livered_at\x18\x04 \x01(\t\x12\x0b\n\x03ttl\x18\x05 \x01(\t\x12\x10\n\x08\x61ncestry\x18\x06 \x03(\t\x12\x11\n\ttask_type\x18\x07 \x01(\t\x12)\n\x02sa\x18\x08 \x01(\x0b\x32\x1d.flwr.proto.SecureAggregation\x12<\n\x15legacy_server_message\x18\x65 \x01(\x0b\x32\x19.flwr.proto.ServerMessageB\x02\x18\x01\x12<\n\x15legacy_client_message\x18\x66 \x01(\x0b\x32\x19.flwr.proto.ClientMessageB\x02\x18\x01\"\\\n\x07TaskIns\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x12\x12\x1e\n\x04task\x18\x04 \x01(\x0b\x32\x10.flwr.proto.Task\"\\\n\x07TaskRes\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x12\x12\x1e\n\x04task\x18\x04 \x01(\x0b\x32\x10.flwr.proto.Task\"\xf3\x03\n\x05Value\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06sint64\x18\x02 \x01(\x12H\x00\x12\x0e\n\x04\x62ool\x18\x03 \x01(\x08H\x00\x12\x10\n\x06string\x18\x04 \x01(\tH\x00\x12\x0f\n\x05\x62ytes\x18\x05 \x01(\x0cH\x00\x12\x33\n\x0b\x64ouble_list\x18\x15 \x01(\x0b\x32\x1c.flwr.proto.Value.DoubleListH\x00\x12\x33\n\x0bsint64_list\x18\x16 \x01(\x0b\x32\x1c.flwr.proto.Value.Sint64ListH\x00\x12/\n\tbool_list\x18\x17 \x01(\x0b\x32\x1a.flwr.proto.Value.BoolListH\x00\x12\x33\n\x0bstring_list\x18\x18 \x01(\x0b\x32\x1c.flwr.proto.Value.StringListH\x00\x12\x31\n\nbytes_list\x18\x19 \x01(\x0b\x32\x1b.flwr.proto.Value.BytesListH\x00\x1a\x1a\n\nDoubleList\x12\x0c\n\x04vals\x18\x01 \x03(\x01\x1a\x1a\n\nSint64List\x12\x0c\n\x04vals\x18\x01 \x03(\x12\x1a\x18\n\x08\x42oolList\x12\x0c\n\x04vals\x18\x01 \x03(\x08\x1a\x1a\n\nStringList\x12\x0c\n\x04vals\x18\x01 \x03(\t\x1a\x19\n\tBytesList\x12\x0c\n\x04vals\x18\x01 \x03(\x0c\x42\x07\n\x05value\"\xa0\x01\n\x11SecureAggregation\x12\x44\n\x0cnamed_values\x18\x01 \x03(\x0b\x32..flwr.proto.SecureAggregation.NamedValuesEntry\x1a\x45\n\x10NamedValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.flwr.proto.Value:\x02\x38\x01\x62\x06proto3')
20
20
 
21
21
  _globals = globals()
22
22
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -30,25 +30,25 @@ if _descriptor._USE_C_DESCRIPTORS == False:
30
30
  _globals['_SECUREAGGREGATION_NAMEDVALUESENTRY']._options = None
31
31
  _globals['_SECUREAGGREGATION_NAMEDVALUESENTRY']._serialized_options = b'8\001'
32
32
  _globals['_TASK']._serialized_start=89
33
- _globals['_TASK']._serialized_end=407
34
- _globals['_TASKINS']._serialized_start=409
35
- _globals['_TASKINS']._serialized_end=501
36
- _globals['_TASKRES']._serialized_start=503
37
- _globals['_TASKRES']._serialized_end=595
38
- _globals['_VALUE']._serialized_start=598
39
- _globals['_VALUE']._serialized_end=1097
40
- _globals['_VALUE_DOUBLELIST']._serialized_start=953
41
- _globals['_VALUE_DOUBLELIST']._serialized_end=979
42
- _globals['_VALUE_SINT64LIST']._serialized_start=981
43
- _globals['_VALUE_SINT64LIST']._serialized_end=1007
44
- _globals['_VALUE_BOOLLIST']._serialized_start=1009
45
- _globals['_VALUE_BOOLLIST']._serialized_end=1033
46
- _globals['_VALUE_STRINGLIST']._serialized_start=1035
47
- _globals['_VALUE_STRINGLIST']._serialized_end=1061
48
- _globals['_VALUE_BYTESLIST']._serialized_start=1063
49
- _globals['_VALUE_BYTESLIST']._serialized_end=1088
50
- _globals['_SECUREAGGREGATION']._serialized_start=1100
51
- _globals['_SECUREAGGREGATION']._serialized_end=1260
52
- _globals['_SECUREAGGREGATION_NAMEDVALUESENTRY']._serialized_start=1191
53
- _globals['_SECUREAGGREGATION_NAMEDVALUESENTRY']._serialized_end=1260
33
+ _globals['_TASK']._serialized_end=426
34
+ _globals['_TASKINS']._serialized_start=428
35
+ _globals['_TASKINS']._serialized_end=520
36
+ _globals['_TASKRES']._serialized_start=522
37
+ _globals['_TASKRES']._serialized_end=614
38
+ _globals['_VALUE']._serialized_start=617
39
+ _globals['_VALUE']._serialized_end=1116
40
+ _globals['_VALUE_DOUBLELIST']._serialized_start=972
41
+ _globals['_VALUE_DOUBLELIST']._serialized_end=998
42
+ _globals['_VALUE_SINT64LIST']._serialized_start=1000
43
+ _globals['_VALUE_SINT64LIST']._serialized_end=1026
44
+ _globals['_VALUE_BOOLLIST']._serialized_start=1028
45
+ _globals['_VALUE_BOOLLIST']._serialized_end=1052
46
+ _globals['_VALUE_STRINGLIST']._serialized_start=1054
47
+ _globals['_VALUE_STRINGLIST']._serialized_end=1080
48
+ _globals['_VALUE_BYTESLIST']._serialized_start=1082
49
+ _globals['_VALUE_BYTESLIST']._serialized_end=1107
50
+ _globals['_SECUREAGGREGATION']._serialized_start=1119
51
+ _globals['_SECUREAGGREGATION']._serialized_end=1279
52
+ _globals['_SECUREAGGREGATION_NAMEDVALUESENTRY']._serialized_start=1210
53
+ _globals['_SECUREAGGREGATION_NAMEDVALUESENTRY']._serialized_end=1279
54
54
  # @@protoc_insertion_point(module_scope)
flwr/proto/task_pb2.pyi CHANGED
@@ -21,6 +21,7 @@ class Task(google.protobuf.message.Message):
21
21
  DELIVERED_AT_FIELD_NUMBER: builtins.int
22
22
  TTL_FIELD_NUMBER: builtins.int
23
23
  ANCESTRY_FIELD_NUMBER: builtins.int
24
+ TASK_TYPE_FIELD_NUMBER: builtins.int
24
25
  SA_FIELD_NUMBER: builtins.int
25
26
  LEGACY_SERVER_MESSAGE_FIELD_NUMBER: builtins.int
26
27
  LEGACY_CLIENT_MESSAGE_FIELD_NUMBER: builtins.int
@@ -33,6 +34,7 @@ class Task(google.protobuf.message.Message):
33
34
  ttl: typing.Text
34
35
  @property
35
36
  def ancestry(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
37
+ task_type: typing.Text
36
38
  @property
37
39
  def sa(self) -> global___SecureAggregation: ...
38
40
  @property
@@ -47,12 +49,13 @@ class Task(google.protobuf.message.Message):
47
49
  delivered_at: typing.Text = ...,
48
50
  ttl: typing.Text = ...,
49
51
  ancestry: typing.Optional[typing.Iterable[typing.Text]] = ...,
52
+ task_type: typing.Text = ...,
50
53
  sa: typing.Optional[global___SecureAggregation] = ...,
51
54
  legacy_server_message: typing.Optional[flwr.proto.transport_pb2.ServerMessage] = ...,
52
55
  legacy_client_message: typing.Optional[flwr.proto.transport_pb2.ClientMessage] = ...,
53
56
  ) -> None: ...
54
57
  def HasField(self, field_name: typing_extensions.Literal["consumer",b"consumer","legacy_client_message",b"legacy_client_message","legacy_server_message",b"legacy_server_message","producer",b"producer","sa",b"sa"]) -> builtins.bool: ...
55
- def ClearField(self, field_name: typing_extensions.Literal["ancestry",b"ancestry","consumer",b"consumer","created_at",b"created_at","delivered_at",b"delivered_at","legacy_client_message",b"legacy_client_message","legacy_server_message",b"legacy_server_message","producer",b"producer","sa",b"sa","ttl",b"ttl"]) -> None: ...
58
+ def ClearField(self, field_name: typing_extensions.Literal["ancestry",b"ancestry","consumer",b"consumer","created_at",b"created_at","delivered_at",b"delivered_at","legacy_client_message",b"legacy_client_message","legacy_server_message",b"legacy_server_message","producer",b"producer","sa",b"sa","task_type",b"task_type","ttl",b"ttl"]) -> None: ...
56
59
  global___Task = Task
57
60
 
58
61
  class TaskIns(google.protobuf.message.Message):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.7.0.dev20240118
3
+ Version: 1.7.0.dev20240119
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.dev
6
6
  License: Apache-2.0
@@ -25,15 +25,16 @@ flwr/client/secure_aggregation/secaggplus_handler.py,sha256=2jKtRhoJaVRmMJgJ2v8V
25
25
  flwr/client/typing.py,sha256=75vC6dpzv99PLRztPzaGPik2OifFZbgxvHVDMIA_C30,1219
26
26
  flwr/common/__init__.py,sha256=qttep0POwoigzB5pcraZa4YMt9jsCSfeibcrTQMUjIc,2884
27
27
  flwr/common/address.py,sha256=iTAN9jtmIGMrWFnx9XZQl45ZEtQJVZZLYPRBSNVARGI,1882
28
- flwr/common/configsrecord.py,sha256=LPEDTFH_5MdfDWcMUcked6rV78JN1lZRuUHioG0EkGk,3854
28
+ flwr/common/configsrecord.py,sha256=rVFp7r-ZySHix0vaIUfdCzm3GqndbYsT2PAiWyRdnrw,4311
29
29
  flwr/common/constant.py,sha256=J-BpHv6OFmrA37SeS4En8Nsy7yJdoNJWHCtbdnjIxSc,1120
30
30
  flwr/common/date.py,sha256=UWhBZj49yX9LD4BmatS_ZFZu_-kweGh0KQJ1djyWWH4,891
31
31
  flwr/common/dp.py,sha256=hF45cPElXxcQsh4AoquAyaTrNi0xCrIcKx7xOcV_1XU,1782
32
+ flwr/common/flowercontext.py,sha256=pC8Vjw9ToNX4i8oMuvSSJrZEccJhPN9i60b1apQnQWE,2562
32
33
  flwr/common/grpc.py,sha256=qVLB0d6bCuaBRW5YB0vEZXsR7Bo3R2lh4ONiCocqwRI,2270
33
34
  flwr/common/logger.py,sha256=qX_gqEyrmGOH0x_r8uQ1Vskz4fGvEij9asdo4DUOPY8,4135
34
- flwr/common/metricsrecord.py,sha256=0N3z6tVUPwgBk7_ECEc5edrT_YrjAwYM-O9HOq_hGw8,3787
35
+ flwr/common/metricsrecord.py,sha256=ZfeSQu7lZBKgTTG6tboSW2fT1xWsWyyjFe6cOau01cA,4295
35
36
  flwr/common/parameter.py,sha256=-bFAUayToYDF50FZGrBC1hQYJCQDtB2bbr3ZuVLMtdE,2095
36
- flwr/common/parametersrecord.py,sha256=3ePLwmTqEYxh3A4yjA5-H3kjPpTHH8s1TnAUkOECr8E,4088
37
+ flwr/common/parametersrecord.py,sha256=v5RmvJI1Y5iJhgIhdatZj7FItRRuaEmTKkCGDRFPQDU,4413
37
38
  flwr/common/recordset.py,sha256=OeRcBMGqx9vutWRz1xkujBPHlVpU58R1EcFRHEQrePo,2351
38
39
  flwr/common/recordset_utils.py,sha256=FgNuuAgbxtLgjB1vVmcYsTG8kqIW1ZpmYrcUEKAOH_A,3122
39
40
  flwr/common/retry_invoker.py,sha256=H_hKqKaEI8vZPywWmoAtJYkcUnKhlYc4kV63zRY0kWA,10856
@@ -47,7 +48,7 @@ flwr/common/secure_aggregation/secaggplus_constants.py,sha256=m5UDo7IgRkMS3yixhz
47
48
  flwr/common/secure_aggregation/secaggplus_utils.py,sha256=PleDyDu7jHNAfbRoEaoQiOjxG6iMl9yA8rNKYTfnyFw,3155
48
49
  flwr/common/serde.py,sha256=mujIHgxC6HhkUjqI9UHofbHtDZbepdN2nMFUE6FH6Ik,18990
49
50
  flwr/common/telemetry.py,sha256=se_-pHgEWcmN09ChSpTeek72l1UJHf7GbwXBB1KXBjQ,7683
50
- flwr/common/typing.py,sha256=bitdkwrDzodeasIYCoevK5z14dyUrrjNM2SZSSKub1Q,4364
51
+ flwr/common/typing.py,sha256=3Wu6Ol1Ja6Gb0WdlcXVEn1EHYJbc4oRRJA81vEegxBo,4382
51
52
  flwr/common/version.py,sha256=A0MKvyKPrV8wLg0YCAODTqM71v26NEH36c6JYtfgg0o,667
52
53
  flwr/driver/__init__.py,sha256=NQ4KeZ5fP9wdxGjcr2cP41_7TLuuYQ3u4J7GwYtQ488,870
53
54
  flwr/driver/app.py,sha256=tCPnUwq60kAY637htvDSZGIln21OxIVgg0-o8o4ZAGw,7307
@@ -68,8 +69,8 @@ flwr/proto/node_pb2.py,sha256=1zfXEvgGObglIcaVb4SLFmOcHZvA8eHzEtMFM5A6FYY,1081
68
69
  flwr/proto/node_pb2.pyi,sha256=aX3BHhgXvJE1rvcRnEE_gB-5GcaFQ0SJ88yTE223bjI,751
69
70
  flwr/proto/node_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
70
71
  flwr/proto/node_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
71
- flwr/proto/task_pb2.py,sha256=PhD59jZWtEGwJ6wJRl2cC3ZaNS8AxpGrZ65N1DCB6c8,4900
72
- flwr/proto/task_pb2.pyi,sha256=vdsSlvMkg9vN-qQsf6HgV_JbbYrBK17f-fkeJo8a55Y,10843
72
+ flwr/proto/task_pb2.py,sha256=CHwSZTHLWIJyP53Z2hKkmFbr72uPUg6YBiZjdlp0bTY,4938
73
+ flwr/proto/task_pb2.pyi,sha256=ACLlnnxaYQTcApQupzwV2dxdqjtK8IPHANihoosSmLw,10974
73
74
  flwr/proto/task_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
74
75
  flwr/proto/task_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
75
76
  flwr/proto/transport_pb2.py,sha256=cURzfpCgZvH7GEvBPLvTYijE3HvhK1MePjINk4xYArk,9781
@@ -136,8 +137,8 @@ flwr/simulation/ray_transport/__init__.py,sha256=FsaAnzC4cw4DqoouBCix6496k29jACk
136
137
  flwr/simulation/ray_transport/ray_actor.py,sha256=S_E-7Bk0ONWx12b0ObP3CtzJSEL3yPxpFVcYfkDx6Es,17044
137
138
  flwr/simulation/ray_transport/ray_client_proxy.py,sha256=RziUVY9PmuI8fJEbra-Vk9oWwRxALDZOeF1fAW-a9wg,9430
138
139
  flwr/simulation/ray_transport/utils.py,sha256=e0mkFOgOXSJHSQdiipoggF-DLBXaJZVytx9auQ35fCg,3368
139
- flwr_nightly-1.7.0.dev20240118.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
140
- flwr_nightly-1.7.0.dev20240118.dist-info/METADATA,sha256=qylFcleupNUtA6tHNz1Y-GTgnj2utWRHkETkX9dsLTM,13440
141
- flwr_nightly-1.7.0.dev20240118.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
142
- flwr_nightly-1.7.0.dev20240118.dist-info/entry_points.txt,sha256=1uLlD5tIunkzALMfMWnqjdE_D5hRUX_I1iMmOMv6tZI,181
143
- flwr_nightly-1.7.0.dev20240118.dist-info/RECORD,,
140
+ flwr_nightly-1.7.0.dev20240119.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
141
+ flwr_nightly-1.7.0.dev20240119.dist-info/METADATA,sha256=q43maEy62rOQbLN38oKMTm8K7_KxfdGneQB-FyaXJYQ,13440
142
+ flwr_nightly-1.7.0.dev20240119.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
143
+ flwr_nightly-1.7.0.dev20240119.dist-info/entry_points.txt,sha256=1uLlD5tIunkzALMfMWnqjdE_D5hRUX_I1iMmOMv6tZI,181
144
+ flwr_nightly-1.7.0.dev20240119.dist-info/RECORD,,