Skip to content

Commit 0f0b93e

Browse files
author
Axel Dahlberg
committed
Started adding tests for WFQ scheduler
1 parent 3772153 commit 0f0b93e

File tree

3 files changed

+60
-4
lines changed

3 files changed

+60
-4
lines changed

qlinklayer/distQueue.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
#
44
# Implements a simple distributed queue shared with one other node over a connection.
55
#
6-
# Author: Stephanie Wehner
6+
# Authors: Stephanie Wehner, Matthew Skrzypczyk, Axel Dahlberg
77

88
from copy import copy
99
from collections import deque, defaultdict
1010
from functools import partial
1111
from easysquid.easyfibre import ClassicalFibreConnection
1212
from easysquid.easyprotocol import EasyProtocol, ClassicalProtocol
1313
from netsquid.pydynaa import EventType, EventHandler
14-
from qlinklayer.localQueue import TimeoutLocalQueue, EGPLocalQueue
14+
from qlinklayer.localQueue import TimeoutLocalQueue, EGPLocalQueue, WFQLocalQueue
1515
from qlinklayer.toolbox import LinkLayerException
1616
from easysquid.toolbox import logger
1717

@@ -1094,3 +1094,22 @@ def _post_process_cmd_ADD_ACK(self, qid, qseq):
10941094
Sequence number within local queue of item
10951095
"""
10961096
self.queueList[qid].ack(qseq)
1097+
1098+
1099+
class WFQDistributedQueue(EGPDistributedQueue):
1100+
def _init_queues(self, numQueues=1, maxSeq=2 ** 8, throw_local_queue_events=False):
1101+
"""
1102+
Initializes the local queues
1103+
:param numQueues: int
1104+
Number of queues
1105+
:param throw_local_queue_events: bool
1106+
Whether the local queues should throw events for data collection or not
1107+
:return:
1108+
"""
1109+
# Initialize queues
1110+
self.queueList = []
1111+
self.numLocalQueues = numQueues
1112+
for j in range(numQueues):
1113+
q = WFQLocalQueue(qid=j, maxSeq=maxSeq, throw_events=throw_local_queue_events,
1114+
timeout_callback=self.timeout_callback)
1115+
self.queueList.append(q)

qlinklayer/localQueue.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,19 @@ def get_new_queue_item(self, request, seq):
306306
return _EGPLocalQueueItem(request, seq, self.qid, self.timeout_callback)
307307

308308

309+
class WFQLocalQueue(EGPLocalQueue):
310+
def get_new_queue_item(self, request, seq):
311+
"""
312+
Returns a fresh queue item instance
313+
:param request: :obj:`qlinklayer.EGP.EGPRequest`
314+
The request
315+
:param seq: int
316+
The queue item sequence number
317+
:return: :obj:`qlinklayer.localQueue._EGPLocalQueueItem`
318+
"""
319+
return _WFQLocalQueueItem(request, seq, self.qid, self.timeout_callback)
320+
321+
309322
class TimeoutLocalQueue(LocalQueue):
310323
def __init__(self, qid=None, wsize=None, maxSeq=None, throw_events=False):
311324
"""

tests/test_scheduler.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
import unittest
22
import logging
3+
from easysquid.easyfibre import ClassicalFibreConnection
34
from easysquid.easynetwork import EasyNetwork
45
from easysquid.qnode import QuantumNode
56
from easysquid.quantumMemoryDevice import NVCommunicationDevice
67
from easysquid.easyprotocol import TimedProtocol
78
from easysquid.toolbox import logger
89
from netsquid.simutil import sim_run, sim_reset
9-
from qlinklayer.distQueue import EGPDistributedQueue
10-
from qlinklayer.scheduler import StrictPriorityRequestScheduler
10+
from qlinklayer.distQueue import EGPDistributedQueue, WFQDistributedQueue
11+
from qlinklayer.scheduler import StrictPriorityRequestScheduler, WFQRequestScheduler
1112
from qlinklayer.qmm import QuantumMemoryManagement
1213
from qlinklayer.egp import EGPRequest
1314
from qlinklayer.scenario import EGPSimulationScenario
15+
from qlinklayer.feu import SingleClickFidelityEstimationUnit
16+
from qlinklayer.mhp import SimulatedNodeCentricMHPService
1417

1518
logger.setLevel(logging.CRITICAL)
1619

@@ -150,6 +153,27 @@ def test_priority(self):
150153
test_scheduler.clear_request(next_aid)
151154

152155

156+
class TestWFQRequestScheduler(unittest.TestCase):
157+
def setUp(self):
158+
alice = QuantumNode("alice", 0)
159+
bob = QuantumNode("bob", 0)
160+
conn = ClassicalFibreConnection(alice, bob, length=0.001)
161+
162+
distQueueA = WFQDistributedQueue(alice, numQueues=3, accept_all=True)
163+
distQueueB = WFQDistributedQueue(bob, numQueues=3, accept_all=True)
164+
distQueueA.connect_to_peer_protocol(distQueueB, conn=conn)
165+
166+
qmmA = QuantumMemoryManagement(alice)
167+
qmmB = QuantumMemoryManagement(bob)
168+
169+
# mhp_service = SimulatedNodeCentricMHPService("mhp_service", alice, bob)
170+
#
171+
# feuA = SingleClickFidelityEstimationUnit(alice, )
172+
# self.schedulerA = WFQRequestScheduler(distQueueA, qmmA, feuA)
173+
def test_init(self):
174+
pass
175+
176+
153177
class TestTimings(unittest.TestCase):
154178
def setUp(self):
155179
def timeout_handler(request):

0 commit comments

Comments
 (0)