pyEQL 1.1.6__tar.gz → 1.3.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 (136) hide show
  1. {pyeql-1.1.6 → pyeql-1.3.0}/.github/workflows/post-process.yml +3 -7
  2. {pyeql-1.1.6 → pyeql-1.3.0}/.github/workflows/release.yml +1 -1
  3. {pyeql-1.1.6 → pyeql-1.3.0}/.github/workflows/testing.yaml +10 -11
  4. {pyeql-1.1.6 → pyeql-1.3.0}/.github/workflows/upgrade_dependencies.yml +4 -4
  5. {pyeql-1.1.6 → pyeql-1.3.0}/.pre-commit-config.yaml +17 -13
  6. {pyeql-1.1.6 → pyeql-1.3.0}/.readthedocs.yml +1 -1
  7. pyeql-1.3.0/.zenodo.json +25 -0
  8. {pyeql-1.1.6 → pyeql-1.3.0}/AUTHORS.md +5 -0
  9. {pyeql-1.1.6 → pyeql-1.3.0}/CHANGELOG.md +85 -0
  10. {pyeql-1.1.6 → pyeql-1.3.0}/CITATION.cff +6 -6
  11. {pyeql-1.1.6/src/pyEQL.egg-info → pyeql-1.3.0}/PKG-INFO +12 -12
  12. {pyeql-1.1.6 → pyeql-1.3.0}/README.md +2 -2
  13. {pyeql-1.1.6 → pyeql-1.3.0}/docs/authors.md +5 -0
  14. {pyeql-1.1.6 → pyeql-1.3.0}/docs/changelog.md +85 -0
  15. {pyeql-1.1.6 → pyeql-1.3.0}/docs/class_solution.md +1 -1
  16. {pyeql-1.1.6 → pyeql-1.3.0}/docs/conf.py +37 -37
  17. {pyeql-1.1.6 → pyeql-1.3.0}/docs/contributing.md +11 -11
  18. {pyeql-1.1.6 → pyeql-1.3.0}/docs/creating.md +0 -2
  19. {pyeql-1.1.6 → pyeql-1.3.0}/docs/database.md +1 -1
  20. {pyeql-1.1.6 → pyeql-1.3.0}/docs/examples/.ipynb_checkpoints/pyEQL_demo_1-checkpoint.ipynb +10 -12
  21. {pyeql-1.1.6 → pyeql-1.3.0}/docs/examples/.ipynb_checkpoints/pyeql_demo-checkpoint.ipynb +13 -12
  22. {pyeql-1.1.6 → pyeql-1.3.0}/docs/examples/.ipynb_checkpoints/pyeql_tutorial_database-checkpoint.ipynb +12 -20
  23. {pyeql-1.1.6 → pyeql-1.3.0}/docs/examples/.ipynb_checkpoints/pyeql_tutorial_osmotic_pressure-checkpoint.ipynb +39 -24
  24. {pyeql-1.1.6 → pyeql-1.3.0}/docs/examples/.ipynb_checkpoints/speedup-checkpoint.ipynb +4 -4
  25. {pyeql-1.1.6 → pyeql-1.3.0}/docs/examples/pyeql_demo.ipynb +14 -13
  26. pyeql-1.3.0/docs/examples/pyeql_tutorial_activity.ipynb +270 -0
  27. pyeql-1.3.0/docs/examples/pyeql_tutorial_carbonate.ipynb +390 -0
  28. {pyeql-1.1.6 → pyeql-1.3.0}/docs/examples/pyeql_tutorial_database.ipynb +13 -21
  29. {pyeql-1.1.6 → pyeql-1.3.0}/docs/examples/pyeql_tutorial_osmotic_pressure.ipynb +41 -26
  30. {pyeql-1.1.6 → pyeql-1.3.0}/docs/index.md +1 -0
  31. {pyeql-1.1.6 → pyeql-1.3.0}/docs/installation.md +4 -4
  32. {pyeql-1.1.6 → pyeql-1.3.0}/docs/requirements.txt +2 -1
  33. pyeql-1.3.0/docs/tutorials.md +52 -0
  34. {pyeql-1.1.6 → pyeql-1.3.0}/pyproject.toml +9 -9
  35. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/macos-latest_py3.10.txt +70 -62
  36. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/macos-latest_py3.10_extras.txt +96 -88
  37. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/macos-latest_py3.11.txt +70 -62
  38. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/macos-latest_py3.11_extras.txt +96 -87
  39. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/macos-latest_py3.12.txt +70 -62
  40. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/macos-latest_py3.12_extras.txt +96 -87
  41. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/macos-latest_py3.9.txt +23 -23
  42. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/macos-latest_py3.9_extras.txt +32 -32
  43. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/ubuntu-latest_py3.10.txt +70 -62
  44. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/ubuntu-latest_py3.10_extras.txt +96 -88
  45. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/ubuntu-latest_py3.11.txt +70 -62
  46. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/ubuntu-latest_py3.11_extras.txt +96 -87
  47. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/ubuntu-latest_py3.12.txt +70 -62
  48. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/ubuntu-latest_py3.12_extras.txt +96 -87
  49. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/ubuntu-latest_py3.9.txt +23 -23
  50. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/ubuntu-latest_py3.9_extras.txt +32 -32
  51. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/windows-latest_py3.10.txt +70 -62
  52. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/windows-latest_py3.10_extras.txt +96 -88
  53. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/windows-latest_py3.11.txt +70 -62
  54. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/windows-latest_py3.11_extras.txt +96 -87
  55. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/windows-latest_py3.12.txt +70 -62
  56. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/windows-latest_py3.12_extras.txt +96 -87
  57. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/windows-latest_py3.9.txt +23 -23
  58. {pyeql-1.1.6 → pyeql-1.3.0}/requirements/windows-latest_py3.9_extras.txt +32 -32
  59. {pyeql-1.1.6 → pyeql-1.3.0}/setup.py +1 -0
  60. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/__init__.py +1 -1
  61. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/activity_correction.py +9 -9
  62. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/database/pyeql_db.json +20799 -21094
  63. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/engines.py +61 -66
  64. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/equilibrium.py +2 -2
  65. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/functions.py +12 -12
  66. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/presets/Ringers lactate.yaml +3 -3
  67. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/presets/normal saline.yaml +3 -3
  68. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/presets/rainwater.yaml +3 -3
  69. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/presets/seawater.yaml +3 -3
  70. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/presets/urine.yaml +3 -3
  71. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/presets/wastewater.yaml +3 -3
  72. pyeql-1.3.0/src/pyEQL/py.typed +0 -0
  73. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/salt_ion_match.py +2 -2
  74. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/solution.py +199 -293
  75. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/utils.py +22 -9
  76. {pyeql-1.1.6 → pyeql-1.3.0/src/pyEQL.egg-info}/PKG-INFO +12 -12
  77. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL.egg-info/SOURCES.txt +3 -3
  78. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL.egg-info/requires.txt +5 -5
  79. pyeql-1.3.0/tests/conftest.py +156 -0
  80. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_activity.py +133 -1
  81. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_bulk_properties.py +0 -1
  82. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_debye_length.py +1 -0
  83. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_density.py +1 -0
  84. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_dielectric.py +3 -2
  85. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_effective_pitzer.py +3 -2
  86. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_equilibrium.py +1 -0
  87. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_functions.py +19 -21
  88. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_mixed_electrolyte_activity.py +14 -6
  89. pyeql-1.3.0/tests/test_osmotic_coeff.py +180 -0
  90. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_phreeqc.py +10 -10
  91. pyeql-1.3.0/tests/test_salt_matching.py +424 -0
  92. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_solute.py +1 -0
  93. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_solution.py +216 -30
  94. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_utils.py +7 -0
  95. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_volume_concentration.py +7 -7
  96. {pyeql-1.1.6 → pyeql-1.3.0}/tox.ini +3 -2
  97. pyeql-1.1.6/.zenodo.json +0 -25
  98. pyeql-1.1.6/docs/examples/pyEQL_demo_1.ipynb +0 -525
  99. pyeql-1.1.6/docs/examples/speedup.ipynb +0 -404
  100. pyeql-1.1.6/docs/readme.md +0 -84
  101. pyeql-1.1.6/docs/tutorials.md +0 -32
  102. pyeql-1.1.6/tests/conftest.py +0 -10
  103. pyeql-1.1.6/tests/test_osmotic_coeff.py +0 -96
  104. pyeql-1.1.6/tests/test_salt_matching.py +0 -133
  105. {pyeql-1.1.6 → pyeql-1.3.0}/.coveragerc +0 -0
  106. {pyeql-1.1.6 → pyeql-1.3.0}/.gitattributes +0 -0
  107. {pyeql-1.1.6 → pyeql-1.3.0}/.github/dependabot.yml +0 -0
  108. {pyeql-1.1.6 → pyeql-1.3.0}/.github/pull_request_template.md +0 -0
  109. {pyeql-1.1.6 → pyeql-1.3.0}/.github/release.yml +0 -0
  110. {pyeql-1.1.6 → pyeql-1.3.0}/.gitignore +0 -0
  111. {pyeql-1.1.6 → pyeql-1.3.0}/COPYING +0 -0
  112. {pyeql-1.1.6 → pyeql-1.3.0}/LICENSE.txt +0 -0
  113. {pyeql-1.1.6 → pyeql-1.3.0}/MANIFEST.in +0 -0
  114. {pyeql-1.1.6 → pyeql-1.3.0}/docs/Makefile +0 -0
  115. {pyeql-1.1.6 → pyeql-1.3.0}/docs/_static/.gitignore +0 -0
  116. {pyeql-1.1.6 → pyeql-1.3.0}/docs/amounts.md +0 -0
  117. {pyeql-1.1.6 → pyeql-1.3.0}/docs/arithmetic.md +0 -0
  118. {pyeql-1.1.6 → pyeql-1.3.0}/docs/chemistry.md +0 -0
  119. {pyeql-1.1.6 → pyeql-1.3.0}/docs/engines.md +0 -0
  120. {pyeql-1.1.6 → pyeql-1.3.0}/docs/internal.md +0 -0
  121. {pyeql-1.1.6 → pyeql-1.3.0}/docs/license.md +0 -0
  122. {pyeql-1.1.6 → pyeql-1.3.0}/docs/mixing.md +0 -0
  123. {pyeql-1.1.6 → pyeql-1.3.0}/docs/quickstart.md +0 -0
  124. {pyeql-1.1.6 → pyeql-1.3.0}/docs/serialization.md +0 -0
  125. {pyeql-1.1.6 → pyeql-1.3.0}/docs/units.md +0 -0
  126. {pyeql-1.1.6 → pyeql-1.3.0}/pyeql-logo.png +0 -0
  127. {pyeql-1.1.6 → pyeql-1.3.0}/pyeql-logo.svg +0 -0
  128. {pyeql-1.1.6 → pyeql-1.3.0}/setup.cfg +0 -0
  129. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/database/geothermal.dat +0 -0
  130. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/database/llnl.dat +0 -0
  131. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/database/phreeqc_license.txt +0 -0
  132. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL/solute.py +0 -0
  133. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL.egg-info/dependency_links.txt +0 -0
  134. {pyeql-1.1.6 → pyeql-1.3.0}/src/pyEQL.egg-info/top_level.txt +0 -0
  135. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_logging.py +0 -0
  136. {pyeql-1.1.6 → pyeql-1.3.0}/tests/test_solute_properties.py +0 -0
