code: def get_module_names(path_dir, exclude=None):
      if exclude is None: exclude = _default_exclude
      "Search a given `path_dir` and return all the modules contained inside except those in `exclude`"
      files = sorted(path_dir.glob('*'), key=lambda x: (x.is_dir(), x.name), reverse=True) # directories first
      res = [f'{path_dir.name}']
      for f in files:
          if f.is_dir() and f.name in exclude: continue # exclude directories
          if any([f.name.endswith(ex) for ex in exclude]): continue # exclude extensions
  
          if f.suffix == '.py': res.append(f'{path_dir.name}.{f.stem}')
          elif f.is_dir(): res += [f'{path_dir.name}.{name}' for name in get_module_names(f)]
      return ref get_module_names(path_dir, exclude=None):
      if exclude is None: exclude = _default_exclude
      "Search a given `path_dir` and return all the modules contained inside except those in `exclude`"
      files = sorted(path_dir.glob('*'), key=lambda x: (x.is_dir(), x.name), reverse=True) # directories first
      res = [f'{path_dir.name}']
      for f in files:
          if f.is_dir() and f.name in exclude: continue # exclude directories
          if any([f.name.endswith(ex) for ex in exclude]): continue # exclude extensions
  
          if f.suffix == '.py': res.append(f'{path_dir.name}.{f.stem}')
          elif f.is_dir(): res += [f'{path_dir.name}.{name}' for name in get_module_names(f)]
      return res
docs: Search a given `path_dir` and return all the modules contained inside except those in `exclude`