code: def warn(message, category=None, stacklevel=1):
      
      # Check if message is already a Warning object
      if isinstance(message, Warning):
          category = message.__class__
      # Check category argument
      if category is None:
          category = UserWarning
      assert issubclass(category, Warning)
      # Get context information
      try:
          caller = sys._getframe(stacklevel)
      except ValueError:
          globals = sys.__dict__
          lineno = 1
      else:
          globals = caller.f_globals
          lineno = caller.f_lineno
      if '__name__' in globals:
          module = globals['__name__']
      else:
          module = "<string>"
      filename = globals.get('__file__')
      if filename:
          fnl = filename.lower()
          if fnl.endswith((".pyc", ".pyo")):
              filename = filename[:-1]
      else:
          if module == "__main__":
              try:
                  filename = sys.argv[0]
              except AttributeError:
                  # embedded interpreters don't have sys.argv, see bug #839151
                  filename = '__main__'
          if not filename:
              filename = module
      registry = globals.setdefault("__warningregistry__", {})
      warn_explicit(message, category, filename, lineno, module, registry,
                    globals)
docs: Issue a warning, or maybe ignore it or raise an exception.