Example #1
0
def test_update():
    o = OrderedSet()
    o.add(1)
    o.add(2)
    o.add(3)
    o.update([3, 4, 5])
    for item in (5, 4, 3, 2, 1):
        assert o.pop() == item
    with pytest.raises(KeyError):
        o.pop()
Example #2
0
def test_pop():
    o = OrderedSet()
    o.add(12)
    o.add(78)
    o.add(56)
    o.add(34)
    o.add(90)
    for item in [90, 34, 56, 78, 12]:
        assert o.pop() == item
    with pytest.raises(KeyError):  # @UndefinedVariable
        o.pop()
Example #3
0
def test_peek():
    o = OrderedSet()
    o.add(1)
    o.add(2)
    o.add(3)
    p1 = o.peek()
    p2 = o.pop()
    assert p1 == 3
    assert p1 == p2
    p3 = o.peek(last=False)
    assert p3 == 1
    p4 = o.pop(last=False)
    assert p4 == p3
class CoreTracker(object):
    """ Represents the number of cores and sdram left to allocate
    """

    __slots__ = [

        # The number of cores available after preallocation
        "_n_cores",

        # cores available including ones needed for preallocation
        "_cores",

        # keep list of counts of the cores per n_cores_available
        "_cores_counter",
    ]

    def __init__(self, chip, preallocated_resources, cores_counter):
        """
        :param ~spinn_machine.Chip chip:
            chip whose resources can be allocated
        :param preallocated_resources:
        :type preallocated_resources: PreAllocatedResourceContainer or None
        """
        self._cores = OrderedSet()
        for processor in chip.processors:
            if not processor.is_monitor:
                self._cores.add(processor.processor_id)
        self._n_cores = len(self._cores)
        if preallocated_resources:
            if chip.ip_address:
                self._n_cores -= preallocated_resources.cores_ethernet
            else:
                self._n_cores -= preallocated_resources.cores_all
        if chip.virtual:
            self._cores_counter = None
        else:
            self._cores_counter = cores_counter
        if self._cores_counter:
            self._cores_counter[self._n_cores] += 1

    @property
    def n_cores_available(self):
        return self._n_cores

    def is_core_available(self, p):
        if p is None:
            return self.is_available
        else:
            return p in self._cores

    def available_core(self):
        return self._cores.peek()

    @property
    def is_available(self):
        return self._n_cores > 0

    def allocate(self, p):
        if p is None:
            p = self._cores.pop()
        else:
            self._cores.remove(p)
        if self._cores_counter:
            self._cores_counter[self._n_cores] -= 1
        self._n_cores -= 1
        if self._cores_counter:
            self._cores_counter[self._n_cores] += 1

        if self._n_cores <= 0:
            self._cores = OrderedSet()
        return p

    def deallocate(self, p):
        self._cores.add(p)
        if self._cores_counter:
            self._cores_counter[self._n_cores] -= 1
        self._n_cores += 1
        if self._cores_counter:
            self._cores_counter[self._n_cores] += 1