qcdata 0.17.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. qcdata-0.17.0/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
  2. qcdata-0.17.0/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  3. qcdata-0.17.0/.github/workflows/basic-code-quality.yaml +58 -0
  4. qcdata-0.17.0/.github/workflows/create-release.yaml +40 -0
  5. qcdata-0.17.0/.github/workflows/publish-to-pypi.yaml +36 -0
  6. qcdata-0.17.0/.github/workflows/test.yaml +51 -0
  7. qcdata-0.17.0/.gitignore +173 -0
  8. qcdata-0.17.0/.pre-commit-config.yaml +43 -0
  9. qcdata-0.17.0/.python-version +1 -0
  10. qcdata-0.17.0/.vscode/settings.json +70 -0
  11. qcdata-0.17.0/CHANGELOG.md +718 -0
  12. qcdata-0.17.0/LICENSE +21 -0
  13. qcdata-0.17.0/PKG-INFO +263 -0
  14. qcdata-0.17.0/README.md +195 -0
  15. qcdata-0.17.0/_typos.toml +11 -0
  16. qcdata-0.17.0/docs/CNAME +1 -0
  17. qcdata-0.17.0/docs/api/calctype.md +1 -0
  18. qcdata-0.17.0/docs/api/data.md +23 -0
  19. qcdata-0.17.0/docs/api/files.md +3 -0
  20. qcdata-0.17.0/docs/api/inputs.md +41 -0
  21. qcdata-0.17.0/docs/api/lengthunit.md +1 -0
  22. qcdata-0.17.0/docs/api/model.md +1 -0
  23. qcdata-0.17.0/docs/api/outputs.md +13 -0
  24. qcdata-0.17.0/docs/api/overview.md +9 -0
  25. qcdata-0.17.0/docs/api/provenance.md +1 -0
  26. qcdata-0.17.0/docs/api/qcdatabasemodel.md +1 -0
  27. qcdata-0.17.0/docs/api/results.md +7 -0
  28. qcdata-0.17.0/docs/api/structure.md +16 -0
  29. qcdata-0.17.0/docs/api/utils.md +2 -0
  30. qcdata-0.17.0/docs/api/view.md +12 -0
  31. qcdata-0.17.0/docs/assets/optimization_viewer.png +0 -0
  32. qcdata-0.17.0/docs/assets/single_point_viewer.png +0 -0
  33. qcdata-0.17.0/docs/dev-docs/dev-decisions.md +31 -0
  34. qcdata-0.17.0/docs/index.md +72 -0
  35. qcdata-0.17.0/docs/visualizations/U1-_180_mmff94s-opt-xtb.json +37467 -0
  36. qcdata-0.17.0/docs/visualizations/U1-_confsearch-crest.json +1 -0
  37. qcdata-0.17.0/docs/visualizations/U1-_mmff94s_180-opt-terachem-thf.json +3515 -0
  38. qcdata-0.17.0/docs/visualizations/coreviews.ipynb +1114 -0
  39. qcdata-0.17.0/docs/visualizations/overview.md +16 -0
  40. qcdata-0.17.0/docs/visualizations/results.ipynb +1066 -0
  41. qcdata-0.17.0/docs/visualizations/structure.ipynb +582 -0
  42. qcdata-0.17.0/docs/why.md +11 -0
  43. qcdata-0.17.0/mkdocs.yml +125 -0
  44. qcdata-0.17.0/pyproject.toml +119 -0
  45. qcdata-0.17.0/scripts/format.sh +5 -0
  46. qcdata-0.17.0/scripts/release.py +134 -0
  47. qcdata-0.17.0/scripts/tests.sh +3 -0
  48. qcdata-0.17.0/src/qcdata/__init__.py +78 -0
  49. qcdata-0.17.0/src/qcdata/helper_types.py +21 -0
  50. qcdata-0.17.0/src/qcdata/models/__init__.py +5 -0
  51. qcdata-0.17.0/src/qcdata/models/base_models.py +402 -0
  52. qcdata-0.17.0/src/qcdata/models/data.py +387 -0
  53. qcdata-0.17.0/src/qcdata/models/inputs.py +224 -0
  54. qcdata-0.17.0/src/qcdata/models/outputs.py +220 -0
  55. qcdata-0.17.0/src/qcdata/models/results.py +4 -0
  56. qcdata-0.17.0/src/qcdata/models/structure.py +665 -0
  57. qcdata-0.17.0/src/qcdata/models/utils.py +98 -0
  58. qcdata-0.17.0/src/qcdata/py.typed +0 -0
  59. qcdata-0.17.0/src/qcdata/qcel.py +91 -0
  60. qcdata-0.17.0/src/qcdata/utils.py +49 -0
  61. qcdata-0.17.0/src/qcdata/view.py +773 -0
  62. qcdata-0.17.0/src/qcio/__init__.py +12 -0
  63. qcdata-0.17.0/tests/__init__.py +0 -0
  64. qcdata-0.17.0/tests/conftest.py +146 -0
  65. qcdata-0.17.0/tests/data/__init__.py +0 -0
  66. qcdata-0.17.0/tests/data/caffeine.xyz +26 -0
  67. qcdata-0.17.0/tests/data/file_inputs/c0 +0 -0
  68. qcdata-0.17.0/tests/data/file_inputs/scr/scratch.txt +2 -0
  69. qcdata-0.17.0/tests/data/file_inputs/tc.in +7 -0
  70. qcdata-0.17.0/tests/data/file_inputs/water.xyz +5 -0
  71. qcdata-0.17.0/tests/data/multi.xyz +67 -0
  72. qcdata-0.17.0/tests/data/po_noresults.json +124 -0
  73. qcdata-0.17.0/tests/data/structures.py +62 -0
  74. qcdata-0.17.0/tests/test_calc_input.py +10 -0
  75. qcdata-0.17.0/tests/test_conformer_search_data.py +90 -0
  76. qcdata-0.17.0/tests/test_file_input.py +57 -0
  77. qcdata-0.17.0/tests/test_files.py +58 -0
  78. qcdata-0.17.0/tests/test_optimization_data.py +56 -0
  79. qcdata-0.17.0/tests/test_outputs.py +285 -0
  80. qcdata-0.17.0/tests/test_package_api.py +6 -0
  81. qcdata-0.17.0/tests/test_qcel.py +95 -0
  82. qcdata-0.17.0/tests/test_serialization.py +34 -0
  83. qcdata-0.17.0/tests/test_single_point_data.py +107 -0
  84. qcdata-0.17.0/tests/test_structure.py +290 -0
  85. qcdata-0.17.0/tests/test_view.py +17 -0
  86. qcdata-0.17.0/uv.lock +3507 -0
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: "[BUG] - "
5
+ labels: bug
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of what the bug is.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior. Please provide all necessary data and a runable python script that reproduces your error:
15
+ 1. Go to '...'
16
+ 2. Click on '....'
17
+ 3. Scroll down to '....'
18
+ 4. See error
19
+
20
+ **Expected behavior**
21
+ A clear and concise description of what you expected to happen.
22
+
23
+ **Screenshots**
24
+ If applicable, add screenshots to help explain your problem.
25
+
26
+ **Additional context**
27
+ Add any other context about the problem here.
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: "[FEATURE] - "
5
+ labels: enhancement
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Is your feature request related to a problem? Please describe.**
11
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
+
13
+ **Describe the solution you'd like**
14
+ A clear and concise description of what you want to happen.
15
+
16
+ **Describe alternatives you've considered**
17
+ A clear and concise description of any alternative solutions or features you've considered.
18
+
19
+ **Additional context**
20
+ Add any other context or screenshots about the feature request here.
@@ -0,0 +1,58 @@
1
+ name: Basic Code Quality
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ pull_request:
7
+ branches: [master]
8
+
9
+ jobs:
10
+ ruff:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v3
14
+ - name: Set up Python
15
+ uses: actions/setup-python@v5
16
+ with:
17
+ python-version-file: ".python-version"
18
+ - name: Install ruff
19
+ run: pip install ruff
20
+ - name: ruff
21
+ run: ruff check .
22
+
23
+ mypy:
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - uses: actions/checkout@v3
27
+ - name: Set up Python
28
+ uses: actions/setup-python@v5
29
+ with:
30
+ python-version-file: ".python-version"
31
+ - name: Install uv
32
+ uses: astral-sh/setup-uv@v5
33
+ - name: Install the project
34
+ run: uv sync --all-extras --dev
35
+ - name: mypy
36
+ run: uv run mypy .
37
+
38
+ detect-secrets:
39
+ runs-on: ubuntu-latest
40
+ steps:
41
+ - uses: actions/checkout@v3
42
+ - name: Set up Python
43
+ uses: actions/setup-python@v5
44
+ with:
45
+ python-version-file: ".python-version"
46
+ - name: Install detect secrets
47
+ run: pip install detect-secrets
48
+ - name: Look for secrets
49
+ run: git ls-files -z | xargs -0 detect-secrets-hook -v
50
+
51
+ typos:
52
+ name: "spell check"
53
+ runs-on: ubuntu-latest
54
+ steps:
55
+ - uses: actions/checkout@v3
56
+ - uses: crate-ci/typos@master
57
+ with:
58
+ files: .
@@ -0,0 +1,40 @@
1
+ name: Create Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "*" # Match any tag
7
+ workflow_dispatch: # Enable manual triggering
8
+
9
+
10
+ jobs:
11
+ create-release:
12
+ name: Create GitHub Release
13
+ runs-on: ubuntu-latest
14
+ environment: release # Link to the protected environment
15
+
16
+ steps:
17
+ - name: Checkout code
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Extract Release Notes
21
+ id: extract_notes
22
+ run: |
23
+ VERSION=${{ github.ref_name }}
24
+ sed -n "/## \\[$VERSION\\]/,/## \\[/p" CHANGELOG.md | sed '$d' | sed "s/## \\[$VERSION\\]/## $VERSION/" > RELEASE_NOTES.md
25
+
26
+ - name: Create GitHub Release
27
+ id: create_release
28
+ uses: actions/create-release@v1
29
+ with:
30
+ tag_name: ${{ github.ref_name }}
31
+ release_name: Release ${{ github.ref_name }}
32
+ body_path: ./RELEASE_NOTES.md
33
+ draft: false
34
+ prerelease: false
35
+ env:
36
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
37
+
38
+ - name: Output release URL
39
+ run: |
40
+ echo "Release URL: ${{ steps.create_release.outputs.html_url }}"
@@ -0,0 +1,36 @@
1
+ # https://github.com/marketplace/actions/pypi-publish
2
+
3
+ name: Publish to PyPI
4
+
5
+ on:
6
+ push:
7
+ tags: # Only publish on tagged commits
8
+ - "*"
9
+
10
+ jobs:
11
+ build-and-publish:
12
+ name: Build and publish Python 🐍 distributions 📦 to PyPI
13
+ runs-on: ubuntu-latest
14
+ environment:
15
+ name: pypi
16
+ url: https://pypi.org/project/qcdata/
17
+ permissions:
18
+ id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
19
+
20
+ steps:
21
+ - name: Check out source repository
22
+ uses: actions/checkout@v2
23
+
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v5
26
+ with:
27
+ python-version-file: ".python-version"
28
+
29
+ - name: Install uv
30
+ uses: astral-sh/setup-uv@v5
31
+
32
+ - name: Build distribution 📦
33
+ run: uv build
34
+
35
+ - name: Publish package 📤 to PyPI
36
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,51 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ pull_request:
7
+ branches: [master]
8
+
9
+ jobs:
10
+ tests:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
16
+ include:
17
+ - python-version: "3.12"
18
+ coverage: true
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+
22
+ - name: Set up Python ${{ matrix.python-version }}
23
+ uses: actions/setup-python@v5
24
+ with:
25
+ python-version: ${{ matrix.python-version }}
26
+
27
+ - name: Install uv
28
+ uses: astral-sh/setup-uv@v5
29
+
30
+ # uv pip resolves & installs deps like pip (not an environment sync)
31
+ - name: Install package + test deps (uv pip)
32
+ run: uv pip install --system --group dev .
33
+
34
+ - name: Run tests
35
+ run: python -m pytest --cov-report=term-missing --cov-report html:htmlcov --cov-config=pyproject.toml --cov=qcdata --cov=tests .
36
+
37
+ - name: Upload coverage HTML
38
+ if: ${{ matrix.coverage == true }}
39
+ uses: actions/upload-artifact@v4
40
+ with:
41
+ name: htmlcov-py${{ matrix.python-version }}
42
+ path: htmlcov
43
+
44
+ # To catch manifest issues, we build and install from sdist on one version
45
+ - name: Build sdist (only on 3.12)
46
+ if: ${{ matrix.coverage == true }}
47
+ run: python -m pip install build && python -m build --sdist
48
+
49
+ - name: Install from sdist (only on 3.12)
50
+ if: ${{ matrix.coverage == true }}
51
+ run: python -m pip install dist/*.tar.gz
@@ -0,0 +1,173 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # poetry
98
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
+ #poetry.lock
103
+
104
+ # pdm
105
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
+ #pdm.lock
107
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
+ # in version control.
109
+ # https://pdm.fming.dev/#use-with-ide
110
+ .pdm.toml
111
+
112
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113
+ __pypackages__/
114
+
115
+ # Celery stuff
116
+ celerybeat-schedule
117
+ celerybeat.pid
118
+
119
+ # SageMath parsed files
120
+ *.sage.py
121
+
122
+ # Environments
123
+ .env
124
+ .venv
125
+ env/
126
+ venv/
127
+ ENV/
128
+ env.bak/
129
+ venv.bak/
130
+
131
+ # Spyder project settings
132
+ .spyderproject
133
+ .spyproject
134
+
135
+ # Rope project settings
136
+ .ropeproject
137
+
138
+ # mkdocs documentation
139
+ /site
140
+
141
+ # mypy
142
+ .mypy_cache/
143
+ .dmypy.json
144
+ dmypy.json
145
+
146
+ # Pyre type checker
147
+ .pyre/
148
+
149
+ # pytype static type analyzer
150
+ .pytype/
151
+
152
+ # Cython debug symbols
153
+ cython_debug/
154
+
155
+ # PyCharm
156
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
159
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
160
+ #.idea/
161
+
162
+ # Ignore all .xyz files
163
+ *.xyz
164
+
165
+ # Allow .xyz files in tests/data and its subdirectories
166
+ !tests/data/**/*.xyz
167
+
168
+ # rdkit artifacts
169
+ nul
170
+ run.out
171
+
172
+ # Fake files for testing
173
+ fake*.py
@@ -0,0 +1,43 @@
1
+ # See https://pre-commit.com for more information
2
+ # See https://pre-commit.com/hooks.html for more hooks
3
+ repos:
4
+ - repo: https://github.com/pre-commit/pre-commit-hooks
5
+ rev: v4.4.0
6
+ hooks:
7
+ - id: check-yaml
8
+ exclude: mkdocs.yml
9
+ - id: check-added-large-files
10
+ args: ["--maxkb=250"]
11
+ exclude: ^(docs/visualizations/.*|uv\.lock)$
12
+
13
+ - repo: https://github.com/Yelp/detect-secrets
14
+ rev: v1.4.0
15
+ hooks:
16
+ - id: detect-secrets
17
+ stages: [commit]
18
+ exclude: '.*\.(lock|ipynb)$'
19
+ - repo: https://github.com/charliermarsh/ruff-pre-commit
20
+ # Ruff version.
21
+ rev: "v0.8.3"
22
+ hooks:
23
+ - id: ruff
24
+ args: [--fix, --exit-non-zero-on-fix]
25
+ - repo: https://github.com/pre-commit/mirrors-mypy
26
+ rev: v1.14.1
27
+ hooks:
28
+ - id: mypy
29
+ additional_dependencies: [pydantic>=2.0.0, types-toml, types-pyyaml]
30
+ - repo: https://github.com/crate-ci/typos
31
+ rev: v1.16.10
32
+ hooks:
33
+ - id: typos
34
+ exclude: constants\.py$
35
+ - repo: local
36
+ hooks:
37
+ - id: tests
38
+ name: tests
39
+ stages: [push]
40
+ language: system
41
+ entry: uv run pytest
42
+ types: [python]
43
+ pass_filenames: false
@@ -0,0 +1 @@
1
+ 3.10
@@ -0,0 +1,70 @@
1
+ {
2
+ "python.formatting.provider": "black",
3
+ "cSpell.words": [
4
+ "allclose",
5
+ "arange",
6
+ "calcinfo",
7
+ "calctype",
8
+ "classmethod",
9
+ "cmdline",
10
+ "Colton",
11
+ "conformerid",
12
+ "defchararray",
13
+ "Dmol",
14
+ "dtype",
15
+ "ETKDG",
16
+ "figsize",
17
+ "freqs",
18
+ "getfixturevalue",
19
+ "HARTREE",
20
+ "Hartrees",
21
+ "hostcpus",
22
+ "hostmem",
23
+ "htmlcov",
24
+ "Hueckel",
25
+ "inchi",
26
+ "inchikey",
27
+ "isinstance",
28
+ "IUPAC",
29
+ "MMFF",
30
+ "multistep",
31
+ "nalpha",
32
+ "natom",
33
+ "natoms",
34
+ "nbasis",
35
+ "nbeta",
36
+ "ncpus",
37
+ "ndarray",
38
+ "numthreads",
39
+ "openbabel",
40
+ "OUTOPTIONS",
41
+ "plogs",
42
+ "progi",
43
+ "pstdout",
44
+ "ptraceback",
45
+ "pubchem",
46
+ "Pydantic",
47
+ "pypa",
48
+ "pypi",
49
+ "qcel",
50
+ "QCDATA",
51
+ "qcop",
52
+ "qcparse",
53
+ "rargs",
54
+ "rdkit",
55
+ "refstruct",
56
+ "rmsd",
57
+ "rotamer",
58
+ "rotamers",
59
+ "stdoutp",
60
+ "strfile",
61
+ "terachem",
62
+ "traceback",
63
+ "trnsfm",
64
+ "vibmodes",
65
+ "viewergrid",
66
+ "Waals",
67
+ "wavenumber",
68
+ "wavenumbers"
69
+ ]
70
+ }