---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-b23e571e73a3> in <module>
7 y = x.map_blocks(sparse.COO.from_numpy)
8
----> 9 y.var().compute()
~/dask/dask/base.py in compute(self, **kwargs)
279 dask.base.compute
280 """
--> 281 (result,) = compute(self, traverse=False, **kwargs)
282 return result
283
~/dask/dask/base.py in compute(*args, **kwargs)
561 postcomputes.append(x.__dask_postcompute__())
562
--> 563 results = schedule(dsk, keys, **kwargs)
564 return repack([f(r, *a) for r, (f, a) in zip(results, postcomputes)])
565
~/dask/dask/threaded.py in get(dsk, result, cache, num_workers, pool, **kwargs)
74 pools[thread][num_workers] = pool
75
---> 76 results = get_async(
77 pool.apply_async,
78 len(pool._pool),
~/dask/dask/local.py in get_async(apply_async, num_workers, dsk, result, cache, get_id, rerun_exceptions_locally, pack_exception, raise_exception, callbacks, dumps, loads, **kwargs)
485 _execute_task(task, data) # Re-execute locally
486 else:
--> 487 raise_exception(exc, tb)
488 res, worker_id = loads(res_info)
489 state["cache"][key] = res
~/dask/dask/local.py in reraise(exc, tb)
315 if exc.__traceback__ is not tb:
316 raise exc.with_traceback(tb)
--> 317 raise exc
318
319
~/dask/dask/local.py in execute_task(key, task_info, dumps, loads, get_id, pack_exception)
220 try:
221 task, data = loads(task_info)
--> 222 result = _execute_task(task, data)
223 id = get_id()
224 result = dumps((result, id))
~/dask/dask/core.py in _execute_task(arg, cache, dsk)
119 # temporaries by their reference count and can execute certain
120 # operations in-place.
--> 121 return func(*(_execute_task(a, cache) for a in args))
122 elif not ishashable(arg):
123 return arg
~/dask/dask/array/reductions.py in moment_agg(pairs, order, ddof, dtype, sum, axis, computing_meta, **kwargs)
776
777 totals = _concatenate2(deepmap(lambda pair: pair["total"], pairs), axes=axis)
--> 778 Ms = _concatenate2(deepmap(lambda pair: pair["M"], pairs), axes=axis)
779
780 mu = divide(totals.sum(axis=axis, **keepdim_kw), n, dtype=dtype)
~/dask/dask/array/core.py in _concatenate2(arrays, axes)
334 return arrays
335 if len(axes) > 1:
--> 336 arrays = [_concatenate2(a, axes=axes[1:]) for a in arrays]
337 concatenate = concatenate_lookup.dispatch(
338 type(max(arrays, key=lambda x: getattr(x, "__array_priority__", 0)))
~/dask/dask/array/core.py in <listcomp>(.0)
334 return arrays
335 if len(axes) > 1:
--> 336 arrays = [_concatenate2(a, axes=axes[1:]) for a in arrays]
337 concatenate = concatenate_lookup.dispatch(
338 type(max(arrays, key=lambda x: getattr(x, "__array_priority__", 0)))
~/dask/dask/array/core.py in _concatenate2(arrays, axes)
334 return arrays
335 if len(axes) > 1:
--> 336 arrays = [_concatenate2(a, axes=axes[1:]) for a in arrays]
337 concatenate = concatenate_lookup.dispatch(
338 type(max(arrays, key=lambda x: getattr(x, "__array_priority__", 0)))
~/dask/dask/array/core.py in <listcomp>(.0)
334 return arrays
335 if len(axes) > 1:
--> 336 arrays = [_concatenate2(a, axes=axes[1:]) for a in arrays]
337 concatenate = concatenate_lookup.dispatch(
338 type(max(arrays, key=lambda x: getattr(x, "__array_priority__", 0)))
~/dask/dask/array/core.py in _concatenate2(arrays, axes)
338 type(max(arrays, key=lambda x: getattr(x, "__array_priority__", 0)))
339 )
--> 340 return concatenate(arrays, axis=axes[0])
341
342
~/conda/envs/dask-38-np12/lib/python3.8/site-packages/sparse/_common.py in concatenate(arrays, axis, compressed_axes)
1246 from ._coo import concatenate as coo_concat
1247
-> 1248 return coo_concat(arrays, axis)
1249 else:
1250 from ._compressed import concatenate as gcxs_concat
~/conda/envs/dask-38-np12/lib/python3.8/site-packages/sparse/_coo/common.py in concatenate(arrays, axis)
157 from .core import COO
158
--> 159 check_consistent_fill_value(arrays)
160
161 arrays = [x if isinstance(x, COO) else COO(x) for x in arrays]
~/conda/envs/dask-38-np12/lib/python3.8/site-packages/sparse/_utils.py in check_consistent_fill_value(arrays)
437 for i, arg in enumerate(arrays):
438 if not equivalent(fv, arg.fill_value):
--> 439 raise ValueError(
440 "This operation requires consistent fill-values, "
441 "but argument {:d} had a fill value of {!s}, which "
ValueError: This operation requires consistent fill-values, but argument 1 had a fill value of 0.0, which is different from a fill_value of 0.23179967316658565 in the first argument.
This has come up in CI (example: https://github.com/dask/dask/pull/6896/checks?check_run_id=1831740059) when testing with newer versions numpy 1.20.
Some of the sparse tests are marked with
xfailand a sparse issue.dask/dask/array/tests/test_sparse.py
Lines 40 to 44 in 0bb8766
The sparse issue was closed a long time ago and I think at this point the
xfailis masking a dask issue.Minimal Complete Verifiable Example:
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-2-b23e571e73a3> in <module> 7 y = x.map_blocks(sparse.COO.from_numpy) 8 ----> 9 y.var().compute() ~/dask/dask/base.py in compute(self, **kwargs) 279 dask.base.compute 280 """ --> 281 (result,) = compute(self, traverse=False, **kwargs) 282 return result 283 ~/dask/dask/base.py in compute(*args, **kwargs) 561 postcomputes.append(x.__dask_postcompute__()) 562 --> 563 results = schedule(dsk, keys, **kwargs) 564 return repack([f(r, *a) for r, (f, a) in zip(results, postcomputes)]) 565 ~/dask/dask/threaded.py in get(dsk, result, cache, num_workers, pool, **kwargs) 74 pools[thread][num_workers] = pool 75 ---> 76 results = get_async( 77 pool.apply_async, 78 len(pool._pool), ~/dask/dask/local.py in get_async(apply_async, num_workers, dsk, result, cache, get_id, rerun_exceptions_locally, pack_exception, raise_exception, callbacks, dumps, loads, **kwargs) 485 _execute_task(task, data) # Re-execute locally 486 else: --> 487 raise_exception(exc, tb) 488 res, worker_id = loads(res_info) 489 state["cache"][key] = res ~/dask/dask/local.py in reraise(exc, tb) 315 if exc.__traceback__ is not tb: 316 raise exc.with_traceback(tb) --> 317 raise exc 318 319 ~/dask/dask/local.py in execute_task(key, task_info, dumps, loads, get_id, pack_exception) 220 try: 221 task, data = loads(task_info) --> 222 result = _execute_task(task, data) 223 id = get_id() 224 result = dumps((result, id)) ~/dask/dask/core.py in _execute_task(arg, cache, dsk) 119 # temporaries by their reference count and can execute certain 120 # operations in-place. --> 121 return func(*(_execute_task(a, cache) for a in args)) 122 elif not ishashable(arg): 123 return arg ~/dask/dask/array/reductions.py in moment_agg(pairs, order, ddof, dtype, sum, axis, computing_meta, **kwargs) 776 777 totals = _concatenate2(deepmap(lambda pair: pair["total"], pairs), axes=axis) --> 778 Ms = _concatenate2(deepmap(lambda pair: pair["M"], pairs), axes=axis) 779 780 mu = divide(totals.sum(axis=axis, **keepdim_kw), n, dtype=dtype) ~/dask/dask/array/core.py in _concatenate2(arrays, axes) 334 return arrays 335 if len(axes) > 1: --> 336 arrays = [_concatenate2(a, axes=axes[1:]) for a in arrays] 337 concatenate = concatenate_lookup.dispatch( 338 type(max(arrays, key=lambda x: getattr(x, "__array_priority__", 0))) ~/dask/dask/array/core.py in <listcomp>(.0) 334 return arrays 335 if len(axes) > 1: --> 336 arrays = [_concatenate2(a, axes=axes[1:]) for a in arrays] 337 concatenate = concatenate_lookup.dispatch( 338 type(max(arrays, key=lambda x: getattr(x, "__array_priority__", 0))) ~/dask/dask/array/core.py in _concatenate2(arrays, axes) 334 return arrays 335 if len(axes) > 1: --> 336 arrays = [_concatenate2(a, axes=axes[1:]) for a in arrays] 337 concatenate = concatenate_lookup.dispatch( 338 type(max(arrays, key=lambda x: getattr(x, "__array_priority__", 0))) ~/dask/dask/array/core.py in <listcomp>(.0) 334 return arrays 335 if len(axes) > 1: --> 336 arrays = [_concatenate2(a, axes=axes[1:]) for a in arrays] 337 concatenate = concatenate_lookup.dispatch( 338 type(max(arrays, key=lambda x: getattr(x, "__array_priority__", 0))) ~/dask/dask/array/core.py in _concatenate2(arrays, axes) 338 type(max(arrays, key=lambda x: getattr(x, "__array_priority__", 0))) 339 ) --> 340 return concatenate(arrays, axis=axes[0]) 341 342 ~/conda/envs/dask-38-np12/lib/python3.8/site-packages/sparse/_common.py in concatenate(arrays, axis, compressed_axes) 1246 from ._coo import concatenate as coo_concat 1247 -> 1248 return coo_concat(arrays, axis) 1249 else: 1250 from ._compressed import concatenate as gcxs_concat ~/conda/envs/dask-38-np12/lib/python3.8/site-packages/sparse/_coo/common.py in concatenate(arrays, axis) 157 from .core import COO 158 --> 159 check_consistent_fill_value(arrays) 160 161 arrays = [x if isinstance(x, COO) else COO(x) for x in arrays] ~/conda/envs/dask-38-np12/lib/python3.8/site-packages/sparse/_utils.py in check_consistent_fill_value(arrays) 437 for i, arg in enumerate(arrays): 438 if not equivalent(fv, arg.fill_value): --> 439 raise ValueError( 440 "This operation requires consistent fill-values, " 441 "but argument {:d} had a fill value of {!s}, which " ValueError: This operation requires consistent fill-values, but argument 1 had a fill value of 0.0, which is different from a fill_value of 0.23179967316658565 in the first argument.Environment: