Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
48f4580
ignore build folder
orionarcher Jan 20, 2026
71b96da
new CI yml files
orionarcher Jan 20, 2026
eff0f2c
run tutorials in parallel
orionarcher Jan 20, 2026
ac6c5ce
Add Secondary_Solvation_Shell to CI workflow triggers
orionarcher Jan 21, 2026
9c3fc73
Remove view_structures mock from tutorial tests
orionarcher Jan 21, 2026
a9b13e5
insignificant change to test permissions
orionarcher Jan 21, 2026
3bf77a1
Add XTB verification step to tutorial tests
orionarcher Jan 21, 2026
5e1f358
Fix: use xtb-python instead of xtb CLI package
orionarcher Jan 21, 2026
dde23d5
Remove XTB verification step
orionarcher Jan 21, 2026
6c26ef3
Add torch-dftd for MACE dispersion corrections
orionarcher Jan 21, 2026
1764cc6
Update to remove xtb-python
mgt16-LANL Jan 22, 2026
661d6b5
Switch to pyproject.toml
mgt16-LANL Jan 22, 2026
764cf0d
Attempt XTB version pinning
mgt16-LANL Jan 22, 2026
58ecd1c
Attempt 2 xtb bump
mgt16-LANL Jan 22, 2026
3165e71
Generalize Types for view_structures labels
mgt16-LANL Jan 22, 2026
a11d5e7
Fix tutorial 11 plots.
mgt16-LANL Jan 22, 2026
d51d91e
Modernize deploy.yml and pyproject.toml
orionarcher Jan 22, 2026
fbf3fe5
Minimize conda deps in test.yml, install package deps via pip
orionarcher Jan 22, 2026
f85fbb3
Minimize conda deps in test-tutorials.yml, add optional dependency gr…
orionarcher Jan 22, 2026
83360a2
Remove unnecessary pytorch and tblite-python from tutorial conda deps
orionarcher Jan 22, 2026
d7950c8
Move tblite to pyproject.toml optional dependency
orionarcher Jan 22, 2026
a76e929
clean up dependency placement
orionarcher Jan 22, 2026
da5ac6a
swap tblite dep back
orionarcher Jan 22, 2026
8b074b0
Revert test-tutorials.yml to working state from fbf3fe5
orionarcher Jan 22, 2026
537c656
Minimize conda deps, install pyproject.toml deps via pip
orionarcher Jan 22, 2026
1d6eb43
Revert "Minimize conda deps, install pyproject.toml deps via pip"
orionarcher Jan 22, 2026
beb459a
Minimize conda deps, add ipython to tutorials optional deps
orionarcher Jan 22, 2026
80610ad
Test Python 3.11, 3.12, and 3.13 in matrix
orionarcher Jan 22, 2026
8f4aca8
Drop Python 3.13 - blocked by openbabel conda-forge availability
orionarcher Jan 22, 2026
c7e659c
Test 3.11 with lowest-direct resolution, 3.12 with highest
orionarcher Jan 22, 2026
dbd4c37
Simplify test matrix: Python 3.11 and 3.12 with default resolution
orionarcher Jan 22, 2026
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.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ channels:
- conda-forge
dependencies:
- python
- xtb
- xtb>6.5
- ase
- numpy
- openbabel
Expand Down
41 changes: 21 additions & 20 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,30 @@
name: PyPi Release

on:
push:
pull_request:
workflow_dispatch:
push:
pull_request:
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: "3.10"

- name: Install dependencies
run: >-
python -m pip install --user --upgrade setuptools wheel
- name: Build
run: >-
python setup.py sdist bdist_wheel
- name: Publish distribution 📦 to PyPI
if: startsWith(github.event.ref, 'refs/tags') || github.event_name == 'release'
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.pypi_password }}
- uses: actions/checkout@v5

- uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install build dependencies
run: python -m pip install --upgrade build

- name: Build package
run: python -m build

- name: Publish distribution to PyPI
if: startsWith(github.event.ref, 'refs/tags') || github.event_name == 'release'
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.pypi_password }}
100 changes: 100 additions & 0 deletions .github/workflows/test-tutorials.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
name: Tutorial Tests

on:
push:
branches: [main, Secondary_Solvation_Shell]
pull_request:
branches: [main, Secondary_Solvation_Shell]

jobs:
find-tutorials:
runs-on: ubuntu-latest
outputs:
tutorials: ${{ steps.set-matrix.outputs.tutorials }}
steps:
- name: Check out repo
uses: actions/checkout@v5

- name: Find tutorial notebooks
id: set-matrix
run: |
# Tutorials to skip
SKIP_TUTORIALS=(
"10-Conformer_Searching.ipynb" # CREST sampling takes 6+ minutes
"12-Using_View_Structures.ipynb" # Visualization-focused, pymol renders
)

# Find all notebooks and filter out skipped ones
TUTORIALS=$(find documentation/tutorials -name "*.ipynb" | while read notebook; do
basename=$(basename "$notebook")
skip=false
for skip_tutorial in "${SKIP_TUTORIALS[@]}"; do
if [[ "$basename" == "$skip_tutorial" ]]; then
skip=true
break
fi
done
if [[ "$skip" == "false" ]]; then
echo "$notebook"
fi
done | jq -R -s -c 'split("\n")[:-1]')

echo "tutorials=$TUTORIALS" >> $GITHUB_OUTPUT

