code: def from_las(cls, path=None, remap=None, funcs=None, data=True, req=None, alias=None, max=None, encoding=None, 
                   printfname=None):
          
          if max is None:
              max = np.inf
          if (req is not None) and (alias is None):
              raise WellError("You need to provide an alias dict as well as requirement list.")
          if path is None:
              path = './*.[LlAaSs]'
          list_of_Wells = [Well.from_las(f, remap=remap, funcs=funcs, 
                                          data=data, req=req, alias=alias, encoding=encoding,
                                          printfname=printfname)
                           for i, f in tqdm(enumerate(glob.iglob(path))) if i < max]
          return cls(list(filter(None, list_of_Wells)))
docs: Constructor. Essentially just wraps ``Well.from_las()``, but is more
          convenient for most purposes.
  
          Args:
              path (str): The path of the LAS files, e.g. ``./*.las`` (the
                  default). It will attempt to load everything it finds, so
                  make sure it only leads to LAS files.
              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.
              data (bool): Whether to load curves or not.
              req (list): A list of alias names, giving all required curves. If
                  not all of the aliases are present, the well is not loaded.
              alias (dict): The alias dict, e.g. ``alias = {'gamma': ['GR', 'GR1'], 'density': ['RHOZ', 'RHOB'], 'pants': ['PANTS']}``
  
          Returns:
              project. The project object.