pyEQL 1.1.6__tar.gz → 1.2.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 (128) hide show
  1. {pyeql-1.1.6 → pyeql-1.2.0}/.github/workflows/post-process.yml +0 -5
  2. {pyeql-1.1.6 → pyeql-1.2.0}/.github/workflows/release.yml +1 -1
  3. {pyeql-1.1.6 → pyeql-1.2.0}/.github/workflows/testing.yaml +3 -7
  4. {pyeql-1.1.6 → pyeql-1.2.0}/.github/workflows/upgrade_dependencies.yml +4 -4
  5. {pyeql-1.1.6 → pyeql-1.2.0}/.pre-commit-config.yaml +7 -7
  6. {pyeql-1.1.6 → pyeql-1.2.0}/CHANGELOG.md +17 -0
  7. {pyeql-1.1.6 → pyeql-1.2.0}/CITATION.cff +6 -6
  8. {pyeql-1.1.6/src/pyEQL.egg-info → pyeql-1.2.0}/PKG-INFO +5 -5
  9. {pyeql-1.1.6 → pyeql-1.2.0}/README.md +2 -2
  10. {pyeql-1.1.6 → pyeql-1.2.0}/docs/changelog.md +17 -0
  11. {pyeql-1.1.6 → pyeql-1.2.0}/docs/creating.md +0 -2
  12. {pyeql-1.1.6 → pyeql-1.2.0}/docs/readme.md +2 -2
  13. {pyeql-1.1.6 → pyeql-1.2.0}/docs/requirements.txt +1 -1
  14. {pyeql-1.1.6 → pyeql-1.2.0}/pyproject.toml +2 -2
  15. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/macos-latest_py3.10.txt +1 -1
  16. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/macos-latest_py3.10_extras.txt +1 -1
  17. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/macos-latest_py3.11.txt +1 -1
  18. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/macos-latest_py3.11_extras.txt +1 -1
  19. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/macos-latest_py3.12.txt +1 -1
  20. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/macos-latest_py3.12_extras.txt +1 -1
  21. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/macos-latest_py3.9.txt +1 -1
  22. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/macos-latest_py3.9_extras.txt +1 -1
  23. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/ubuntu-latest_py3.10.txt +1 -1
  24. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/ubuntu-latest_py3.10_extras.txt +1 -1
  25. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/ubuntu-latest_py3.11.txt +1 -1
  26. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/ubuntu-latest_py3.11_extras.txt +1 -1
  27. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/ubuntu-latest_py3.12.txt +1 -1
  28. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/ubuntu-latest_py3.12_extras.txt +1 -1
  29. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/ubuntu-latest_py3.9.txt +1 -1
  30. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/ubuntu-latest_py3.9_extras.txt +1 -1
  31. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/windows-latest_py3.10.txt +1 -1
  32. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/windows-latest_py3.10_extras.txt +1 -1
  33. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/windows-latest_py3.11.txt +1 -1
  34. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/windows-latest_py3.11_extras.txt +1 -1
  35. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/windows-latest_py3.12.txt +1 -1
  36. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/windows-latest_py3.12_extras.txt +1 -1
  37. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/windows-latest_py3.9.txt +1 -1
  38. {pyeql-1.1.6 → pyeql-1.2.0}/requirements/windows-latest_py3.9_extras.txt +1 -1
  39. {pyeql-1.1.6 → pyeql-1.2.0}/setup.py +1 -0
  40. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/database/pyeql_db.json +128 -326
  41. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/functions.py +7 -7
  42. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/presets/Ringers lactate.yaml +3 -3
  43. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/presets/normal saline.yaml +3 -3
  44. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/presets/rainwater.yaml +3 -3
  45. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/presets/seawater.yaml +3 -3
  46. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/presets/urine.yaml +3 -3
  47. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/presets/wastewater.yaml +3 -3
  48. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/utils.py +18 -9
  49. {pyeql-1.1.6 → pyeql-1.2.0/src/pyEQL.egg-info}/PKG-INFO +5 -5
  50. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL.egg-info/requires.txt +1 -1
  51. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_activity.py +2 -1
  52. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_bulk_properties.py +0 -1
  53. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_debye_length.py +1 -0
  54. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_density.py +1 -0
  55. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_dielectric.py +3 -2
  56. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_effective_pitzer.py +3 -2
  57. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_equilibrium.py +1 -0
  58. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_functions.py +19 -21
  59. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_mixed_electrolyte_activity.py +1 -1
  60. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_phreeqc.py +10 -10
  61. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_salt_matching.py +1 -0
  62. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_solute.py +1 -0
  63. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_solution.py +12 -11
  64. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_volume_concentration.py +5 -5
  65. {pyeql-1.1.6 → pyeql-1.2.0}/.coveragerc +0 -0
  66. {pyeql-1.1.6 → pyeql-1.2.0}/.gitattributes +0 -0
  67. {pyeql-1.1.6 → pyeql-1.2.0}/.github/dependabot.yml +0 -0
  68. {pyeql-1.1.6 → pyeql-1.2.0}/.github/pull_request_template.md +0 -0
  69. {pyeql-1.1.6 → pyeql-1.2.0}/.github/release.yml +0 -0
  70. {pyeql-1.1.6 → pyeql-1.2.0}/.gitignore +0 -0
  71. {pyeql-1.1.6 → pyeql-1.2.0}/.readthedocs.yml +0 -0
  72. {pyeql-1.1.6 → pyeql-1.2.0}/.zenodo.json +0 -0
  73. {pyeql-1.1.6 → pyeql-1.2.0}/AUTHORS.md +0 -0
  74. {pyeql-1.1.6 → pyeql-1.2.0}/COPYING +0 -0
  75. {pyeql-1.1.6 → pyeql-1.2.0}/LICENSE.txt +0 -0
  76. {pyeql-1.1.6 → pyeql-1.2.0}/MANIFEST.in +0 -0
  77. {pyeql-1.1.6 → pyeql-1.2.0}/docs/Makefile +0 -0
  78. {pyeql-1.1.6 → pyeql-1.2.0}/docs/_static/.gitignore +0 -0
  79. {pyeql-1.1.6 → pyeql-1.2.0}/docs/amounts.md +0 -0
  80. {pyeql-1.1.6 → pyeql-1.2.0}/docs/arithmetic.md +0 -0
  81. {pyeql-1.1.6 → pyeql-1.2.0}/docs/authors.md +0 -0
  82. {pyeql-1.1.6 → pyeql-1.2.0}/docs/chemistry.md +0 -0
  83. {pyeql-1.1.6 → pyeql-1.2.0}/docs/class_solution.md +0 -0
  84. {pyeql-1.1.6 → pyeql-1.2.0}/docs/conf.py +0 -0
  85. {pyeql-1.1.6 → pyeql-1.2.0}/docs/contributing.md +0 -0
  86. {pyeql-1.1.6 → pyeql-1.2.0}/docs/database.md +0 -0
  87. {pyeql-1.1.6 → pyeql-1.2.0}/docs/engines.md +0 -0
  88. {pyeql-1.1.6 → pyeql-1.2.0}/docs/examples/.ipynb_checkpoints/pyEQL_demo_1-checkpoint.ipynb +0 -0
  89. {pyeql-1.1.6 → pyeql-1.2.0}/docs/examples/.ipynb_checkpoints/pyeql_demo-checkpoint.ipynb +0 -0
  90. {pyeql-1.1.6 → pyeql-1.2.0}/docs/examples/.ipynb_checkpoints/pyeql_tutorial_database-checkpoint.ipynb +0 -0
  91. {pyeql-1.1.6 → pyeql-1.2.0}/docs/examples/.ipynb_checkpoints/pyeql_tutorial_osmotic_pressure-checkpoint.ipynb +0 -0
  92. {pyeql-1.1.6 → pyeql-1.2.0}/docs/examples/.ipynb_checkpoints/speedup-checkpoint.ipynb +0 -0
  93. {pyeql-1.1.6 → pyeql-1.2.0}/docs/examples/pyEQL_demo_1.ipynb +0 -0
  94. {pyeql-1.1.6 → pyeql-1.2.0}/docs/examples/pyeql_demo.ipynb +0 -0
  95. {pyeql-1.1.6 → pyeql-1.2.0}/docs/examples/pyeql_tutorial_database.ipynb +0 -0
  96. {pyeql-1.1.6 → pyeql-1.2.0}/docs/examples/pyeql_tutorial_osmotic_pressure.ipynb +0 -0
  97. {pyeql-1.1.6 → pyeql-1.2.0}/docs/examples/speedup.ipynb +0 -0
  98. {pyeql-1.1.6 → pyeql-1.2.0}/docs/index.md +0 -0
  99. {pyeql-1.1.6 → pyeql-1.2.0}/docs/installation.md +0 -0
  100. {pyeql-1.1.6 → pyeql-1.2.0}/docs/internal.md +0 -0
  101. {pyeql-1.1.6 → pyeql-1.2.0}/docs/license.md +0 -0
  102. {pyeql-1.1.6 → pyeql-1.2.0}/docs/mixing.md +0 -0
  103. {pyeql-1.1.6 → pyeql-1.2.0}/docs/quickstart.md +0 -0
  104. {pyeql-1.1.6 → pyeql-1.2.0}/docs/serialization.md +0 -0
  105. {pyeql-1.1.6 → pyeql-1.2.0}/docs/tutorials.md +0 -0
  106. {pyeql-1.1.6 → pyeql-1.2.0}/docs/units.md +0 -0
  107. {pyeql-1.1.6 → pyeql-1.2.0}/pyeql-logo.png +0 -0
  108. {pyeql-1.1.6 → pyeql-1.2.0}/pyeql-logo.svg +0 -0
  109. {pyeql-1.1.6 → pyeql-1.2.0}/setup.cfg +0 -0
  110. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/__init__.py +0 -0
  111. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/activity_correction.py +0 -0
  112. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/database/geothermal.dat +0 -0
  113. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/database/llnl.dat +0 -0
  114. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/database/phreeqc_license.txt +0 -0
  115. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/engines.py +0 -0
  116. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/equilibrium.py +0 -0
  117. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/salt_ion_match.py +0 -0
  118. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/solute.py +0 -0
  119. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL/solution.py +0 -0
  120. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL.egg-info/SOURCES.txt +0 -0
  121. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL.egg-info/dependency_links.txt +0 -0
  122. {pyeql-1.1.6 → pyeql-1.2.0}/src/pyEQL.egg-info/top_level.txt +0 -0
  123. {pyeql-1.1.6 → pyeql-1.2.0}/tests/conftest.py +0 -0
  124. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_logging.py +0 -0
  125. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_osmotic_coeff.py +0 -0
  126. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_solute_properties.py +0 -0
  127. {pyeql-1.1.6 → pyeql-1.2.0}/tests/test_utils.py +0 -0
  128. {pyeql-1.1.6 → pyeql-1.2.0}/tox.ini +0 -0
