spinn_utilities.ranged package

Module contents

An implementation of a dictionary and a list that support efficiently workingwith ranges of values, used to implement efficient collections for PyNNpopulation views and assemblies.

class spinn_utilities.ranged.AbstractDict[source]

Bases: object

Base class for the RangeDictionary and all views. This allows the users to not have to worry if they have a view.

get_default(key)[source]

Gets the default value for a single key. Unless changed, the default is the original value.

Note

Does not change any values but only changes what reset_value would do

Parameters:key (str) – Existing dict key
Returns:default for this key.
get_ranges(key=None)[source]

Lists the ranges(s) for all IDs covered by this view. There will be one yield for each range which may cover one or more IDs.

Note

As the data is created in a single call this is not affected by any updates.

Parameters:key (str or iterable(str) or None) – The key or keys to get the value of. Use None for all
Returns:List of tuples of (start, stop, value). start is inclusive so is the first ID in the range. stop is exclusive so is the last ID in the range + 1. If key is a str, value is a single object. If key is iterable (list, tuple, set, etc) of str (or None) value is a dictionary object
get_value(key)[source]

Gets a single shared value for all IDs covered by this view.

Parameters:key (str or iterable(str) or None) – The key or keys to get the value of. Use None for all
Returns:If key is a str, this returns the single object. If key is iterable (list, tuple, set, etc) of str (or None), returns a dictionary object
Raises:MultipleValuesException – If even one of the keys has multiple values set. But not if other keys not asked for have multiple values
has_key(key)[source]

As the Deprecated dict has_keys function.

Note

Int keys to IDs are not supported.

Parameters:key (str) – the key
Returns:If the key is in dict
Return type:bool
ids()[source]

Returns the IDs in range or view. If the view is setup with IDs out of numerical order the order used to create the view is maintained.

Note

If indexing into a view, you are picking the X’th ID. So if the IDs are [2,3,4,5] the view[2] will be the data for ID 4 and not 2

Returns:list of IDs
Return type:list(int)
items()[source]

Returns a list of (key, value) tuples. Works only if the whole ranges/view has single values.

If the key is a str, the values are single objects. If the key is iterable (list, tuple, set, etc) of str (or None), the values are dictionary objects

Returns:List of (key, value) tuples
Raises:MultipleValuesException – If even one of the keys has multiple values set.
iter_all_values(key, update_save=False)[source]

Iterates over the value(s) for all IDs covered by this view. There will be one yield for each ID even if values are repeated.

Parameters:
  • key (str or iterable(str) or None) – The key or keys to get the value of. Use None for all keys
  • update_save – If set True the iteration will work even if values are updated during iteration. If left False the iterator may be faster but behaviour is undefined and unchecked if any values are changed during iteration.
Returns:

If key is a str, this yields single objects. If key is iterable (list, tuple, set, etc) of str (or None), yields dictionary objects

iter_ranges(key=None)[source]

Iterates over the ranges(s) for all IDs covered by this view. There will be one yield for each range which may cover one or more IDs.

Warning

This iterator is not update safe! Behaviour is undefined and unchecked if any values are changed during iteration.

Parameters:key (str or iterable(str) or None) – The key or keys to get the value of. Use None for all
Returns:yields tuples of (start, stop, value). start is inclusive so is the first ID in the range. stop is exclusive so is the last ID in the range + 1. If key is a str, value is a single object. If key is iterable (list, tuple, set, etc) of str (or None), value is a dictionary object
iteritems()[source]

Iterates over the (key, value) tuples. Works only if the whole ranges/view has single values.

If the key is a str, the values are single objects. If the key is iterable (list, tuple, set, etc) of str (or None), the values are dictionary objects

This function is safe for value updates but may miss new keys added during iteration.

Returns:yield (key, value) tuples
Raises:MultipleValuesException – If even one of the keys has multiple values set.
itervalues()[source]

Iterates over the values. Works only if the whole ranges/view has single values.

If key is a str, the values are single objects. If key is iterable (list, tuple, set, etc) of str (or None), values are dictionary objects

