code: def with_host(self, host):
          
          # N.B. doesn't cleanup query/fragment
          if not isinstance(host, str):
              raise TypeError("Invalid host type")
          if not self.is_absolute():
              raise ValueError("host replacement is not allowed " "for relative URLs")
          if not host:
              raise ValueError("host removing is not allowed")
          host = self._encode_host(host)
          val = self._val
          return URL(
              self._val._replace(
                  netloc=self._make_netloc(
                      val.username, val.password, host, val.port, encode=False
                  )
              ),
              encoded=True,
          )
docs: Return a new URL with host replaced.
  
          Autoencode host if needed.
  
          Changing host for relative URLs is not allowed, use .join()
          instead.