@@ -34,7 +34,6 @@ 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 }
@@ -43,10 +42,6 @@ jobs:
43
42
  - macos-latest
44
43
  - windows-latest
45
44
  - macos-14
46
- exclude:
47
- - {version: {
48
- python: "3.9" },
49
- os: macos-14 }
50
45
  runs-on: ${{ matrix.os }}
51
46
  steps:
52
47
  - uses: actions/checkout@v4
@@ -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.10.1
@@ -23,7 +23,7 @@ jobs:
23
23
  - name: Set up Python
24
24
  uses: actions/setup-python@v5
25
25
  with:
26
- python-version: 3.11
26
+ python-version: "3.11"
27
27
  cache: pip
28
28
  - name: Run pre-commit
29
29
  run: |
@@ -36,7 +36,7 @@ jobs:
36
36
  max-parallel: 6
37
37
  matrix:
38
38
  # 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"]
39
+ python-version: ["3.10", "3.12"]
40
40
  os:
41
41
  - ubuntu-latest
42
42
  - macos-latest
@@ -47,10 +47,6 @@ jobs:
47
47
  python-version: "3.10"
48
48
  - os: ubuntu-latest
49
49
  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"
54
50
  runs-on: ${{ matrix.os }}
55
51
  steps:
56
52
  - uses: actions/checkout@v4
