Source code for spinnman.model.core_subsets
from collections import OrderedDict
from spinnman.exceptions import SpinnmanInvalidParameterException
from spinnman.model.core_subset import CoreSubset
[docs]class CoreSubsets(object):
""" Represents a group of CoreSubsets, with a maximum of one per chip
"""
def __init__(self, core_subsets=None):
"""
:param core_subsets: An iterable of cores for each desired chip
:type core_subsets: iterable of\
:py:class:`spinnman.model.core_subset.CoreSubset`
:raise spinnman.exceptions.SpinnmanInvalidParameterException: If there\
is more than one subset with the same core x and y\
coordinates
"""
self._core_subsets = OrderedDict()
if core_subsets is not None:
for core_subset in core_subsets:
self.add_core_subset(core_subset)
[docs] def add_core_subset(self, core_subset):
""" Add a core subset to the set
:param core_subset: The core subset to add
:type core_subset: :py:class:`spinnman.model.core_subset.CoreSubset`
:return: Nothing is returned
:rtype: None
:raise spinnman.exceptions.SpinnmanInvalidParameterException: If there\
is already a subset with the same core x and y\
coordinates
"""
if (core_subset.x, core_subset.y) in self._core_subsets:
raise SpinnmanInvalidParameterException(
"core_subset.(x, y)",
"{}, {}".format(core_subset.x, core_subset.y),
"There can be only one set of cores for each chip")
self._core_subsets[(core_subset.x, core_subset.y)] = core_subset
[docs] def add_processor(self, x, y, processor_id):
""" Add a processor on a given chip to the set
:param x: The x-coordinate of the chip
:type x: int
:param y: The y-coordinate of the chip
:type y: int
:param processor_id: A processor id
:type processor_ids: int
:return: Nothing is returned
:rtype: None
:raise spinnman.exceptions.SpinnmanInvalidParameterException: If there\
is already a processor on the given chip with the same id
"""
if (x, y) not in self._core_subsets:
self.add_core_subset(CoreSubset(x, y, []))
self._core_subsets[(x, y)].add_processor(processor_id)
[docs] def is_chip(self, x, y):
""" Determine if the chip with coordinates (x, y) is in the subset
:param x: The x-coordinate of a chip
:type x: int
:param y: The y-coordinate of a chip
:type y: int
:return: True if the chip with coordinates (x, y) is in the subset
:rtype: bool
"""
return (x, y) in self._core_subsets
[docs] def is_core(self, x, y, processor_id):
""" Determine if there is a chip with coordinates (x, y) in the\
subset, which has a core with the given id in the subset
:param x: The x-coordinate of a chip
:type x: int
:param y: The y-coordinate of a chip
:type y: int
:param processor_id: The id of a core
:type processor_id: int
:return: True if there is a chip with coordinates (x, y) in the\
subset, which has a core with the given id in the subset
"""
if (x, y) not in self._core_subsets:
return False
return processor_id in self._core_subsets[(x, y)]
@property
def core_subsets(self):
""" The one-per-chip subsets
:return: Iterable of core subsets
:rtype: iterable of :py:class:`spinnman.model.core_subset.CoreSubset`
"""
return self._core_subsets.itervalues()
def __iter__(self):
""" Iterable of core_subsets
"""
return self._core_subsets.itervalues()