docs: def poll(self, timeout=None):
          """Poll a GPIO for the edge event configured with the .edge property.
  
          `timeout` can be a positive number for a timeout in seconds, 0 for a
          non-blocking poll, or negative or None for a blocking poll. Defaults to
          blocking poll.
  
          Args:
              timeout (int, float, None): timeout duration in seconds.
  
          Returns:
              bool: ``True`` if an edge event occurred, ``False`` on timeout.
  
          Raises:
              GPIOError: if an I/O or OS error occurs.
              TypeError: if `timeout` type is not None or int.
  
          """
          if not isinstance(timeout, (int, float, type(None))):
              raise TypeError("Invalid timeout type, should be integer, float, or None.")
  
          # Setup epoll
          p = select.epoll()
          p.register(self._fd, select.EPOLLIN | select.EPOLLET | select.EPOLLPRI)
  
          # Poll twice, as first call returns with current state
          for _ in range(2):
              events = p.poll(timeout)
  
          # If GPIO edge interrupt occurred
          if events:
              # Rewind
              try:
                  os.lseek(self._fd, 0, os.SEEK_SET)
              except OSError as e:
                  raise GPIOError(e.errno, "Rewinding GPIO: " + e.strerror)
  
              return True
  
          return False