content: [project]
  # General information about the 3rd-party project: Its name, why we test it,
  # and where to find the relevant tarball, along with its expected checksum.
  name = "The Algorithms - Python"
  description = """
      All algorithms implemented in Python - for education. 
      One of the most popular (stars count) Python packages on GitHub.
  """
  url = "https://github.com/TheAlgorithms/Python/archive/77b4fa8b3f2070ff708405cca1381b7860e316ab.tar.gz"
  sha256 = "f46e3afeef27bb09d66fda69f50f562289fcfb5993c2e799e5765862b9f6c9f2"
  # The SHA256 checksum above can be found by running `sha256sum` on the
  # downloaded tarball. It is used to ensure that we run tests against the
  # expected revision of the 3rd-party project.
  
  # Below are our experiments which run FawltyDeps with various options on the
  # above (unpacked) tarball. Each table represents an experiment with the
  # command-line arguments we pass to FawltyDeps (in `args`, --json is implicitly
  # added by test_real_projects), as well as our expectations for what FawltyDeps
  # should return in that scenario. These expectations are encoded as lists of
  # import/dependency names which we expect to be present in the corresponding
  # parts of the JSON: imports, declared_deps, undeclared_deps, and unused_deps.
  # All these fields are optional, and the verification will be skipped for
  # missing fields.
  
  [experiments.all]
  description = """
      Running FD on the entire TheAlgorithms/Python project, but w/o installing
      any of its requirements. This relies heavily on IdentityMapping, and
      exposes its weaknesses.
  """
  args = []
  # When we run FawltyDeps with the above arguments, we expect these results:
  imports= [
      "PIL",
      "bs4",
      "cv2",
      "django",
      "fake_useragent",
      "lxml",
      "matplotlib",
      "mpmath",
      "numpy",
      "pandas",
      "pytest",
      "qiskit",
      "requests",
      "rich",
      "scipy",
      "seaborn",
      "skfuzzy",
      "sklearn",
      "statsmodels",
      "sympy",
      "tensorflow",
      "tweepy",
      "xgboost",
  ]
  
  declared_deps = [
      "beautifulsoup4",
      "fake_useragent",
      "keras",
      "lxml",
      "matplotlib",
      "numpy",
      "opencv-python",
      "pandas",
      "pillow",
      "projectq",
      "qiskit",
      "requests",
      "rich",
      "scikit-fuzzy",
      "scikit-learn",
      "statsmodels",
      "sympy",
      "tensorflow",
      "texttable",
      "tweepy",
      "xgboost",
      "yulewalker",
  ]
  
  undeclared_deps = [
      "PIL",
      "bs4",
      "cv2",
      "django",
      "mpmath",
      "pytest",
      "scipy",
      "seaborn",
      "skfuzzy",
      "sklearn",
  ]
  
  unused_deps = [
      "beautifulsoup4",
      "keras",
      "opencv-python",
      "pillow",
      "projectq",
      "scikit-fuzzy",
      "scikit-learn",
      "texttable",
      "yulewalker",
  ]
  
  [experiments.some_reqs_customized]
  description = """
      Running FD on the TheAlgorithms/Python project, with some requirements
      resolved via custom_mapping, and all other requirements installed.
      This solved the "placeholder package" problem for qiskit and tensorflow
      and the failing `uv pip install` for projectq, by side-stepping it with a
      custom_mapping.
  """
  # TheAlgorithms/Python depends on a couple of "placeholder" packages:
  # - The qiskit package does not provide the "qiskit" import name, but depends
  #   on other packages to populate the "qiskit" namespace.
  # - The same is true for tensorflow on Windows: The package itself is only 1.9kB
  #   and does not provide any import names at all, rather it depends on another
  #   package, tensorflow-intel, which contains the actual meat (266MB).
  #
  # Since we `pip install` with `--no-deps`, the dependencies of these packages
  # are not automatically present in our Python environment. But even if they
  # were, FawltyDeps would still not be able to recognize the connection between
  # the placeholder package and its transitive dependencies, and would therefore
  # still report the placeholder as _both_ an undeclared and unused dependency!
  #
  # The best way to work around this is to provide a custom mapping to resolve
  # these placeholders as they are intended to be used. We configure the custom
  # mapping by pointing to THIS file as a config file for FawltyDeps, which will
  # then parse the [tool.fawltydeps.custom_mapping] section below.
  args = ["--config-file", "$REAL_PROJECTS_DIR/python-algorithms.toml"]
  requirements = [
      "beautifulsoup4",
      "fake_useragent",
      "keras",
      "lxml",
      "matplotlib",
      "numpy",
      "opencv-python",
      "pandas",
      "pillow",
      "requests",
      "rich",
      "scikit-fuzzy",
      "scikit-learn",
      "statsmodels",
      "sympy",
      "texttable",
      "tweepy",
      "xgboost",
      "yulewalker",
  ]
  # When we run FawltyDeps with the above arguments, we expect these results:
  undeclared_deps = [
      "django",
      "mpmath",
      "pytest",
      "scipy",
      "seaborn",
  ]
  
  unused_deps = [
      "keras",
      "projectq",
      "texttable",
      "yulewalker",
  ]
  
  [tool.fawltydeps.custom_mapping]
  qiskit = ["qiskit"]
  tensorflow = ["tensorflow"]
  projectq = ["projectq"]
  