def METHOD_NAME(cls, op):
    from ..datasource import arange
    in_tensor = astensor(op.input)
    flattened = in_tensor.astype(bool).flatten()
    flattened = yield from recursive_tile(flattened)
    indices = arange(flattened.size, dtype=np.intp, chunk_size=flattened.nsplits)
    indices = indices[flattened]
    dim_indices = unravel_index(indices, in_tensor.shape)
    dim_indices = yield from recursive_tile(dim_indices)
    kws = [
        {"nsplits": ind.nsplits, "chunks": ind.chunks, "shape": o.shape}
        for ind, o in zip(dim_indices, op.outputs)
    ]
    new_op = op.copy()
    return new_op.new_tensors(op.inputs, kws=kws, output_limit=len(kws))