code: def _get_files(file_patterns, top=HERE):
      
      if not isinstance(file_patterns, (list, tuple)):
          file_patterns = [file_patterns]
  
      for i, p in enumerate(file_patterns):
          if os.path.isabs(p):
              file_patterns[i] = os.path.relpath(p, top)
  
      matchers = [_compile_pattern(p) for p in file_patterns]
  
      files = set()
  
      for root, dirnames, filenames in os.walk(top):
          # Don't recurse into node_modules
          if 'node_modules' in dirnames:
              dirnames.remove('node_modules')
          for m in matchers:
              for filename in filenames:
                  fn = os.path.relpath(_glob_pjoin(root, filename), top)
                  fn = fn.replace(os.sep, '/')
                  if m(fn):
                      files.add(fn.replace(os.sep, '/'))
  
      return list(files)
docs: Expand file patterns to a list of paths.
  
      Parameters
      -----------
      file_patterns: list or str
          A list of glob patterns for the data file locations.
          The globs can be recursive if they include a `**`.
          They should be relative paths from the top directory or
          absolute paths.
      top: str
          the directory to consider for data files
  
      Note:
      Files in `node_modules` are ignored.