<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def check_row(state, index, missing_msg=None, expand_msg=None):
 """Zoom in on a particular row in the query result, by index. After zooming in on a row, which is represented as a single-row query result, you can use ``has_equal_value()`` to verify whether all columns in the zoomed in solution query result have a match in the student query result. Args: index: index of the row to zoom in on (zero-based indexed). missing_msg: if specified, this overrides the automatically generated feedback message in case the row is missing in the student query result. expand_msg: if specified, this overrides the automatically generated feedback message that is prepended to feedback messages that are thrown further in the SCT chain. :Example: Suppose we are testing the following SELECT statements * solution: ``SELECT artist_id as id, name FROM artists LIMIT 5`` * student : ``SELECT artist_id, name FROM artists LIMIT 2`` We can write the following SCTs: :: # fails, since row 3 at index 2 is not in the student result Ex().check_row(2) # passes, since row 2 at index 1 is in the student result Ex().check_row(0) """


    if missing_msg is None:
        missing_msg = "The system wants to verify row {{index + 1}} of your query result, but couldn't find it. Have another look."
    if expand_msg is None:
        expand_msg = "Have another look at row {{index + 1}} in your query result. "
    msg_kwargs = {"index": index}

    # check that query returned something
    has_result(state)

    stu_res = state.student_result
    sol_res = state.solution_result

    n_sol = len(next(iter(sol_res.values())))
    n_stu = len(next(iter(stu_res.values())))

    if index >= n_sol:
        raise BaseException(
            "There are only {} rows in the solution query result, and you're trying to fetch the row at index {}".format(
                n_sol, index
            )
        )

    if index >= n_stu:
        _msg = state.build_message(missing_msg, fmt_kwargs=msg_kwargs)
        state.do_test(_msg)

    return state.to_child(
        append_message={"msg": expand_msg, "kwargs": msg_kwargs},
        student_result={k: [v[index]] for k, v in stu_res.items()},
        solution_result={k: [v[index]] for k, v in sol_res.items()},
    )