Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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
4 changes: 2 additions & 2 deletions .ci_support/environment-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ 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
- pyiron_lammps =0.5.3
- pyiron_lammps =0.5.4
- pyiron_vasp =0.2.19
- hatchling =1.28.0
- hatch-vcs =0.5.0
4 changes: 2 additions & 2 deletions .ci_support/environment-lammps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ channels:
- conda-forge
dependencies:
- lammps =2024.08.29=*openmpi*
- pandas =2.3.3
- pandas =3.0.0
- pylammpsmpi =0.3.9
- jinja2 =3.1.6
- iprpy-data =2023.07.25
- dynaphopy =1.18.0
- pyiron_lammps =0.5.3
- pyiron_lammps =0.5.4
4 changes: 2 additions & 2 deletions .ci_support/environment-notebooks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ dependencies:
- papermill
- 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
- pyiron_lammps =0.5.3
- pyiron_lammps =0.5.4
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
4 changes: 2 additions & 2 deletions binder/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ 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
- tqdm =4.67.1
- pyiron_lammps =0.5.3
- pyiron_lammps =0.5.4
- pyiron_vasp =0.2.19
- hatchling =1.28.0
- hatch-vcs =0.5.0
10 changes: 5 additions & 5 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",
"pyiron_lammps==0.5.3",
"pandas==3.0.0",
"pyiron_lammps==0.5.4",
]
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",
"pyiron_lammps==0.5.4",
]
experimental = [
"lxml==6.0.2",
"mendeleev==1.1.0",
"pandas==2.3.3",
"pandas==3.0.0",
"requests==2.32.5",
]
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