flwr-nightly 1.12.0.dev20240916__py3-none-any.whl → 1.12.0.dev20240918__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.

@@ -17,7 +17,7 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
17
17
  from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
18
18
 
19
19
 
20
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/clientappio.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x18\x66lwr/proto/message.proto\"W\n\x15\x43lientAppOutputStatus\x12-\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x1f.flwr.proto.ClientAppOutputCode\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x11\n\x0fGetTokenRequest\"!\n\x10GetTokenResponse\x12\r\n\x05token\x18\x01 \x01(\x12\"+\n\x1aPullClientAppInputsRequest\x12\r\n\x05token\x18\x01 \x01(\x12\"\xa5\x01\n\x1bPullClientAppInputsResponse\x12$\n\x07message\x18\x01 \x01(\x0b\x32\x13.flwr.proto.Message\x12$\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Context\x12\x1c\n\x03run\x18\x03 \x01(\x0b\x32\x0f.flwr.proto.Run\x12\x1c\n\x03\x66\x61\x62\x18\x04 \x01(\x0b\x32\x0f.flwr.proto.Fab\"x\n\x1bPushClientAppOutputsRequest\x12\r\n\x05token\x18\x01 \x01(\x12\x12$\n\x07message\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Message\x12$\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x13.flwr.proto.Context\"Q\n\x1cPushClientAppOutputsResponse\x12\x31\n\x06status\x18\x01 \x01(\x0b\x32!.flwr.proto.ClientAppOutputStatus*L\n\x13\x43lientAppOutputCode\x12\x0b\n\x07SUCCESS\x10\x00\x12\x15\n\x11\x44\x45\x41\x44LINE_EXCEEDED\x10\x01\x12\x11\n\rUNKNOWN_ERROR\x10\x02\x32\xad\x02\n\x0b\x43lientAppIo\x12G\n\x08GetToken\x12\x1b.flwr.proto.GetTokenRequest\x1a\x1c.flwr.proto.GetTokenResponse\"\x00\x12h\n\x13PullClientAppInputs\x12&.flwr.proto.PullClientAppInputsRequest\x1a\'.flwr.proto.PullClientAppInputsResponse\"\x00\x12k\n\x14PushClientAppOutputs\x12\'.flwr.proto.PushClientAppOutputsRequest\x1a(.flwr.proto.PushClientAppOutputsResponse\"\x00\x62\x06proto3')
20
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/clientappio.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x18\x66lwr/proto/message.proto\"W\n\x15\x43lientAppOutputStatus\x12-\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x1f.flwr.proto.ClientAppOutputCode\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x11\n\x0fGetTokenRequest\"!\n\x10GetTokenResponse\x12\r\n\x05token\x18\x01 \x01(\x04\"+\n\x1aPullClientAppInputsRequest\x12\r\n\x05token\x18\x01 \x01(\x04\"\xa5\x01\n\x1bPullClientAppInputsResponse\x12$\n\x07message\x18\x01 \x01(\x0b\x32\x13.flwr.proto.Message\x12$\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Context\x12\x1c\n\x03run\x18\x03 \x01(\x0b\x32\x0f.flwr.proto.Run\x12\x1c\n\x03\x66\x61\x62\x18\x04 \x01(\x0b\x32\x0f.flwr.proto.Fab\"x\n\x1bPushClientAppOutputsRequest\x12\r\n\x05token\x18\x01 \x01(\x04\x12$\n\x07message\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Message\x12$\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x13.flwr.proto.Context\"Q\n\x1cPushClientAppOutputsResponse\x12\x31\n\x06status\x18\x01 \x01(\x0b\x32!.flwr.proto.ClientAppOutputStatus*L\n\x13\x43lientAppOutputCode\x12\x0b\n\x07SUCCESS\x10\x00\x12\x15\n\x11\x44\x45\x41\x44LINE_EXCEEDED\x10\x01\x12\x11\n\rUNKNOWN_ERROR\x10\x02\x32\xad\x02\n\x0b\x43lientAppIo\x12G\n\x08GetToken\x12\x1b.flwr.proto.GetTokenRequest\x1a\x1c.flwr.proto.GetTokenResponse\"\x00\x12h\n\x13PullClientAppInputs\x12&.flwr.proto.PullClientAppInputsRequest\x1a\'.flwr.proto.PullClientAppInputsResponse\"\x00\x12k\n\x14PushClientAppOutputs\x12\'.flwr.proto.PushClientAppOutputsRequest\x1a(.flwr.proto.PushClientAppOutputsResponse\"\x00\x62\x06proto3')
21
21
 
22
22
  _globals = globals()
23
23
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
flwr/proto/driver_pb2.py CHANGED
@@ -19,7 +19,7 @@ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
19
19
  from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
20
20
 
21
21
 
