def METHOD_NAME(cls, op):
    tensor = op.outputs[0]
    in_tensor = op.inputs[0]
    shape = op.shape
    new_dim = tensor.ndim - in_tensor.ndim
    out_chunks = []
    for c in in_tensor.chunks:
        chunk_shape = shape[:new_dim] + tuple(
            s if in_tensor.shape[idx] != 1 else shape[new_dim + idx]
            for idx, s in enumerate(c.shape)
        )
        chunk_idx = (0,) * new_dim + c.index
        chunk_op = op.copy().reset_key()
        chunk_op._shape = chunk_shape
        out_chunk = chunk_op.new_chunk(
            [c], shape=chunk_shape, index=chunk_idx, order=tensor.order
        )
        out_chunks.append(out_chunk)
    nsplits = [
        tuple(
            c.shape[i]
            for c in out_chunks
            if all(idx == 0 for j, idx in enumerate(c.index) if j != i)
        )
        for i in range(len(out_chunks[0].shape))
    ]
    new_op = op.copy()
    return new_op.new_tensors(
        [in_tensor],
        tensor.shape,
        order=tensor.order,
        chunks=out_chunks,
        nsplits=nsplits,
    )