code: def with_name(self, name):
          
          # N.B. DOES cleanup query/fragment
          if not isinstance(name, str):
              raise TypeError("Invalid name type")
          if "/" in name:
              raise ValueError("Slash in name is not allowed")
          name = self._PATH_QUOTER(name)
          if name in (".", ".."):
              raise ValueError(". and .. values are forbidden")
          parts = list(self.raw_parts)
          if self.is_absolute():
              if len(parts) == 1:
                  parts.append(name)
              else:
                  parts[-1] = name
              parts[0] = ""  # replace leading '/'
          else:
              parts[-1] = name
              if parts[0] == "/":
                  parts[0] = ""  # replace leading '/'
          return URL(
              self._val._replace(path="/".join(parts), query="", fragment=""),
              encoded=True,
          )
docs: Return a new URL with name (last part of path) replaced.
  
          Query and fragment parts are cleaned up.
  
          Name is encoded if needed.