:py:mod:`kwarray.util_misc` =========================== .. py:module:: kwarray.util_misc Module Contents --------------- Classes ~~~~~~~ .. autoapisummary:: kwarray.util_misc.FlatIndexer .. py:class:: FlatIndexer(lens) Bases: :py:obj:`ubelt.NiceRepr` Creates a flat "view" of a jagged nested indexable object. Only supports one offset level. :Parameters: **lens** (*list*) -- a list of the lengths of the nested objects. Doctest: >>> self = FlatIndexer([1, 2, 3]) >>> len(self) >>> self.unravel(4) >>> self.ravel(2, 1) .. py:method:: fromlist(cls, items) :classmethod: Convenience method to create a :class:`FlatIndexer` from the list of items itself instead of the array of lengths. :Parameters: **items** (*List[list]*) -- a list of the lists you want to flat index over :returns: FlatIndexer .. py:method:: __len__(self) .. py:method:: unravel(self, index) :Parameters: **index** -- raveled index :returns: outer and inner indices :rtype: Tuple[int, int] .. rubric:: Example >>> import kwarray >>> rng = kwarray.ensure_rng(0) >>> items = [rng.rand(rng.randint(0, 10)) for _ in range(10)] >>> self = kwarray.FlatIndexer.fromlist(items) >>> index = np.arange(0, len(self)) >>> outer, inner = self.unravel(index) >>> recon = self.ravel(outer, inner) >>> # This check is only possible because index is an arange >>> check1 = np.hstack(list(map(sorted, kwarray.group_indices(outer)[1]))) >>> check2 = np.hstack(kwarray.group_consecutive_indices(inner)) >>> assert np.all(check1 == index) >>> assert np.all(check2 == index) >>> assert np.all(index == recon) .. py:method:: ravel(self, outer, inner) :Parameters: * **outer** -- index into outer list * **inner** -- index into the list referenced by outer :returns: the raveled index :rtype: index