Source code for spynnaker.pyNN.models.neuron.key_space_tracker

# Copyright (c) 2017-2019 The University of Manchester
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
from pacman.utilities.algorithm_utilities import ElementAllocatorAlgorithm
from pacman.utilities.constants import FULL_MASK, BITS_IN_KEY

[docs]class KeySpaceTracker(ElementAllocatorAlgorithm):
""" Tracks keys used to determine key overlap
"""

def __init__(self):

[docs]    def allocate_keys(self, r_info):
""" Allocate all the keys in the routing information
NOTE assumes masks are all 1s followed by all 0s

:param PartitionRoutingInfo r_info: The routing information to add
"""
n_keys = 2 ** self.count_trailing_0s(mask)
self._allocate_elements(key, n_keys)

[docs]    def is_allocated(self, key, n_keys):
""" Determine if any of the keys in the mask are allocated
NOTE assumes mask is all 1s followed by all 0s

:param int key: The key at the start of the allocation
:param int n_keys: The number of keys to check
:rtype: bool
"""
index = self._find_slot(key)
if index is None:
return True
space = self._check_allocation(index, key, n_keys)
return space is None

[docs]    @staticmethod