in core/maxframe/lib/sparse/array.py [0:0]
def call_sparse(method, *args, **kwargs):
new_args = []
make_dense = False
matrix = None
for arg in args:
if hasattr(arg, "spmatrix"):
# todo add support for multiple sparse arrays
if make_dense or matrix is not None:
make_dense = True
matrix = arg
new_args.append(matrix.spmatrix.data)
else:
if isinstance(arg, np.ndarray):
make_dense = True
new_args.append(arg)
spmatrix = matrix.spmatrix
if make_dense:
new_args = [arg.toarray() if hasattr(arg, "spmatrix") else arg for arg in args]
xp = get_array_module(spmatrix)
try:
new_data = getattr(xp, method)(*new_args, **kwargs)
except AttributeError:
if xp is np:
from scipy import special
else:
from cupyx.scipy import special
new_data = getattr(special, method)(*new_args, **kwargs)
if not make_dense:
new_spmatrix = get_sparse_module(spmatrix).csr_matrix(
(new_data, spmatrix.indices, spmatrix.indptr), spmatrix.shape
)
else:
new_spmatrix = get_sparse_module(spmatrix).csr_matrix(new_data)
return SparseNDArray(new_spmatrix, shape=matrix.shape)