This function is safe for value updates but may miss new keys added during iteration.

Returns:yield values
Raises:MultipleValuesException – If even one of the keys has multiple values set.
keys()[source]

Returns the keys in the dictionary

Returns:keys in the dict
reset(key)[source]

Sets the value(s) for a single key back to the default value.

Parameters:
  • key (str) – Existing dict key
  • default – Value to be used by reset
set_value(key, value, use_list_as_value=False)[source]

Resets a already existing key to the new value. All IDs in the whole range or view will have this key set.

Warning

This method does not allow adding keys. Using dict[str] = will add a new key, but it is not supported for views.

Warning

If a View is created over multiple ranges this method would raise a KeyError if any the ranges does not have the key. (Currently multiple ranges not yet supported.)

Parameters:
  • key (str) – key to value being set
  • value – any object
  • use_list_as_value – True if the value is a list
Raises:

KeyError – If a new key is being used.

values()[source]

Returns a list of values. Works only if the whole ranges/view has single values.

If key is a str, the values are single objects. If key is iterable (list, tuple, set, etc) of str (or None), values are dictionary objects

Returns:List of values
Raises:MultipleValuesException – If even one of the keys has multiple values set.
class spinn_utilities.ranged.AbstractList(size, key=None)[source]

Bases: spinn_utilities.ranged.abstract_sized.AbstractSized

A ranged implementation of list.

Functions that change the size of the list are not supported. These include:

__setitem__ where key >= len
__delitem__
append
extend
insert
pop
remove

Function that manipulate the list based on values are not supported. These include:

reverse, __reversed__
sort

In the current version the IDs are zero base consecutive numbers so there is no difference between value-based IDs and index-based IDs but this could change in the future.

Supports the following arithmetic operations over the list:

+
element-wise addition or addition of a single scalar
-
element-wise subtraction or subtraction of a single scalar
*
element-wise multiplication or multiplication by a single scalar
/
element-wise true division or true division by a single scalar
//
element-wise floor division or floor division by a single scalar
Parameters:
  • size – Fixed length of the list
  • key – The dict key this list covers. This is used only for better Exception messages
apply_operation(operation)[source]

Applies a function on the list to create a new one. The values of the new list are created on the fly so any changes to the original lists are reflected.

Parameters:operation – A function that can be applied over the individual values to create new ones.
Returns:new list
Return type:AbstractList
count(x)[source]

Counts the number of elements in the list with value x

Parameters:x
Returns:
get_default()[source]

Gets the default value of the list. Just in case we later allow to increase the number of elements.

Returns:Default value
get_single_value_all()[source]

If possible, returns a single value shared by the whole list.

For multiple values use for x in list, iter(list) or list.iter, or one of the iter_ranges methods

Returns:Value shared by all elements in the list
Raises:MultipleValuesException – If even one elements has a different value
get_single_value_by_ids(ids)[source]

If possible, returns a single value shared by all the IDs.

For multiple values, use for x in list, iter(list), list.iter, or one of the iter_ranges methods.

Returns:Value shared by all elements with these IDs
Raises:MultipleValuesException – If even one elements has a different value. Not thrown if elements outside of the IDs have a different value, even if these elements are between the ones pointed to by IDs
get_single_value_by_slice(slice_start, slice_stop)[source]

If possible, returns a single value shared by the whole slice list.

For multiple values, use for x in list, iter(list), list.iter, or one of the iter_ranges methods

Returns:Value shared by all elements in the slice
Raises:MultipleValuesException – If even one elements has a different value. Not thrown if elements outside of the slice have a different value
get_value_by_id(the_id)[source]

Returns the value for one item in the list

Parameters:the_id (int) – One of the IDs of an element in the list
Returns:The value of that element
get_values(selector=None)[source]

Get the value all elements pointed to the selector.

Note: Unlike __get_item__ this method always returns a list even if the selector is a single int

Parameters:selector – See AbstractSized.selector_to_ids()
Returns:returns a list if the item which may be empty or have only single value
Return type:list
index(x)[source]

