code: def pop(self, key: str, default: Any = DEFAULT) -> Any:
          
          if default is self.DEFAULT:
              try:
                  value = self.params.pop(key)
              except KeyError:
                  raise ConfigurationError("key \"{}\" is required at location \"{}\"".format(key, self.history))
          else:
              value = self.params.pop(key, default)
          if not isinstance(value, dict):
              logger.info(self.history + key + " = " + str(value))  # type: ignore
          return self._check_is_dict(key, value)
docs: Performs the functionality associated with dict.pop(key), along with checking for
          returned dictionaries, replacing them with Param objects with an updated history.
  
          If ``key`` is not present in the dictionary, and no default was specified, we raise a
          ``ConfigurationError``, instead of the typical ``KeyError``.