Skip to content
Draft
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .ci_support/environment-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ dependencies:
- structuretoolkit =0.0.39
- seekpath =2.2.0
- lammps =2024.08.29
- pandas =2.3.3
- pandas =3.0.0
- pylammpsmpi =0.3.9
- jinja2 =3.1.6
- jupyter-book =1.0.0
Expand Down
2 changes: 1 addition & 1 deletion .ci_support/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ dependencies:
- lxml =6.0.2
- mendeleev =1.1.0
- numpy =2.3.5
- pandas =2.3.3
- pandas =3.0.0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Explore repository structure
find . -name "environment.yml" -type f | head -20

Repository: pyiron/atomistics

Length of output: 115


🏁 Script executed:

#!/bin/bash
# Read the CI support environment file
if [ -f ".ci_support/environment.yml" ]; then
  cat -n ".ci_support/environment.yml"
fi

Repository: pyiron/atomistics

Length of output: 540


🏁 Script executed:

#!/bin/bash
# Check pandas version availability in conda
# Using Python to query PyPI for pandas version history
python3 << 'EOF'
import urllib.request
import json

try:
    with urllib.request.urlopen('https://pypi.org/pypi/pandas/json') as response:
        data = json.loads(response.read().decode())
    
    # Check if 3.0.0 exists
    versions = list(data['releases'].keys())
    versions_sorted = sorted(versions, reverse=True)
    
    print("Latest pandas versions:")
    for v in versions_sorted[:15]:
        print(f"  {v}")
    
    if "3.0.0" in versions:
        print("\n✓ pandas 3.0.0 exists")
    else:
        print("\n✗ pandas 3.0.0 DOES NOT EXIST")
        # Find 3.x versions
        v3_versions = [v for v in versions if v.startswith('3.')]
        if v3_versions:
            print(f"  Available 3.x versions: {sorted(v3_versions, reverse=True)[:5]}")
        else:
            print("  No 3.x versions available")
except Exception as e:
    print(f"Error querying PyPI: {e}")
EOF

Repository: pyiron/atomistics

Length of output: 209


🌐 Web query:

pandas 3.0.0 release

💡 Result:

pandas 3.0.0 was released on January 21, 2026. [1]

Key highlights / breaking changes in 3.0.0:

  • Dedicated string dtype enabled by default (uses PyArrow-backed strings if PyArrow is installed; otherwise falls back). [1]
  • Copy-on-Write behavior for more consistent copy/view semantics. [1]
  • New pd.col() syntax for building expressions (e.g., in DataFrame.assign). [1]
  • Several backward-incompatible changes, including datetime/timedelta resolution inference changes and pd.offsets.Day now always representing a calendar day (DST-safe). [1]
  • Minimum Python version is now 3.11+; NumPy minimum is 1.26.0. [1]
  • Upgrade advice: upgrade to pandas 2.3 first and resolve deprecation warnings before moving to 3.0. [1]

Release candidates were published earlier (e.g., 3.0.0rc0 on Dec 3, 2025) on GitHub and PyPI. [2] [3]

Sources: [1] [2] [3]


🏁 Script executed:

#!/bin/bash
# Try to find information about available pandas versions
# using conda search via web or checking known version info
python3 << 'EOF'
# Check using requests with a different approach
import subprocess
import json

try:
    # Try using conda search command via conda-forge
    result = subprocess.run(['conda', 'search', '--json', 'pandas'], 
                          capture_output=True, text=True, timeout=30)
    if result.returncode == 0:
        data = json.loads(result.stdout)
        versions = [pkg['version'] for pkg in data.get('pandas', [])]
        versions_sorted = sorted(set(versions), reverse=True)
        print("Available pandas versions in conda-forge:")
        for v in versions_sorted[:20]:
            print(f"  {v}")
        
        if "3.0.0" in versions_sorted:
            print("\n✓ pandas 3.0.0 is available")
        else:
            print("\n✗ pandas 3.0.0 is NOT available")
            # Show highest versions
            v3_versions = [v for v in versions_sorted if v.startswith('3.')]
            if v3_versions:
                print(f"  Highest 3.x version available: {v3_versions[0]}")
            else:
                print(f"  Highest version available: {versions_sorted[0]}")
    else:
        print("Error running conda search")
except Exception as e:
    print(f"Error: {e}")
EOF

Repository: pyiron/atomistics

Length of output: 112


🏁 Script executed:

#!/bin/bash
# Check for Python version constraints in the project
find . -maxdepth 2 -type f \( -name "pyproject.toml" -o -name "setup.py" -o -name "setup.cfg" \) | head -5 | xargs -I {} cat -n {}

Repository: pyiron/atomistics

Length of output: 4463


🏁 Script executed:

#!/bin/bash
# Check CI configuration files
find .github -name "*.yml" -o -name "*.yaml" 2>/dev/null | head -5 | xargs -I {} bash -c "echo '=== {} ===' && head -30 {}"

Repository: pyiron/atomistics

Length of output: 3230


Critical: pandas 3.0.0 requires Python 3.11+ but project supports Python 3.9+.

The environment.yml pins pandas 3.0.0, which was released January 21, 2026 and requires Python 3.11 as a minimum. However, pyproject.toml declares requires-python = ">=3.9, <3.15", supporting Python 3.9 and 3.10. The CI environment will fail to solve on Python 3.9/3.10. Additionally, pandas 3.0.0 introduces breaking changes (string dtype enabled by default, Copy-on-Write behavior by default, datetime/timedelta resolution changes). The pandas upgrade guidance recommends upgrading to pandas 2.3 first and resolving deprecation warnings before moving to 3.0.