22
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66lwr/proto/driver.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x15\x66lwr/proto/task.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xeb\x01\n\x10\x43reateRunRequest\x12\x0e\n\x06\x66\x61\x62_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x02 \x01(\t\x12I\n\x0foverride_config\x18\x03 \x03(\x0b\x32\x30.flwr.proto.CreateRunRequest.OverrideConfigEntry\x12\x1c\n\x03\x66\x61\x62\x18\x04 \x01(\x0b\x32\x0f.flwr.proto.Fab\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"#\n\x11\x43reateRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"@\n\x12PushTaskInsRequest\x12*\n\rtask_ins_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"\'\n\x13PushTaskInsResponse\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"F\n\x12PullTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"A\n\x13PullTaskResResponse\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes2\xc7\x03\n\x06\x44river\x12J\n\tCreateRun\x12\x1c.flwr.proto.CreateRunRequest\x1a\x1d.flwr.proto.CreateRunResponse\"\x00\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12P\n\x0bPushTaskIns\x12\x1e.flwr.proto.PushTaskInsRequest\x1a\x1f.flwr.proto.PushTaskInsResponse\"\x00\x12P\n\x0bPullTaskRes\x12\x1e.flwr.proto.PullTaskResRequest\x1a\x1f.flwr.proto.PullTaskResResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x62\x06proto3')
22
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66lwr/proto/driver.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x15\x66lwr/proto/task.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xeb\x01\n\x10\x43reateRunRequest\x12\x0e\n\x06\x66\x61\x62_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x02 \x01(\t\x12I\n\x0foverride_config\x18\x03 \x03(\x0b\x32\x30.flwr.proto.CreateRunRequest.OverrideConfigEntry\x12\x1c\n\x03\x66\x61\x62\x18\x04 \x01(\x0b\x32\x0f.flwr.proto.Fab\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"#\n\x11\x43reateRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"@\n\x12PushTaskInsRequest\x12*\n\rtask_ins_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"\'\n\x13PushTaskInsResponse\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"F\n\x12PullTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"A\n\x13PullTaskResResponse\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes2\xc7\x03\n\x06\x44river\x12J\n\tCreateRun\x12\x1c.flwr.proto.CreateRunRequest\x1a\x1d.flwr.proto.CreateRunResponse\"\x00\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12P\n\x0bPushTaskIns\x12\x1e.flwr.proto.PushTaskInsRequest\x1a\x1f.flwr.proto.PushTaskInsResponse\"\x00\x12P\n\x0bPullTaskRes\x12\x1e.flwr.proto.PullTaskResRequest\x1a\x1f.flwr.proto.PullTaskResResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x62\x06proto3')
23
23
 
24
24
  _globals = globals()
25
25
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
flwr/proto/exec_pb2.py CHANGED
@@ -16,7 +16,7 @@ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__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/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xdf\x02\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12L\n\x11\x66\x65\x64\x65ration_config\x18\x03 \x03(\x0b\x32\x31.flwr.proto.StartRunRequest.FederationConfigEntry\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1aK\n\x15\x46\x65\x64\x65rationConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"#\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"(\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t2\xa0\x01\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x62\x06proto3')
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xdf\x02\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12L\n\x11\x66\x65\x64\x65ration_config\x18\x03 \x03(\x0b\x32\x31.flwr.proto.StartRunRequest.FederationConfigEntry\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1aK\n\x15\x46\x65\x64\x65rationConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"#\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"(\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t2\xa0\x01\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x62\x06proto3')
20
20
 
21
21
  _globals = globals()
22
22
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
flwr/proto/message_pb2.py CHANGED
@@ -17,7 +17,7 @@ from flwr.proto import recordset_pb2 as flwr_dot_proto_dot_recordset__pb2
17
17
  from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
18
18
 
19
19
 
20
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x1a\x66lwr/proto/transport.proto\"{\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12&\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xbf\x02\n\x07\x43ontext\x12\x0f\n\x07node_id\x18\x01 \x01(\x12\x12\x38\n\x0bnode_config\x18\x02 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12$\n\x05state\x18\x03 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12\x36\n\nrun_config\x18\x04 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xbb\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x12\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x12\x12\x18\n\x10reply_to_message\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\t\x12\x12\n\ncreated_at\x18\t \x01(\x01\x62\x06proto3')
20
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x1a\x66lwr/proto/transport.proto\"{\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12&\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xbf\x02\n\x07\x43ontext\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\x12\x38\n\x0bnode_config\x18\x02 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12$\n\x05state\x18\x03 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12\x36\n\nrun_config\x18\x04 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xbb\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x04\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x04\x12\x18\n\x10reply_to_message\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\t\x12\x12\n\ncreated_at\x18\t \x01(\x01\x62\x06proto3')
21
21
 
22
22
  _globals = globals()
23
23
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
flwr/proto/node_pb2.py CHANGED
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/node.proto\x12\nflwr.proto\"*\n\x04Node\x12\x0f\n\x07node_id\x18\x01 \x01(\x12\x12\x11\n\tanonymous\x18\x02 \x01(\x08\x62\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/node.proto\x12\nflwr.proto\"*\n\x04Node\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\x12\x11\n\tanonymous\x18\x02 \x01(\x08\x62\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
flwr/proto/run_pb2.py CHANGED
@@ -15,7 +15,7 @@ _sym_db = _symbol_database.Default()
15
15
  from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
16
16
 
17
17
 
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xd5\x01\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\x12<\n\x0foverride_config\x18\x04 \x03(\x0b\x32#.flwr.proto.Run.OverrideConfigEntry\x12\x10\n\x08\x66\x61\x62_hash\x18\x05 \x01(\t\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\x1f\n\rGetRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Runb\x06proto3')
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xd5\x01\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\x12<\n\x0foverride_config\x18\x04 \x03(\x0b\x32#.flwr.proto.Run.OverrideConfigEntry\x12\x10\n\x08\x66\x61\x62_hash\x18\x05 \x01(\t\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\x1f\n\rGetRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Runb\x06proto3')
19
19
 
20
20
  _globals = globals()
21
21
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
flwr/proto/task_pb2.py CHANGED
@@ -17,7 +17,7 @@ from flwr.proto import recordset_pb2 as flwr_dot_proto_dot_recordset__pb2
17
17
  from flwr.proto import error_pb2 as flwr_dot_proto_dot_error__pb2
18
18
 
19
19
 
20
- 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/recordset.proto\x1a\x16\x66lwr/proto/error.proto\"\x89\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(\x01\x12\x14\n\x0c\x64\x65livered_at\x18\x04 \x01(\t\x12\x11\n\tpushed_at\x18\x05 \x01(\x01\x12\x0b\n\x03ttl\x18\x06 \x01(\x01\x12\x10\n\x08\x61ncestry\x18\x07 \x03(\t\x12\x11\n\ttask_type\x18\x08 \x01(\t\x12(\n\trecordset\x18\t \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12 \n\x05\x65rror\x18\n \x01(\x0b\x32\x11.flwr.proto.Error\"\\\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.Taskb\x06proto3')
20
+ 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/recordset.proto\x1a\x16\x66lwr/proto/error.proto\"\x89\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(\x01\x12\x14\n\x0c\x64\x65livered_at\x18\x04 \x01(\t\x12\x11\n\tpushed_at\x18\x05 \x01(\x01\x12\x0b\n\x03ttl\x18\x06 \x01(\x01\x12\x10\n\x08\x61ncestry\x18\x07 \x03(\t\x12\x11\n\ttask_type\x18\x08 \x01(\t\x12(\n\trecordset\x18\t \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12 \n\x05\x65rror\x18\n \x01(\x0b\x32\x11.flwr.proto.Error\"\\\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(\x04\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(\x04\x12\x1e\n\x04task\x18\x04 \x01(\x0b\x32\x10.flwr.proto.Taskb\x06proto3')
21
21
 
22
22
  _globals = globals()
23
23
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -33,7 +33,14 @@ from flwr.proto.task_pb2 import Task, TaskIns, TaskRes # pylint: disable=E0611
33
33
  from flwr.server.utils.validator import validate_task_ins_or_res
34
34
 
35
35
  from .state import State
36
- from .utils import generate_rand_int_from_bytes, make_node_unavailable_taskres
36
+ from .utils import (
37
+ convert_sint64_to_uint64,
38
+ convert_sint64_values_in_dict_to_uint64,
39
+ convert_uint64_to_sint64,
40
+ convert_uint64_values_in_dict_to_sint64,
41
+ generate_rand_int_from_bytes,
42
+ make_node_unavailable_taskres,
43
+ )
37
44
 
38
45
  SQL_CREATE_TABLE_NODE = """
39
46
  CREATE TABLE IF NOT EXISTS node(
@@ -223,6 +230,12 @@ class SqliteState(State): # pylint: disable=R0904
223
230
  # Store TaskIns
224
231
  task_ins.task_id = str(task_id)
225
232
  data = (task_ins_to_dict(task_ins),)
233
+
234
+ # Convert values from uint64 to sint64 for SQLite
235
+ convert_uint64_values_in_dict_to_sint64(
236
+ data[0], ["run_id", "producer_node_id", "consumer_node_id"]
237
+ )
238
+
226
239
  columns = ", ".join([f":{key}" for key in data[0]])
227
240
  query = f"INSERT INTO task_ins VALUES({columns});"
228
241
 
@@ -284,6 +297,9 @@ class SqliteState(State): # pylint: disable=R0904
284
297
  AND delivered_at = ""
285
298
  """
286
299
  else:
300
+ # Convert the uint64 value to sint64 for SQLite
301
+ data["node_id"] = convert_uint64_to_sint64(node_id)
302
+
287
303
  # Retrieve all TaskIns for node_id
288
304
  query = """
289
305
  SELECT task_id
@@ -292,7 +308,6 @@ class SqliteState(State): # pylint: disable=R0904
292
308
  AND consumer_node_id == :node_id
293
309
  AND delivered_at = ""
294
310
  """
295
- data["node_id"] = node_id
296
311
 
297
312
  if limit is not None:
298
313
  query += " LIMIT :limit"
@@ -322,6 +337,12 @@ class SqliteState(State): # pylint: disable=R0904
322
337
  # Run query
323
338
  rows = self.query(query, data)
324
339
 
340
+ for row in rows:
341
+ # Convert values from sint64 to uint64
342
+ convert_sint64_values_in_dict_to_uint64(
343
+ row, ["run_id", "producer_node_id", "consumer_node_id"]
344
+ )
345
+
325
346
  result = [dict_to_task_ins(row) for row in rows]
326
347
 
327
348
  return result
@@ -354,6 +375,12 @@ class SqliteState(State): # pylint: disable=R0904
354
375
  # Store TaskIns
355
376
  task_res.task_id = str(task_id)
356
377
  data = (task_res_to_dict(task_res),)
378
+
379
+ # Convert values from uint64 to sint64 for SQLite
380
+ convert_uint64_values_in_dict_to_sint64(
381
+ data[0], ["run_id", "producer_node_id", "consumer_node_id"]
382
+ )
383
+
357
384
  columns = ", ".join([f":{key}" for key in data[0]])
358
385
  query = f"INSERT INTO task_res VALUES({columns});"
359
386
 
@@ -431,6 +458,12 @@ class SqliteState(State): # pylint: disable=R0904
431
458
  # Run query
432
459
  rows = self.query(query, data)
433
460
 
461
+ for row in rows:
462
+ # Convert values from sint64 to uint64
463
+ convert_sint64_values_in_dict_to_uint64(
464
+ row, ["run_id", "producer_node_id", "consumer_node_id"]
465
+ )
466
+
434
467
  result = [dict_to_task_res(row) for row in rows]
435
468
 
436
469
  # 1. Query: Fetch consumer_node_id of remaining task_ids
@@ -474,6 +507,13 @@ class SqliteState(State): # pylint: disable=R0904
474
507
  for row in task_ins_rows:
475
508
  if limit and len(result) == limit:
476
509
  break
510
+
511
+ for row in rows:
512
+ # Convert values from sint64 to uint64
513
+ convert_sint64_values_in_dict_to_uint64(
514
+ row, ["run_id", "producer_node_id", "consumer_node_id"]
515
+ )
516
+
477
517
  task_ins = dict_to_task_ins(row)
478
518
  err_taskres = make_node_unavailable_taskres(
479
519
  ref_taskins=task_ins,
@@ -544,8 +584,11 @@ class SqliteState(State): # pylint: disable=R0904
544
584
  self, ping_interval: float, public_key: Optional[bytes] = None
545
585
  ) -> int:
546
586
  """Create, store in state, and return `node_id`."""
547
- # Sample a random int64 as node_id
548
- node_id = generate_rand_int_from_bytes(NODE_ID_NUM_BYTES)
587
+ # Sample a random uint64 as node_id
588
+ uint64_node_id = generate_rand_int_from_bytes(NODE_ID_NUM_BYTES)
589
+
590
+ # Convert the uint64 value to sint64 for SQLite
591
+ sint64_node_id = convert_uint64_to_sint64(uint64_node_id)
549
592
 
550
593
  query = "SELECT node_id FROM node WHERE public_key = :public_key;"
551
594
  row = self.query(query, {"public_key": public_key})
@@ -562,17 +605,28 @@ class SqliteState(State): # pylint: disable=R0904
562
605
 
563
606
  try:
564
607
  self.query(
565
- query, (node_id, time.time() + ping_interval, ping_interval, public_key)
608
+ query,
609
+ (
610
+ sint64_node_id,
611
+ time.time() + ping_interval,
612
+ ping_interval,
613
+ public_key,
614
+ ),
566
615
  )
567
616
  except sqlite3.IntegrityError:
568
617
  log(ERROR, "Unexpected node registration failure.")
569
618
  return 0
570
- return node_id
619
+
620
+ # Note: we need to return the uint64 value of the node_id
621
+ return uint64_node_id
571
622
 
572
623
  def delete_node(self, node_id: int, public_key: Optional[bytes] = None) -> None:
573
624
  """Delete a node."""
625
+ # Convert the uint64 value to sint64 for SQLite
626
+ sint64_node_id = convert_uint64_to_sint64(node_id)
627
+
574
628
  query = "DELETE FROM node WHERE node_id = ?"
575
- params = (node_id,)
629
+ params = (sint64_node_id,)
576
630
 
577
631
  if public_key is not None:
578
632
  query += " AND public_key = ?"
@@ -597,15 +651,20 @@ class SqliteState(State): # pylint: disable=R0904
597
651
  If the provided `run_id` does not exist or has no matching nodes,
598
652
  an empty `Set` MUST be returned.
599
653
  """
654
+ # Convert the uint64 value to sint64 for SQLite
655
+ sint64_run_id = convert_uint64_to_sint64(run_id)
656
+
600
657
  # Validate run ID
601
658
  query = "SELECT COUNT(*) FROM run WHERE run_id = ?;"
602
- if self.query(query, (run_id,))[0]["COUNT(*)"] == 0:
659
+ if self.query(query, (sint64_run_id,))[0]["COUNT(*)"] == 0:
603
660
  return set()
604
661
 
605
662
  # Get nodes
606
663
  query = "SELECT node_id FROM node WHERE online_until > ?;"
607
664
  rows = self.query(query, (time.time(),))
608
- result: set[int] = {row["node_id"] for row in rows}
665
+
666
+ # Convert sint64 node_ids to uint64
667
+ result: set[int] = {convert_sint64_to_uint64(row["node_id"]) for row in rows}
609
668
  return result
610
669
 
611
670
  def get_node_id(self, node_public_key: bytes) -> Optional[int]:
@@ -614,7 +673,11 @@ class SqliteState(State): # pylint: disable=R0904
614
673
  row = self.query(query, {"public_key": node_public_key})
615
674
  if len(row) > 0:
616
675
  node_id: int = row[0]["node_id"]
617
- return node_id
676
+
677
+ # Convert the sint64 value to uint64 after reading from SQLite
678
+ uint64_node_id = convert_sint64_to_uint64(node_id)
679
+
680
+ return uint64_node_id
618
681
  return None
619
682
 
620
683
  def create_run(
@@ -626,12 +689,15 @@ class SqliteState(State): # pylint: disable=R0904
626
689
  ) -> int:
627
690
  """Create a new run for the specified `fab_id` and `fab_version`."""
628
691
  # Sample a random int64 as run_id
629
- run_id = generate_rand_int_from_bytes(RUN_ID_NUM_BYTES)
692
+ uint64_run_id = generate_rand_int_from_bytes(RUN_ID_NUM_BYTES)
693
+
694
+ # Convert the uint64 value to sint64 for SQLite
695
+ sint64_run_id = convert_uint64_to_sint64(uint64_run_id)
630
696
 
631
697
  # Check conflicts
632
698
  query = "SELECT COUNT(*) FROM run WHERE run_id = ?;"
633
- # If run_id does not exist
634
- if self.query(query, (run_id,))[0]["COUNT(*)"] == 0:
699
+ # If sint64_run_id does not exist
700
+ if self.query(query, (sint64_run_id,))[0]["COUNT(*)"] == 0:
635
701
  query = (
636
702
  "INSERT INTO run "
637
703
  "(run_id, fab_id, fab_version, fab_hash, override_config)"
@@ -639,14 +705,22 @@ class SqliteState(State): # pylint: disable=R0904
639
705
  )
640
706
  if fab_hash:
641
707
  self.query(
642
- query, (run_id, "", "", fab_hash, json.dumps(override_config))
708
+ query,
709
+ (sint64_run_id, "", "", fab_hash, json.dumps(override_config)),
643
710
  )
644
711
  else:
645
712
  self.query(
646
713
  query,
647
- (run_id, fab_id, fab_version, "", json.dumps(override_config)),
714
+ (
715
+ sint64_run_id,
716
+ fab_id,
717
+ fab_version,
718
+ "",
719
+ json.dumps(override_config),
720
+ ),
648
721
  )
649
- return run_id
722
+ # Note: we need to return the uint64 value of the run_id
723
+ return uint64_run_id
650
724
  log(ERROR, "Unexpected run creation failure.")
651
725
  return 0
652
726
 
@@ -705,11 +779,13 @@ class SqliteState(State): # pylint: disable=R0904
705
779
 
706
780
  def get_run(self, run_id: int) -> Optional[Run]:
707
781
  """Retrieve information about the run with the specified `run_id`."""
782
+ # Convert the uint64 value to sint64 for SQLite
783
+ sint64_run_id = convert_uint64_to_sint64(run_id)
708
784
  query = "SELECT * FROM run WHERE run_id = ?;"
709
785
  try:
710
- row = self.query(query, (run_id,))[0]
786
+ row = self.query(query, (sint64_run_id,))[0]
711
787
  return Run(
712
- run_id=run_id,
788
+ run_id=convert_sint64_to_uint64(row["run_id"]),
713
789
  fab_id=row["fab_id"],
714
790
  fab_version=row["fab_version"],
715
791
  fab_hash=row["fab_hash"],
@@ -721,10 +797,14 @@ class SqliteState(State): # pylint: disable=R0904
721
797
 
722
798
  def acknowledge_ping(self, node_id: int, ping_interval: float) -> bool:
723
799
  """Acknowledge a ping received from a node, serving as a heartbeat."""
800
+ sint64_node_id = convert_uint64_to_sint64(node_id)
801
+
724
802
  # Update `online_until` and `ping_interval` for the given `node_id`
725
803
  query = "UPDATE node SET online_until = ?, ping_interval = ? WHERE node_id = ?;"
726
804
  try:
727
- self.query(query, (time.time() + ping_interval, ping_interval, node_id))
805
+ self.query(
806
+ query, (time.time() + ping_interval, ping_interval, sint64_node_id)
807
+ )
728
808
  return True
729
809
  except sqlite3.IntegrityError:
730
810
  log(ERROR, "`node_id` does not exist.")
@@ -33,8 +33,104 @@ NODE_UNAVAILABLE_ERROR_REASON = (
33
33
 
34
34
 
35
35
  def generate_rand_int_from_bytes(num_bytes: int) -> int:
36
- """Generate a random `num_bytes` integer."""
37
- return int.from_bytes(urandom(num_bytes), "little", signed=True)
36
+ """Generate a random unsigned integer from `num_bytes` bytes."""
37
+ return int.from_bytes(urandom(num_bytes), "little", signed=False)
38
+
39
+
40
+ def convert_uint64_to_sint64(u: int) -> int:
41
+ """Convert a uint64 value to a sint64 value with the same bit sequence.
42
+
43
+ Parameters
44
+ ----------
45
+ u : int
46
+ The unsigned 64-bit integer to convert.
47
+
48
+ Returns
49
+ -------
50
+ int
51
+ The signed 64-bit integer equivalent.
52
+
53
+ The signed 64-bit integer will have the same bit pattern as the
54
+ unsigned 64-bit integer but may have a different decimal value.
55
+
56
+ For numbers within the range [0, `sint64` max value], the decimal
57
+ value remains the same. However, for numbers greater than the `sint64`
58
+ max value, the decimal value will differ due to the wraparound caused
59
+ by the sign bit.
60
+ """
61
+ if u >= (1 << 63):
62
+ return u - (1 << 64)
63
+ return u
64
+
65
+
66
+ def convert_sint64_to_uint64(s: int) -> int:
67
+ """Convert a sint64 value to a uint64 value with the same bit sequence.
68
+
69
+ Parameters
70
+ ----------
71
+ s : int
72
+ The signed 64-bit integer to convert.
73
+
74
+ Returns
75
+ -------
76
+ int
77
+ The unsigned 64-bit integer equivalent.
78
+
79
+ The unsigned 64-bit integer will have the same bit pattern as the
80
+ signed 64-bit integer but may have a different decimal value.
81
+
82
+ For negative `sint64` values, the conversion adds 2^64 to the
83
+ signed value to obtain the equivalent `uint64` value. For non-negative
84
+ `sint64` values, the decimal value remains unchanged in the `uint64`
85
+ representation.
86
+ """
87
+ if s < 0:
88
+ return s + (1 << 64)
89
+ return s
90
+
91
+
92
+ def convert_uint64_values_in_dict_to_sint64(
93
+ data_dict: dict[str, int], keys: list[str]
94
+ ) -> None:
95
+ """Convert uint64 values to sint64 in the given dictionary.
96
+
97
+ Parameters
98
+ ----------
99
+ data_dict : dict[str, int]
100
+ A dictionary where the values are integers to be converted.
101
+ keys : list[str]
102
+ A list of keys in the dictionary whose values need to be converted.
103
+
104
+ Returns
105
+ -------
106
+ None
107
+ This function does not return a value. It modifies `data_dict` in place.
108
+ """
109
+ for key in keys:
110
+ if key in data_dict:
111
+ data_dict[key] = convert_uint64_to_sint64(data_dict[key])
112
+
113
+
114
+ def convert_sint64_values_in_dict_to_uint64(
115
+ data_dict: dict[str, int], keys: list[str]
116
+ ) -> None:
117
+ """Convert sint64 values to uint64 in the given dictionary.
118
+
119
+ Parameters
120
+ ----------
121
+ data_dict : dict[str, int]
122
+ A dictionary where the values are integers to be converted.
123
+ keys : list[str]
124
+ A list of keys in the dictionary whose values need to be converted.
125
+
126
+ Returns
127
+ -------
128
+ None
129
+ This function does not return a value. It modifies `data_dict` in place.
130
+ """
131
+ for key in keys:
132
+ if key in data_dict:
133
+ data_dict[key] = convert_sint64_to_uint64(data_dict[key])
38
134
 
39
135
 
40
136
  def make_node_unavailable_taskres(ref_taskins: TaskIns) -> TaskRes:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.12.0.dev20240916
3
+ Version: 1.12.0.dev20240918
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -135,7 +135,7 @@ flwr/common/telemetry.py,sha256=PvdlipCPYciqEgmXRwQ1HklP1uyECcNqt9HTBzthmAg,8904
135
135
  flwr/common/typing.py,sha256=ZVviEABqDeGCyo_yM9ft8EbIGA9RaLOeoNHmMnTkmUo,4985
136
136
  flwr/common/version.py,sha256=tCcl_FvxVK206C1dxIJCs4TjL06WmyaODBP19FRHE1c,1324
137
137
  flwr/proto/__init__.py,sha256=hbY7JYakwZwCkYgCNlmHdc8rtvfoJbAZLalMdc--CGc,683
138
- flwr/proto/clientappio_pb2.py,sha256=3qT-IbcGPFGh9WKpa9ZRKCYzUtwrDf-ziEY9uBhd_gU,3703
138
+ flwr/proto/clientappio_pb2.py,sha256=Y3PMv-JMaBGehpslgbvGY6l2u5vNpfCTFWu-fmAmBJ4,3703
139
139
  flwr/proto/clientappio_pb2.pyi,sha256=iL6pOPmnot5wP3aXGiDfiUpp-eJIkysyju0ebPehS8Y,5670
140
140
  flwr/proto/clientappio_pb2_grpc.py,sha256=G35GhZ3iEOL8N6tu7Kn_ip4QUx4O2HveXngHAuU2YEM,6112
141
141
  flwr/proto/clientappio_pb2_grpc.pyi,sha256=cybktpMPaIMwrItd8hQaQDnRv4zNu_wgRddSqR9REyI,1822
@@ -143,7 +143,7 @@ flwr/proto/common_pb2.py,sha256=uzSmq0FJdC-MriN9UGPFs7QVIFTKJmX5lyLnzcyZ5WE,2405
143
143
  flwr/proto/common_pb2.pyi,sha256=0ylFO7G79qqLuRg9IQUCBdgyIIFv4m8VzrfoWad4xXU,5394
144
144
  flwr/proto/common_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
145
145
  flwr/proto/common_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
146
- flwr/proto/driver_pb2.py,sha256=Zeh0qvAdcKED8fxHDai67mgDq0iFR0b87C8BbOemvi8,4299
146
+ flwr/proto/driver_pb2.py,sha256=gxlDAZUCELzYCkmhxcJdVyGXLmzYFXVFeqlJAIHPChE,4299
147
147
  flwr/proto/driver_pb2.pyi,sha256=apvTyy7N0SV3H8mueOwgB8aDETtxb6ZuKB1g1nMmJ4o,6390
148
148
  flwr/proto/driver_pb2_grpc.py,sha256=ZNDFyPfEZt5L3eFqJRwAE_ylwWLTNf1hfXzUGkVpzTI,10462
149
149
  flwr/proto/driver_pb2_grpc.pyi,sha256=_SLFI7AvJv5JU_7axipERF4oTspRh3bzZswLiKDtV1E,2812
@@ -151,7 +151,7 @@ flwr/proto/error_pb2.py,sha256=LarjKL90LbwkXKlhzNrDssgl4DXcvIPve8NVCXHpsKA,1084
151
151
  flwr/proto/error_pb2.pyi,sha256=ZNH4HhJTU_KfMXlyCeg8FwU-fcUYxTqEmoJPtWtHikc,734
152
152
  flwr/proto/error_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
153
153
  flwr/proto/error_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
154
- flwr/proto/exec_pb2.py,sha256=iqAvJ03atrueo5duiRHD_peegJiLsrWuNnVU8lA2PXw,3231
154
+ flwr/proto/exec_pb2.py,sha256=GH_VWC-BZwWmeWdmjP4IkXvwR8yY1uBZNNwKru-ZZL4,3231
155
155
  flwr/proto/exec_pb2.pyi,sha256=5y6L3xFkAuCfLTn2pVIHQAlXp17YcTTq8WVDS7_MPl4,4273
156
156
  flwr/proto/exec_pb2_grpc.py,sha256=faAN19XEMP8GTKrcIU6jvlWkN44n2KiUsZh_OG0sYcg,4072
157
157
  flwr/proto/exec_pb2_grpc.pyi,sha256=VrFhT1Um3Nb8UC2YqnR9GIiM-Yyx0FqaxVOWljh-G_w,1208
@@ -167,11 +167,11 @@ flwr/proto/grpcadapter_pb2.py,sha256=bb8mW09XzNCpMdr1KuYQkefPFWR8lc8y1uL6Uk0TtsM
167
167
  flwr/proto/grpcadapter_pb2.pyi,sha256=AR77gDsF6f8zqSIQp3877DUd7S8lP95lFak5Ir_WPkw,1716
168
168
  flwr/proto/grpcadapter_pb2_grpc.py,sha256=rRNuNES5nBugUZWfeA8oAy8dMHgzqU_PF1srTseo3b8,2634
169
169
  flwr/proto/grpcadapter_pb2_grpc.pyi,sha256=AgA9Qo_lnANb9SNuPzbZGAxupau-xcqYawZz6vqf-24,735
170
- flwr/proto/message_pb2.py,sha256=6fiapmq94u3T9wqW7tGsWVuyLanW31VAg0-rD2Hfk8U,3151
170
+ flwr/proto/message_pb2.py,sha256=GW0ID-d2pvtgylsKxtINQx_oORgNGel3WJ3ybZcXxtI,3151
171
171
  flwr/proto/message_pb2.pyi,sha256=_J9NjZa7Pr-kSO7-GGOL5EvIXQx5mQD04iVIvnVHBMU,5617
172
172
  flwr/proto/message_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
173
173
  flwr/proto/message_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
174
- flwr/proto/node_pb2.py,sha256=1zfXEvgGObglIcaVb4SLFmOcHZvA8eHzEtMFM5A6FYY,1081
174
+ flwr/proto/node_pb2.py,sha256=qrxEpf7Up9XhigP8g9cIHVhmpdKmYpxMdlO67H0xjEM,1081
175
175
  flwr/proto/node_pb2.pyi,sha256=aX3BHhgXvJE1rvcRnEE_gB-5GcaFQ0SJ88yTE223bjI,751
176
176
  flwr/proto/node_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
177
177
  flwr/proto/node_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
@@ -179,11 +179,11 @@ flwr/proto/recordset_pb2.py,sha256=un8L0kvBcgFXQIiQweOseeIJBjlOozUvQY9uTQ42Dqo,6
179
179
  flwr/proto/recordset_pb2.pyi,sha256=NPzCJWAj1xLWzeZ_xZ6uaObQjQfWGnnqlLtn4J-SoFY,14161
180
180
  flwr/proto/recordset_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
181
181
  flwr/proto/recordset_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
182
- flwr/proto/run_pb2.py,sha256=Fs2HlEgOFDm9-No40K8GE2o_4aTRXZrxa_jTeYPz9l4,2102
182
+ flwr/proto/run_pb2.py,sha256=zTH0YjBETYhQzv2MC5TD8cW8Lvsc89ublkFtGuHp0ek,2102
183
183
  flwr/proto/run_pb2.pyi,sha256=oIaKIjgyjnifossFMTSqQISEMb1IJYhSYGQYcAGBIS4,3063
184
184
  flwr/proto/run_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
185
185
  flwr/proto/run_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
186
- flwr/proto/task_pb2.py,sha256=xuXMmfPAWd7lhyyqhGrmjsfn_j_s5HRz21vMXtxziNE,2361
186
+ flwr/proto/task_pb2.py,sha256=R5GfHgL8IJRI_qHWNeILl1Y9zHjvB0tnCvMHmTgF4Is,2361
187
187
  flwr/proto/task_pb2.pyi,sha256=KJVsLm-THY5QjHreHDm_-OS1tyZyD61mx6BzOpoeMjw,4320
188
188
  flwr/proto/task_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
189
189
  flwr/proto/task_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
@@ -266,10 +266,10 @@ flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=7kB3re3mR53b7E6L6DP
266
266
  flwr/server/superlink/fleet/vce/vce_api.py,sha256=cGPsjS_4SJHm8jszGjsHh8ZNk9nqWoIQwW_62yKKR1Y,12647
267
267
  flwr/server/superlink/state/__init__.py,sha256=Gj2OTFLXvA-mAjBvwuKDM3rDrVaQPcIoybSa2uskMTE,1003
268
268
  flwr/server/superlink/state/in_memory_state.py,sha256=DvPSyK-ITZI9XfW-1M0bljLa6Sj0JIUeHFbg5tKKc2s,13142
269
- flwr/server/superlink/state/sqlite_state.py,sha256=jNL5cv_PkkgNctGeOmkCBkVPotyypiyjGN7oNfp1wpg,29398
269
+ flwr/server/superlink/state/sqlite_state.py,sha256=W1qFF8QvQ9CwhqCwE_sqDERiFVb5rqppira7gJSWI-w,32155
270
270
  flwr/server/superlink/state/state.py,sha256=KpM894R8RE1N0b-s_Nlii6i0TDxj0DRkKa3Vf24Gt70,8127
271
271
  flwr/server/superlink/state/state_factory.py,sha256=Fo8pBQ1WWrVJK5TOEPZ_zgJE69_mfTGjTO6czh6571o,2021
272
- flwr/server/superlink/state/utils.py,sha256=155ngcaSePy7nD8X4LHgpuVok6fcH5_CPNRiFAbLWDA,2407
272
+ flwr/server/superlink/state/utils.py,sha256=OsF3OOoU4bU4PgLWkypX6EDoFs0L8RP_mHEBG-tVqGA,5227
273
273
  flwr/server/typing.py,sha256=5kaRLZuxTEse9A0g7aVna2VhYxU3wTq1f3d3mtw7kXs,1019
274
274
  flwr/server/utils/__init__.py,sha256=pltsPHJoXmUIr3utjwwYxu7_ZAGy5u4MVHzv9iA5Un8,908
275
275
  flwr/server/utils/tensorboard.py,sha256=gEBD8w_5uaIfp5aw5RYH66lYZpd_SfkObHQ7eDd9MUk,5466
@@ -294,8 +294,8 @@ flwr/superexec/exec_grpc.py,sha256=ZPq7EP55Vwj0kRcLVuTCokFqfIgBk-7YmDykZoMKi-c,1
294
294
  flwr/superexec/exec_servicer.py,sha256=P4bJtQqCr0NiVIa-ss9lvdUM1SbM_ip5g5UqKp3dNL4,2344
295
295
  flwr/superexec/executor.py,sha256=k_adivto6R2U82DADOHNvdtobehBYreRek1gOEBIQnQ,2318
296
296
  flwr/superexec/simulation.py,sha256=J6pw-RqCSiUed8I_3MasZH4tl57ZmDebPAHNnbb0-vE,7420
297
- flwr_nightly-1.12.0.dev20240916.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
298
- flwr_nightly-1.12.0.dev20240916.dist-info/METADATA,sha256=xreQJvDx5PxfTJ9yYpO7yB8ro4-viX8WTW_vSuoXWD0,15452
299
- flwr_nightly-1.12.0.dev20240916.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
300
- flwr_nightly-1.12.0.dev20240916.dist-info/entry_points.txt,sha256=WUCbqhLEOzjx_lyATIM0-f0e8kOVaQjzwOvyOxHrMhs,434
301
- flwr_nightly-1.12.0.dev20240916.dist-info/RECORD,,
297
+ flwr_nightly-1.12.0.dev20240918.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
298
+ flwr_nightly-1.12.0.dev20240918.dist-info/METADATA,sha256=lnIUhAPYCT7RrWdszYziCh3uNppNN_xtOLQqihPN92I,15452
299
+ flwr_nightly-1.12.0.dev20240918.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
300
+ flwr_nightly-1.12.0.dev20240918.dist-info/entry_points.txt,sha256=WUCbqhLEOzjx_lyATIM0-f0e8kOVaQjzwOvyOxHrMhs,434
301
+ flwr_nightly-1.12.0.dev20240918.dist-info/RECORD,,