Finds the first ID of the first element in the list with value x

Parameters:x
Returns:
iter()[source]

Update-safe iterator of all elements.

Note

Duplicate/Repeated elements are yielded for each ID

Returns:yields each element one by one
iter_by_id(the_id)[source]

Fast but not update-safe iterator by one ID.

While next can only be called once, this is an iterator so it can be mixed in with other iterators.

Parameters:the_id – ID
Returns:yields the elements
iter_by_ids(ids)[source]

Fast but not update-safe iterator by collection of IDs.

Note

Duplicate/Repeated elements are yielded for each ID.

Parameters:ids – IDs
Returns:yields the elements pointed to by IDs
iter_by_selector(selector=None)[source]

Fast but not update-safe iterator of all elements in the slice.

Parameters:selector – See AbstractSized.selector_to_ids()
Returns:yields the selected elements one by one
iter_by_slice(slice_start, slice_stop)[source]

Fast but not update-safe iterator of all elements in the slice.

Note

Duplicate/Repeated elements are yielded for each ID

Returns:yields each element one by one
iter_ranges()[source]

Fast but not update-safe iterator of the ranges.

Returns:yields each range one by one
iter_ranges_by_id(the_id)[source]

Iterator of the range for this ID

Note

The start and stop of the range will be reduced to just the ID

This method purpose is so one a control method can select which iterator to use.

Returns:yields the one range
iter_ranges_by_ids(ids)[source]

Fast but not update-safe iterator of the ranges covered by these IDs.

For consecutive IDs where the elements have the same value a single range may be yielded.

Note

The start and stop of the range will be reduced to just the IDs

Returns:yields each range one by one
iter_ranges_by_slice(slice_start, slice_stop)[source]

Fast but not update-safe iterator of the ranges covered by this slice.

Note

The start and stop of the range will be reduced to just the IDs inside the slice.

Returns:yields each range one by one
range_based()[source]

Shows if the list is suited to deal with ranges or not.

All list must implement all the range functions, but there are times when using ranges will probably be slower than using individual values. For example the individual values may be stored in a list in which case the ranges are created on demand.

Returns:True if and only if Ranged based calls are recommended.
Return type:bool
class spinn_utilities.ranged.DualList(left, right, operation, key=None)[source]

Bases: spinn_utilities.ranged.abstract_list.AbstractList

A list which combines two other lists with an operation.

Parameters:
  • left (AbstractList) – The first list to combine
  • right (AbstractList) – The second list to combine
  • operation (callable) – The operation to perform as a function that takes two values and returns the result of the operation
  • key – The dict key this list covers. This is used only for better Exception messages
get_default()[source]

Gets the default value of the list. Just in case we later allow to increase the number of elements.

Returns:Default value
get_single_value_by_ids(ids)[source]

If possible, returns a single value shared by all the IDs.

For multiple values, use for x in list, iter(list), list.iter, or one of the iter_ranges methods.

Returns:Value shared by all elements with these IDs
Raises:MultipleValuesException – If even one elements has a different value. Not thrown if elements outside of the IDs have a different value, even if these elements are between the ones pointed to by IDs
get_single_value_by_slice(slice_start, slice_stop)[source]

If possible, returns a single value shared by the whole slice list.

For multiple values, use for x in list, iter(list), list.iter, or one of the iter_ranges methods

Returns:Value shared by all elements in the slice
Raises:MultipleValuesException – If even one elements has a different value. Not thrown if elements outside of the slice have a different value
get_value_by_id(the_id)[source]

Returns the value for one item in the list

Parameters:the_id (int) – One of the IDs of an element in the list
Returns:The value of that element
iter_by_slice(slice_start, slice_stop)[source]

Fast but not update-safe iterator of all elements in the slice.

Note

Duplicate/Repeated elements are yielded for each ID

Returns:yields each element one by one
iter_ranges()[source]

Fast but not update-safe iterator of the ranges.

