Skip to content

Commit 1df3701

Browse files
committed
Converted the to_*_array() functions into generics.
This should make it more extensible, for subclasses that are able to avoid block processing for more efficient coercion.
1 parent 4c12481 commit 1df3701

6 files changed

+53
-35
lines changed

src/delayedarray/DelayedArray.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
from .UnaryIsometricOpSimple import UnaryIsometricOpSimple
1414
from .UnaryIsometricOpWithArgs import UnaryIsometricOpWithArgs
1515

16-
from .extract_dense_array import extract_dense_array, to_dense_array
16+
from .extract_dense_array import extract_dense_array
17+
from .to_dense_array import to_dense_array
1718
from .extract_sparse_array import extract_sparse_array
1819
from .apply_over_blocks import apply_over_blocks, choose_block_shape_for_iteration
1920
from .create_dask_array import create_dask_array

src/delayedarray/__init__.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@
2727
from .UnaryIsometricOpWithArgs import UnaryIsometricOpWithArgs
2828
from .SparseNdarray import SparseNdarray
2929

30-
from .extract_dense_array import extract_dense_array, to_dense_array
31-
from .extract_sparse_array import extract_sparse_array, to_sparse_array
30+
from .extract_dense_array import extract_dense_array
31+
from .extract_sparse_array import extract_sparse_array
32+
from .to_dense_array import to_dense_array
33+
from .to_sparse_array import to_sparse_array
34+
3235
from .create_dask_array import create_dask_array
3336
from .is_sparse import is_sparse
3437
from .is_masked import is_masked

src/delayedarray/extract_dense_array.py

+1-16
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from typing import Any, Tuple, Sequence
44
from biocutils.package_utils import is_package_installed
55

6-
from ._subset import _spawn_indices, _is_subset_noop
6+
from ._subset import _is_subset_noop
77
from .SparseNdarray import SparseNdarray, _extract_dense_array_from_SparseNdarray
88

99
__author__ = "ltla"
@@ -91,18 +91,3 @@ def extract_dense_array_sparse_array(x, subset: Tuple[Sequence[int], ...]) -> nu
9191
extract_dense_array.register(sp.sparray, extract_dense_array_sparse_array)
9292
except Exception:
9393
pass
94-
95-
96-
def to_dense_array(x: Any) -> numpy.ndarray:
97-
"""
98-
Convenience function that extracts the entirety of ``x`` as a dense NumPy
99-
array. This simply calls :py:func:`~extract_dense_array` with ``subset``
100-
set to the full extent of all dimensions.
101-
102-
Args:
103-
x: Any array-like object.
104-
105-
Returns:
106-
NumPy array contains the full contents of ``x``. This may be masked.
107-
"""
108-
return extract_dense_array(x, _spawn_indices(x.shape))

src/delayedarray/extract_sparse_array.py

-16
Original file line numberDiff line numberDiff line change
@@ -217,19 +217,3 @@ def extract_sparse_array_coo_matrix(x: sp.coo_matrix, subset: Tuple[Sequence[int
217217
new_contents = _set_empty_contents(new_contents)
218218

219219
return SparseNdarray((*final_shape,), new_contents, dtype=x.dtype, index_dtype=x.row.dtype, is_masked=False, check=False)
220-
221-
222-
def to_sparse_array(x: Any) -> numpy.ndarray:
223-
"""
224-
Convenience function that extracts the entirety of ``x`` as a
225-
:py:class:`~delayedarray.SparseNdarray.SparseNdarray`. This simply calls
226-
:py:func:`~extract_sparse_array` with ``subset`` set to the full extent of
227-
all dimensions.
228-
229-
Args:
230-
x: Any array-like object containing sparse data.
231-
232-
Returns:
233-
``SparseNdarray`` with the full contents of ``x``.
234-
"""
235-
return extract_sparse_array(x, _spawn_indices(x.shape))

src/delayedarray/to_dense_array.py

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from functools import singledispatch
2+
from typing import Any
3+
import numpy
4+
5+
from .extract_dense_array import extract_dense_array
6+
from ._subset import _spawn_indices
7+
8+
9+
@singledispatch
10+
def to_dense_array(x: Any) -> numpy.ndarray:
11+
"""
12+
Extract ``x`` as a dense NumPy array. The default method simply calls
13+
:py:func:`~delayedarray.extract_dense_array.extract_dense_array` with
14+
``subset`` set to the full extent of all dimensions.
15+
16+
Args:
17+
x: Any array-like object.
18+
19+
Returns:
20+
NumPy array contains the full contents of ``x``. This may be masked.
21+
"""
22+
return extract_dense_array(x, _spawn_indices(x.shape))

src/delayedarray/to_sparse_array.py

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from functools import singledispatch
2+
from typing import Any
3+
import numpy
4+
5+
from ._subset import _spawn_indices
6+
from .extract_sparse_array import extract_sparse_array
7+
from .SparseNdarray import SparseNdarray
8+
9+
10+
@singledispatch
11+
def to_sparse_array(x: Any) -> SparseNdarray:
12+
"""
13+
Convert ``x`` to a :py:class:`~delayedarray.SparseNdarray.SparseNdarray`.
14+
This calls :py:func:`~delayedarray.delayedarray.extract_sparse_array` with
15+
``subset`` set to the full extent of all dimensions.
16+
17+
Args:
18+
x: Any array-like object containing sparse data.
19+
20+
Returns:
21+
``SparseNdarray`` with the full contents of ``x``.
22+
"""
23+
return extract_sparse_array(x, _spawn_indices(x.shape))

0 commit comments

Comments
 (0)