code: def from_las(cls,
                   fname,
                   remap=None,
                   funcs=None,
                   data=True,
                   req=None,
                   alias=None,
                   encoding=None,
                   printfname=False
                   ):
          
          if printfname:
              print(fname)
              
          if re.match(r'https?://.+\..+/.+?', fname) is not None:
              try:
                  data = urllib.request.urlopen(fname).read().decode()
              except urllib.HTTPError as e:
                  raise WellError('Could not retrieve url: ', e)
              fname = (StringIO(data))
  
          las = lasio.read(fname, encoding=encoding)
  
          # Pass to other constructor.
          return cls.from_lasio(las,
                                remap=remap,
                                funcs=funcs,
                                data=data,
                                req=req,
                                alias=alias,
                                fname=fname)
docs: Constructor. Essentially just wraps ``from_lasio()``, but is more
          convenient for most purposes.
  
          Args:
              fname (str): The path of the LAS file, or a URL to one.
              remap (dict): Optional. A dict of 'old': 'new' LAS field names.
              funcs (dict): Optional. A dict of 'las field': function() for
                  implementing a transform before loading. Can be a lambda.
              printfname (bool): prints filename before trying to load it, for 
                  debugging
  
          Returns:
              well. The well object.