pacman.model.graphs.machine package

Module contents

class pacman.model.graphs.machine.AbstractMachineEdgePartition

Bases: object

A simple implementation of a machine edge partition that will communicate with a traffic type.

check_edge(edge)[source]

check a edge traffic type.

Parameters:edge (AbstractEdge) – the edge to check
Raises:PacmanInvalidParameterException – If the edge does not belong in this edge partition
traffic_type

The traffic type of all the edges in this edge partition.

Note

The reason for a abstract property which all machine outgoing partitions is purely due the need for multiple slots and python’s lack of support for this.

Return type:EdgeTrafficType
class pacman.model.graphs.machine.AbstractSDRAMPartition

Bases: pacman.model.graphs.machine.AbstractMachineEdgePartition

An edge partition that contains SDRAM edges.

get_sdram_base_address_for(vertex)[source]

Get the SDRAM base address for a edge given which side the vertex is on.

Parameters:vertex – the vertex to find SDRAM base address of
Returns:the SDRAM address for this vertex
get_sdram_size_of_region_for(vertex)[source]

Get the size of the region for a vertex given a edge.

Parameters:vertex – the vertex to find SDRAM size of
Returns:the SDRAM size for this vertex
total_sdram_requirements()[source]

Get the total SDRAM required by this outgoing partition.

Returns:int
class pacman.model.graphs.machine.ConstantSDRAMMachinePartition(identifier, pre_vertex, label)

Bases: pacman.model.graphs.AbstractSingleSourcePartition, pacman.model.graphs.machine.AbstractSDRAMPartition

An SDRAM partition that uses a fixed amount of memory. The edges in the partition must agree on how much memory is required.

MISSING_EDGE_ERROR_MESSAGE = 'Partition {} has no edges'
add_edge(edge, graph_code)[source]

Add an edge to the edge partition.

Note

This method should only be called by the add_edge method of the graph that owns the partition. Calling it from anywhere else, even with the correct graph_code, will lead to unsupported inconsistency.

Parameters:
  • edge (AbstractEdge) – the edge to add
  • graph_code (int) – A code to check the correct graph is calling this method
Raises:

PacmanInvalidParameterException – If the edge does not belong in this edge partition

clone_without_edges()[source]

Make a copy of this edge partition without any of the edges in it

This follows the design pattern that only the graph adds edges to partitions already added to the graph

Returns:The copied edge partition but excluding edges
Return type:ConstantSDRAMMachinePartition
get_sdram_base_address_for(vertex)[source]

Get the SDRAM base address for a edge given which side the vertex is on.

Parameters:vertex – the vertex to find SDRAM base address of
Returns:the SDRAM address for this vertex
get_sdram_size_of_region_for(vertex)[source]

Get the size of the region for a vertex given a edge.

Parameters:vertex – the vertex to find SDRAM size of
Returns:the SDRAM size for this vertex
sdram_base_address
total_sdram_requirements()[source]

Get the total SDRAM required by this outgoing partition.

Returns:int
traffic_type

The traffic type of all the edges in this edge partition.

Note

The reason for a abstract property which all machine outgoing partitions is purely due the need for multiple slots and python’s lack of support for this.

Return type:EdgeTrafficType
class pacman.model.graphs.machine.DestinationSegmentedSDRAMMachinePartition(identifier, pre_vertex, label)

Bases: pacman.model.graphs.AbstractSingleSourcePartition, pacman.model.graphs.machine.AbstractSDRAMPartition

An SDRAM partition that gives each edge its own slice of memory from a contiguous block. The edges all have the same source vertex.

add_edge(edge, graph_code)[source]

Add an edge to the edge partition.

Note

This method should only be called by the add_edge method of the graph that owns the partition. Calling it from anywhere else, even with the correct graph_code, will lead to unsupported inconsistency.

Parameters:
  • edge (AbstractEdge) – the edge to add
  • graph_code (int) – A code to check the correct graph is calling this method
Raises:

PacmanInvalidParameterException – If the edge does not belong in this edge partition

clone_without_edges()[source]

Make a copy of this edge partition without any of the edges in it

This follows the design pattern that only the graph adds edges to partitions already added to the graph

Returns:The copied edge partition but excluding edges
Return type:DestinationSegmentedSDRAMMachinePartition
get_sdram_base_address_for(vertex)[source]

Get the SDRAM base address for a edge given which side the vertex is on.

Parameters:vertex – the vertex to find SDRAM base address of
Returns:the SDRAM address for this vertex
get_sdram_size_of_region_for(vertex)[source]

