docs: def check_not(state, *tests, msg):
      """Run multiple subtests that should fail. If all subtests fail, returns original state (for chaining)
  
      - This function is currently only tested in working with ``has_code()`` in the subtests.
      - This function can be thought as a ``NOT(x OR y OR ...)`` statement, since all tests it runs must fail
      - This function can be considered a direct counterpart of multi.
  
      Args:
          state: State instance describing student and solution code, can be omitted if used with Ex()
          *tests: one or more sub-SCTs to run
          msg: feedback message that is shown in case not all tests specified in ``*tests`` fail.
  
      :Example:
  
          Thh SCT below runs two has_code cases.. ::
  
              Ex().check_not(
                  has_code('INNER'),
                  has_code('OUTER'),
                  incorrect_msg="Don't use `INNER` or `OUTER`!"
              )
  
          If students use ``INNER (JOIN)`` or ``OUTER (JOIN)`` in their code, this test will fail.
  
      """
      for test in iter_tests(tests):
          try:
              test(state)
          except TestFail:
              # it fails, as expected, off to next one
              continue
          return state.report(Feedback(msg))
  
      # return original state, so can be chained
      return state