docs: 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()},
      )