Returns:yields each range one by one
iter_ranges_by_slice(slice_start, slice_stop)[source]

Fast but not update-safe iterator of the ranges covered by this slice.

Note

The start and stop of the range will be reduced to just the IDs inside the slice.

Returns:yields each range one by one
range_based()[source]

Shows if the list is suited to deal with ranges or not.

All list must implement all the range functions, but there are times when using ranges will probably be slower than using individual values. For example the individual values may be stored in a list in which case the ranges are created on demand.

Returns:True if and only if Ranged based calls are recommended.
Return type:bool
class spinn_utilities.ranged.SingleList(a_list, operation, key=None)[source]

Bases: spinn_utilities.ranged.abstract_list.AbstractList

A List that performs an operation on the elements of another list.

Parameters:
  • a_list (AbstractList) – The list to perform the operation on
  • operation (callable) – A function which takes a single value and returns the result of the operation on that value
  • key – The dict key this list covers. This is used only for better Exception messages
get_default()[source]

Gets the default value of the list. Just in case we later allow to increase the number of elements.

Returns:Default value
get_single_value_by_ids(ids)[source]

If possible, returns a single value shared by all the IDs.

For multiple values, use for x in list, iter(list), list.iter, or one of the iter_ranges methods.

Returns:Value shared by all elements with these IDs
Raises:MultipleValuesException – If even one elements has a different value. Not thrown if elements outside of the IDs have a different value, even if these elements are between the ones pointed to by IDs
get_single_value_by_slice(slice_start, slice_stop)[source]

If possible, returns a single value shared by the whole slice list.

For multiple values, use for x in list, iter(list), list.iter, or one of the iter_ranges methods

Returns:Value shared by all elements in the slice
Raises:MultipleValuesException – If even one elements has a different value. Not thrown if elements outside of the slice have a different value
get_value_by_id(the_id)[source]

Returns the value for one item in the list

Parameters:the_id (int) – One of the IDs of an element in the list
Returns:The value of that element
iter_ranges()[source]

Fast but not update-safe iterator of the ranges.

Returns:yields each range one by one
iter_ranges_by_slice(slice_start, slice_stop)[source]

Fast but not update-safe iterator of the ranges covered by this slice.

Note

The start and stop of the range will be reduced to just the IDs inside the slice.

Returns:yields each range one by one
range_based()[source]

Shows if the list is suited to deal with ranges or not.

All list must implement all the range functions, but there are times when using ranges will probably be slower than using individual values. For example the individual values may be stored in a list in which case the ranges are created on demand.

Returns:True if and only if Ranged based calls are recommended.
Return type:bool
class spinn_utilities.ranged.AbstractSized(size)[source]

Bases: object

Base class for slice and ID checking against size.

Parameters:size – Fixed length of the list
selector_to_ids(selector, warn=False)[source]

Gets the list of IDs covered by this selector. The types of selector currently supported are:

None:
Returns all IDs.
slice: Standard python slice.
Negative values and values larger than size are handled using slices’s indices method. This could result in am empty list.
int: (or long) Handles negative values as normal.
Checks if ID is within expected range.
iterator of bools: Used as a mask.
If the length of the mask is longer or shorted than number of IDs the result is the shorter of the two, with the remainder of the longer ignored.
iterator of int (long) but not bool:
Every value checked that it is with the range 0 to size. Negative values are not allowed. Original order and duplication is respected so result may be unordered and contain duplicates.
Parameters:
  • selector – Some object that identifies a range of IDs.
  • warn – If True, this method will warn about problems with the selector.
Returns:

a (possibly sorted) list of IDs

class spinn_utilities.ranged.AbstractView(range_dict)[source]

Bases: spinn_utilities.ranged.abstract_dict.AbstractDict

A view over a ranged dictionary.

Note

The view may currently be read from only with int and int-collection indices, and only be written to with str indices. This may change to become more permissive in future versions.

Use RangeDictionary.view_factory() to create views

get_default(key)[source]

Gets the default value for a single key. Unless changed, the default is the original value.

Note

