pyEQL 1.2.0__tar.gz → 1.3.1__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.
- {pyeql-1.2.0 → pyeql-1.3.1}/.github/workflows/post-process.yml +3 -2
- {pyeql-1.2.0 → pyeql-1.3.1}/.github/workflows/release.yml +1 -1
- {pyeql-1.2.0 → pyeql-1.3.1}/.github/workflows/testing.yaml +9 -6
- {pyeql-1.2.0 → pyeql-1.3.1}/.pre-commit-config.yaml +15 -11
- {pyeql-1.2.0 → pyeql-1.3.1}/.readthedocs.yml +1 -1
- pyeql-1.3.1/.zenodo.json +25 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/AUTHORS.md +5 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/CHANGELOG.md +76 -0
- {pyeql-1.2.0/src/pyEQL.egg-info → pyeql-1.3.1}/PKG-INFO +9 -9
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/authors.md +5 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/changelog.md +76 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/class_solution.md +1 -1
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/conf.py +37 -37
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/contributing.md +11 -11
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/database.md +1 -1
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/examples/.ipynb_checkpoints/pyEQL_demo_1-checkpoint.ipynb +10 -12
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/examples/.ipynb_checkpoints/pyeql_demo-checkpoint.ipynb +13 -12
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/examples/.ipynb_checkpoints/pyeql_tutorial_database-checkpoint.ipynb +12 -20
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/examples/.ipynb_checkpoints/pyeql_tutorial_osmotic_pressure-checkpoint.ipynb +39 -24
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/examples/.ipynb_checkpoints/speedup-checkpoint.ipynb +4 -4
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/examples/pyeql_demo.ipynb +14 -13
- pyeql-1.3.1/docs/examples/pyeql_tutorial_activity.ipynb +270 -0
- pyeql-1.3.1/docs/examples/pyeql_tutorial_carbonate.ipynb +390 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/examples/pyeql_tutorial_database.ipynb +13 -21
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/examples/pyeql_tutorial_osmotic_pressure.ipynb +41 -26
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/index.md +1 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/installation.md +4 -4
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/requirements.txt +1 -0
- pyeql-1.3.1/docs/tutorials.md +52 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/pyproject.toml +8 -8
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/macos-latest_py3.10.txt +70 -62
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/macos-latest_py3.10_extras.txt +96 -88
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/macos-latest_py3.11.txt +70 -62
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/macos-latest_py3.11_extras.txt +96 -87
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/macos-latest_py3.12.txt +70 -62
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/macos-latest_py3.12_extras.txt +96 -87
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/macos-latest_py3.9.txt +22 -22
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/macos-latest_py3.9_extras.txt +31 -31
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.10.txt +70 -62
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.10_extras.txt +96 -88
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.11.txt +70 -62
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.11_extras.txt +96 -87
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.12.txt +70 -62
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.12_extras.txt +96 -87
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.9.txt +22 -22
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.9_extras.txt +31 -31
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/windows-latest_py3.10.txt +70 -62
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/windows-latest_py3.10_extras.txt +96 -88
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/windows-latest_py3.11.txt +70 -62
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/windows-latest_py3.11_extras.txt +96 -87
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/windows-latest_py3.12.txt +70 -62
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/windows-latest_py3.12_extras.txt +96 -87
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/windows-latest_py3.9.txt +22 -22
- {pyeql-1.2.0 → pyeql-1.3.1}/requirements/windows-latest_py3.9_extras.txt +31 -31
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/__init__.py +1 -1
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/activity_correction.py +9 -9
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/database/pyeql_db.json +20839 -20936
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/engines.py +61 -66
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/equilibrium.py +2 -2
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/functions.py +5 -5
- pyeql-1.3.1/src/pyEQL/py.typed +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/salt_ion_match.py +2 -2
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/solution.py +204 -294
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/utils.py +4 -0
- {pyeql-1.2.0 → pyeql-1.3.1/src/pyEQL.egg-info}/PKG-INFO +9 -9
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL.egg-info/SOURCES.txt +3 -3
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL.egg-info/requires.txt +5 -5
- pyeql-1.3.1/tests/conftest.py +156 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_activity.py +131 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_mixed_electrolyte_activity.py +13 -5
- pyeql-1.3.1/tests/test_osmotic_coeff.py +180 -0
- pyeql-1.3.1/tests/test_salt_matching.py +424 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_solution.py +204 -19
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_utils.py +7 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_volume_concentration.py +2 -2
- {pyeql-1.2.0 → pyeql-1.3.1}/tox.ini +3 -2
- pyeql-1.2.0/.zenodo.json +0 -25
- pyeql-1.2.0/docs/examples/pyEQL_demo_1.ipynb +0 -525
- pyeql-1.2.0/docs/examples/speedup.ipynb +0 -404
- pyeql-1.2.0/docs/readme.md +0 -84
- pyeql-1.2.0/docs/tutorials.md +0 -32
- pyeql-1.2.0/tests/conftest.py +0 -10
- pyeql-1.2.0/tests/test_osmotic_coeff.py +0 -96
- pyeql-1.2.0/tests/test_salt_matching.py +0 -134
- {pyeql-1.2.0 → pyeql-1.3.1}/.coveragerc +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/.gitattributes +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/.github/dependabot.yml +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/.github/pull_request_template.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/.github/release.yml +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/.github/workflows/upgrade_dependencies.yml +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/.gitignore +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/CITATION.cff +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/COPYING +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/LICENSE.txt +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/MANIFEST.in +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/README.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/Makefile +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/_static/.gitignore +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/amounts.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/arithmetic.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/chemistry.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/creating.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/engines.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/internal.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/license.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/mixing.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/quickstart.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/serialization.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/docs/units.md +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/pyeql-logo.png +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/pyeql-logo.svg +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/setup.cfg +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/setup.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/database/geothermal.dat +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/database/llnl.dat +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/database/phreeqc_license.txt +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/presets/Ringers lactate.yaml +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/presets/normal saline.yaml +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/presets/rainwater.yaml +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/presets/seawater.yaml +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/presets/urine.yaml +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/presets/wastewater.yaml +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL/solute.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL.egg-info/dependency_links.txt +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/src/pyEQL.egg-info/top_level.txt +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_bulk_properties.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_debye_length.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_density.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_dielectric.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_effective_pitzer.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_equilibrium.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_functions.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_logging.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_phreeqc.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_solute.py +0 -0
- {pyeql-1.2.0 → pyeql-1.3.1}/tests/test_solute_properties.py +0 -0
|
@@ -37,6 +37,7 @@ jobs:
|
|
|
37
37
|
- { python: "3.10", resolution: lowest-direct, extras: testing }
|
|
38
38
|
- { python: "3.11", resolution: highest, extras: testing }
|
|
39
39
|
- { python: "3.12", resolution: lowest-direct, extras: testing }
|
|
40
|
+
- { python: "3.13", resolution: highest, extras: testing }
|
|
40
41
|
os:
|
|
41
42
|
- ubuntu-latest
|
|
42
43
|
- macos-latest
|
|
@@ -56,8 +57,8 @@ jobs:
|
|
|
56
57
|
uv pip install '.[${{ matrix.version.extras }}]' --system --resolution=${{ matrix.version.resolution }}
|
|
57
58
|
- name: Run tests
|
|
58
59
|
run: |
|
|
59
|
-
pytest -n auto --cov=src/pyEQL --cov-report=xml
|
|
60
|
-
- uses: codecov/codecov-action@
|
|
60
|
+
pytest -n auto --cov=src/pyEQL --cov-report=xml --dist=loadscope
|
|
61
|
+
- uses: codecov/codecov-action@v5
|
|
61
62
|
with:
|
|
62
63
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
63
64
|
file: ./coverage.xml
|
|
@@ -4,6 +4,7 @@ on:
|
|
|
4
4
|
pull_request:
|
|
5
5
|
branches:
|
|
6
6
|
- main
|
|
7
|
+
- pourbaix
|
|
7
8
|
paths-ignore:
|
|
8
9
|
- CHANGELOG.md
|
|
9
10
|
|
|
@@ -36,17 +37,17 @@ jobs:
|
|
|
36
37
|
max-parallel: 6
|
|
37
38
|
matrix:
|
|
38
39
|
# for most PRs, test the min and max supported python on every platform, test all python on ubuntu
|
|
39
|
-
python-version: ["3.10", "3.12"]
|
|
40
|
+
python-version: ["3.10", "3.12","3.13"]
|
|
40
41
|
os:
|
|
41
42
|
- ubuntu-latest
|
|
42
43
|
- macos-latest
|
|
43
44
|
- macos-14
|
|
44
45
|
- windows-latest
|
|
45
46
|
include:
|
|
46
|
-
- os: ubuntu-latest
|
|
47
|
-
python-version: "3.10"
|
|
48
47
|
- os: ubuntu-latest
|
|
49
48
|
python-version: "3.11"
|
|
49
|
+
- os: ubuntu-latest
|
|
50
|
+
python-version: "3.12"
|
|
50
51
|
runs-on: ${{ matrix.os }}
|
|
51
52
|
steps:
|
|
52
53
|
- uses: actions/checkout@v4
|
|
@@ -60,8 +61,8 @@ jobs:
|
|
|
60
61
|
pip install -e ".[testing]"
|
|
61
62
|
- name: Run tests
|
|
62
63
|
run: |
|
|
63
|
-
pytest -n auto --cov=src/pyEQL --cov-report=xml
|
|
64
|
-
- uses: codecov/codecov-action@
|
|
64
|
+
pytest -n auto --cov=src/pyEQL --cov-report=xml --dist=loadscope
|
|
65
|
+
- uses: codecov/codecov-action@v5
|
|
65
66
|
with:
|
|
66
67
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
67
68
|
file: ./coverage.xml
|
|
@@ -73,10 +74,12 @@ jobs:
|
|
|
73
74
|
- name: Setup Python
|
|
74
75
|
uses: actions/setup-python@v5
|
|
75
76
|
with:
|
|
76
|
-
python-version: "3.
|
|
77
|
+
python-version: "3.11"
|
|
77
78
|
- name: Install tox
|
|
78
79
|
run: |
|
|
79
80
|
python -m pip install tox
|
|
80
81
|
- uses: r-lib/actions/setup-pandoc@v2
|
|
81
82
|
- name: Build docs
|
|
82
83
|
run: tox -e docs
|
|
84
|
+
- name: Check links
|
|
85
|
+
run: tox -e links
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
exclude: "^docs/conf.py"
|
|
2
2
|
|
|
3
|
-
default_stages: [commit]
|
|
3
|
+
default_stages: [pre-commit]
|
|
4
4
|
|
|
5
5
|
default_install_hook_types: [pre-commit, commit-msg]
|
|
6
6
|
|
|
@@ -12,26 +12,30 @@ ci:
|
|
|
12
12
|
|
|
13
13
|
repos:
|
|
14
14
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
15
|
-
rev: v0.
|
|
15
|
+
rev: v0.12.7
|
|
16
16
|
hooks:
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
# Run the linter. filters are to exclude .ipynb files
|
|
18
|
+
- id: ruff-check
|
|
19
|
+
types_or: [ python, pyi ]
|
|
20
|
+
args: [--fix, --ignore, "D,E501", --show-fixes]
|
|
21
|
+
# Run the formatter. This WILL run on .ipynb files
|
|
22
|
+
- id: ruff-format
|
|
19
23
|
|
|
20
24
|
- repo: https://github.com/psf/black-pre-commit-mirror
|
|
21
|
-
rev:
|
|
25
|
+
rev: 25.1.0
|
|
22
26
|
hooks:
|
|
23
27
|
- id: black
|
|
24
28
|
|
|
25
29
|
- repo: https://github.com/codespell-project/codespell
|
|
26
|
-
rev: v2.
|
|
30
|
+
rev: v2.4.1
|
|
27
31
|
hooks:
|
|
28
32
|
- id: codespell
|
|
29
|
-
stages: [commit, commit-msg]
|
|
33
|
+
stages: [pre-commit, commit-msg]
|
|
30
34
|
exclude_types: [html, svg]
|
|
31
35
|
additional_dependencies: [tomli] # needed to read pyproject.toml below py3.11
|
|
32
36
|
|
|
33
37
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
34
|
-
rev:
|
|
38
|
+
rev: v5.0.0
|
|
35
39
|
hooks:
|
|
36
40
|
- id: check-case-conflict
|
|
37
41
|
- id: check-symlinks
|
|
@@ -41,8 +45,8 @@ repos:
|
|
|
41
45
|
exclude_types: [svg]
|
|
42
46
|
- id: trailing-whitespace
|
|
43
47
|
exclude_types: [svg]
|
|
48
|
+
- id: check-yaml
|
|
49
|
+
- id: check-json
|
|
44
50
|
- id: pretty-format-json
|
|
45
|
-
indent: 4
|
|
46
51
|
exclude_types: [jupyter]
|
|
47
|
-
|
|
48
|
-
- id: check-toml
|
|
52
|
+
args: [--autofix, --indent=4]
|
pyeql-1.3.1/.zenodo.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"creators": [
|
|
3
|
+
{
|
|
4
|
+
"affiliation": "Princeton University",
|
|
5
|
+
"name": "Kingsbury, Ryan",
|
|
6
|
+
"orcid": "0000-0002-7168-3967"
|
|
7
|
+
}
|
|
8
|
+
],
|
|
9
|
+
"rights": [
|
|
10
|
+
{
|
|
11
|
+
"description": {
|
|
12
|
+
"en": ""
|
|
13
|
+
},
|
|
14
|
+
"id": "lgpl-3.0-only",
|
|
15
|
+
"props": {
|
|
16
|
+
"scheme": "spdx",
|
|
17
|
+
"url": "https://www.gnu.org/licenses/lgpl-3.0-standalone.html"
|
|
18
|
+
},
|
|
19
|
+
"title": {
|
|
20
|
+
"en": "GNU Lesser General Public License v3.0 only"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"title": "pyEQL: A python library for water chemistry"
|
|
25
|
+
}
|
|
@@ -6,8 +6,13 @@ developed and maintained by the Kingsbury Lab at Princeton University.
|
|
|
6
6
|
Other contributors, listed alphabetically, are:
|
|
7
7
|
|
|
8
8
|
- Arpit Bhardwaj (@abhardwaj73)
|
|
9
|
+
- Nikhil Dhruv (@NikhilDhruv)
|
|
9
10
|
- Dhruv Duseja (@DhruvDuseja)
|
|
11
|
+
- @githubalexliu
|
|
10
12
|
- Hernan Grecco (@hgrecco)
|
|
13
|
+
- @Ouriel Ndalamba (@Ouriel-N)
|
|
14
|
+
- Ugo Nwosu (@ugognw)
|
|
15
|
+
- Yitong Pan (@YitongPan1)
|
|
11
16
|
- Jaebeom Park (@Jaebeom-P)
|
|
12
17
|
- Kirill Pushkarev (@kirill-push)
|
|
13
18
|
- Andrew Rosen (@arosen93)
|
|
@@ -5,6 +5,82 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.3.1] - 2025-08-18
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- `Solution.get_salt_dict()`: In solutions containing polyatomic ions with a heteroatom (an atom other than `H` or `O`)
|
|
13
|
+
having a stoichiometric coefficient greater than 1 mol per mol salt , such as Fe(CN)6[-3], the method would
|
|
14
|
+
return incorrect results, possibly impacting activity coefficient calculations. This has now been fixed. (#277, @ugognw)
|
|
15
|
+
|
|
16
|
+
## [1.3.0] - 2025-08-08
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- `Solution.__add__`: engine, solvent, database were not inherited by the sum of `Solution`
|
|
21
|
+
objects (#258, @ugognw)
|
|
22
|
+
- `Solution.get_activity_coefficient`: Fixed bugs where incorrect Pitzer scaling parameters $\alpha_1$
|
|
23
|
+
and $\alpha_2$ parameters were used to calculate activity coefficients and solute molar volumes for salts with multivalent ions (#258, @ugognw)
|
|
24
|
+
- `Solution.get_salt_dict`: fixed errors in the calculation of concentrations for salts
|
|
25
|
+
containing polyvalent cations (#258, @ugognw)
|
|
26
|
+
- `Solution.get_salt_dict` now respects the `cutoff` parameter. Note that `cutoff`
|
|
27
|
+
is now interpreted in units of moles per kilogram of solution (#258, @ugognw)
|
|
28
|
+
- `Solution.get_salt_dict` always returns a salt dictionary sorted in order of decreasing salt concentration (#258, @ugognw)
|
|
29
|
+
- `Solution.__init__`: Raise `ValueError` if a user sets inconsistent `H[+1]` in `solutes` and
|
|
30
|
+
`pH` keyword arguments (#270, @gnuhpdiem, @rkingsbury). Previously, if the user set `H[+1]` in `solutes`, it's value would silently override the `pH` kwarg. Now, you will get a `ValueError`
|
|
31
|
+
if the two are inconsistent, unless the `pH` kwarg is kept at the default value. In that case,
|
|
32
|
+
a warning will be logged.
|
|
33
|
+
- `standardize_formula`: properly interpret ambiguous dash / hyphen characters as "minus" (#264, @rkingsbury)
|
|
34
|
+
- Ensure `Solution.p()` always returns a regular `float` and returns `np.nan` if the
|
|
35
|
+
concentration is zero or negative (#269, @rkingsbury)
|
|
36
|
+
- `Solution.get_diffusion_coefficient`: prevent diffusion coefficient adjustment when temperature
|
|
37
|
+
is within 1 degree of the the reference value (#215, @YitongPan1)
|
|
38
|
+
- Tests: literature data used in `test_mixed_electrolyte_activity.py` was updated to reflect
|
|
39
|
+
corrected we recently became aware of. (#271, @Ouriel-N, @rkingsbury)
|
|
40
|
+
- Docs: Sphinx warnings are cleared (#255, ugognw)
|
|
41
|
+
- Docs: Minor fixes for private / cached methods (#197, @githubalexliu)
|
|
42
|
+
- Docs: Edit documentation of `debye_parameter_B` (#196, @YitongPan1)
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- Docs/CI: sphinx linkcheck job and tox environment/command (`tox -e links`) (#255, @ugognw)
|
|
47
|
+
- Docs: add carbonate system tutorial (#204, @NikhilDhruv)
|
|
48
|
+
|
|
49
|
+
### Changed
|
|
50
|
+
|
|
51
|
+
- **BREAKING** - the return value of `Solution.get_salt_dict` now includes `Salt` objects instead of keys corresponding
|
|
52
|
+
to `cation` and `anion`. See the example in the docstring for how to adapt existing code to accommodate this
|
|
53
|
+
change. (#258, @ugognw)
|
|
54
|
+
- **BREAKING** - `Solution.get_salt_dict` no longer returns an entry for water (#258, @ugognw)
|
|
55
|
+
- **BREAKING** - `Solution.get_salt` will not return water and may return `None` if no salt is present.
|
|
56
|
+
Previously, `Solution.get_salt` would have returned a `Salt` representing water. (#258, @ugognw)
|
|
57
|
+
- Ensure more consistent column formatting in `Solution.print()` (#269, @rkingsbury)
|
|
58
|
+
- Switch `math.log10` to `np.log10` in `Solution.p()` (#269, @rkingsbury)
|
|
59
|
+
- update pre-commit configuration (#269, @rkingsbury)
|
|
60
|
+
- use [`--dist loadscope`](https://pytest-xdist.readthedocs.io/en/latest/distribution.html) in parallelized CI tests. Closes #170. (#269, @rkingsbury)
|
|
61
|
+
- update license specification in `pyproject.toml` to conform to [latest packaging standards](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license). Closes #233. (#269, @rkingsbury)
|
|
62
|
+
- add `py.typed` to report type checking to other libraries. Closes #179. (#269, @rkingsbury)
|
|
63
|
+
- Support `numpy>2.0`
|
|
64
|
+
- Bump `pint` to `0.24.4` for `numpy` `v2.0` compatibility and to mitigate CI issues (#239, @SuixiongTay, @rkingsbury)
|
|
65
|
+
- CI: add `python` `v3.13` to post-merge unit tests
|
|
66
|
+
- Docs: `tox -e docs` command configured to fail on warning (#255, @ugognw)
|
|
67
|
+
- Docs: ReadTheDocs built with Python 3.11 (#255, ugognw)
|
|
68
|
+
- Use `importlib` to locate test files (#241, @SuixiongTay)
|
|
69
|
+
- Support `numpy>2.0`
|
|
70
|
+
- Bump `pint` to `0.24.4` for `numpy` `v2.0` compatibility and to mitigate CI issues (#239, @SuixiongTay, @rkingsbury)
|
|
71
|
+
- CI: add `python` `v3.13` to post-merge unit tests
|
|
72
|
+
- bump `pymatgen` to `v2025.1.9`
|
|
73
|
+
- bump `maggma` to `v0.71.4`
|
|
74
|
+
|
|
75
|
+
### Removed
|
|
76
|
+
|
|
77
|
+
- **BREAKING** Methods previously marked for deprecation - `list_solutes`, `list_activities`,
|
|
78
|
+
`list_concentrations`, `list_salts` have been removed.
|
|
79
|
+
- `Solution.add_solvent` has been marked for deprecation and will be removed in a future
|
|
80
|
+
release. Use `add_solute` instead.
|
|
81
|
+
- Python 3.9 version classifier in pyproject.toml (#247, @ugognw)
|
|
82
|
+
- `Solution.list_salts` (use `Solution.get_salt_dict()` instead) (#258)
|
|
83
|
+
|
|
8
84
|
## [1.2.0] - 2024-09-24
|
|
9
85
|
|
|
10
86
|
### Fixed
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pyEQL
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.1
|
|
4
4
|
Summary: A python interface for solution chemistry
|
|
5
5
|
Author-email: Ryan Kingsbury <kingsbury@princeton.edu>
|
|
6
|
+
License-Expression: LGPL-3.0-or-later
|
|
6
7
|
Project-URL: Docs, https://pyeql.readthedocs.io/
|
|
7
8
|
Project-URL: Repo, https://github.com/KingsburyLab/pyEQL
|
|
8
9
|
Project-URL: Package, https://pypi.org/project/pyEQL
|
|
9
10
|
Classifier: Programming Language :: Python :: 3
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.10
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.11
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -18,15 +18,14 @@ Classifier: Topic :: Scientific/Engineering
|
|
|
18
18
|
Requires-Python: >=3.10
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE.txt
|
|
21
|
-
License-File: COPYING
|
|
22
21
|
License-File: AUTHORS.md
|
|
23
|
-
Requires-Dist: pint>=0.
|
|
24
|
-
Requires-Dist: numpy
|
|
22
|
+
Requires-Dist: pint>=0.24.4
|
|
23
|
+
Requires-Dist: numpy>1.26
|
|
25
24
|
Requires-Dist: scipy>=1.12
|
|
26
|
-
Requires-Dist: pymatgen>=
|
|
25
|
+
Requires-Dist: pymatgen>=2025.1.9
|
|
27
26
|
Requires-Dist: iapws>=1.5.3
|
|
28
|
-
Requires-Dist: monty>=2024.
|
|
29
|
-
Requires-Dist: maggma>=0.
|
|
27
|
+
Requires-Dist: monty>=2024.12.10
|
|
28
|
+
Requires-Dist: maggma>=0.71.4
|
|
30
29
|
Requires-Dist: phreeqpython>=1.5.2
|
|
31
30
|
Provides-Extra: testing
|
|
32
31
|
Requires-Dist: setuptools>=68; extra == "testing"
|
|
@@ -44,6 +43,7 @@ Requires-Dist: sphinx-rtd-theme; extra == "docs"
|
|
|
44
43
|
Requires-Dist: myst-parser[linkify]; extra == "docs"
|
|
45
44
|
Provides-Extra: full
|
|
46
45
|
Requires-Dist: rich; extra == "full"
|
|
46
|
+
Dynamic: license-file
|
|
47
47
|
|
|
48
48
|
[](https://pyeql.readthedocs.io/en/latest/)
|
|
49
49
|
[](https://github.com/KingsburyLab/pyeql/actions?query=workflow%3Atesting)
|
|
@@ -6,8 +6,13 @@ developed and maintained by the Kingsbury Lab at Princeton University.
|
|
|
6
6
|
Other contributors, listed alphabetically, are:
|
|
7
7
|
|
|
8
8
|
- Arpit Bhardwaj (@abhardwaj73)
|
|
9
|
+
- Nikhil Dhruv (@NikhilDhruv)
|
|
9
10
|
- Dhruv Duseja (@DhruvDuseja)
|
|
11
|
+
- @githubalexliu
|
|
10
12
|
- Hernan Grecco (@hgrecco)
|
|
13
|
+
- @Ouriel Ndalamba (@Ouriel-N)
|
|
14
|
+
- Ugo Nwosu (@ugognw)
|
|
15
|
+
- Yitong Pan (@YitongPan1)
|
|
11
16
|
- Jaebeom Park (@Jaebeom-P)
|
|
12
17
|
- Kirill Pushkarev (@kirill-push)
|
|
13
18
|
- Andrew Rosen (@arosen93)
|
|
@@ -5,6 +5,82 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.3.1] - 2025-08-18
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- `Solution.get_salt_dict()`: In solutions containing polyatomic ions with a heteroatom (an atom other than `H` or `O`)
|
|
13
|
+
having a stoichiometric coefficient greater than 1 mol per mol salt , such as Fe(CN)6[-3], the method would
|
|
14
|
+
return incorrect results, possibly impacting activity coefficient calculations. This has now been fixed. (#277, @ugognw)
|
|
15
|
+
|
|
16
|
+
## [1.3.0] - 2025-08-08
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- `Solution.__add__`: engine, solvent, database were not inherited by the sum of `Solution`
|
|
21
|
+
objects (#258, @ugognw)
|
|
22
|
+
- `Solution.get_activity_coefficient`: Fixed bugs where incorrect Pitzer scaling parameters $\alpha_1$
|
|
23
|
+
and $\alpha_2$ parameters were used to calculate activity coefficients and solute molar volumes for salts with multivalent ions (#258, @ugognw)
|
|
24
|
+
- `Solution.get_salt_dict`: fixed errors in the calculation of concentrations for salts
|
|
25
|
+
containing polyvalent cations (#258, @ugognw)
|
|
26
|
+
- `Solution.get_salt_dict` now respects the `cutoff` parameter. Note that `cutoff`
|
|
27
|
+
is now interpreted in units of moles per kilogram of solution (#258, @ugognw)
|
|
28
|
+
- `Solution.get_salt_dict` always returns a salt dictionary sorted in order of decreasing salt concentration (#258, @ugognw)
|
|
29
|
+
- `Solution.__init__`: Raise `ValueError` if a user sets inconsistent `H[+1]` in `solutes` and
|
|
30
|
+
`pH` keyword arguments (#270, @gnuhpdiem, @rkingsbury). Previously, if the user set `H[+1]` in `solutes`, it's value would silently override the `pH` kwarg. Now, you will get a `ValueError`
|
|
31
|
+
if the two are inconsistent, unless the `pH` kwarg is kept at the default value. In that case,
|
|
32
|
+
a warning will be logged.
|
|
33
|
+
- `standardize_formula`: properly interpret ambiguous dash / hyphen characters as "minus" (#264, @rkingsbury)
|
|
34
|
+
- Ensure `Solution.p()` always returns a regular `float` and returns `np.nan` if the
|
|
35
|
+
concentration is zero or negative (#269, @rkingsbury)
|
|
36
|
+
- `Solution.get_diffusion_coefficient`: prevent diffusion coefficient adjustment when temperature
|
|
37
|
+
is within 1 degree of the the reference value (#215, @YitongPan1)
|
|
38
|
+
- Tests: literature data used in `test_mixed_electrolyte_activity.py` was updated to reflect
|
|
39
|
+
corrected we recently became aware of. (#271, @Ouriel-N, @rkingsbury)
|
|
40
|
+
- Docs: Sphinx warnings are cleared (#255, ugognw)
|
|
41
|
+
- Docs: Minor fixes for private / cached methods (#197, @githubalexliu)
|
|
42
|
+
- Docs: Edit documentation of `debye_parameter_B` (#196, @YitongPan1)
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- Docs/CI: sphinx linkcheck job and tox environment/command (`tox -e links`) (#255, @ugognw)
|
|
47
|
+
- Docs: add carbonate system tutorial (#204, @NikhilDhruv)
|
|
48
|
+
|
|
49
|
+
### Changed
|
|
50
|
+
|
|
51
|
+
- **BREAKING** - the return value of `Solution.get_salt_dict` now includes `Salt` objects instead of keys corresponding
|
|
52
|
+
to `cation` and `anion`. See the example in the docstring for how to adapt existing code to accommodate this
|
|
53
|
+
change. (#258, @ugognw)
|
|
54
|
+
- **BREAKING** - `Solution.get_salt_dict` no longer returns an entry for water (#258, @ugognw)
|
|
55
|
+
- **BREAKING** - `Solution.get_salt` will not return water and may return `None` if no salt is present.
|
|
56
|
+
Previously, `Solution.get_salt` would have returned a `Salt` representing water. (#258, @ugognw)
|
|
57
|
+
- Ensure more consistent column formatting in `Solution.print()` (#269, @rkingsbury)
|
|
58
|
+
- Switch `math.log10` to `np.log10` in `Solution.p()` (#269, @rkingsbury)
|
|
59
|
+
- update pre-commit configuration (#269, @rkingsbury)
|
|
60
|
+
- use [`--dist loadscope`](https://pytest-xdist.readthedocs.io/en/latest/distribution.html) in parallelized CI tests. Closes #170. (#269, @rkingsbury)
|
|
61
|
+
- update license specification in `pyproject.toml` to conform to [latest packaging standards](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license). Closes #233. (#269, @rkingsbury)
|
|
62
|
+
- add `py.typed` to report type checking to other libraries. Closes #179. (#269, @rkingsbury)
|
|
63
|
+
- Support `numpy>2.0`
|
|
64
|
+
- Bump `pint` to `0.24.4` for `numpy` `v2.0` compatibility and to mitigate CI issues (#239, @SuixiongTay, @rkingsbury)
|
|
65
|
+
- CI: add `python` `v3.13` to post-merge unit tests
|
|
66
|
+
- Docs: `tox -e docs` command configured to fail on warning (#255, @ugognw)
|
|
67
|
+
- Docs: ReadTheDocs built with Python 3.11 (#255, ugognw)
|
|
68
|
+
- Use `importlib` to locate test files (#241, @SuixiongTay)
|
|
69
|
+
- Support `numpy>2.0`
|
|
70
|
+
- Bump `pint` to `0.24.4` for `numpy` `v2.0` compatibility and to mitigate CI issues (#239, @SuixiongTay, @rkingsbury)
|
|
71
|
+
- CI: add `python` `v3.13` to post-merge unit tests
|
|
72
|
+
- bump `pymatgen` to `v2025.1.9`
|
|
73
|
+
- bump `maggma` to `v0.71.4`
|
|
74
|
+
|
|
75
|
+
### Removed
|
|
76
|
+
|
|
77
|
+
- **BREAKING** Methods previously marked for deprecation - `list_solutes`, `list_activities`,
|
|
78
|
+
`list_concentrations`, `list_salts` have been removed.
|
|
79
|
+
- `Solution.add_solvent` has been marked for deprecation and will be removed in a future
|
|
80
|
+
release. Use `add_solute` instead.
|
|
81
|
+
- Python 3.9 version classifier in pyproject.toml (#247, @ugognw)
|
|
82
|
+
- `Solution.list_salts` (use `Solution.get_salt_dict()` instead) (#258)
|
|
83
|
+
|
|
8
84
|
## [1.2.0] - 2024-09-24
|
|
9
85
|
|
|
10
86
|
### Fixed
|
|
@@ -10,7 +10,7 @@ This page contains detailed information on each of the methods, attributes, and
|
|
|
10
10
|
.. autoclass:: pyEQL.Solution
|
|
11
11
|
:members:
|
|
12
12
|
:inherited-members:
|
|
13
|
-
:private-members: _get_property
|
|
13
|
+
:private-members: _get_property, _get_diffusion_coefficient, _get_molar_conductivity, _get_mobility
|
|
14
14
|
:special-members: __init__
|
|
15
15
|
:member-order: bysource
|
|
16
16
|
```
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
# serve to show the default.
|
|
9
9
|
|
|
10
10
|
import os
|
|
11
|
-
import sys
|
|
12
11
|
import shutil
|
|
12
|
+
import sys
|
|
13
13
|
|
|
14
14
|
# -- Path setup --------------------------------------------------------------
|
|
15
15
|
|
|
@@ -28,32 +28,14 @@ sys.path.insert(0, os.path.join(__location__, "../src"))
|
|
|
28
28
|
# setup.py install" in the RTD Advanced Settings.
|
|
29
29
|
# Additionally it helps us to avoid running apidoc manually
|
|
30
30
|
|
|
31
|
-
try: # for Sphinx >= 1.7
|
|
32
|
-
from sphinx.ext import apidoc
|
|
33
|
-
except ImportError:
|
|
34
|
-
from sphinx import apidoc
|
|
35
|
-
|
|
36
31
|
output_dir = os.path.join(__location__, "api")
|
|
37
32
|
module_dir = os.path.join(__location__, "../src/pyEQL")
|
|
33
|
+
|
|
38
34
|
try:
|
|
39
35
|
shutil.rmtree(output_dir)
|
|
40
36
|
except FileNotFoundError:
|
|
41
37
|
pass
|
|
42
38
|
|
|
43
|
-
try:
|
|
44
|
-
import sphinx
|
|
45
|
-
|
|
46
|
-
cmd_line = f"sphinx-apidoc --implicit-namespaces -f -o {output_dir} {module_dir}"
|
|
47
|
-
|
|
48
|
-
args = cmd_line.split(" ")
|
|
49
|
-
if tuple(sphinx.__version__.split(".")) >= ("1", "7"):
|
|
50
|
-
# This is a rudimentary parse_version to avoid external dependencies
|
|
51
|
-
args = args[1:]
|
|
52
|
-
|
|
53
|
-
apidoc.main(args)
|
|
54
|
-
except Exception as e:
|
|
55
|
-
print("Running `sphinx-apidoc` failed!\n{}".format(e))
|
|
56
|
-
|
|
57
39
|
# -- General configuration ---------------------------------------------------
|
|
58
40
|
|
|
59
41
|
# If your documentation needs a minimal Sphinx version, state it here.
|
|
@@ -76,6 +58,7 @@ extensions = [
|
|
|
76
58
|
"sphinx.ext.mathjax",
|
|
77
59
|
"sphinx.ext.napoleon",
|
|
78
60
|
"nbsphinx",
|
|
61
|
+
"IPython.sphinxext.ipython_console_highlighting",
|
|
79
62
|
]
|
|
80
63
|
|
|
81
64
|
# Enable markdown
|
|
@@ -94,6 +77,8 @@ myst_enable_extensions = [
|
|
|
94
77
|
"substitution",
|
|
95
78
|
"tasklist",
|
|
96
79
|
]
|
|
80
|
+
# Required to cross-reference header anchors in markdown files
|
|
81
|
+
myst_heading_anchors = 3
|
|
97
82
|
|
|
98
83
|
# always execute notebooks when compiling docs
|
|
99
84
|
# nbsphinx_execute = 'always'
|
|
@@ -166,6 +151,13 @@ pygments_style = "sphinx"
|
|
|
166
151
|
# If true, keep warnings as "system message" paragraphs in the built documents.
|
|
167
152
|
# keep_warnings = False
|
|
168
153
|
|
|
154
|
+
# A list of modules from which warnings will be suppressed
|
|
155
|
+
suppress_warnings = [
|
|
156
|
+
# This ignores a warning resulting from some extensions storing function, class, or module objects in html_context
|
|
157
|
+
# see https://github.com/sphinx-doc/sphinx/issues/12300 for details
|
|
158
|
+
"config.cache"
|
|
159
|
+
]
|
|
160
|
+
|
|
169
161
|
# If this is True, todo emits a warning for each TODO entries. The default is False.
|
|
170
162
|
todo_emit_warnings = True
|
|
171
163
|
|
|
@@ -182,21 +174,19 @@ html_theme = "sphinx_material"
|
|
|
182
174
|
html_theme_options = {
|
|
183
175
|
# "sidebar_width": "300px",
|
|
184
176
|
# "page_width": "1200px",
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
177
|
+
"base_url": "https://pyeql.readthedocs.io/en/latest/",
|
|
178
|
+
"repo_url": "https://github.com/KingsburyLab/pyEQL/",
|
|
179
|
+
"repo_name": "pyEQL",
|
|
188
180
|
# 'logo_icon': 'e798',
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
197
|
-
html_sidebars = {
|
|
198
|
-
"**": ["logo-text.html", "globaltoc.html", "localtoc.html", "searchbox.html"]
|
|
181
|
+
"html_minify": True,
|
|
182
|
+
"css_minify": True,
|
|
183
|
+
"nav_title": "pyEQL: a python interface for water chemistry",
|
|
184
|
+
"color_primary": "blue",
|
|
185
|
+
"color_accent": "light-blue",
|
|
186
|
+
"globaltoc_depth": 2,
|
|
187
|
+
"globaltoc_collapse": True,
|
|
199
188
|
}
|
|
189
|
+
html_sidebars = {"**": ["logo-text.html", "globaltoc.html", "localtoc.html", "searchbox.html"]}
|
|
200
190
|
|
|
201
191
|
# Add any paths that contain custom themes here, relative to this directory.
|
|
202
192
|
# html_theme_path = []
|
|
@@ -280,9 +270,7 @@ latex_elements = {
|
|
|
280
270
|
|
|
281
271
|
# Grouping the document tree into LaTeX files. List of tuples
|
|
282
272
|
# (source start file, target name, title, author, documentclass [howto/manual]).
|
|
283
|
-
latex_documents = [
|
|
284
|
-
("index", "user_guide.tex", "pyEQL Documentation", "Ryan Kingsbury", "manual")
|
|
285
|
-
]
|
|
273
|
+
latex_documents = [("index", "user_guide.tex", "pyEQL Documentation", "Ryan Kingsbury", "manual")]
|
|
286
274
|
|
|
287
275
|
# The name of an image file (relative to this directory) to place at the top of
|
|
288
276
|
# the title page.
|
|
@@ -309,7 +297,7 @@ python_version = ".".join(map(str, sys.version_info[0:2]))
|
|
|
309
297
|
intersphinx_mapping = {
|
|
310
298
|
"sphinx": ("https://www.sphinx-doc.org/en/master", None),
|
|
311
299
|
"python": ("https://docs.python.org/" + python_version, None),
|
|
312
|
-
"matplotlib": ("https://matplotlib.org", None),
|
|
300
|
+
"matplotlib": ("https://matplotlib.org/stable", None),
|
|
313
301
|
"numpy": ("https://numpy.org/doc/stable", None),
|
|
314
302
|
"sklearn": ("https://scikit-learn.org/stable", None),
|
|
315
303
|
"pandas": ("https://pandas.pydata.org/pandas-docs/stable", None),
|
|
@@ -318,4 +306,16 @@ intersphinx_mapping = {
|
|
|
318
306
|
"pyscaffold": ("https://pyscaffold.org/en/stable", None),
|
|
319
307
|
}
|
|
320
308
|
|
|
309
|
+
# -- Linkcheck options -------------------------------------------------------
|
|
310
|
+
linkcheck_allowed_redirects = {
|
|
311
|
+
r"http://dx\.doi\.org/10\.1016/S0927-5193\(04\)80033-0": r"https://linkinghub\.elsevier\.com/retrieve/pii/S0927519304800330",
|
|
312
|
+
r"https://doi\.org/10\.1016/j\.desal\.2013\.03\.015": r"https://linkinghub\.elsevier\.com/retrieve/pii/S0011916413001409",
|
|
313
|
+
r"https://dx\.doi\.org/10\.1016/j\.cemconres\.2017\.08\.030": r"https://linkinghub\.elsevier\.com/retrieve/pii/S0008884617301965",
|
|
314
|
+
r"https://doi\.org/10\.1016/j\.earscirev\.2021\.103888": r"https://linkinghub.elsevier\.com/retrieve/pii/S0012825221003895",
|
|
315
|
+
r"http://pint\.readthedocs\.io": r"https://pint\.readthedocs\.io/.*/stable",
|
|
316
|
+
r"https://tox\.wiki": r"https://tox\.wiki/.*",
|
|
317
|
+
}
|
|
318
|
+
linkcheck_ignore = [r"https://localhost:\d+/"]
|
|
319
|
+
linkcheck_rate_limit_timeout = 500
|
|
320
|
+
|
|
321
321
|
print(f"loading configurations for {project} {version} ...", file=sys.stderr)
|
|
@@ -39,22 +39,22 @@ submit your proposal.
|
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
When working on documentation changes in your local machine, you can
|
|
42
|
-
compile them using [tox]
|
|
42
|
+
compile them using [tox](https://tox.wiki):
|
|
43
43
|
|
|
44
|
-
```
|
|
44
|
+
```shell
|
|
45
45
|
tox -e docs
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
then use Python's built-in web server for a preview in your web browser
|
|
49
49
|
(`http://localhost:8000`):
|
|
50
50
|
|
|
51
|
-
```
|
|
51
|
+
```shell
|
|
52
52
|
python3 -m http.server --directory 'docs/_build/html'
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
## Contributing Code
|
|
56
56
|
|
|
57
|
-
To contribute bug fixes, documentation enhancements, or new code, please fork pyEQL and send us a pull request. It's not as hard as it sounds! Beginning with version 0.6.0, we follow the [GitHub flow](https://docs.github.com/en/get-started/
|
|
57
|
+
To contribute bug fixes, documentation enhancements, or new code, please fork pyEQL and send us a pull request. It's not as hard as it sounds! Beginning with version 0.6.0, we follow the [GitHub flow](https://docs.github.com/en/get-started/using-github/github-flow) workflow model.
|
|
58
58
|
|
|
59
59
|
The [Scientific Python Guide](https://learn.scientific-python.org/development/guides/) is also an excellent technical reference for new and longtime developers.
|
|
60
60
|
|
|
@@ -65,7 +65,7 @@ a report in the [issue tracker](https://github.com/KingsburyLab/pyEQL/issues) to
|
|
|
65
65
|
|
|
66
66
|
### Hacking pyEQL, step by step
|
|
67
67
|
|
|
68
|
-
1. [Fork the pyEQL repository](https://
|
|
68
|
+
1. [Fork the pyEQL repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) on Github
|
|
69
69
|
|
|
70
70
|
2. Clone your repository to a directory of your choice:
|
|
71
71
|
|
|
@@ -112,13 +112,13 @@ a report in the [issue tracker](https://github.com/KingsburyLab/pyEQL/issues) to
|
|
|
112
112
|
|
|
113
113
|
Please abide by the following guidelines when contributing code to `pyEQL`:
|
|
114
114
|
|
|
115
|
-
- All changes you make to
|
|
115
|
+
- All changes you make to `pyEQL` should be accompanied by unit tests and should not break existing tests. To run the full test suite, run `pytest tests/` from the repository directory.
|
|
116
116
|
|
|
117
|
-
- Code coverage should be maintained or increase. Each PR will report code coverage after the tests pass, but you can check locally using [pytest-cov](https://pytest-cov.readthedocs.io/en/latest/), by running `pytest --cov tests
|
|
117
|
+
- Code coverage should be maintained or increase. Each PR will report code coverage after the tests pass, but you can check locally using [pytest-cov](https://pytest-cov.readthedocs.io/en/latest/), by running `pytest --cov tests/`. To produce a detailed HTML report with line and branch coverage statistics, run `pytest --cov-branch --cov=src/pyEQL --cov-report=html -n auto tests`.
|
|
118
118
|
|
|
119
119
|
- All code should include type hints and have internally consistent documentation for the inputs and outputs.
|
|
120
120
|
|
|
121
|
-
- Use Google style docstrings
|
|
121
|
+
- Use [Google style docstrings](https://google.github.io/styleguide/pyguide.html)
|
|
122
122
|
|
|
123
123
|
- Lint your code with [`ruff`](https://github.com/astral-sh/ruff) by running `ruff check --fix src/` from the repo directory. Alternatively, you can install the `pre-commit` hooks by running `pre-commit install` from the repository directory. This will prevent committing new changes until all linting errors are fixed.
|
|
124
124
|
|
|
@@ -128,8 +128,8 @@ Please abide by the following guidelines when contributing code to `pyEQL`:
|
|
|
128
128
|
|
|
129
129
|
## Documentation
|
|
130
130
|
|
|
131
|
-
Improvements to the documentation are most welcome! Our documentation system uses `sphinx` with the [Materials for Sphinx](https://bashtage.github.io/sphinx-material/) theme. To edit the documentation locally, run `tox -e autodocs` from the repository root directory. This will serve the documents to http://localhost:8000
|
|
131
|
+
Improvements to the documentation are most welcome! Our documentation system uses `sphinx` with the [Materials for Sphinx](https://bashtage.github.io/sphinx-material/) theme. To edit the documentation locally, run `tox -e autodocs` from the repository root directory. This will serve the documents to `http://localhost:8000/` so you can view them in your web browser. When you make changes to the files in the `docs/` directory, the documentation will automatically rebuild and update in your browser (you might have to refresh the page to see changes).
|
|
132
132
|
|
|
133
133
|
## Changelog
|
|
134
134
|
|
|
135
|
-
We keep a `CHANGELOG.md` file in the base directory of the repository. Before submitting your PR, be sure to update the `CHANGELOG.md` file under the "Unreleased" section with a brief description of your changes. Our `CHANGELOG.md` file
|
|
135
|
+
We keep a `CHANGELOG.md` file in the base directory of the repository. Before submitting your PR, be sure to update the `CHANGELOG.md` file under the "Unreleased" section with a brief description of your changes. Our `CHANGELOG.md` file loosely follows the [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) format, beginning with `v0.6.0`.
|
|
@@ -14,7 +14,7 @@ its calculations. The database includes:
|
|
|
14
14
|
- Dielectric constant model parameters for 18 ions
|
|
15
15
|
- Partial molar volumes for 24 ions
|
|
16
16
|
|
|
17
|
-
`pyEQL` can automatically infer basic chemical informatics such as molecular weight and charge by passing a solute's formula to `pymatgen.core.ion.Ion` (See [chemical formulas](
|
|
17
|
+
`pyEQL` can automatically infer basic chemical informatics such as molecular weight and charge by passing a solute's formula to `pymatgen.core.ion.Ion` (See [chemical formulas](chemistry.md)). For other physicochemical properties, it relies on data compiled into the included database. A list of the data and species covered is available [below](#species-included)
|
|
18
18
|
|
|
19
19
|
## Format
|
|
20
20
|
|