def METHOD_NAME(cls, op):
    tensor = op.outputs[0]
    chunk_length = tensor.extra_params.raw_chunk_size or options.chunk_size
    chunk_length = decide_chunk_sizes(
        tensor.shape, chunk_length, tensor.dtype.itemsize
    )
    start, stop, num, endpoint = (
        tensor.op.start,
        tensor.op.stop,
        tensor.op.num,
        tensor.op.endpoint,
    )
    if num > 1:
        step = float(stop - start) / (num if not endpoint else num - 1)
    else:
        step = 0.0
    chunks = []
    chunk_start = start
    nsplit = []
    for i, cs in enumerate(chunk_length[0]):
        chunk_stop = chunk_start + (cs - 1) * step
        chunk_op = op.to_chunk_op(chunk_start, chunk_stop, cs, True)
        chunk_shape = (cs,)
        chunk_idx = (i,)
        chunk = chunk_op.new_chunk(None, shape=chunk_shape, index=chunk_idx)
        chunks.append(chunk)
        nsplit.append(cs)
        chunk_start = chunk_start + cs * step
    new_op = op.copy()
    return new_op.new_tensors(
        op.inputs, op.outputs[0].shape, chunks=chunks, nsplits=(tuple(nsplit),)
    )