@@ -77,7 +73,7 @@ jobs:
77
73
  - name: Setup Python
78
74
  uses: actions/setup-python@v5
79
75
  with:
80
- python-version: 3.9
76
+ python-version: "3.10"
81
77
  - name: Install tox
82
78
  run: |
83
79
  python -m pip install tox
@@ -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: |
@@ -12,13 +12,13 @@ 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.6.7
16
16
  hooks:
17
17
  - id: ruff
18
18
  args: [--fix, --ignore, "D,E501", "--show-fixes"]
19
19
 
20
20
  - repo: https://github.com/psf/black-pre-commit-mirror
21
- rev: 24.4.2
21
+ rev: 24.8.0
22
22
  hooks:
23
23
  - id: black
24
24
 
@@ -41,8 +41,8 @@ repos:
41
41
  exclude_types: [svg]
42
42
  - id: trailing-whitespace
43
43
  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
44
+ - id: pretty-format-json
45
+ indent: 4
46
+ exclude_types: [jupyter]
47
+ - id: check-yaml
48
+ - id: check-toml
@@ -5,6 +5,23 @@ 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.2.0] - 2024-09-24
9
+
10
+ ### Fixed
11
+
12
+ - Database: removed several erroneous species (such as `CO32-` which was really `CO3[-2]`),
13
+ corrected other parsing errors, and updated formula syntax for consistency with recent
14
+ `standardize_formula` changes (e.g., `H4NCl -> NH4Cl`) (#190, @rkingsbury)
15
+
16
+ ### Changed
17
+
18
+ - Bump `pymatgen` to `v2024.9.10` for additional upstream formula fixes. (#188, @abhardwaj73)
19
+
20
+ ### Removed
21
+
22
+ - **BREAKING** - dropped python 3.9 support, in accordance with numpy deprecation policy.
23
+ (#188, @abhardwaj73)
24
+
8
25
  ## [1.1.6] - 2024-09-01
9
26
 
10
27
  ### 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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyEQL
3
- Version: 1.1.6
3
+ Version: 1.2.0
4
4
  Summary: A python interface for solution chemistry
5
5
  Author-email: Ryan Kingsbury <kingsbury@princeton.edu>
6
6
  Project-URL: Docs, https://pyeql.readthedocs.io/
@@ -15,7 +15,7 @@ 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
21
  License-File: COPYING
@@ -23,7 +23,7 @@ License-File: AUTHORS.md
23
23
  Requires-Dist: pint>=0.19
24
24
  Requires-Dist: numpy<2,>1.26
25
25
  Requires-Dist: scipy>=1.12
26
- Requires-Dist: pymatgen==2024.5.1
26
+ Requires-Dist: pymatgen>=2024.9.10
27
27
  Requires-Dist: iapws>=1.5.3
28
28
  Requires-Dist: monty>=2024.7.12
29
29
  Requires-Dist: maggma>=0.67.0
@@ -48,7 +48,7 @@ Requires-Dist: rich; extra == "full"
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
@@ -5,6 +5,23 @@ 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.2.0] - 2024-09-24
9
+
10
+ ### Fixed
11
+
12
+ - Database: removed several erroneous species (such as `CO32-` which was really `CO3[-2]`),
13
+ corrected other parsing errors, and updated formula syntax for consistency with recent
14
+ `standardize_formula` changes (e.g., `H4NCl -> NH4Cl`) (#190, @rkingsbury)
15
+
16
+ ### Changed
17
+
18
+ - Bump `pymatgen` to `v2024.9.10` for additional upstream formula fixes. (#188, @abhardwaj73)
19
+
20
+ ### Removed
21
+
22
+ - **BREAKING** - dropped python 3.9 support, in accordance with numpy deprecation policy.
23
+ (#188, @abhardwaj73)
24
+
8
25
  ## [1.1.6] - 2024-09-01
9
26
 
10
27
  ### Fixed
@@ -2,7 +2,6 @@
2
2
 
3
3
  The `Solution` class defines a pythonic interface for **creating**, **modifying**, and **estimating properties** of electrolyte solutions. It is the core feature of `pyEQL` and the primary user-facing class. There are several ways to create a `Solution`.
4
4
 
5
-
6
5
  ## Empty solution
7
6
 
8
7
  With no input arguments, you get an empty `Solution` at pH 7 and 1 atm pressure.
@@ -29,7 +28,6 @@ passed as a `dict` with amounts given **as strings** that include units (see [un
29
28
 
30
29
  You can also specify conditions such as temperature, pressure, pH, and pE (redox potential).
31
30
 
32
-
33
31
  Finally, you can manually create a solution with any list of solutes, temperature, pressure, etc. that you need:
34
32
 
35
33
  ```python
@@ -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
@@ -4,7 +4,7 @@
4
4
  pint>=0.19
5
5
  numpy
6
6
  scipy
7
- pymatgen>=2023.10.11
7
+ pymatgen>=2024.9.10
8
8
  iapws
9
9
  monty
10
10
  maggma
@@ -18,12 +18,12 @@ classifiers=[
18
18
  "Topic :: Scientific/Engineering",
19
19
  ]
20
20
  license = {file = "LICENSE"}
21
- requires-python = ">=3.9"
21
+ requires-python = ">=3.10"
22
22
  dependencies = [
23
23
  "pint>=0.19",
24
24
  "numpy>1.26,<2",
25
25
  "scipy>=1.12",
26
- "pymatgen==2024.5.1",
26
+ "pymatgen>=2024.9.10",
27
27
  "iapws>=1.5.3",
28
28
  "monty>=2024.7.12",
29
29
  "maggma>=0.67.0",
@@ -33,7 +33,7 @@ charset-normalizer==3.3.2
33
33
  # via requests
34
34
  contourpy==1.2.1
35
35
  # via matplotlib
36
- cryptography==43.0.0
36
+ cryptography==43.0.1
37
37
  # via paramiko
38
38
  cycler==0.12.1
39
39
  # via matplotlib
@@ -45,7 +45,7 @@ contourpy==1.2.1
45
45
  # via matplotlib
46
46
  coverage[toml]==7.6.1
47
47
  # via pytest-cov
48
- cryptography==43.0.0
48
+ cryptography==43.0.1
49
49
  # via paramiko
50
50
  cycler==0.12.1
51
51
  # via matplotlib
@@ -33,7 +33,7 @@ charset-normalizer==3.3.2
33
33
  # via requests
34
34
  contourpy==1.2.1
35
35
  # via matplotlib
36
- cryptography==43.0.0
36
+ cryptography==43.0.1
37
37
  # via paramiko
38
38
  cycler==0.12.1
39
39
  # via matplotlib
@@ -45,7 +45,7 @@ contourpy==1.2.1
45
45
  # via matplotlib
46
46
  coverage[toml]==7.6.1
47
47
  # via pytest-cov
48
- cryptography==43.0.0
48
+ cryptography==43.0.1
49
49
  # via paramiko
50
50
  cycler==0.12.1
51
51
  # via matplotlib
@@ -33,7 +33,7 @@ charset-normalizer==3.3.2
33
33
  # via requests
34
34
  contourpy==1.2.1
35
35
  # via matplotlib
36
- cryptography==43.0.0
36
+ cryptography==43.0.1
37
37
  # via paramiko
38
38
  cycler==0.12.1
39
39
  # via matplotlib
@@ -45,7 +45,7 @@ contourpy==1.2.1
45
45
  # via matplotlib
46
46
  coverage[toml]==7.6.1
47
47
  # via pytest-cov
48
- cryptography==43.0.0
48
+ cryptography==43.0.1
49
49
  # via paramiko
50
50
  cycler==0.12.1
51
51
  # via matplotlib
@@ -33,7 +33,7 @@ charset-normalizer==3.3.2
33
33
  # via requests
34
34
  contourpy==1.2.1
35
35
  # via matplotlib
36
- cryptography==43.0.0
36
+ cryptography==43.0.1
37
37
  # via paramiko
38
38
  cycler==0.12.1
39
39
  # via matplotlib
@@ -45,7 +45,7 @@ contourpy==1.2.1
45
45
  # via matplotlib
46
46
  coverage[toml]==7.6.1
47
47
  # via pytest-cov
48
- cryptography==43.0.0
48
+ cryptography==43.0.1
49
49
  # via paramiko
50
50
  cycler==0.12.1
51
51
  # via matplotlib
@@ -33,7 +33,7 @@ charset-normalizer==3.3.2
33
33
  # via requests
34
34
  contourpy==1.2.1
35
35
  # via matplotlib
36
- cryptography==43.0.0
36
+ cryptography==43.0.1
37
37
  # via paramiko
38
38
  cycler==0.12.1
39
39
  # via matplotlib
@@ -45,7 +45,7 @@ contourpy==1.2.1
45
45
  # via matplotlib
46
46
  coverage[toml]==7.6.1
47
47
  # via pytest-cov
48
- cryptography==43.0.0
48
+ cryptography==43.0.1
49
49
  # via paramiko
50
50
  cycler==0.12.1
51
51
  # via matplotlib
@@ -33,7 +33,7 @@ charset-normalizer==3.3.2
33
33
  # via requests
34
34
  contourpy==1.2.1
35
35
  # via matplotlib
36
- cryptography==43.0.0
36
+ cryptography==43.0.1
37
37
  # via paramiko
38
38
  cycler==0.12.1
39
39
  # via matplotlib
@@ -45,7 +45,7 @@ contourpy==1.2.1
45
45
  # via matplotlib
46
46
  coverage[toml]==7.6.1
47
47
  # via pytest-cov
48
- cryptography==43.0.0
48
+ cryptography==43.0.1
49
49
  # via paramiko
50
50
  cycler==0.12.1
51
51
  # via matplotlib
@@ -33,7 +33,7 @@ charset-normalizer==3.3.2
33
33
  # via requests
34
34
  contourpy==1.2.1
35
35
  # via matplotlib
36
- cryptography==43.0.0
36
+ cryptography==43.0.1
37
37
  # via paramiko
38
38
  cycler==0.12.1
39
39
  # via matplotlib
@@ -45,7 +45,7 @@ contourpy==1.2.1
45
45
  # via matplotlib
46
46
  coverage[toml]==7.6.1
47
47
  # via pytest-cov
48
- cryptography==43.0.0
48
+ cryptography==43.0.1
49
49
  # via paramiko
50
50
  cycler==0.12.1
51
51
  # via matplotlib
@@ -33,7 +33,7 @@ charset-normalizer==3.3.2
33
33
  # via requests
34
34
  contourpy==1.2.1
35
35
  # via matplotlib
36
- cryptography==43.0.0
36
+ cryptography==43.0.1
37
37
  # via paramiko
38
38
  cycler==0.12.1
39
39
  # via matplotlib
@@ -45,7 +45,7 @@ contourpy==1.2.1
45
45
  # via matplotlib
46
46
  coverage[toml]==7.6.1
47
47
  # via pytest-cov
48
- cryptography==43.0.0
48
+ cryptography==43.0.1
49
49
  # via paramiko
50
50
  cycler==0.12.1
51
51
  # via matplotlib
@@ -35,7 +35,7 @@ colorama==0.4.6
35
35
  # via tqdm
36
36
  contourpy==1.2.1
37
37
  # via matplotlib
38
- cryptography==43.0.0
38
+ cryptography==43.0.1
39
39
  # via paramiko
40
40
  cycler==0.12.1
41
41
  # via matplotlib
@@ -52,7 +52,7 @@ contourpy==1.2.1
52
52
  # via matplotlib
53
53
  coverage[toml]==7.6.1
54
54
  # via pytest-cov
55
- cryptography==43.0.0
55
+ cryptography==43.0.1
56
56
  # via paramiko
57
57
  cycler==0.12.1
58
58
  # via matplotlib
@@ -35,7 +35,7 @@ colorama==0.4.6
35
35
  # via tqdm
36
36
  contourpy==1.2.1
37
37
  # via matplotlib
38
- cryptography==43.0.0
38
+ cryptography==43.0.1
39
39
  # via paramiko
40
40
  cycler==0.12.1
41
41
  # via matplotlib
@@ -52,7 +52,7 @@ contourpy==1.2.1
52
52
  # via matplotlib
53
53
  coverage[toml]==7.6.1
54
54
  # via pytest-cov
55
- cryptography==43.0.0
55
+ cryptography==43.0.1
56
56
  # via paramiko
57
57
  cycler==0.12.1
58
58
  # via matplotlib
@@ -35,7 +35,7 @@ colorama==0.4.6
35
35
  # via tqdm
36
36
  contourpy==1.2.1
37
37
  # via matplotlib
38
- cryptography==43.0.0
38
+ cryptography==43.0.1
39
39
  # via paramiko
40
40
  cycler==0.12.1
41
41
  # via matplotlib
@@ -52,7 +52,7 @@ contourpy==1.2.1
52
52
  # via matplotlib
53
53
  coverage[toml]==7.6.1
54
54
  # via pytest-cov
55
- cryptography==43.0.0
55
+ cryptography==43.0.1
56
56
  # via paramiko
57
57
  cycler==0.12.1
58
58
  # via matplotlib
@@ -35,7 +35,7 @@ colorama==0.4.6
35
35
  # via tqdm
36
36
  contourpy==1.2.1
37
37
  # via matplotlib
38
- cryptography==43.0.0
38
+ cryptography==43.0.1
39
39
  # via paramiko
40
40
  cycler==0.12.1
41
41
  # via matplotlib
@@ -52,7 +52,7 @@ contourpy==1.2.1
52
52
  # via matplotlib
53
53
  coverage[toml]==7.6.1
54
54
  # via pytest-cov
55
- cryptography==43.0.0
55
+ cryptography==43.0.1
56
56
  # via paramiko
57
57
  cycler==0.12.1
58
58
  # via matplotlib
@@ -6,6 +6,7 @@ This file was generated with PyScaffold 4.5.
6
6
  PyScaffold helps you to put up the scaffold of your new Python project.
7
7
  Learn more under: https://pyscaffold.org/
8
8
  """
9
+
9
10
  from setuptools import setup
10
11
 
11
12
  if __name__ == "__main__":