@@ -34,19 +34,15 @@ jobs:
34
34
  max-parallel: 6
35
35
  matrix:
36
36
  version:
37
- - { python: "3.9", resolution: highest, extras: testing }
38
37
  - { python: "3.10", resolution: lowest-direct, extras: testing }
39
38
  - { python: "3.11", resolution: highest, extras: testing }
40
39
  - { python: "3.12", resolution: lowest-direct, extras: testing }
40
+ - { python: "3.13", resolution: highest, extras: testing }
41
41
  os:
42
42
  - ubuntu-latest
43
43
  - macos-latest
44
44
  - windows-latest
45
45
  - macos-14
46
- exclude:
47
- - {version: {
48
- python: "3.9" },
49
- os: macos-14 }
50
46
  runs-on: ${{ matrix.os }}
51
47
  steps:
52
48
  - uses: actions/checkout@v4
@@ -61,8 +57,8 @@ jobs:
61
57
  uv pip install '.[${{ matrix.version.extras }}]' --system --resolution=${{ matrix.version.resolution }}
62
58
  - name: Run tests
63
59
  run: |
64
- pytest -n auto --cov=src/pyEQL --cov-report=xml
65
- - uses: codecov/codecov-action@v4
60
+ pytest -n auto --cov=src/pyEQL --cov-report=xml --dist=loadscope
61
+ - uses: codecov/codecov-action@v5
66
62
  with:
