11"""Tests for the minimum dependencies in the README.rst file."""
2+
23import os
34import platform
45import re
56from pathlib import Path
67
78import pytest
8- from sklearn .utils .fixes import parse_version
9+ import tomllib
10+ from packaging .requirements import Requirement
11+ from packaging .version import parse
912
1013import imblearn
11- from imblearn ._min_dependencies import dependent_packages
1214
1315
1416@pytest .mark .skipif (
1719def test_min_dependencies_readme ():
1820 # Test that the minimum dependencies in the README.rst file are
1921 # consistent with the minimum dependencies defined at the file:
20- # imblearn/_min_dependencies.py
22+ # pyproject.toml
23+
24+ pyproject_path = Path (imblearn .__path__ [0 ]).parents [0 ] / "pyproject.toml"
25+ with open (pyproject_path , "rb" ) as f :
26+ pyproject_data = tomllib .load (f )
27+
28+ def process_requirements (requirements ):
29+ result = {}
30+ for req in requirements :
31+ req = Requirement (req )
32+ for specifier in req .specifier :
33+ if specifier .operator == ">=" :
34+ result [req .name ] = parse (specifier .version )
35+ return result
36+
37+ min_dependencies = process_requirements (
38+ [f"python{ pyproject_data ['project' ]['requires-python' ]} " ]
39+ )
40+ min_dependencies .update (
41+ process_requirements (pyproject_data ["project" ]["dependencies" ])
42+ )
43+
44+ markers = ["docs" , "optional" , "tensorflow" , "keras" , "tests" ]
45+ for marker_name in markers :
46+ min_dependencies .update (
47+ process_requirements (
48+ pyproject_data ["project" ]["optional-dependencies" ][marker_name ]
49+ )
50+ )
2151
2252 pattern = re .compile (
2353 r"(\.\. \|)"
@@ -44,8 +74,8 @@ def test_min_dependencies_readme():
4474 package , version = matched .group (2 ), matched .group (5 )
4575 package = package .lower ()
4676
47- if package in dependent_packages :
48- version = parse_version (version )
49- min_version = parse_version ( dependent_packages [package ][ 0 ])
77+ if package in min_dependencies :
78+ version = parse (version )
79+ min_version = min_dependencies [package ]
5080
5181 assert version == min_version , f"{ package } has a mismatched version"
0 commit comments