Source code for pacman.model.resources.pre_allocated_resource_container
# 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.exceptions import PacmanConfigurationException
[docs]class PreAllocatedResourceContainer(object):
""" Container object for preallocated resources
"""
__slots__ = [
# An iterable of SpecificSDRAMResource object that reflects the amount
# of SDRAM (in bytes) preallocated on a specific chip on the SpiNNaker
# machine
"_specific_sdram_usage",
# An iterable of SpecificCoreResource objects that reflect the number
# of specific cores that have been preallocated on a chip.
"_specific_core_resources",
# An iterable of CoreResource objects that reflect the number of
# cores that have been preallocated on a chip, but which don't care
# which core it uses.
"_core_resources",
# An iterable of SpecificIPTagResource objects that reflect the IP tag
# details that have been preallocated on a board.
"_specific_iptag_resources",
# An iterable of SpecificReverseIPTagResource objects that reflect the
# reverse IP tag details that have been preallocated on a board.
"_specific_reverse_iptag_resources",
]
def __init__(
self, specific_sdram_usage=None, specific_core_resources=None,
core_resources=None, specific_iptag_resources=None,
specific_reverse_iptag_resources=None):
"""
:param specific_sdram_usage:\
iterable of SpecificSDRAMResource which states that specific chips\
have missing SDRAM
:type specific_sdram_usage: \
iterable( \
:py:class:`pacman.model.resources.SpecificChipSDRAMResource`)
:param specific_core_resources:\
states which cores have been preallocated
:type specific_core_resources: \
iterable(:py:class:`pacman.model.resources.SpecificCoreResource`)
:param core_resources:\
states a number of cores have been preallocated but don't care
which ones they are
:type core_resources: \
iterable(:py:class:`pacman.model.resources.CoreResource`)
"""
# pylint: disable=too-many-arguments
self._specific_sdram_usage = specific_sdram_usage
self._specific_core_resources = specific_core_resources
self._core_resources = core_resources
self._specific_iptag_resources = specific_iptag_resources
self._specific_reverse_iptag_resources = \
specific_reverse_iptag_resources
# check for none resources
if self._specific_sdram_usage is None:
self._specific_sdram_usage = []
if self._specific_core_resources is None:
self._specific_core_resources = []
if self._core_resources is None:
self._core_resources = []
if self._specific_iptag_resources is None:
self._specific_iptag_resources = []
if self._specific_reverse_iptag_resources is None:
self._specific_reverse_iptag_resources = []
@property
def specific_sdram_usage(self):
return self._specific_sdram_usage
@property
def specific_core_resources(self):
return self._specific_core_resources
@property
def core_resources(self):
return self._core_resources
@property
def specific_iptag_resources(self):
return self._specific_iptag_resources
@property
def specific_reverse_iptag_resources(self):
return self._specific_reverse_iptag_resources
[docs] def extend(self, other):
if not isinstance(other, PreAllocatedResourceContainer):
raise PacmanConfigurationException(
"Only another preallocated resource container can extend a "
"preallocated resource container")
# add specific SDRAM usage
self._specific_sdram_usage.extend(other.specific_sdram_usage)
# add specific cores
self._specific_core_resources.extend(other.specific_core_resources)
# add non-specific cores
self._core_resources.extend(other.core_resources)
# add IP tag resources
self._specific_iptag_resources.extend(other.specific_iptag_resources)
# add reverse IP tag resources
self._specific_reverse_iptag_resources.extend(
other.specific_reverse_iptag_resources)