docs: def pprint(val,imports, prefix="\n    ", settings=[],
             unknown_value='<?>', qualify=False, separator=''):
      """
      (Experimental) Pretty printed representation of a parameterized
      object that may be evaluated with eval.
  
      Similar to repr except introspection of the constructor (__init__)
      ensures a valid and succinct representation is generated.
  
      Only parameters are represented (whether specified as standard,
      positional, or keyword arguments). Parameters specified as
      positional arguments are always shown, followed by modified
      parameters specified as keyword arguments, sorted by precedence.
  
      unknown_value determines what to do where a representation cannot be
      generated for something required to recreate the object. Such things
      include non-parameter positional and keyword arguments, and certain
      values of parameters (e.g. some random state objects).
  
      Supplying an unknown_value of None causes unrepresentable things
      to be silently ignored. If unknown_value is a string, that
      string will appear in place of any unrepresentable things. If
      unknown_value is False, an Exception will be raised if an
      unrepresentable value is encountered.
  
      If supplied, imports should be a list, and it will be populated
      with the set of imports required for the object and all of its
      parameter values.
  
      If qualify is True, the class's path will be included (e.g. "a.b.C()"),
      otherwise only the class will appear ("C()").
  
      Parameters will be separated by a comma only by default, but the
      separator parameter allows an additional separator to be supplied
      (e.g. a newline could be supplied to have each Parameter appear on a
      separate line).
  
      NOTE: pprint will replace script_repr in a future version of
      param, but is not yet a complete replacement for script_repr.
      """
      # CB: doc prefix & settings or realize they don't need to be
      # passed around, etc.
      # JLS: The settings argument is not used anywhere. To be removed
      # in a separate PR.
      if isinstance(val,type):
          rep = type_script_repr(val,imports,prefix,settings)
  
      elif type(val) in script_repr_reg:
          rep = script_repr_reg[type(val)](val,imports,prefix,settings)
  
      # CEBALERT: remove with script_repr
      elif hasattr(val,'script_repr'):
          rep=val.script_repr(imports, prefix+"    ")
  
      elif hasattr(val,'pprint'):
          rep=val.pprint(imports=imports, prefix=prefix+"    ",
                         qualify=qualify, unknown_value=unknown_value,
                         separator=separator)
  
      else:
          rep=repr(val)
  
      return rep