Does not change any values but only changes what reset_value would do

Parameters:key (str) – Existing dict key
Returns:default for this key.
keys()[source]

Returns the keys in the dictionary

Returns:keys in the dict
exception spinn_utilities.ranged.MultipleValuesException(key=None, value1=None, value2=None)[source]

Bases: Exception

class spinn_utilities.ranged.RangeDictionary(size, defaults=None)[source]

Bases: spinn_utilities.ranged.abstract_sized.AbstractSized, spinn_utilities.ranged.abstract_dict.AbstractDict

Main holding class for a range of similar Dictionary object. Keys in the dictionary must be str object and can not be removed. New keys can be added using the dict[str] = value format. The size (length of the list) is fixed and set at initialisation time.

The Object is set up initially where every ID in the range will share the same value for each key. All keys must be of type str. The default Values can be anything including None.

Parameters:
  • size (int) – Fixed number of IDs / Length of lists
  • defaults (dict) – Default dictionary where all keys must be str
copy()[source]
copy_into(other)[source]

Turns this dict into a copy of the other dict but keep its id

Parameters:other (RangedDict) – Another Ranged Dictionary assumed created by cloning this one
get_default(key)[source]

Gets the default value for a single key. Unless changed, the default is the original value.

Note

Does not change any values but only changes what reset_value would do

Parameters:key (str) – Existing dict key
Returns:default for this key.
get_list(key)[source]

Gets the storage unit for a single key.

Note

Mainly intended by Views to access the data for one key directly.

Parameters:key (str) – a key which must be present in the dict
Return type:ranged_list.RangedList
get_value(key=None)[source]

Gets a single shared value for all IDs covered by this view.

Parameters:key (str or iterable(str) or None) – The key or keys to get the value of. Use None for all
Returns:If key is a str, this returns the single object. If key is iterable (list, tuple, set, etc) of str (or None), returns a dictionary object
Raises:MultipleValuesException – If even one of the keys has multiple values set. But not if other keys not asked for have multiple values
get_values_by_id(key, the_id)[source]

Same as get_value() but limited to a single ID.

Parameters:
Returns:

See get_value()

has_key(key)[source]

As the Deprecated dict has_keys function.

Note

Int keys to IDs are not supported.

Parameters:key (str) – the key
Returns:If the key is in dict
Return type:bool
ids()[source]

Returns the IDs in range or view. If the view is setup with IDs out of numerical order the order used to create the view is maintained.

Note

If indexing into a view, you are picking the X’th ID. So if the IDs are [2,3,4,5] the view[2] will be the data for ID 4 and not 2

Returns:list of IDs
Return type:list(int) Returns a list of the IDs in this Range
Returns:a list of the IDs in this Range
Return type:list(int)
iter_all_values(key=None, update_save=False)[source]

Iterates over the value(s) for all IDs covered by this view. There will be one yield for each ID even if values are repeated.

Parameters:
  • key (str or iterable(str) or None) – The key or keys to get the value of. Use None for all keys
  • update_save – If set True the iteration will work even if values are updated during iteration. If left False the iterator may be faster but behaviour is undefined and unchecked if any values are changed during iteration.
Returns:

If key is a str, this yields single objects. If key is iterable (list, tuple, set, etc) of str (or None), yields dictionary objects

iter_ranges(key=None)[source]

Iterates over the ranges(s) for all IDs covered by this view. There will be one yield for each range which may cover one or more IDs.

Warning

This iterator is not update safe! Behaviour is undefined and unchecked if any values are changed during iteration.

Parameters:key (str or iterable(str) or None) – The key or keys to get the value of. Use None for all
Returns:yields tuples of (start, stop, value). start is inclusive so is the first ID in the range. stop is exclusive so is the last ID in the range + 1. If key is a str, value is a single object. If key is iterable (list, tuple, set, etc) of str (or None), value is a dictionary object
iter_ranges_by_id(key=None, the_id=None)[source]

Same as iter_ranges() but limited to one ID.

