kenjutsu.kenjutsu module

The module kenjutsu provides support for working with slices.

Overview

The module kenjutsu provides several functions that are useful for working with a Python slice or tuple of slices. This is of particular value when working with NumPy.

API

exception kenjutsu.kenjutsu.UnknownSliceLengthException[source]

Bases: exceptions.Exception

Raised if a slice does not have a known length.

kenjutsu.kenjutsu.len_slice(a_slice, a_length=None)[source]

Determines how many elements a slice will contain.

Raises:
Parameters:
  • a_slice (slice) – a slice to reformat.
  • a_length (int) – a length to fill for stopping if not provided.
Returns:

a new slice with as many values filled in as

possible.

Return type:

(slice)

Examples

>>> len_slice(slice(2, None), 10)
8
>>> len_slice(slice(2, 6))
4
kenjutsu.kenjutsu.len_slices(slices, lengths=None)[source]

Takes a tuple of slices and reformats them to fill in as many undefined values as possible.

Parameters:
  • slices (tuple(slice)) – a tuple of slices to reformat.
  • lengths (tuple(int)) – a tuple of lengths to fill.
Returns:

a tuple of slices with all default

values filled if possible.

Return type:

(slice)

Examples

>>> len_slices(
...     (
...         slice(None),
...         slice(3, None),
...         slice(None, 5),
...         slice(None, None, 2)
...     ),
...     (10, 13, 15, 20)
... )
(10, 10, 5, 10)
kenjutsu.kenjutsu.reformat_slice(a_slice, a_length=None)[source]

Takes a slice and reformats it to fill in as many undefined values as possible.

Parameters:
  • a_slice (slice) – a slice to reformat.
  • a_length (int) – a length to fill for stopping if not provided.
Returns:

a new slice with as many values filled in as

possible.

Return type:

(slice)

Examples

>>> reformat_slice(slice(2, -1, None))
slice(2, -1, 1)
>>> reformat_slice(slice(2, -1, None), 10)
slice(2, 9, 1)
kenjutsu.kenjutsu.reformat_slices(slices, lengths=None)[source]

Takes a tuple of slices and reformats them to fill in as many undefined values as possible.

Parameters:
  • slices (tuple(slice)) – a tuple of slices to reformat.
  • lengths (tuple(int)) – a tuple of lengths to fill.
Returns:

a tuple of slices with all default

values filled if possible.

Return type:

(slice)

Examples

>>> reformat_slices(
...     (
...         slice(None),
...         slice(3, None),
...         slice(None, 5),
...         slice(None, None, 2)
...     ),
...     (10, 13, 15, 20)
... )
(slice(0, 10, 1), slice(3, 13, 1), slice(0, 5, 1), slice(0, 20, 2))
kenjutsu.kenjutsu.split_blocks(space_shape, block_shape, block_halo=None)[source]

Return a list of slicings to cut each block out of an array or other.

Takes an array with space_shape and block_shape for every dimension and a block_halo to extend each block on each side. From this, it can compute slicings to use for cutting each block out from the original array, HDF5 dataset or other.

Note

Blocks on the boundary that cannot extend the full range will be truncated to the largest block that will fit. This will raise a warning, which can be converted to an exception, if needed.

Parameters:
  • space_shape (tuple) – Shape of array to slice
  • block_shape (tuple) – Size of each block to take
  • block_halo (tuple) – Halo to tack on to each block
Returns:

Provides tuples of slices for retrieving blocks.

Return type:

collections.Sequence of tuples of slices

Examples

>>> split_blocks(
...     (2, 3,), (1, 1,), (1, 1,)
... )  
([(slice(0, 1, 1), slice(0, 1, 1)),
  (slice(0, 1, 1), slice(1, 2, 1)),
  (slice(0, 1, 1), slice(2, 3, 1)),
  (slice(1, 2, 1), slice(0, 1, 1)),
  (slice(1, 2, 1), slice(1, 2, 1)),
  (slice(1, 2, 1), slice(2, 3, 1))],

 [(slice(0, 2, 1), slice(0, 2, 1)),
  (slice(0, 2, 1), slice(0, 3, 1)),
  (slice(0, 2, 1), slice(1, 3, 1)),
  (slice(0, 2, 1), slice(0, 2, 1)),
  (slice(0, 2, 1), slice(0, 3, 1)),
  (slice(0, 2, 1), slice(1, 3, 1))],

 [(slice(0, 1, 1), slice(0, 1, 1)),
  (slice(0, 1, 1), slice(1, 2, 1)),
  (slice(0, 1, 1), slice(1, 2, 1)),
  (slice(1, 2, 1), slice(0, 1, 1)),
  (slice(1, 2, 1), slice(1, 2, 1)),
  (slice(1, 2, 1), slice(1, 2, 1))])