femto.helpers module#
- grouped(iterable, n)#
Gruoup an iterable in sub-groups of n elements. The returned iterable have len(iterable)//n tuples containing n elements. If the number of elements of the input iterable are not a multiple of n, the remaining elements will not be returned.
s -> (s0,s1,s2,...sn-1), (sn,sn+1,sn+2,...s2n-1), (s2n,s2n+1,s2n+2,...s3n-1), ...- Parameters
iterable (Iterable[Any]) – iterable to group
n (int) – size of the sub-groups
- Returns
grouped iterable
- Return type
Iterable[Any]
- pairwise(iterable, *, n=2)#
Gruoup an iterable in sub-groups of n elements. The returned iterable have len(iterable)//n tuples containing n elements. If the number of elements of the input iterable are not a multiple of n, the remaining elements will not be returned.
s -> (s0,s1,s2,...sn-1), (sn,sn+1,sn+2,...s2n-1), (s2n,s2n+1,s2n+2,...s3n-1), ...- Parameters
iterable (Iterable[Any]) – iterable to group
n (int) – size of the sub-groups
- Returns
grouped iterable
- Return type
Iterable[Any]
- swap(array, swap_pos)#
Swaps elements
- Parameters
array (list[Any]) –
swap_pos (list[tuple[int, int]]) –
- Returns
- Return type
list[Any]
- listcast(x)#
Cast any input object to a list. If x is a Python dictionary, the output will be the list of all the dict-keys.
Code example
>>> d = {'a': 1, 'b': 2, 'c': 3} >>> e = listcast(d) >>> e >>> ['a', 'b', 'c']
- Parameters
x (Any) – input object
- Returns
list
- Return type
list[Any]
- class dotdict(*args, **kwargs)#
Bases:
Dict[Any,Any]dot.notation access to dictionary attributes
- nest_level(lst)#
Compute the neseting level of a list.
- Parameters
lst (list[Any]) – input object
- Returns
number of nested lists, a flatten list has nest_level of 1.
- Return type
int
- flatten(items)#
A recursive function that flattens a list.
- Parameters
items – input list
- Returns
list with the same elements of the input list but a single nesting level.
- sign()#
A generator that cycles through +1 and -1.
Code example:
>>> s = sign() >>> next(s) 1 >>> next(s) -1 >>> next(s) 1 >>> next(s) -1 ...
- Returns
iterator cycling through +1 and -1
- Return type
Iterator[int]
- unique_filter(arrays)#
Remove duplicate subsequent points.
It takes a list of numpy arrays and returns a numpy array of unique rows. At least one coordinate have to change between two consecutive lines of the [X,Y,Z,F,S] matrix.
- Duplicates can be selected by creating a boolean index mask as follows:
make a row-wise diff (numpy.diff)
compute absolute value of all elements in order to work only with positive numbers
make a column-wise sum (numpy.diff)
mask is converted to boolean values
In this way consecutive duplicates correspond to a 0 value in the latter array. Converting this array to boolean (all non-zero values are True) the index mask can be retrieved. The first element is set to True by default since it is lost by the diff operation.
- Returns
Modified coordinate matrix (x, y, z, f, s) without duplicates.
- Return type
numpy.ndarray
Filtering adjacent identical points from a list of arrays.
Filter adjacent identical point from array. The function is different from other unique functions such as numpy’s unique function. Indeed, unique return (a sorted list of) the unique elements of the whole array. For example:
>>> x = np.array([1, 2, 3, 3, 3, 4, 3, 3]) >>> np.unique(x) np.array([1, 2, 3, 4]) >>> unique_filter([x]) np.array([1, 2, 3, 4, 3])
unique_filter works also with multiple arrays. If the input list contains several elements, the arrays are stacked together to form a [length_array, length_list] matrix. Each row of this matrix represents the coordinates of a point in a space with length_list dimensions. Finally, filtering operation is applied to the newly-constructed matrix to filter all the identical adjacent points. For example:
>>> x = np.array([1, 2, 3, 3, 3, 4, 3, 3]) >>> y = np.array([0, 1, 0, 0, 1, 1, 0, 1]) >>> unique_filter([x, y]) np.array([1, 2, 3, 3, 4, 3, 3])
- Parameters
arrays (list[npt.NDArray[np.float32]]) – list of arrays
- Returns
matrix of arrays, each row has the filtered points on a given coordinate-axis.
- Return type
npt.NDArray[np.float32]
- split_mask(arr, mask)#
Splits an array into sub-arrays based on a mask.
The function return the list of sub-arrays correspoding to True values.
- Parameters
arr (npt.NDArray[Any]) – Input array
mask (npt.NDArray[np.generic]) – Boolean array used as mask to split the input array
- Returns
List of arrays associated to True (1) values of mask.
- Return type
list[npt.NDArray[Any]]
- pad_infinite(iterable, padding=None)#
- Return type
Iterator[Any]
- pad(iterable, size, padding=None)#
- Return type
Iterator[Any]
- almost_equal(polygon, other, tol=1e-06)#
Compute equality between polygons using the shapely builtin function symmetric_difference to build a new polygon. The more similar the two input polygons, the smaller the are of the new computed polygon.
- Parameters
polygon (Polygon) – shaperly Polygon object
other (Polygon) – second shapely Polygon object
tol (float) – tolerance controlling the similarity
- Returns
boolean value True if the polygon are almost equal, False otherwise
- Return type
bool