Parameters:
  • key – see iter_ranges() parameter key
  • the_id (int) – single ID which is the actual ID and not an index into IDs
iter_ranges_by_ids(ids, key=None)[source]

Same as iter_ranges() but limited to a collection of IDs.

The IDs are actual ID values and not indexes into the IDs

Parameters:
  • key – see iter_ranges() parameter key
  • ids – Collection of IDs in the range
Returns:

see iter_ranges()

iter_ranges_by_slice(key, slice_start, slice_stop)[source]

Same as iter_ranges() but limited to a simple slice.

slice_start and slice_stop are actual ID values and not indexes into the IDs. They must also be actual values, so None, max_int, and negative numbers are not supported.

Parameters:
  • key – see iter_ranges() parameter key
  • slice_start – Inclusive i.e. first ID
  • slice_stop – Exclusive to last ID + 1
Returns:

see iter_ranges()

iter_values_by_ids(ids, key=None, update_save=False)[source]

Same as iter_all_values() but limited to a simple slice.

iter_values_by_slice(slice_start, slice_stop, key=None, update_save=False)[source]

Same as iter_all_values() but limited to a simple slice.

keys()[source]

Returns the keys in the dictionary

Returns:keys in the dict
list_factory(size, value, key)[source]

Defines which class or subclass of RangedList to use.

Main purpose is for subclasses to use a subclass or RangedList. All parameters are pass through ones to the List constructor

Parameters:
  • size – Fixed length of the list
  • value – value to given to all elements in the list
  • key – The dict key this list covers.
Returns:

AbstractList in this case a RangedList

set_default(key, default)[source]

Sets the default value for a single key.

Note

Does not change any values but only changes what reset_value would do

Warning

If called on a View it sets the default for the whole range and not just the view.

Parameters:
  • key (str) – Existing dict key
  • default – Value to be used by reset
set_value(key, value, use_list_as_value=False)[source]

Resets a already existing key to the new value. All IDs in the whole range or view will have this key set.

Warning

This method does not allow adding keys. Using dict[str] = will add a new key, but it is not supported for views.

Warning

If a View is created over multiple ranges this method would raise a KeyError if any the ranges does not have the key. (Currently multiple ranges not yet supported.)

Parameters:
  • key (str) – key to value being set
  • value – any object
  • use_list_as_value – True if the value is a list
Raises:

KeyError – If a new key is being used.

update_safe_iter_all_values(key, ids)[source]

Same as iter_all_values() but limited to a collection of IDs and update-safe.

view_factory(key)[source]

Main function for creating views. This is the preferred way of creating new views as it checks parameters and returns the most efficient view.

Note the __getitem__ methods called by Object[id] and similar defer to this method so are fine to use.

The ID(s) used are the actual IDs in the range and not indexes on the list of IDs

Parameters:key – A single int ID, a Slice object, or an iterable of int IDs
Returns:A view over the range
class spinn_utilities.ranged.RangedList(size=None, value=None, key=None, use_list_as_value=False)[source]

Bases: spinn_utilities.ranged.abstract_list.AbstractList

A list that is able to efficiently hold large numbers of elements that all have the same value.

Parameters:
  • size (int or None) – Fixed length of the list; if None, the value must be a sized object.
  • value (object or Sized) – value to given to all elements in the list
  • key – The dict key this list covers. This is used only for better Exception messages
  • use_list_as_value (bool) – True if the value is a list
static as_list(value, size, ids=None)[source]

Converts (if required) the value into a list of a given size. An exception is raised if value cannot be given size elements.

Note

This method can be extended to add other conversions to list in which case is_list() must also be extended.

Parameters:value
Returns:value as a list
Raises:Exception – if the number of values and the size do not match
copy()[source]

Creates a copy of this list.

Depth is just enough so that any changes done through the RangedList API on other will not change self

Returns:The copy
Return type:RangedList
copy_into(other)[source]

Turns this List into a of the other list but keep its id

Depth is just enough so that any changes done through the RangedList API on other will not change self