Get the size of the region for a vertex given a edge.

Parameters:vertex – the vertex to find SDRAM size of
Returns:the SDRAM size for this vertex
sdram_base_address
total_sdram_requirements()[source]

Get the total SDRAM required by this outgoing partition.

Returns:int
traffic_type

The traffic type of all the edges in this edge partition.

Note

The reason for a abstract property which all machine outgoing partitions is purely due the need for multiple slots and python’s lack of support for this.

Return type:EdgeTrafficType
class pacman.model.graphs.machine.FixedRouteEdgePartition(pre_vertex, identifier, constraints=None, label=None, traffic_weight=1)

Bases: pacman.model.graphs.AbstractSingleSourcePartition, pacman.model.graphs.machine.AbstractMachineEdgePartition

A simple implementation of a machine edge partition that will communicate with SpiNNaker multicast packets. They have a common set of sources with the same semantics and so can share a single key.

Parameters:
  • identifier (str) – The identifier of the partition
  • constraints (list(AbstractConstraint)) – Any initial constraints
  • label (str) – An optional label of the partition
  • traffic_weight (int) – The weight of traffic going down this partition
add_edge(edge, graph_code)[source]

Add an edge to the edge partition.

Note

This method should only be called by the add_edge method of the graph that owns the partition. Calling it from anywhere else, even with the correct graph_code, will lead to unsupported inconsistency.

Parameters:
  • edge (AbstractEdge) – the edge to add
  • graph_code (int) – A code to check the correct graph is calling this method
Raises:

PacmanInvalidParameterException – If the edge does not belong in this edge partition

clone_without_edges()[source]

Make a copy of this edge partition without any of the edges in it

This follows the design pattern that only the graph adds edges to partitions already added to the graph

Returns:The copied edge partition but excluding edges
Return type:FixedRouteEdgePartition
traffic_type

The traffic type of all the edges in this edge partition.

Note

The reason for a abstract property which all machine outgoing partitions is purely due the need for multiple slots and python’s lack of support for this.

Return type:EdgeTrafficType
class pacman.model.graphs.machine.MachineEdge(pre_vertex, post_vertex, traffic_type=<EdgeTrafficType.MULTICAST: 1>, label=None, traffic_weight=1, app_edge=None)

Bases: pacman.model.graphs.AbstractEdge

A simple implementation of a machine edge.

Parameters:
  • pre_vertex (MachineVertex) – The vertex at the start of the edge.
  • post_vertex (MachineVertex) – The vertex at the end of the edge.
  • traffic_type (EdgeTrafficType) – The type of traffic that this edge will carry.
  • label (str or None) – The name of the edge.
  • traffic_weight (int) – The optional weight of traffic expected to travel down this edge relative to other edges. (default is 1)
  • app_edge (ApplicationEdge or None) – The application edge from which this was created. If None, this edge is part of a pure machine graph.
app_edge

The application edge from which this was created

Return type:ApplicationEdge or None
associate_application_edge()[source]

Asks the application edge (if any) to remember this machine edge.

label

The label of the edge

Return type:str
post_vertex

The vertex at the end of the edge.

Return type:MachineVertex
pre_vertex

The vertex at the start of the edge.

Return type:MachineVertex
traffic_type
Return type:EdgeTrafficType
traffic_weight
The amount of traffic expected to go down this edge relative to
other edges.
Return type:int
class pacman.model.graphs.machine.MachineFPGAVertex(fpga_id, fpga_link_id, board_address=None, label=None, constraints=None, app_vertex=None, vertex_slice=None)

Bases: pacman.model.graphs.machine.MachineVertex, pacman.model.graphs.AbstractFPGA

A virtual vertex on an FPGA link.

board_address

The IP address of the board to which the device is connected, or None for the boot board.

Return type:str
fpga_id

The ID of the FPGA to which the vertex is connected.

Return type:int

The link of the FPGA to which the vertex is connected.

Return type:int
resources_required

The resources required by the vertex

Return type:ResourceContainer
set_virtual_chip_coordinates(virtual_chip_x, virtual_chip_y)[source]

Set the details of the virtual chip that has been added to the machine for this vertex.

Parameters:
  • virtual_chip_x (int) – The x-coordinate of the added chip
  • virtual_chip_y (int) – The y-coordinate of the added chip
virtual_chip_x

The x-coordinate of the virtual chip where this vertex is to be placed.

Return type:int
virtual_chip_y

The y-coordinate of the virtual chip where this vertex is to be placed.

