docs: def multi(state, *tests):
      """Run multiple subtests. Return original state (for chaining).
  
      This function could be thought as an AND statement, since all tests it runs must pass
  
      Args:
          state: State instance describing student and solution code,  can be omitted if used with Ex()
          tests: one or more sub-SCTs to run.
  
      :Example:
          The SCT below checks two has_code cases.. ::
  
              Ex().multi(has_code('SELECT'), has_code('WHERE'))
  
          The SCT below uses ``multi`` to 'branch out' to check that
          the SELECT statement has both a WHERE and LIMIT clause.. ::
  
              Ex().check_node('SelectStmt', 0).multi(
                  check_edge('where_clause'),
                  check_edge('limit_clause')
              )
      """
      for test in iter_tests(tests):
          # assume test is function needing a state argument
          # partial state so reporter can test
          state.do_test(partial(test, state))
  
      # return original state, so can be chained
      return state