Source code for pacman.model.graphs.application.application_2d_spinnaker_link_vertex

# Copyright (c) 2017 The University of Manchester
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from typing import Optional, Tuple

from spinn_utilities.overrides import overrides

from pacman.model.graphs.application.abstract import Abstract2DDeviceVertex
from pacman.model.graphs.common import Slice

from .application_spinnaker_link_vertex import ApplicationSpiNNakerLinkVertex


[docs] class Application2DSpiNNakerLinkVertex( ApplicationSpiNNakerLinkVertex, Abstract2DDeviceVertex): """ A 2D virtual application vertex that represents a device connected via a SpiNNaker link. """ __slots__ = ( "__width", "__height", "__sub_width", "__sub_height") def __init__( self, width: int, height: int, sub_width: int, sub_height: int, spinnaker_link_id: int, board_address: Optional[str] = None, label: Optional[str] = None, incoming: bool = True, outgoing: bool = False): """ :param int width: The width of the vertex in atoms :param int height: The height of the vertex in atoms :param int sub_width: The width of the sub-rectangle to break the vertex up into :param int sub_height: The height of the sub-rectangle to break the vertex up into :param int spinnaker_link_id: The index of the spinnaker link to which the device is connected :param str board_address: The optional IP address of the board to which the device is connected e.g. in a multi-board system :param str label: The optional name of the vertex. :param bool incoming: Whether the device supports sending traffic into spinnaker :param bool outgoing: Whether the device supports receiving traffic from spinnaker """ # Set variables first as this lets us call properties self.__width = width self.__height = height self.__sub_width = sub_width self.__sub_height = sub_height super().__init__( width * height, spinnaker_link_id, board_address, label, n_machine_vertices=self._n_sub_rectangles, incoming=incoming, outgoing=outgoing) self._verify_sub_size() @property @overrides(Abstract2DDeviceVertex.width) def width(self) -> int: return self.__width @property @overrides(Abstract2DDeviceVertex.height) def height(self) -> int: return self.__height @property @overrides(Abstract2DDeviceVertex.sub_width) def sub_width(self) -> int: return self.__sub_width @property @overrides(Abstract2DDeviceVertex.sub_height) def sub_height(self) -> int: return self.__sub_height @property @overrides(ApplicationSpiNNakerLinkVertex.atoms_shape) def atoms_shape(self) -> Tuple[int, ...]: return (self.__width, self.__height)
[docs] @overrides(ApplicationSpiNNakerLinkVertex.get_incoming_slice) def get_incoming_slice(self, index: int) -> Slice: return self._get_slice(index)