run-tutorial:
needs: find-tutorials
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
tutorial: ${{ fromJson(needs.find-tutorials.outputs.tutorials) }}
defaults:
run:
shell: bash -el {0}

steps:
- name: Check out repo
uses: actions/checkout@v5

- name: Setup micromamba
uses: mamba-org/setup-micromamba@v2
with:
micromamba-version: 'latest'
environment-name: tutorial-env
create-args: >-
python=3.12
openbabel
crest
xtb>6.5
tblite-python
jupytext
init-shell: bash

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
version: "latest"

- name: Install package with optional dependencies
run: |
uv pip install -e ".[mace,dftd,tutorials]"

- name: Convert notebook to Python script
run: |
jupytext --to py:percent "${{ matrix.tutorial }}"

- name: Run tutorial
run: |
cd $(dirname "${{ matrix.tutorial }}")
SCRIPT=$(basename "${{ matrix.tutorial }}" .ipynb).py

echo "Running $SCRIPT...!"
timeout 600 python "$SCRIPT"

- name: Cleanup
run: |
rm -rf documentation/tutorials/pymol_renders
rm -f documentation/tutorials/*.xyz
rm -f documentation/tutorials/*.py
if: always()
49 changes: 49 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Tests

on:
push:
branches: [main, Secondary_Solvation_Shell]
pull_request:
branches: [main, Secondary_Solvation_Shell]

jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# Python 3.13 blocked by openbabel not yet available on conda-forge
python-version: ['3.11', '3.12']
defaults:
run:
shell: bash -el {0}

steps:
- name: Check out repo
uses: actions/checkout@v5

- name: Setup micromamba
uses: mamba-org/setup-micromamba@v2
with:
micromamba-version: 'latest'
environment-name: test-env
create-args: >-
python=${{ matrix.python-version }}
xtb>6.5
openbabel
crest
tblite-python
init-shell: bash

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
version: "latest"

- name: Install package
run: |
uv pip install -e .

- name: Run tests
run: |
python -m unittest discover tests
37 changes: 0 additions & 37 deletions .github/workflows/unittests.yml

This file was deleted.

3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@
meta_production_sample.pkl
development/**/*.csv
development/**/*.mol2
pymol_renders/
pymol_renders/
build/
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ pip install -e .

## XTB (backend) Potentially Useful References:
* [Available Solvents](https://xtb-docs.readthedocs.io/en/latest/gbsa.html)
* [Available Methods](https://xtb-python.readthedocs.io/en/latest/general-api.html)
* [ASE Calculator](https://xtb-python.readthedocs.io/en/latest/ase-calculator.html)
* [Available Methods](https://xtb-docs.readthedocs.io/en/latest/commandline.html)
* [ASE Calculator](https://tblite.readthedocs.io/en/latest/users/ase.html#tblite.ase.TBLite)
* [XTB Documentation](https://xtb-docs.readthedocs.io/en/latest/contents.html)

## Basic Use of complex construction functionality:
Expand Down
20 changes: 1 addition & 19 deletions architector/io_calc.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,6 @@
from ase.optimize import LBFGS
from ase.constraints import FixAtoms, FixBondLengths, FixInternals

# Add any other ASE calculator here.
# To extend to other methods.
has_xtb_python = False
try:
from xtb.ase.calculator import XTB
has_xtb_python = True
except ImportError:
pass

from architector.arch_xtb_text_ase_calc import XTB_Calculator
from tblite.ase import TBLite

Expand Down Expand Up @@ -455,7 +446,7 @@ def calculate(self):
electronic_temperature=self.xtb_electronic_temperature,
verbosity=-1,
)
elif (not has_xtb_python) or (self.xtb_relax):
else:
calc = XTB_Calculator(
xtb_method=self.method,
xtb_accuracy=self.xtb_accuracy,
Expand All @@ -464,15 +455,6 @@ def calculate(self):
xtb_solvent=self.xtb_solvent,
xtb_relax=self.xtb_relax,
)
else: # legacy xtb-python
calc = XTB(
method=self.method,
solvent=self.xtb_solvent,
max_iterations=self.xtb_max_iterations,
electronic_temperature=self.xtb_electronic_temperature,
accuracy=self.xtb_accuracy,
)
# verbosity=0)
# Difference of more than 1. Still perform a ff_preoptimization if requested.
if np.abs(self.mol.xtb_charge - self.mol.charge) > 1:
if len(self.trans_oxo_triples) > 0:
Expand Down
13 changes: 1 addition & 12 deletions architector/io_lig.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,6 @@
from ase.optimize.bfgslinesearch import BFGSLineSearch
import ase.constraints as ase_con

has_xtb_python = False
try:
from xtb.ase.calculator import XTB

has_xtb_python = True
except:
pass

from architector.arch_xtb_text_ase_calc import XTB_Calculator

# from tblite.ase import TBLite -> No GFN-FF support yet.
Expand Down Expand Up @@ -119,10 +111,7 @@ def set_XTB_calc(ase_atoms):
"""
ase_atoms.set_initial_charges(np.zeros(len(ase_atoms)))
ase_atoms.set_initial_magnetic_moments(np.zeros(len(ase_atoms)))
if has_xtb_python:
calc = XTB(method="GFN-FF")
else:
calc = XTB_Calculator(xtb_method="GFN-FF")
calc = XTB_Calculator(xtb_method="GFN-FF")
# Default to only GFN-FF for ligand conformer relaxation.
ase_atoms.calc = calc
return ase_atoms
Expand Down
Loading
Loading