Return type:int
class pacman.model.graphs.machine.MachineGraph(label, application_graph=None)

Bases: pacman.model.graphs.Graph

A graph whose vertices can fit on the chips of a machine.

Parameters:
  • label (str or None) – The label for the graph.
  • application_graph (ApplicationGraph or None) – The application graph that this machine graph is derived from, if it is derived from one at all.
MISSING_APP_VERTEX_ERROR_MESSAGE = 'The vertex does not have an app_vertex, which is required when other app_vertices exist.'
UNEXPECTED_APP_VERTEX_ERROR_MESSAGE = 'The vertex has an app_vertex, which is not allowed when other vertices not have app_vertices.'
add_edge(edge, outgoing_edge_partition_name)[source]

Add an edge to the graph and its partition

If required and possible will create a new partition in the graph

Returns the partition the edge was added to

Parameters:
  • edge (AbstractEdge) – The edge to add
  • outgoing_edge_partition_name (str) – The name of the edge partition to add the edge to; each edge partition is the partition of edges that start at the same vertex
Return type:

AbstractEdgePartition

Raises:

PacmanInvalidParameterException – If the edge is not of a valid type or if edges have already been added to this partition that start at a different vertex to this one

add_outgoing_edge_partition(edge_partition)[source]

Add an edge partition to the graph.

Will also add any edges already in the partition as well

Parameters:edge_partition (AbstractEdgePartition) – The edge partition to add
Raises:PacmanAlreadyExistsException – If a partition already exists with the same pre_vertex and identifier
add_vertex(vertex)[source]

Add a vertex to the graph.

Parameters:

vertex (AbstractVertex) – The vertex to add

Raises:
clone()[source]

Makes as shallow as possible copy of the graph.

Vertices and edges are copied over. Partition will be new objects.

Returns:A shallow copy of this graph
Return type:MachineGraph
Raises:PacmanInvalidParameterException – If called on a none empty graph when Application Vertexes exist
get_edge_partitions_ending_at_vertex(vertex)[source]

Get all the edge partitions that end at the given vertex.

Parameters:vertex (MachineVertex) – The vertex at which the SDRAM edge partitions to find starts
Return type:iterable(AbstractPartition)
get_fixed_route_edge_partitions_ending_at_vertex(vertex)[source]

Get only the fixed_route edge partitions that end at the vertex.

Parameters:vertex (MachineVertex) – The vertex at which the edge partitions to find starts
Return type:iterable(FixedRouteEdgePartition)
get_fixed_route_edge_partitions_starting_at_vertex(vertex)[source]

Get only the fixed_route edge partitions that start at the vertex.

Parameters:vertex (MachineVertex) – The vertex at which the edge partitions to find starts
Return type:iterable(FixedRouteEdgePartition)
get_multicast_edge_partitions_ending_at_vertex(vertex)[source]

Get only the multicast edge partitions that end at the vertex.

Parameters:vertex (MachineVertex) – The vertex at which the edge partitions to find starts
Return type:iterable(MulticastEdgePartition)
get_multicast_edge_partitions_starting_at_vertex(vertex)[source]

Get only the multicast edge partitions that start at the vertex.

Parameters:vertex (MachineVertex) – The vertex at which the edge partitions to find starts
Return type:iterable(MulticastEdgePartition)
get_outgoing_edge_partitions_starting_at_vertex(vertex)[source]

Get all the edge partitions that start at the given vertex.

Parameters:vertex (AbstractVertex) – The vertex at which the edge partitions to find starts
Return type:iterable(AbstractEdgePartition)
get_sdram_edge_partitions_ending_at_vertex(vertex)[source]

Get all the sdram edge partitions that end at the given vertex.

Parameters:vertex (MachineVertex) – The vertex at which the SDRAM edge partitions to find starts
Return type:iterable(AbstractSDRAMPartition)
get_sdram_edge_partitions_starting_at_vertex(vertex)[source]

Get all the SDRAM edge partitions that start at the given vertex.

Parameters:vertex (MachineVertex) – The vertex at which the sdram edge partitions to find starts
Return type:iterable(AbstractSDRAMPartition)
multicast_partitions

Returns a double dictionary of app id then outgoing_edge_partition_name to a set of machine_vertex that act as pre vertices for these multicast edges

The app_id is normally the (machine) edge.pre_vertex.app_vertex. This then groups the edges which come from the same app_vertex If the (machine) edge.pre_vertex has no app vertex then the app_id will be the machine vertex which will then form its own group of 1

