def METHOD_NAME(cls, op):
    tensor = op.outputs[0]
    in_tensor = op.input
    bins = op.bins
    if len(op.inputs) == 2:
        # bins is TensorData
        if has_unknown_shape(bins):
            yield
        bins = (yield from recursive_tile(bins.rechunk(tensor.shape))).chunks[0]
    out_chunks = []
    for c in in_tensor.chunks:
        input_chunks = [c]
        if len(op.inputs) == 2:
            input_chunks.append(bins)
        out_chunk = (
            op.copy()
            .reset_key()
            .new_chunk(
                input_chunks, shape=c.shape, index=c.index, order=tensor.order
            )
        )
        out_chunks.append(out_chunk)
    new_op = op.copy()
    return new_op.new_tensors(
        op.inputs,
        tensor.shape,
        order=tensor.order,
        chunks=out_chunks,
        nsplits=in_tensor.nsplits,
    )