def METHOD_NAME(cls, op: "DataFrameExplode"):
    in_obj = op.inputs[0]
    if in_obj.ndim == 2 and in_obj.chunk_shape[1] > 1:
        # make sure data's second dimension has only 1 chunk
        in_obj = yield from recursive_tile(in_obj.rechunk({1: in_obj.shape[1]}))
    chunks = []
    for chunk in in_obj.chunks:
        new_op = op.copy().reset_key()
        chunks.append(new_op.new_chunk([chunk], **op._rewrite_params(chunk)))
    if op.ignore_index:
        yield chunks
        chunks = standardize_range_index(chunks)
    new_op = op.copy().reset_key()
    out_params = op.outputs[0].params.copy()
    out_params["chunks"] = chunks
    out_params["nsplits"] = calc_nsplits({c.index: c.shape for c in chunks})
    return new_op.new_tileable([in_obj], kws=[out_params])