class_docstr: Fill-in metadata and options that can be automatically derived
  (from other metadata/options, the file system or conventions)
class_docstr_tok: ["Fill-in","metadata","and","options","that","can","be","automatically","derived","(","from","other","metadata\/options",",","the","file","system","or","conventions",")"]
docstr: The user can explicitly give a package layout via ``package_dir``
code: def _analyse_explicit_layout(self) -> bool:
      """The user can explicitly give a package layout via ``package_dir``"""
      package_dir = self._package_dir.copy()  # don't modify directly
      package_dir.pop(
          "", None
      )  # This falls under the "src-layout" umbrella
      root_dir = self._root_dir
  
      if not package_dir:
          return False
  
      log.debug(
          f"`explicit-layout` detected -- analysing {package_dir}"
      )
      pkgs = chain_iter(
          _find_packages_within(pkg, os.path.join(root_dir, parent_dir))
          for pkg, parent_dir in package_dir.items()
      )
      self.dist.packages = list(pkgs)
      log.debug(f"discovered packages -- {self.dist.packages}")
      return True
  
imports: import itertools
  import os
  from fnmatch import fnmatchcase
  from glob import glob
  from pathlib import Path
  from typing import TYPE_CHECKING, Dict, Iterable, Iterator, List, Mapping, Optional, Tuple, Union
  import _distutils_hack.override
  from distutils import log
  from distutils.util import convert_path
label_desc: Use image node_id 9 for calling the ConfigDiscovery obj's underlying member method code with example usage: obj._analyse_explicit_layout() and returns: True, False