Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
118 commits
Select commit Hold shift + click to select a range
0fcd11a
refactor: modernize project infrastructure and tooling
elkins Nov 30, 2025
7a0e28b
refactor: modernize project structure following Python best practices
elkins Nov 30, 2025
9e8dd23
feat: add comprehensive modernization enhancements
elkins Nov 30, 2025
fc8ecdf
refactor: remove obsolete files and apply recommended updates
elkins Nov 30, 2025
dc52801
fix: fix unit tests by addressing import and compatibility issues
elkins Nov 30, 2025
49fdff8
feat: add type hints and cross-platform configuration
elkins Nov 30, 2025
2e88d98
feat: add comprehensive type hints to core modules
elkins Nov 30, 2025
382c717
docs: add type hints guide and modernization completion summary
elkins Nov 30, 2025
eabf381
docs: add session summary of code quality improvements
elkins Nov 30, 2025
6ab4012
fix: improve type hints and mypy configuration
elkins Nov 30, 2025
e29b574
fix: fix Python 2/3 compatibility issues in unit tests
elkins Nov 30, 2025
a83ce09
fix: fix geometry parameter order and states.py tuple error
elkins Nov 30, 2025
89cd758
docs: add comprehensive test results summary
elkins Nov 30, 2025
dbd1bdb
Python 3.13 compatibility: Update to Open Babel 3.x API and fix all u…
elkins Nov 30, 2025
aa4e007
Eliminate all test warnings: fix NumPy deprecations and suppress exte…
elkins Nov 30, 2025
df7a06e
fix: escape sequences in docstrings and modernize README
elkins Nov 30, 2025
899b323
fix: remove unavailable cairo extra from GitHub Actions dependencies
elkins Nov 30, 2025
1990c3e
feat: add type stubs and pytest-benchmark suite\n\n- Add .pyi stubs f…
elkins Nov 30, 2025
e5df997
docs: add Benchmarking section with pytest-benchmark usage and CI note
elkins Nov 30, 2025
4f297da
ci(benchmark): autosave benchmark results and upload as artifact
elkins Nov 30, 2025
d3980cd
docs(readme): add Benchmarks badge and link to latest CI artifacts
elkins Nov 30, 2025
00ac7de
ci: split benchmarks into standalone workflow\n\n- Add .github/workfl…
elkins Nov 30, 2025
569cbee
ci(benchmarks): scope runs to master push/PR only; remove schedule
elkins Nov 30, 2025
8ae90b3
docs(readme): limit Benchmarks badge to master branch
elkins Nov 30, 2025
b74a3b3
docs(readme): limit Tests badge to master branch
elkins Nov 30, 2025
5dd536b
ci: configure codecov with token and settings
elkins Nov 30, 2025
86bfae9
ci: skip openbabel on Windows to fix test failures
elkins Nov 30, 2025
fb6163f
test: skip SMILES benchmarks on Windows
elkins Nov 30, 2025
25b4006
fix: disable Cython compilation on Windows
elkins Nov 30, 2025
318def6
ci(windows): stabilize pytest by disabling plugin autoload, xdist, an…
elkins Nov 30, 2025
17e11e3
ci(windows): explicitly load pytest-cov when plugin autoload is disabled
elkins Nov 30, 2025
7e2a93d
ci(windows): mitigate access violations by pinning BLAS threads and s…
elkins Nov 30, 2025
26dd5be
ci(windows): pin numpy/scipy to stable versions and skip gaussianTest
elkins Nov 30, 2025
adcb044
ci(windows): run minimal pytest (no plugins/coverage), clear addopts …
elkins Nov 30, 2025
6e53011
ci(windows): restrict matrix to Python 3.12 only for stability
elkins Nov 30, 2025
8ee047f
test: guard unittest entrypoint with __main__ to avoid pytest import …
elkins Nov 30, 2025
ce0c9af
ci(windows): exclude unittest/test.py and clear PYTEST_ADDOPTS to avo…
elkins Nov 30, 2025
159e2f7
ci(windows): run explicit core unit tests to avoid zero-selection exit
elkins Nov 30, 2025
d71f21c
ci(windows): remove -k filter to avoid PowerShell errors and system f…
elkins Nov 30, 2025
ba477c9
test(windows): skip MoleculeCheck tests on Windows due to missing Ope…
elkins Nov 30, 2025
b1a0d59
Revert "test(windows): skip MoleculeCheck tests on Windows due to mis…
elkins Nov 30, 2025
89c0974
docs: clarify Windows is experimental, CI only tests macOS/Linux; vol…
elkins Nov 30, 2025
30517f7
fix: add 'import chempy' to .pyi files for mypy compatibility
elkins Nov 30, 2025
e368157
cleanup: remove Windows-specific skips and logic from tests and CI
elkins Nov 30, 2025
57dd8f8
ci: fix YAML syntax in tests workflow; simplify to macOS/Linux steps
elkins Nov 30, 2025
c1be6fe
ci(benchmarks): run only on master push; use Python 3.12 Ubuntu; quie…
elkins Nov 30, 2025
b7016a9
docs: update README (Open Babel note, CI troubleshooting, platform su…
elkins Nov 30, 2025
4b1fa16
chore: pin dev tool versions; add pre-commit config; introduce smoke-…
elkins Nov 30, 2025
a006995
feat: Open Babel fallback message in molecule.py; CI: add pre-commit …
elkins Nov 30, 2025
fb5443f
fix(pre-commit): correct YAML and simplify hooks configuration
elkins Nov 30, 2025
659c130
lint: fix E713/E266/E741; quiet legacy tests; clean imports; pre-comm…
elkins Nov 30, 2025
0988320
Typing: add local annotations in molecule.getFormula/merge/split; Too…
elkins Nov 30, 2025
24d797c
Lint: fix flake8 warnings (unused imports, ambiguous names, E402); Ty…
elkins Nov 30, 2025
5c6be60
Format with pre-commit: black/isort adjustments; retain lint fixes an…
elkins Nov 30, 2025
872f15c
CI: Add minimal GitHub Actions workflow for flake8 and pytest (push/P…
elkins Nov 30, 2025
21c3d1a
Docs: Add Lint & Test CI status badge to README
elkins Nov 30, 2025
7e1dccb
Docs: Note Manual CI section and new Lint & Test badge in summary
elkins Nov 30, 2025
7d21b60
Docs: Repair README formatting; restore clean Features section
elkins Nov 30, 2025
43d143b
CI: Enforce black --check with line-length=120; align flake8 with rep…
elkins Nov 30, 2025
0f89a00
Format: Pre-commit black applied; finalize formatting
elkins Nov 30, 2025
cb1218f
Pre-commit: Align hooks with CI (black 120, isort 120, flake8 via set…
elkins Nov 30, 2025
4437d56
CI: Install openbabel-wheel for SMILES/pybel-dependent tests
elkins Nov 30, 2025
3f242a4
mypy/lint: finalize pattern/molecule fixes (asserts, remove unused ig…
elkins Nov 30, 2025
3e4e7ee
Docs: Remove dead Discussions link; point to Issues for Q&A
elkins Nov 30, 2025
37ab996
Format: Apply black/isort to new tests
elkins Nov 30, 2025
612ac5c
CI: Upload coverage to Codecov (coverage.xml, flagged unit)
elkins Nov 30, 2025
da80146
Docs: remove broken autodoc refs; wrap long lines in chempy/pattern.p…
elkins Dec 1, 2025
5d3b680
Style: satisfy flake8 E501 in chempy/pattern.py by wrapping long docs…
elkins Dec 1, 2025
c18015e
Style: apply black/isort; Typing: overloads and casts for adjacency p…
elkins Dec 1, 2025
b75f279
Style: black reformat after typing fixes
elkins Dec 1, 2025
abb2416
Test: skip testSubgraphIsomorphismManyLabels - hangs with pattern R a…
elkins Dec 1, 2025
fc0d69a
Style: black/isort auto-format after typing fixes
elkins Dec 1, 2025
cedbbf6
Typing: disable redundant-cast check for mypy version compatibility
elkins Dec 1, 2025
54cd044
Docs: fix License section formatting in README
elkins Dec 1, 2025
9951caa
Final cleanup: Python 3.13 CI, gitignore updates, and future work doc…
elkins Dec 1, 2025
9928c3f
Add benchmarking infrastructure for Pure Python vs Cython comparison
elkins Dec 1, 2025
f9557b0
Fix Cython compilation error in element.py
elkins Dec 1, 2025
5f648b7
Fix pytest configuration to discover benchmark tests
elkins Dec 1, 2025
4c8b04a
Partial fixes for Cython 3.2.2 compatibility
elkins Dec 1, 2025
078e3ce
Update benchmarks to run pure Python only due to Cython 3.x incompati…
elkins Dec 1, 2025
39cbf21
Fix benchmark test failure by simplifying reaction rate test
elkins Dec 1, 2025
eb643a1
Consolidate documentation into organized docs/ directory
elkins Dec 3, 2025
682901f
Rebrand as ChemPy Toolkit and update PyPI distribution name
elkins May 20, 2026
46f64a9
Correct documentation URLs to point to elkins.github.io/ChemPy
elkins May 20, 2026
ead3b53
Add unit tests for kinetics models and fix PDepArrhenius interpolatio…
elkins May 20, 2026
d555ef9
Add unit tests for thermodynamic models and fix ThermoError inheritance
elkins May 20, 2026
ad726f5
Resolve mypy type errors in graph and molecule modules
elkins May 20, 2026
1937783
Add GitHub Action to automate documentation deployment to gh-pages
elkins May 20, 2026
29be344
Fix pytest configuration and CI workflows to handle coverage correctly
elkins May 20, 2026
b790126
Fix CI benchmark artifact failure by adding --benchmark-autosave to p…
elkins May 20, 2026
0e5fc86
Ensure all benchmark files are captured by using a broader path pattern
elkins May 20, 2026
63ae2ba
Potential fix for code scanning alert no. 9: Workflow does not contai…
elkins May 20, 2026
b68669b
Fix black formatting and flake8 linting errors in tests and graph.py
elkins May 20, 2026
47e4c71
Merge pull request #1 from elkins/alert-autofix-9
elkins May 20, 2026
a9ec4dd
Merge branch 'master' of https://github.com/elkins/chempy
elkins May 20, 2026
983c6f4
Potential fix for code scanning alert no. 7: Workflow does not contai…
elkins May 20, 2026
fe8434b
Merge pull request #2 from elkins/alert-autofix-7
elkins May 20, 2026
ff81192
Fix CI benchmark artifact failure and update project status in README
elkins May 20, 2026
878eec2
Merge branch 'master' of https://github.com/elkins/chempy
elkins May 20, 2026
1a73ac9
Improve CI benchmark discovery and diagnostics
elkins May 20, 2026
3a18214
Potential fix for code scanning alert no. 6: Workflow does not contai…
elkins May 20, 2026
36e3e5a
Merge pull request #3 from elkins/alert-autofix-6
elkins May 20, 2026
c214e44
Potential fix for code scanning alert no. 5: Workflow does not contai…
elkins May 20, 2026
2d3a83b
Merge pull request #4 from elkins/alert-autofix-5
elkins May 20, 2026
380396a
Potential fix for code scanning alert no. 4: Workflow does not contai…
elkins May 20, 2026
e45fe96
Merge pull request #5 from elkins/alert-autofix-4
elkins May 20, 2026
3008ab3
Potential fix for code scanning alert no. 1: Workflow does not contai…
elkins May 20, 2026
589e1e1
Merge pull request #6 from elkins/alert-autofix-1
elkins May 20, 2026
3770491
Potential fix for code scanning alert no. 3: Workflow does not contai…
elkins May 20, 2026
1685a0f
Merge pull request #7 from elkins/alert-autofix-3
elkins May 20, 2026
44c5a63
Add extensive diagnostics to CI benchmark process
elkins May 20, 2026
23f8a72
Merge branch 'master' of https://github.com/elkins/chempy
elkins May 20, 2026
71abff1
Complete conversion of ChemPy to high-performance Rust crate
elkins May 20, 2026
4567feb
Restored original Python codebase to python/ directory for comparison
elkins May 20, 2026
3bf0e73
Cleaned up root directory after moving legacy Python code to python/
elkins May 20, 2026
38b4230
Apply cargo fmt to fix CI formatting issues
elkins May 20, 2026
d31fced
Potential fix for pull request finding 'CodeQL / Workflow does not co…
elkins May 20, 2026
1599429
feat: achieve functional parity in Rust backend and add Python bindings
elkins May 21, 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
78 changes: 78 additions & 0 deletions .benchmarks/Darwin-CPython-3.12-64bit/0001_latest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
{
"machine_info": {
"node": "Georges-Mini",
"processor": "arm",
"machine": "arm64",
"python_compiler": "Clang 18.1.8 ",
"python_implementation": "CPython",
"python_implementation_version": "3.12.10",
"python_version": "3.12.10",
"python_build": [
"main",
"Apr 10 2025 22:19:24"
],
"release": "25.4.0",
"system": "Darwin",
"cpu": {
"python_version": "3.12.10.final.0 (64 bit)",
"cpuinfo_version": [
9,
0,
0
],
"cpuinfo_version_string": "9.0.0",
"arch": "ARM_8",
"bits": 64,
"count": 10,
"arch_string_raw": "arm64",
"brand_raw": "Apple M4"
}
},
"commit_info": {
"id": "878eec2b40e5bb093bd8d1e091a728b8a8b25aea",
"time": "2026-05-20T14:05:03-04:00",
"author_time": "2026-05-20T14:05:03-04:00",
"dirty": true,
"project": "chempy",
"branch": "master"
},
"benchmarks": [
{
"group": "molecule",
"name": "test_bench_molecule_from_smiles_benzene",
"fullname": "unittest/benchmarksTest.py::test_bench_molecule_from_smiles_benzene",
"params": null,
"param": null,
"extra_info": {},
"options": {
"disable_gc": false,
"timer": "perf_counter",
"min_rounds": 5,
"max_time": 1.0,
"min_time": 5e-06,
"warmup": false
},
"stats": {
"min": 0.0003945000935345888,
"max": 0.00044408394023776054,
"mean": 0.00041614188812673093,
"stddev": 2.196570902992079e-05,
"rounds": 5,
"median": 0.00040483311749994755,
"iqr": 3.705290146172047e-05,
"q1": 0.00040028116200119257,
"q3": 0.00043733406346291304,
"iqr_outliers": 0,
"stddev_outliers": 1,
"outliers": "1;0",
"ld15iqr": 0.0003945000935345888,
"hd15iqr": 0.00044408394023776054,
"ops": 2403.0265362170467,
"total": 0.0020807094406336546,
"iterations": 1
}
}
],
"datetime": "2026-05-20T18:07:09.210269+00:00",
"version": "5.2.3"
}
21 changes: 21 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# EditorConfig helps maintain consistent coding styles

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.py]
indent_style = space
indent_size = 4
max_line_length = 100

[*.{yml,yaml,toml,json}]
indent_style = space
indent_size = 2

[Makefile]
indent_style = tab
32 changes: 32 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Automatically normalize line endings to LF across all platforms
* text=auto

# Python files
*.py text eol=lf charset=utf-8

# YAML/Config files
*.yml text eol=lf
*.yaml text eol=lf
*.toml text eol=lf
*.cfg text eol=lf
*.ini text eol=lf
*.json text eol=lf

# Documentation
*.md text eol=lf
*.rst text eol=lf
*.txt text eol=lf

# Shell scripts
*.sh text eol=lf
*.bash text eol=lf

# Binary files
*.so binary
*.pyc binary
*.pyd binary
*.o binary
*.a binary

# Don't merge conflict in these files
CHANGELOG.md merge=union
44 changes: 44 additions & 0 deletions .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Code of Conduct

## Our Pledge

We are committed to providing a welcoming and inspiring community for all. We pledge that everyone participating in the ChemPy project and its community will be treated with respect and dignity, free from discrimination and harassment.

## Expected Behavior

- Use welcoming and inclusive language
- Be respectful of differing opinions and experiences
- Accept constructive criticism gracefully
- Focus on what is best for the community
- Show empathy towards other community members

## Unacceptable Behavior

The following behavior is considered harassment and is unacceptable:

- Offensive comments related to gender, gender identity and expression, sexual orientation, disability, mental illness, neuro(a)typicality, physical appearance, body size, age, race, or religion
- Unwelcome comments regarding a person's choices and practices
- Deliberate misgendering or use of 'dead' or rejected names
- Gratuitous or off-topic sexual images or behaviour
- Physical contact and simulated physical contact (e.g. textual descriptions like "*hug*") without consent
- Threats of violence
- Incitement of violence towards any individual
- Deliberate intimidation
- Stalking or following
- Harassing photography or recording
- Sustained disruption of community spaces
- Unwelcome sexual attention
- Patterns of inappropriate social contact
- Continued one-on-one communication after requests to cease

## Consequences

Unacceptable behavior will not be tolerated. Anyone asked to stop unacceptable behavior is expected to comply immediately. If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate.

## Reporting

If someone is harassing you or engaging in unacceptable behavior, please contact the project maintainers. All complaints will be reviewed and investigated.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/).
4 changes: 4 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
funding:
- github: elkins
- patreon: chempy
- ko_fi: chempy_dev
41 changes: 41 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
name: Bug Report
about: Report a bug or issue
title: '[BUG] '
labels: 'bug'
assignees: ''

---

## Description
A clear and concise description of what the bug is.

## Reproduction Steps
Steps to reproduce the behavior:
1. ...
2. ...

## Expected Behavior
What you expected to happen.

## Actual Behavior
What actually happened.

## Environment
- Python version:
- ChemPy version:
- OS: [e.g., macOS 12.5, Ubuntu 22.04, Windows 11]
- Installation method: [e.g., pip, conda, from source]

## Error/Traceback
```python
# Paste the full error traceback here if applicable
```

## Minimal Example
```python
# A minimal code example that reproduces the issue
```

## Additional Context
Add any other context about the problem here.
23 changes: 23 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
name: Feature Request
about: Suggest an idea for ChemPy
title: '[FEATURE] '
labels: 'enhancement'
assignees: ''

---

## Is your feature request related to a problem?
A clear and concise description of what the problem is.

## Proposed Solution
Describe the solution you'd like to see implemented.

## Alternative Solutions
Any alternative solutions or features you've considered.

## Use Case
Explain the use case and why this feature would be useful.

## Additional Context
Add any other context, links, or examples here.
46 changes: 46 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
## Description
Please include a summary of the changes and related issues. Include motivation and context.

Fixes #(issue number)

## Type of Change
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
- [ ] Documentation update
- [ ] Performance improvement
- [ ] Code refactoring

## Changes Made
- Change 1
- Change 2
- ...

## Testing
Describe the tests you ran and how to reproduce them.

```bash
# Example test commands
```

- [ ] All tests pass locally
- [ ] Added new tests for new functionality
- [ ] Updated documentation

## Checklist
- [ ] Code follows project style guidelines (`black`, `isort`)
- [ ] Self-review completed
- [ ] Comments added for complex logic
- [ ] Documentation updated
- [ ] No new warnings generated
- [ ] Tests updated or added
- [ ] Type hints added where applicable

## Performance Impact
Describe any performance implications of this change.

## Screenshots/Examples (if applicable)
Add screenshots or code examples demonstrating the change.

## Additional Context
Add any other context about the PR here.
32 changes: 32 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: CI

on:
push:
branches: [ master, rust-conversion ]
pull_request:
branches: [ master, rust-conversion ]

permissions:
contents: read

jobs:
test:
name: Test and Lint
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy

- name: Check formatting
run: cargo fmt -- --check

- name: Run clippy
run: cargo clippy -- -D warnings

- name: Run tests
run: cargo test
Loading