67
63
  token: ${{ secrets.CODECOV_TOKEN }}
68
64
  file: ./coverage.xml
@@ -57,4 +57,4 @@ jobs:
57
57
  tox -e clean,build
58
58
 
59
59
  - name: Upload to PyPi
60
- uses: pypa/gh-action-pypi-publish@v1.10.0
60
+ uses: pypa/gh-action-pypi-publish@v1.12.4
@@ -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
 
@@ -23,7 +24,7 @@ jobs:
23
24
  - name: Set up Python
24
25
  uses: actions/setup-python@v5
25
26
  with:
26
- python-version: 3.11
27
+ python-version: "3.11"
27
28
  cache: pip
28
29
  - name: Run pre-commit
29
30
  run: |
@@ -36,21 +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.9", "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"
50
- # no python 3.9 on the macos-14 runner
51
- exclude:
52
- - os: macos-14
53
- python-version: "3.9"
49
+ - os: ubuntu-latest
50
+ python-version: "3.12"
54
51
  runs-on: ${{ matrix.os }}
55
52
  steps:
56
53
  - uses: actions/checkout@v4
@@ -64,8 +61,8 @@ jobs:
64
61
  pip install -e ".[testing]"
65
62
  - name: Run tests
66
63
  run: |
67
- pytest -n auto --cov=src/pyEQL --cov-report=xml
68
- - uses: codecov/codecov-action@v4
64
+ pytest -n auto --cov=src/pyEQL --cov-report=xml --dist=loadscope
65
+ - uses: codecov/codecov-action@v5
69
66
  with:
