docs: def _to_backend(self, p):
          """Converts something to the correct path representation.
  
          If given a Path, this will simply unpack it, if it's the correct type.
          If given the correct backend, it will return that.
          If given bytes for unicode of unicode for bytes, it will encode/decode
          with a reasonable encoding. Note that these operations can raise
          UnicodeError!
          """
          if isinstance(p, self._cmp_base):
              return p.path
          elif isinstance(p, self._backend):
              return p
          elif self._backend is unicode and isinstance(p, bytes):
              return p.decode(self._encoding)
          elif self._backend is bytes and isinstance(p, unicode):
              return p.encode(self._encoding,
                              'surrogateescape' if PY3 else 'strict')
          else:
              raise TypeError("Can't construct a %s from %r" % (
                              self.__class__.__name__, type(p)))