code: def load(source, semi=None):
      
      if hasattr(source, 'read'):
          return _load(source, semi)
      else:
          with open(source, 'r') as fh:
              return _load(fh, semi)
docs: Read a variable-property mapping from *source* and return the VPM.
  
      Args:
          source: a filename or file-like object containing the VPM
              definitions
          semi (:class:`~delphin.mrs.semi.SemI`, optional): if provided,
              it is passed to the VPM constructor
      Returns:
          a :class:`VPM` instance