Return type:dict(ApplicationVertex, dict(str, set(MachineVertex))
n_outgoing_edge_partitions

The number of outgoing edge partitions in the graph.

Return type:int
new_edge_partition(name, edge)[source]

How we create a new AbstractSingleSourcePartition in the first place. Uses the first/only element in the allowed partition types argument to the graph’s constructor.

Called from add_edge(). Can be overridden if different arguments should be passed.

Parameters:
  • name (str) – The identifier of the partition
  • edge (AbstractEdge) – An edge for the partition
Returns:

the new edge partition

Return type:

AbstractSingleSourcePartition

outgoing_edge_partitions

The edge partitions in the graph.

Return type:iterable(AbstractEdgePartition)
class pacman.model.graphs.machine.MachineGraphView(other)

Bases: pacman.model.graphs.machine.MachineGraph

A frozen view of a Machine Graph

As this shares all the same objects as the graph it is a view over except for the class and id. So any changes to the other are reflected.

All methods that allow changes to the graph should be disabled.

add_edge(edge, outgoing_edge_partition_name)[source]

Add an edge to the graph and its partition

If required and possible will create a new partition in the graph

Returns the partition the edge was added to

Parameters:
  • edge (AbstractEdge) – The edge to add
  • outgoing_edge_partition_name (str) – The name of the edge partition to add the edge to; each edge partition is the partition of edges that start at the same vertex
Return type:

AbstractEdgePartition

Raises:

PacmanInvalidParameterException – If the edge is not of a valid type or if edges have already been added to this partition that start at a different vertex to this one

add_outgoing_edge_partition(edge_partition)[source]

Add an edge partition to the graph.

Will also add any edges already in the partition as well

Parameters:edge_partition (AbstractEdgePartition) – The edge partition to add
Raises:PacmanAlreadyExistsException – If a partition already exists with the same pre_vertex and identifier
add_vertex(vertex)[source]

Add a vertex to the graph.

Parameters:

vertex (AbstractVertex) – The vertex to add

Raises:
class pacman.model.graphs.machine.MachineSpiNNakerLinkVertex(spinnaker_link_id, board_address=None, label=None, constraints=None, app_vertex=None, vertex_slice=None)

Bases: pacman.model.graphs.machine.MachineVertex, pacman.model.graphs.AbstractSpiNNakerLink

A virtual vertex on a SpiNNaker Link.

board_address

The IP address of the board to which the device is connected, or None for the boot board.

Return type:str
resources_required

The resources required by the vertex

Return type:ResourceContainer
set_virtual_chip_coordinates(virtual_chip_x, virtual_chip_y)[source]

Set the details of the virtual chip that has been added to the machine for this vertex.

Parameters:
  • virtual_chip_x (int) – The x-coordinate of the added chip
  • virtual_chip_y (int) – The y-coordinate of the added chip

The SpiNNaker Link that the vertex is connected to.

Return type:int
virtual_chip_x

The x-coordinate of the virtual chip where this vertex is to be placed.

Return type:int
virtual_chip_y

The y-coordinate of the virtual chip where this vertex is to be placed.

Return type:int
class pacman.model.graphs.machine.MachineVertex(label=None, constraints=None, app_vertex=None, vertex_slice=None)

Bases: pacman.model.graphs.AbstractVertex

A machine graph vertex.

Parameters:
  • label (str or None) – The optional name of the vertex
  • constraints (iterable(AbstractConstraint) or None) – The optional initial constraints of the vertex
  • app_vertex (ApplicationVertex or None) – The application vertex that caused this machine vertex to be created. If None, there is no such application vertex.
  • vertex_slice (Slice or None) – The slice of the application vertex that this machine vertex implements.
Raises:
app_vertex
The application vertex that caused this machine vertex to be
created. If None, there is no such application vertex.
Return type:ApplicationVertex or None
get_n_keys_for_partition(_partition)[source]

Get the number of keys required by the given partition of edges.

Parameters:_partition (OutgoingEdgePartition) – An partition that comes out of this vertex
Returns:The number of keys required
Return type:int
index
The index into the collection of machine vertices for an
application vertex.
Return type:int
resources_required

The resources required by the vertex

Return type:ResourceContainer
vertex_slice
The slice of the application vertex that this machine vertex
implements.
Return type:Slice
class pacman.model.graphs.machine.MulticastEdgePartition(pre_vertex, identifier, constraints=None, label=None, traffic_weight=1)

Bases: pacman.model.graphs.AbstractSingleSourcePartition, pacman.model.graphs.machine.AbstractMachineEdgePartition

A simple implementation of a machine edge partition that will communicate with SpiNNaker multicast packets. They have a common set of sources with the same semantics and so can share a single key.

Parameters:
  • pre_vertex – the pre vertex of this partition.
  • identifier (str) – The identifier of the partition
  • constraints (list(AbstractConstraint)) – Any initial constraints
  • label (str) – An optional label of the partition
  • traffic_weight (int) – The weight of traffic going down this partition
add_edge(edge, graph_code)[source]

Add an edge to the edge partition.

Note

This method should only be called by the add_edge method of the graph that owns the partition. Calling it from anywhere else, even with the correct graph_code, will lead to unsupported inconsistency.

Parameters:
  • edge (AbstractEdge) – the edge to add
  • graph_code (int) – A code to check the correct graph is calling this method
Raises:

PacmanInvalidParameterException – If the edge does not belong in this edge partition

clone_without_edges()[source]

Make a copy of this edge partition without any of the edges in it

This follows the design pattern that only the graph adds edges to partitions already added to the graph

Returns:The copied edge partition but excluding edges
Return type:MulticastEdgePartition
traffic_type

The traffic type of all the edges in this edge partition.

Note

The reason for a abstract property which all machine outgoing partitions is purely due the need for multiple slots and python’s lack of support for this.

Return type:EdgeTrafficType
class pacman.model.graphs.machine.SDRAMMachineEdge(pre_vertex, post_vertex, label, app_edge=None)

Bases: pacman.model.graphs.machine.MachineEdge

DISAGREEMENT_MESSAGE = 'The pre vertex sdram size {} does not agree with the post vertex sdram size {}. The SDRAM machine edge does not yet know how to handle this case. Please fix and try again.'
NO_SUPPORT_MESSAGE = "The {}vertex {} does not implement the AbstractSupportsSDRAMEdges API that can be found at ' pacman.model.graphs.abstract_supports_sdram_edges '. Please fix and try again so that sdram edge {} can know its required size."
sdram_base_address
sdram_size
class pacman.model.graphs.machine.SimpleMachineVertex(resources, label=None, constraints=None, app_vertex=None, vertex_slice=None)

Bases: pacman.model.graphs.machine.MachineVertex

A MachineVertex that stores its own resources.

This class is mainly intended for json and testing as it support the
mininal API. If a more complex Vertex is required consider the MockMachineVertex.
resources_required

The resources required by the vertex

Return type:ResourceContainer
class pacman.model.graphs.machine.SourceSegmentedSDRAMMachinePartition(identifier, label, pre_vertices)

Bases: pacman.model.graphs.AbstractMultiplePartition, pacman.model.graphs.machine.AbstractSDRAMPartition

An SDRAM partition that gives each edge its own slice of memory from a contiguous block. The edges all have the same destination vertex.

Parameters:
  • identifier (str) – The identifier of the partition
  • label (str) – A label of the partition
  • pre_vertices (iterable(AbstractVertex)) – The vertices that an edge in this partition may originate at
add_edge(edge, graph_code)[source]

Add an edge to the edge partition.

Note

This method should only be called by the add_edge method of the graph that owns the partition. Calling it from anywhere else, even with the correct graph_code, will lead to unsupported inconsistency.

Parameters:
  • edge (AbstractEdge) – the edge to add
  • graph_code (int) – A code to check the correct graph is calling this method
Raises:

PacmanInvalidParameterException – If the edge does not belong in this edge partition

clone_without_edges()[source]

Make a copy of this edge partition without any of the edges in it

This follows the design pattern that only the graph adds edges to partitions already added to the graph

Returns:The copied edge partition but excluding edges
Return type:SourceSegmentedSDRAMMachinePartition
get_sdram_base_address_for(vertex)[source]

Get the SDRAM base address for a edge given which side the vertex is on.

Parameters:vertex – the vertex to find SDRAM base address of
Returns:the SDRAM address for this vertex
get_sdram_size_of_region_for(vertex)[source]

Get the size of the region for a vertex given a edge.

Parameters:vertex – the vertex to find SDRAM size of
Returns:the SDRAM size for this vertex
sdram_base_address
Return type:int
total_sdram_requirements()[source]
Return type:int
traffic_type

The traffic type of all the edges in this edge partition.

Note

The reason for a abstract property which all machine outgoing partitions is purely due the need for multiple slots and python’s lack of support for this.

Return type:EdgeTrafficType