Either narrow the Python version requirement to 3.11+, or reconsider using pandas 3.0.0 given its recent release and breaking changes.

🤖 Prompt for AI Agents
In @.ci_support/environment.yml at line 9, Replace the incompatible pandas pin
by changing the deps entry "pandas =3.0.0" to a pandas 2.x compatible spec
(e.g., "pandas =2.3.*" or a range "<3.0") in the environment.yml so the solver
works with the declared requires-python in pyproject.toml (>=3.9,<3.15);
alternatively, if you intend to require pandas 3.0.0, update pyproject.toml's
requires-python to ">=3.11" and run CI/install to confirm no breakages from
pandas 3.0 behavioral changes (string dtype, copy-on-write, datetime resolution)
before committing.

- phonopy =2.47.1
- requests =2.32.5
- scipy =1.16.3
Expand Down
2 changes: 1 addition & 1 deletion binder/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ dependencies:
- seekpath =2.2.0
- gpaw =25.7.0
- lammps =2024.08.29
- pandas =2.3.3
- pandas =3.0.0
- pylammpsmpi =0.3.9
- jinja2 =3.1.6
- dynaphopy =1.18.0
Expand Down
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -49,20 +49,20 @@ gpaw = [
lammps = [
"pylammpsmpi==0.3.9",
"jinja2==3.1.6",
"pandas==2.3.3",
"pandas==3.0.0",
"pyiron_lammps==0.5.3",
]
lammps_phonons = [
"pylammpsmpi==0.3.9",
"jinja2==3.1.6",
"pandas==2.3.3",
"pandas==3.0.0",
"dynaphopy==1.18.0",
"pyiron_lammps==0.5.3",
]
experimental = [
"lxml==6.0.2",
"mendeleev==1.1.0",
"pandas==2.3.3",
"pandas==3.0.0",
"requests==2.32.5",
Comment on lines 49 to 66
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check pandas 3.0.0 Python requirement from PyPI metadata
python3 <<'PY'
import json, urllib.request
try:
    data = json.load(urllib.request.urlopen("https://pypi.org/pypi/pandas/3.0.0/json"))
    print("Requires-Python:", data["info"]["requires_python"])
    print("Version:", data["info"]["version"])
    print("Release Date:", data["info"]["release_url"])
except Exception as e:
    print(f"Error: {e}")
PY

Repository: pyiron/atomistics

Length of output: 195


🏁 Script executed:

# Also check the pyproject.toml to confirm the Python range
cat pyproject.toml | grep -A 5 "python"

Repository: pyiron/atomistics

Length of output: 301


🏁 Script executed:

# Check if there are tests for optional dependencies
git ls-files | grep -E "test.*lammps|test.*pandas" | head -20

Repository: pyiron/atomistics

Length of output: 933


🌐 Web query:

pandas 3.0.0 python version requirements support

💡 Result:

pandas 3.0.0 supports (and effectively requires) Python 3.11 or newer (i.e., Python 3.10 and earlier are not supported). [1]

Source: pandas 3.0.0 release notes (“Increased minimum version for Python”). [1]


🏁 Script executed:

# Check if there are any existing compatibility or version constraint issues in the codebase
grep -r "pandas" pyproject.toml | head -10

Repository: pyiron/atomistics

Length of output: 123


🏁 Script executed:

# Check if there are any existing test markers or skip conditions for optional deps
grep -r "skipif\|mark.skip" tests/ --include="*.py" | grep -i "lammps\|pandas" | head -10

Repository: pyiron/atomistics

Length of output: 43


Downgrade pandas to a version compatible with Python 3.9-3.10.

pandas 3.0.0 requires Python 3.11+, which breaks compatibility with Python 3.9 and 3.10 that are within your project's declared support range (>=3.9,<3.15). This affects lines 52, 58, and 65 in the lammps, lammps_phonons, and experimental optional dependency groups. Use pandas 2.x instead.

🤖 Prompt for AI Agents
In `@pyproject.toml` around lines 49 - 66, The pyproject optional dependency
groups lammps, lammps_phonons, and experimental currently pin pandas==3.0.0
which requires Python 3.11+; update those dependency entries in the lammps,
lammps_phonons, and experimental lists to a pandas 2.x release (e.g.,
pandas==2.1.3) that is compatible with Python 3.9–3.10 to restore declared
interpreter compatibility.

]
sphinxdft = [
Expand Down
4 changes: 3 additions & 1 deletion src/atomistics/referencedata/wikipedia.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from io import StringIO

import pandas
import requests

Expand Down Expand Up @@ -33,7 +35,7 @@ def get_elastic_properties(chemical_symbol: str) -> dict:
"https://en.wikipedia.org/wiki/Elastic_properties_of_the_elements_(data_page)",
headers={"User-Agent": "atomistics package"},
)
df_lst = pandas.read_html(response.text)
df_lst = pandas.read_html(StringIO(response.text))
property_dict = {}
for i, p in enumerate(property_lst):
df_tmp = df_lst[i]
Expand Down
3 changes: 2 additions & 1 deletion src/atomistics/referencedata/wolframalpha.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
from io import StringIO
from typing import Callable, Optional, Union

import numpy as np
Expand All @@ -17,7 +18,7 @@ def _get_content_from_url(url: str) -> pandas.DataFrame:
Returns:
pandas.DataFrame: The content retrieved from the URL as a pandas DataFrame.
"""
content = pandas.read_html(requests.get(url).text)
content = pandas.read_html(StringIO(requests.get(url).text))
if len(content[8]) > 1:
return content[8]
else:
Expand Down
Loading