# Minimum allowed package versions for gliquid compatibility testing.
# Applied via: pip install --constraint requirements/min-constraints.txt
# These pin each package to the lowest version permitted by pyproject.toml.
#
# Notes:
#   - scikit-learn and xgboost are exactly pinned in pyproject.toml; no variation.
#   - plotly 5.24.0 is the minimum: 5.18's express layer calls grouped.get_group(s[0]),
#     which pandas 3.x rejects (KeyError). Measured in the compat matrix on every -min
#     env at py311+, where pandas 3 is installable; py310-min escapes on pandas 2.3.3.
#   - emmet-core is now capped <0.86 in pyproject: 0.87.1 imports pymatgen.core.entries,
#     removed from current pymatgen, breaking every live MP fetch on py311+.
#   - emmet-core has no lower bound — its minimum is resolved transitively by mp-api==0.45.1.
#   - openpyxl 3.1.5 is the minimum: pandas>=3.0 requires >=3.1.5; 3.0.x uses numpy.float
#     (removed in numpy>=1.24); 3.1.0–3.1.4 rejected by pandas 3.0.3+ at import time.
#   - sympy 1.12 is incompatible with numpy 2.x: str(np.float64(x)) in numpy 2.0 returns
#     'np.float64(x)' instead of 'x', which breaks sympy's string-to-mpmath conversion.
#   - matplotlib 3.10.0 is the minimum for Python 3.13: 3.9.0 has no cp313 wheel, forcing
#     a from-source build that fails without a C compiler. 3.10.0+ ships cp313 wheels.
#   - numpy>=2.0 is required to keep pip from backtracking through old pymatgen versions:
#     shap==0.48.0 pulls in numba which otherwise resolves numpy to 1.26.4, but modern
#     pymatgen cp310/cp313 wheels require numpy>=2.0. Forcing numpy>=2.0 avoids the
#     conflict and ensures py313 gets a binary wheel (no C-compiler needed).

plotly==5.24.0
nbformat==4.2.0
mp-api==0.45.1
matplotlib==3.10.0
sympy==1.13
scikit-learn==1.7.1
shap==0.48.0
joblib==1.3.0
xgboost==3.1.3
openpyxl==3.1.5
numpy>=2.0
