def METHOD_NAME(cls, op: "LGBMPredict"):
    out = op.outputs[0]
    out_chunks = []
    data = op.data
    if data.chunk_shape[1] > 1:
        data = yield from recursive_tile(data.rechunk({1: op.data.shape[1]}))
    for in_chunk in data.chunks:
        chunk_op = op.copy().reset_key()
        chunk_index = (in_chunk.index[0],)
        if len(out.shape) > 1:
            chunk_shape = (in_chunk.shape[0], out.shape[1])
            chunk_index += (0,)
        else:
            chunk_shape = (in_chunk.shape[0],)
        if op.output_types[0] == OutputType.tensor:
            out_chunk = chunk_op.new_chunk(
                [in_chunk],
                shape=chunk_shape,
                dtype=out.dtype,
                order=out.order,
                index=chunk_index,
            )
        elif op.output_types[0] == OutputType.dataframe:
            # dataframe chunk
            out_chunk = chunk_op.new_chunk(
                [in_chunk],
                shape=chunk_shape,
                dtypes=out.dtypes,
                columns_value=out.columns_value,
                index_value=in_chunk.index_value,
                index=chunk_index,
            )
        else:
            # series chunk
            out_chunk = chunk_op.new_chunk(
                [in_chunk],
                shape=chunk_shape,
                dtype=out.dtype,
                index_value=in_chunk.index_value,
                name=out.name,
                index=chunk_index,
            )
        out_chunks.append(out_chunk)
    new_op = op.copy()
    params = out.params
    params["chunks"] = out_chunks
    nsplits = (data.nsplits[0],)
    if out.ndim > 1:
        nsplits += ((out.shape[1],),)
    params["nsplits"] = nsplits
    return new_op.new_tileables(op.inputs, kws=[params])