Parameters:other (RangedList) – Another Ranged List to copy the values from
get_default()[source]

Returns the default value for this list.

Returns:Default Value
Return type:object
get_ranges()[source]

Returns a copy of the list of ranges.

Note

As this is a copy it will not reflect any updates.

Return type:list(tuple(int,int,object))
get_single_value_by_ids(ids)[source]

If possible, returns a single value shared by all the IDs.

For multiple values, use for x in list, iter(list), list.iter, or one of the iter_ranges methods.

Returns:Value shared by all elements with these IDs
Raises:MultipleValuesException – If even one elements has a different value. Not thrown if elements outside of the IDs have a different value, even if these elements are between the ones pointed to by IDs
get_single_value_by_slice(slice_start, slice_stop)[source]

If possible, returns a single value shared by the whole slice list.

For multiple values, use for x in list, iter(list), list.iter, or one of the iter_ranges methods

Returns:Value shared by all elements in the slice
Raises:MultipleValuesException – If even one elements has a different value. Not thrown if elements outside of the slice have a different value
get_value_by_id(the_id)[source]

Returns the value for one item in the list

Parameters:the_id (int) – One of the IDs of an element in the list
Returns:The value of that element
static is_list(value, size)[source]

Determines if the value should be treated as a list.

Note

This method can be extended to add other checks for list in which case as_list() must also be extended.

iter_by_slice(slice_start, slice_stop)[source]

Fast but not update-safe iterator of all elements in the slice.

Note

Duplicate/Repeated elements are yielded for each ID

Returns:yields each element one by one
iter_ranges()[source]

Fast but not update-safe iterator of the ranges.

Returns:yields each range one by one
iter_ranges_by_slice(slice_start, slice_stop)[source]

Fast but not update-safe iterator of the ranges covered by this slice.

Note

The start and stop of the range will be reduced to just the IDs inside the slice.

Returns:yields each range one by one
range_based()[source]

Shows if the list is suited to deal with ranges or not.

All list must implement all the range functions, but there are times when using ranges will probably be slower than using individual values. For example the individual values may be stored in a list in which case the ranges are created on demand.

Returns:True if and only if Ranged based calls are recommended.
Return type:bool
set_default(default)[source]

Sets the default value.

Note

Does not change the value of any element in the list.

Parameters:default (object) – new default value
set_value(value, use_list_as_value=False)[source]

Sets all elements in the list to this value.

Note

Does not change the default.

Parameters:
  • value – new value
  • use_list_as_value – True if the value to be set is a list
set_value_by_id(the_id, value)[source]

Sets the value for a single ID to the new value.

Note

This method only works for a single positive int ID. Use set or __set__ for slices, tuples, lists and negative indexes.

Parameters:
  • the_id (int) – Single ID
  • value (object) – The value to save
set_value_by_ids(ids, value, use_list_as_value=False)[source]
set_value_by_selector(selector, value, use_list_as_value=False)[source]

Support for the list[x] = format.

Parameters:
  • selector (int or slice or list(int)) – A single ID, a slice of IDs or a list of IDs
  • value (object) –
set_value_by_slice(slice_start, slice_stop, value, use_list_as_value=False)[source]

Sets the value for a single range to the new value.

Note

This method only works for a single positive range. Use set or __set__ for slices, tuples, lists and negative indexes.

Parameters:
  • slice_start (int) – Start of the range
  • slice_stop (int) – Exclusive end of the range
  • value (object) – The value to save
class spinn_utilities.ranged.RangedListOfList(size=None, value=None, key=None, use_list_as_value=False)[source]

Bases: spinn_utilities.ranged.ranged_list.RangedList

Parameters:
  • size (int or None) – Fixed length of the list; if None, the value must be a sized object.
  • value (object or Sized) – value to given to all elements in the list
  • key – The dict key this list covers. This is used only for better Exception messages
  • use_list_as_value (bool) – True if the value is a list
static is_list(value, size)[source]

Determines if the value should be treated as a list.

Note

This method can be extended to add other checks for list in which case as_list() must also be extended.