@@ -450,10 +450,11 @@ def lazy_elementwise(lazy_array, elementwise_op):
450450 return da .map_blocks (elementwise_op , lazy_array , dtype = dtype )
451451
452452
453- def map_complete_blocks (src , func , dims , out_sizes ):
453+ def map_complete_blocks (src , func , dims , out_sizes , * args , ** kwargs ):
454454 """Apply a function to complete blocks.
455455
456456 Complete means that the data is not chunked along the chosen dimensions.
457+ Uses :func:`dask.array.map_blocks` to implement the mapping.
457458
458459 Parameters
459460 ----------
@@ -465,27 +466,47 @@ def map_complete_blocks(src, func, dims, out_sizes):
465466 Dimensions that cannot be chunked.
466467 out_sizes : tuple of int
467468 Output size of dimensions that cannot be chunked.
469+ *args : tuple
470+ Additional arguments to pass to `func`.
471+ **kwargs : dict
472+ Additional keyword arguments to pass to `func`.
473+
474+ Returns
475+ -------
476+ Array-like
477+
478+ See Also
479+ --------
480+ :func:`dask.array.map_blocks` : The function used for the mapping.
468481
469482 """
483+ data = None
484+ result = None
485+
470486 if is_lazy_data (src ):
471487 data = src
472488 elif not hasattr (src , "has_lazy_data" ):
473489 # Not a lazy array and not a cube. So treat as ordinary numpy array.
474- return func (src )
490+ result = func (src , * args , ** kwargs )
475491 elif not src .has_lazy_data ():
476- return func (src .data )
492+ result = func (src .data , * args , ** kwargs )
477493 else :
478494 data = src .lazy_data ()
479495
480- # Ensure dims are not chunked
481- in_chunks = list (data .chunks )
482- for dim in dims :
483- in_chunks [dim ] = src .shape [dim ]
484- data = data .rechunk (in_chunks )
496+ if result is None and data is not None :
497+ # Ensure dims are not chunked
498+ in_chunks = list (data .chunks )
499+ for dim in dims :
500+ in_chunks [dim ] = src .shape [dim ]
501+ data = data .rechunk (in_chunks )
485502
486- # Determine output chunks
487- out_chunks = list (data .chunks )
488- for dim , size in zip (dims , out_sizes ):
489- out_chunks [dim ] = size
503+ # Determine output chunks
504+ out_chunks = list (data .chunks )
505+ for dim , size in zip (dims , out_sizes ):
506+ out_chunks [dim ] = size
490507
491- return data .map_blocks (func , chunks = out_chunks , dtype = src .dtype )
508+ result = data .map_blocks (
509+ func , * args , chunks = out_chunks , dtype = src .dtype , ** kwargs
510+ )
511+
512+ return result
0 commit comments