70
67
  token: ${{ secrets.CODECOV_TOKEN }}
71
68
  file: ./coverage.xml
@@ -77,10 +74,12 @@ jobs:
77
74
  - name: Setup Python
78
75
  uses: actions/setup-python@v5
79
76
  with:
80
- python-version: 3.9
77
+ python-version: "3.11"
81
78
  - name: Install tox
82
79
  run: |
83
80
  python -m pip install tox
84
81
  - uses: r-lib/actions/setup-pandoc@v2
85
82
  - name: Build docs
86
83
  run: tox -e docs
84
+ - name: Check links
85
+ run: tox -e links
@@ -6,7 +6,7 @@ on:
6
6
  workflow_dispatch: # Allow running on-demand
7
7
  schedule:
8
8
  # Runs on the 10th day of every month at 8:00 UTC (4:00 Eastern)
9
- - cron: '0 8 10 * *'
9
+ - cron: "0 8 10 * *"
10
10
 
11
11
  jobs:
12
12
  upgrade:
@@ -14,9 +14,9 @@ jobs:
14
14
  runs-on: ${{ matrix.os }}
15
15
  strategy:
16
16
  matrix:
17
- os: ['ubuntu-latest', 'macos-latest', 'windows-latest']
17
+ os: ["ubuntu-latest", "macos-latest", "windows-latest"]
18
18
  package: ["."]
19
- python-version: ["3.9", "3.10", "3.11", "3.12"]
19
+ python-version: ["3.10", "3.11", "3.12"]
20
20
  steps:
21
21
  - uses: actions/checkout@v4
22
22
  with:
@@ -24,7 +24,7 @@ jobs:
24
24
  - uses: actions/setup-python@v5
25
25
  with:
26
26
  python-version: ${{ matrix.python-version }}
27
- cache: 'pip'
27
+ cache: "pip"
28
28
  - name: Upgrade Python dependencies
29
29
  shell: bash
30
30
  run: |
@@ -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.5.5
15
+ rev: v0.12.7
16
16
  hooks:
17
- - id: ruff
18
- args: [--fix, --ignore, "D,E501", "--show-fixes"]
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: 24.4.2
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.3.0
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: v4.6.0
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]
44
-
45
- - repo: https://github.com/pre-commit/mirrors-prettier
46
- rev: v4.0.0-alpha.8
47
- hooks:
48
- - id: prettier
48
+ - id: check-yaml
49
+ - id: check-json
50
+ - id: pretty-format-json
51
+ exclude_types: [jupyter]
52
+ args: [--autofix, --indent=4]
@@ -8,7 +8,7 @@ version: 2
8
8
  build:
9
9
  os: ubuntu-22.04
10
10
  tools:
11
- python: "3.10"
11
+ python: "3.11"
12
12
 
13
13
  # Build documentation in the docs/ directory with Sphinx
14
14
  sphinx:
@@ -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,91 @@ 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.0] - 2025-08-08
9
+
10
+ ### Fixed
11
+
12
+ - `Solution.__add__`: engine, solvent, database were not inherited by the sum of `Solution`
13
+ objects (#258, @ugognw)
14
+ - `Solution.get_activity_coefficient`: Fixed bugs where incorrect Pitzer scaling parameters $\alpha_1$
15
+ and $\alpha_2$ parameters were used to calculate activity coefficients and solute molar volumes for salts with multivalent ions (#258, @ugognw)
16
+ - `Solution.get_salt_dict`: fixed errors in the calculation of concentrations for salts
17
+ containing polyvalent cations (#258, @ugognw)
18
+ - `Solution.get_salt_dict` now respects the `cutoff` parameter. Note that `cutoff`
19
+ is now interpreted in units of moles per kilogram of solution (#258, @ugognw)
20
+ - `Solution.get_salt_dict` always returns a salt dictionary sorted in order of decreasing salt concentration (#258, @ugognw)
21
+ - `Solution.__init__`: Raise `ValueError` if a user sets inconsistent `H[+1]` in `solutes` and
22
+ `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`
23
+ if the two are inconsistent, unless the `pH` kwarg is kept at the default value. In that case,
24
+ a warning will be logged.
25
+ - `standardize_formula`: properly interpret ambiguous dash / hyphen characters as "minus" (#264, @rkingsbury)
26
+ - Ensure `Solution.p()` always returns a regular `float` and returns `np.nan` if the
27
+ concentration is zero or negative (#269, @rkingsbury)
28
+ - `Solution.get_diffusion_coefficient`: prevent diffusion coefficient adjustment when temperature
29
+ is within 1 degree of the the reference value (#215, @YitongPan1)
30
+ - Tests: literature data used in `test_mixed_electrolyte_activity.py` was updated to reflect
31
+ corrected we recently became aware of. (#271, @Ouriel-N, @rkingsbury)
32
+ - Docs: Sphinx warnings are cleared (#255, ugognw)
33
+ - Docs: Minor fixes for private / cached methods (#197, @githubalexliu)
34
+ - Docs: Edit documentation of `debye_parameter_B` (#196, @YitongPan1)
35
+
36
+ ### Added
37
+
38
+ - Docs/CI: sphinx linkcheck job and tox environment/command (`tox -e links`) (#255, @ugognw)
39
+ - Docs: add carbonate system tutorial (#204, @NikhilDhruv)
40
+
41
+ ### Changed
42
+
43
+ - **BREAKING** - the return value of `Solution.get_salt_dict` now includes `Salt` objects instead of keys corresponding
44
+ to `cation` and `anion`. See the example in the docstring for how to adapt existing code to accommodate this
45
+ change. (#258, @ugognw)
46
+ - **BREAKING** - `Solution.get_salt_dict` no longer returns an entry for water (#258, @ugognw)
47
+ - **BREAKING** - `Solution.get_salt` will not return water and may return `None` if no salt is present.
48
+ Previously, `Solution.get_salt` would have returned a `Salt` representing water. (#258, @ugognw)
49
+ - Ensure more consistent column formatting in `Solution.print()` (#269, @rkingsbury)
50
+ - Switch `math.log10` to `np.log10` in `Solution.p()` (#269, @rkingsbury)
51
+ - update pre-commit configuration (#269, @rkingsbury)
52
+ - use [`--dist loadscope`](https://pytest-xdist.readthedocs.io/en/latest/distribution.html) in parallelized CI tests. Closes #170. (#269, @rkingsbury)
53
+ - 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)
54
+ - add `py.typed` to report type checking to other libraries. Closes #179. (#269, @rkingsbury)
55
+ - Support `numpy>2.0`
56
+ - Bump `pint` to `0.24.4` for `numpy` `v2.0` compatibility and to mitigate CI issues (#239, @SuixiongTay, @rkingsbury)
57
+ - CI: add `python` `v3.13` to post-merge unit tests
58
+ - Docs: `tox -e docs` command configured to fail on warning (#255, @ugognw)
59
+ - Docs: ReadTheDocs built with Python 3.11 (#255, ugognw)
60
+ - Use `importlib` to locate test files (#241, @SuixiongTay)
61
+ - Support `numpy>2.0`
62
+ - Bump `pint` to `0.24.4` for `numpy` `v2.0` compatibility and to mitigate CI issues (#239, @SuixiongTay, @rkingsbury)
63
+ - CI: add `python` `v3.13` to post-merge unit tests
64
+ - bump `pymatgen` to `v2025.1.9`
65
+ - bump `maggma` to `v0.71.4`
66
+
67
+ ### Removed
68
+
69
+ - **BREAKING** Methods previously marked for deprecation - `list_solutes`, `list_activities`,
70
+ `list_concentrations`, `list_salts` have been removed.
71
+ - `Solution.add_solvent` has been marked for deprecation and will be removed in a future
72
+ release. Use `add_solute` instead.
73
+ - Python 3.9 version classifier in pyproject.toml (#247, @ugognw)
74
+ - `Solution.list_salts` (use `Solution.get_salt_dict()` instead) (#258)
75
+
76
+ ## [1.2.0] - 2024-09-24
77
+
78
+ ### Fixed
79
+
80
+ - Database: removed several erroneous species (such as `CO32-` which was really `CO3[-2]`),
81
+ corrected other parsing errors, and updated formula syntax for consistency with recent
82
+ `standardize_formula` changes (e.g., `H4NCl -> NH4Cl`) (#190, @rkingsbury)
83
+
84
+ ### Changed
85
+
86
+ - Bump `pymatgen` to `v2024.9.10` for additional upstream formula fixes. (#188, @abhardwaj73)
87
+
88
+ ### Removed
89
+
90
+ - **BREAKING** - dropped python 3.9 support, in accordance with numpy deprecation policy.
91
+ (#188, @abhardwaj73)
92
+
8
93
  ## [1.1.6] - 2024-09-01
9
94
 
10
95
  ### Fixed
@@ -1,16 +1,16 @@
1
1
  cff-version: "1.2.0"
2
2
  authors:
3
- - family-names: Kingsbury
4
- given-names: Ryan
5
- orcid: "https://orcid.org/0000-0002-7168-3967"
3
+ - family-names: Kingsbury
4
+ given-names: Ryan
5
+ orcid: "https://orcid.org/0000-0002-7168-3967"
6
6
  doi: 10.5281/zenodo.8332915
7
7
  message: If you use this software, please cite our article in the
8
8
  Journal of Open Source Software.
9
9
  preferred-citation:
10
10
  authors:
11
- - family-names: Kingsbury
12
- given-names: Ryan
13
- orcid: "https://orcid.org/0000-0002-7168-3967"
11
+ - family-names: Kingsbury
12
+ given-names: Ryan
13
+ orcid: "https://orcid.org/0000-0002-7168-3967"
14
14
  date-published: 2024-03-25
15
15
  doi: 10.21105/joss.06295
16
16
  issn: 2475-9066
@@ -1,13 +1,13 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pyEQL
3
- Version: 1.1.6
3
+ Version: 1.3.0
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
@@ -15,18 +15,17 @@ Classifier: Development Status :: 4 - Beta
15
15
  Classifier: Intended Audience :: Science/Research
16
16
  Classifier: Operating System :: OS Independent
17
17
  Classifier: Topic :: Scientific/Engineering
18
- Requires-Python: >=3.9
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.19
24
- Requires-Dist: numpy<2,>1.26
22
+ Requires-Dist: pint>=0.24.4
23
+ Requires-Dist: numpy>1.26
25
24
  Requires-Dist: scipy>=1.12
26
- Requires-Dist: pymatgen==2024.5.1
25
+ Requires-Dist: pymatgen>=2025.1.9
27
26
  Requires-Dist: iapws>=1.5.3
28
- Requires-Dist: monty>=2024.7.12
29
- Requires-Dist: maggma>=0.67.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,11 +43,12 @@ 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
  [![Read the Docs](https://img.shields.io/readthedocs/pyeql)](https://pyeql.readthedocs.io/en/latest/)
49
49
  [![testing](https://github.com/KingsburyLab/pyeql/workflows/testing/badge.svg)](https://github.com/KingsburyLab/pyeql/actions?query=workflow%3Atesting)
50
50
  [![codecov](https://codecov.io/gh/KingsburyLab/pyeql/branch/main/graph/badge.svg?token=I7RP0QML6S)](https://codecov.io/gh/KingsburyLab/pyeql)
51
- ![Supported python versions](https://img.shields.io/badge/python-3.9%20%7C%203.10%20%7C%203.11%20%7C%203.12-blue)
51
+ ![Supported python versions](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-blue)
52
52
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8332915.svg)](https://doi.org/10.5281/zenodo.8332915)
53
53
  [![PyPI version](https://badge.fury.io/py/pyEQL.svg)](https://badge.fury.io/py/pyEQL)
54
54
  [![status](https://joss.theoj.org/papers/bdd9e247ea9736a0fdbbd5fe12bef7a6/status.svg)](https://joss.theoj.org/papers/bdd9e247ea9736a0fdbbd5fe12bef7a6)
@@ -112,7 +112,7 @@ Detailed documentation is available at [https://pyeql.readthedocs.io/](https://p
112
112
 
113
113
  ### Dependencies
114
114
 
115
- - Python 3.9+. This project will attempt to adhere to NumPy's
115
+ - Python 3.10+. This project will attempt to adhere to NumPy's
116
116
  [NEP 29](https://numpy.org/neps/nep-0029-deprecation_policy.html) deprecation policy
117
117
  for older version of Python.
118
118
  - [pint](https://github.com/hgrecco/pint) - for units-aware calculations
@@ -1,7 +1,7 @@
1
1
  [![Read the Docs](https://img.shields.io/readthedocs/pyeql)](https://pyeql.readthedocs.io/en/latest/)
2
2
  [![testing](https://github.com/KingsburyLab/pyeql/workflows/testing/badge.svg)](https://github.com/KingsburyLab/pyeql/actions?query=workflow%3Atesting)
3
3
  [![codecov](https://codecov.io/gh/KingsburyLab/pyeql/branch/main/graph/badge.svg?token=I7RP0QML6S)](https://codecov.io/gh/KingsburyLab/pyeql)
4
- ![Supported python versions](https://img.shields.io/badge/python-3.9%20%7C%203.10%20%7C%203.11%20%7C%203.12-blue)
4
+ ![Supported python versions](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-blue)
5
5
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8332915.svg)](https://doi.org/10.5281/zenodo.8332915)
6
6
  [![PyPI version](https://badge.fury.io/py/pyEQL.svg)](https://badge.fury.io/py/pyEQL)
7
7
  [![status](https://joss.theoj.org/papers/bdd9e247ea9736a0fdbbd5fe12bef7a6/status.svg)](https://joss.theoj.org/papers/bdd9e247ea9736a0fdbbd5fe12bef7a6)
@@ -65,7 +65,7 @@ Detailed documentation is available at [https://pyeql.readthedocs.io/](https://p
65
65
 
66
66
  ### Dependencies
67
67
 
68
- - Python 3.9+. This project will attempt to adhere to NumPy's
68
+ - Python 3.10+. This project will attempt to adhere to NumPy's
69
69
  [NEP 29](https://numpy.org/neps/nep-0029-deprecation_policy.html) deprecation policy
70
70
  for older version of Python.
71
71
  - [pint](https://github.com/hgrecco/pint) - for units-aware calculations
@@ -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,91 @@ 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.0] - 2025-08-08
9
+
10
+ ### Fixed
11
+
12
+ - `Solution.__add__`: engine, solvent, database were not inherited by the sum of `Solution`
13
+ objects (#258, @ugognw)
14
+ - `Solution.get_activity_coefficient`: Fixed bugs where incorrect Pitzer scaling parameters $\alpha_1$
15
+ and $\alpha_2$ parameters were used to calculate activity coefficients and solute molar volumes for salts with multivalent ions (#258, @ugognw)
16
+ - `Solution.get_salt_dict`: fixed errors in the calculation of concentrations for salts
17
+ containing polyvalent cations (#258, @ugognw)
18
+ - `Solution.get_salt_dict` now respects the `cutoff` parameter. Note that `cutoff`
19
+ is now interpreted in units of moles per kilogram of solution (#258, @ugognw)
20
+ - `Solution.get_salt_dict` always returns a salt dictionary sorted in order of decreasing salt concentration (#258, @ugognw)
21
+ - `Solution.__init__`: Raise `ValueError` if a user sets inconsistent `H[+1]` in `solutes` and
22
+ `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`
23
+ if the two are inconsistent, unless the `pH` kwarg is kept at the default value. In that case,
24
+ a warning will be logged.
25
+ - `standardize_formula`: properly interpret ambiguous dash / hyphen characters as "minus" (#264, @rkingsbury)
26
+ - Ensure `Solution.p()` always returns a regular `float` and returns `np.nan` if the
27
+ concentration is zero or negative (#269, @rkingsbury)
28
+ - `Solution.get_diffusion_coefficient`: prevent diffusion coefficient adjustment when temperature
29
+ is within 1 degree of the the reference value (#215, @YitongPan1)
30
+ - Tests: literature data used in `test_mixed_electrolyte_activity.py` was updated to reflect
31
+ corrected we recently became aware of. (#271, @Ouriel-N, @rkingsbury)
32
+ - Docs: Sphinx warnings are cleared (#255, ugognw)
33
+ - Docs: Minor fixes for private / cached methods (#197, @githubalexliu)
34
+ - Docs: Edit documentation of `debye_parameter_B` (#196, @YitongPan1)
35
+
36
+ ### Added
37
+
38
+ - Docs/CI: sphinx linkcheck job and tox environment/command (`tox -e links`) (#255, @ugognw)
39
+ - Docs: add carbonate system tutorial (#204, @NikhilDhruv)
40
+
41
+ ### Changed
42
+
43
+ - **BREAKING** - the return value of `Solution.get_salt_dict` now includes `Salt` objects instead of keys corresponding
44
+ to `cation` and `anion`. See the example in the docstring for how to adapt existing code to accommodate this
45
+ change. (#258, @ugognw)
46
+ - **BREAKING** - `Solution.get_salt_dict` no longer returns an entry for water (#258, @ugognw)
47
+ - **BREAKING** - `Solution.get_salt` will not return water and may return `None` if no salt is present.
48
+ Previously, `Solution.get_salt` would have returned a `Salt` representing water. (#258, @ugognw)
49
+ - Ensure more consistent column formatting in `Solution.print()` (#269, @rkingsbury)
50
+ - Switch `math.log10` to `np.log10` in `Solution.p()` (#269, @rkingsbury)
51
+ - update pre-commit configuration (#269, @rkingsbury)
52
+ - use [`--dist loadscope`](https://pytest-xdist.readthedocs.io/en/latest/distribution.html) in parallelized CI tests. Closes #170. (#269, @rkingsbury)
53
+ - 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)
54
+ - add `py.typed` to report type checking to other libraries. Closes #179. (#269, @rkingsbury)
55
+ - Support `numpy>2.0`
56
+ - Bump `pint` to `0.24.4` for `numpy` `v2.0` compatibility and to mitigate CI issues (#239, @SuixiongTay, @rkingsbury)
57
+ - CI: add `python` `v3.13` to post-merge unit tests
58
+ - Docs: `tox -e docs` command configured to fail on warning (#255, @ugognw)
59
+ - Docs: ReadTheDocs built with Python 3.11 (#255, ugognw)
60
+ - Use `importlib` to locate test files (#241, @SuixiongTay)
61
+ - Support `numpy>2.0`
62
+ - Bump `pint` to `0.24.4` for `numpy` `v2.0` compatibility and to mitigate CI issues (#239, @SuixiongTay, @rkingsbury)
63
+ - CI: add `python` `v3.13` to post-merge unit tests
64
+ - bump `pymatgen` to `v2025.1.9`
65
+ - bump `maggma` to `v0.71.4`
66
+
67
+ ### Removed
68
+
69
+ - **BREAKING** Methods previously marked for deprecation - `list_solutes`, `list_activities`,
70
+ `list_concentrations`, `list_salts` have been removed.
71
+ - `Solution.add_solvent` has been marked for deprecation and will be removed in a future
72
+ release. Use `add_solute` instead.
73
+ - Python 3.9 version classifier in pyproject.toml (#247, @ugognw)
74
+ - `Solution.list_salts` (use `Solution.get_salt_dict()` instead) (#258)
75
+
76
+ ## [1.2.0] - 2024-09-24
77
+
78
+ ### Fixed
79
+
80
+ - Database: removed several erroneous species (such as `CO32-` which was really `CO3[-2]`),
81
+ corrected other parsing errors, and updated formula syntax for consistency with recent
82
+ `standardize_formula` changes (e.g., `H4NCl -> NH4Cl`) (#190, @rkingsbury)
83
+
84
+ ### Changed
85
+
86
+ - Bump `pymatgen` to `v2024.9.10` for additional upstream formula fixes. (#188, @abhardwaj73)
87
+
88
+ ### Removed
89
+
90
+ - **BREAKING** - dropped python 3.9 support, in accordance with numpy deprecation policy.
91
+ (#188, @abhardwaj73)
92
+
8
93
  ## [1.1.6] - 2024-09-01
9
94
 
10
95
  ### 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
  ```