pyEQL 1.3.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.
Files changed (128) hide show
  1. {pyeql-1.3.0 → pyeql-1.3.1}/CHANGELOG.md +8 -0
  2. {pyeql-1.3.0/src/pyEQL.egg-info → pyeql-1.3.1}/PKG-INFO +1 -1
  3. {pyeql-1.3.0 → pyeql-1.3.1}/docs/changelog.md +8 -0
  4. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/solution.py +5 -1
  5. {pyeql-1.3.0 → pyeql-1.3.1/src/pyEQL.egg-info}/PKG-INFO +1 -1
  6. {pyeql-1.3.0 → pyeql-1.3.1}/tests/conftest.py +2 -2
  7. {pyeql-1.3.0 → pyeql-1.3.1}/.coveragerc +0 -0
  8. {pyeql-1.3.0 → pyeql-1.3.1}/.gitattributes +0 -0
  9. {pyeql-1.3.0 → pyeql-1.3.1}/.github/dependabot.yml +0 -0
  10. {pyeql-1.3.0 → pyeql-1.3.1}/.github/pull_request_template.md +0 -0
  11. {pyeql-1.3.0 → pyeql-1.3.1}/.github/release.yml +0 -0
  12. {pyeql-1.3.0 → pyeql-1.3.1}/.github/workflows/post-process.yml +0 -0
  13. {pyeql-1.3.0 → pyeql-1.3.1}/.github/workflows/release.yml +0 -0
  14. {pyeql-1.3.0 → pyeql-1.3.1}/.github/workflows/testing.yaml +0 -0
  15. {pyeql-1.3.0 → pyeql-1.3.1}/.github/workflows/upgrade_dependencies.yml +0 -0
  16. {pyeql-1.3.0 → pyeql-1.3.1}/.gitignore +0 -0
  17. {pyeql-1.3.0 → pyeql-1.3.1}/.pre-commit-config.yaml +0 -0
  18. {pyeql-1.3.0 → pyeql-1.3.1}/.readthedocs.yml +0 -0
  19. {pyeql-1.3.0 → pyeql-1.3.1}/.zenodo.json +0 -0
  20. {pyeql-1.3.0 → pyeql-1.3.1}/AUTHORS.md +0 -0
  21. {pyeql-1.3.0 → pyeql-1.3.1}/CITATION.cff +0 -0
  22. {pyeql-1.3.0 → pyeql-1.3.1}/COPYING +0 -0
  23. {pyeql-1.3.0 → pyeql-1.3.1}/LICENSE.txt +0 -0
  24. {pyeql-1.3.0 → pyeql-1.3.1}/MANIFEST.in +0 -0
  25. {pyeql-1.3.0 → pyeql-1.3.1}/README.md +0 -0
  26. {pyeql-1.3.0 → pyeql-1.3.1}/docs/Makefile +0 -0
  27. {pyeql-1.3.0 → pyeql-1.3.1}/docs/_static/.gitignore +0 -0
  28. {pyeql-1.3.0 → pyeql-1.3.1}/docs/amounts.md +0 -0
  29. {pyeql-1.3.0 → pyeql-1.3.1}/docs/arithmetic.md +0 -0
  30. {pyeql-1.3.0 → pyeql-1.3.1}/docs/authors.md +0 -0
  31. {pyeql-1.3.0 → pyeql-1.3.1}/docs/chemistry.md +0 -0
  32. {pyeql-1.3.0 → pyeql-1.3.1}/docs/class_solution.md +0 -0
  33. {pyeql-1.3.0 → pyeql-1.3.1}/docs/conf.py +0 -0
  34. {pyeql-1.3.0 → pyeql-1.3.1}/docs/contributing.md +0 -0
  35. {pyeql-1.3.0 → pyeql-1.3.1}/docs/creating.md +0 -0
  36. {pyeql-1.3.0 → pyeql-1.3.1}/docs/database.md +0 -0
  37. {pyeql-1.3.0 → pyeql-1.3.1}/docs/engines.md +0 -0
  38. {pyeql-1.3.0 → pyeql-1.3.1}/docs/examples/.ipynb_checkpoints/pyEQL_demo_1-checkpoint.ipynb +0 -0
  39. {pyeql-1.3.0 → pyeql-1.3.1}/docs/examples/.ipynb_checkpoints/pyeql_demo-checkpoint.ipynb +0 -0
  40. {pyeql-1.3.0 → pyeql-1.3.1}/docs/examples/.ipynb_checkpoints/pyeql_tutorial_database-checkpoint.ipynb +0 -0
  41. {pyeql-1.3.0 → pyeql-1.3.1}/docs/examples/.ipynb_checkpoints/pyeql_tutorial_osmotic_pressure-checkpoint.ipynb +0 -0
  42. {pyeql-1.3.0 → pyeql-1.3.1}/docs/examples/.ipynb_checkpoints/speedup-checkpoint.ipynb +0 -0
  43. {pyeql-1.3.0 → pyeql-1.3.1}/docs/examples/pyeql_demo.ipynb +0 -0
  44. {pyeql-1.3.0 → pyeql-1.3.1}/docs/examples/pyeql_tutorial_activity.ipynb +0 -0
  45. {pyeql-1.3.0 → pyeql-1.3.1}/docs/examples/pyeql_tutorial_carbonate.ipynb +0 -0
  46. {pyeql-1.3.0 → pyeql-1.3.1}/docs/examples/pyeql_tutorial_database.ipynb +0 -0
  47. {pyeql-1.3.0 → pyeql-1.3.1}/docs/examples/pyeql_tutorial_osmotic_pressure.ipynb +0 -0
  48. {pyeql-1.3.0 → pyeql-1.3.1}/docs/index.md +0 -0
  49. {pyeql-1.3.0 → pyeql-1.3.1}/docs/installation.md +0 -0
  50. {pyeql-1.3.0 → pyeql-1.3.1}/docs/internal.md +0 -0
  51. {pyeql-1.3.0 → pyeql-1.3.1}/docs/license.md +0 -0
  52. {pyeql-1.3.0 → pyeql-1.3.1}/docs/mixing.md +0 -0
  53. {pyeql-1.3.0 → pyeql-1.3.1}/docs/quickstart.md +0 -0
  54. {pyeql-1.3.0 → pyeql-1.3.1}/docs/requirements.txt +0 -0
  55. {pyeql-1.3.0 → pyeql-1.3.1}/docs/serialization.md +0 -0
  56. {pyeql-1.3.0 → pyeql-1.3.1}/docs/tutorials.md +0 -0
  57. {pyeql-1.3.0 → pyeql-1.3.1}/docs/units.md +0 -0
  58. {pyeql-1.3.0 → pyeql-1.3.1}/pyeql-logo.png +0 -0
  59. {pyeql-1.3.0 → pyeql-1.3.1}/pyeql-logo.svg +0 -0
  60. {pyeql-1.3.0 → pyeql-1.3.1}/pyproject.toml +0 -0
  61. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/macos-latest_py3.10.txt +0 -0
  62. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/macos-latest_py3.10_extras.txt +0 -0
  63. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/macos-latest_py3.11.txt +0 -0
  64. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/macos-latest_py3.11_extras.txt +0 -0
  65. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/macos-latest_py3.12.txt +0 -0
  66. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/macos-latest_py3.12_extras.txt +0 -0
  67. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/macos-latest_py3.9.txt +0 -0
  68. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/macos-latest_py3.9_extras.txt +0 -0
  69. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.10.txt +0 -0
  70. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.10_extras.txt +0 -0
  71. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.11.txt +0 -0
  72. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.11_extras.txt +0 -0
  73. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.12.txt +0 -0
  74. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.12_extras.txt +0 -0
  75. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.9.txt +0 -0
  76. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/ubuntu-latest_py3.9_extras.txt +0 -0
  77. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/windows-latest_py3.10.txt +0 -0
  78. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/windows-latest_py3.10_extras.txt +0 -0
  79. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/windows-latest_py3.11.txt +0 -0
  80. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/windows-latest_py3.11_extras.txt +0 -0
  81. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/windows-latest_py3.12.txt +0 -0
  82. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/windows-latest_py3.12_extras.txt +0 -0
  83. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/windows-latest_py3.9.txt +0 -0
  84. {pyeql-1.3.0 → pyeql-1.3.1}/requirements/windows-latest_py3.9_extras.txt +0 -0
  85. {pyeql-1.3.0 → pyeql-1.3.1}/setup.cfg +0 -0
  86. {pyeql-1.3.0 → pyeql-1.3.1}/setup.py +0 -0
  87. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/__init__.py +0 -0
  88. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/activity_correction.py +0 -0
  89. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/database/geothermal.dat +0 -0
  90. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/database/llnl.dat +0 -0
  91. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/database/phreeqc_license.txt +0 -0
  92. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/database/pyeql_db.json +0 -0
  93. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/engines.py +0 -0
  94. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/equilibrium.py +0 -0
  95. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/functions.py +0 -0
  96. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/presets/Ringers lactate.yaml +0 -0
  97. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/presets/normal saline.yaml +0 -0
  98. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/presets/rainwater.yaml +0 -0
  99. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/presets/seawater.yaml +0 -0
  100. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/presets/urine.yaml +0 -0
  101. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/presets/wastewater.yaml +0 -0
  102. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/py.typed +0 -0
  103. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/salt_ion_match.py +0 -0
  104. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/solute.py +0 -0
  105. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL/utils.py +0 -0
  106. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL.egg-info/SOURCES.txt +0 -0
  107. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL.egg-info/dependency_links.txt +0 -0
  108. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL.egg-info/requires.txt +0 -0
  109. {pyeql-1.3.0 → pyeql-1.3.1}/src/pyEQL.egg-info/top_level.txt +0 -0
  110. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_activity.py +0 -0
  111. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_bulk_properties.py +0 -0
  112. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_debye_length.py +0 -0
  113. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_density.py +0 -0
  114. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_dielectric.py +0 -0
  115. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_effective_pitzer.py +0 -0
  116. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_equilibrium.py +0 -0
  117. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_functions.py +0 -0
  118. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_logging.py +0 -0
  119. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_mixed_electrolyte_activity.py +0 -0
  120. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_osmotic_coeff.py +0 -0
  121. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_phreeqc.py +0 -0
  122. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_salt_matching.py +0 -0
  123. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_solute.py +0 -0
  124. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_solute_properties.py +0 -0
  125. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_solution.py +0 -0
  126. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_utils.py +0 -0
  127. {pyeql-1.3.0 → pyeql-1.3.1}/tests/test_volume_concentration.py +0 -0
  128. {pyeql-1.3.0 → pyeql-1.3.1}/tox.ini +0 -0
@@ -5,6 +5,14 @@ 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
+
8
16
  ## [1.3.0] - 2025-08-08
9
17
 
10
18
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyEQL
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: A python interface for solution chemistry
5
5
  Author-email: Ryan Kingsbury <kingsbury@princeton.edu>
6
6
  License-Expression: LGPL-3.0-or-later
@@ -5,6 +5,14 @@ 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
+
8
16
  ## [1.3.0] - 2025-08-08
9
17
 
10
18
  ### Fixed
@@ -1571,7 +1571,11 @@ class Solution(MSONable):
1571
1571
  # # use only the predominant species for each element
1572
1572
  components = {}
1573
1573
  for el, lst in self.get_components_by_element().items():
1574
- components[lst[0]] = self.get_total_amount(el, "mol").magnitude
1574
+ component = lst[0]
1575
+ ion = Ion.from_formula(component)
1576
+ el_no_oxi_state = el.split("(")[0]
1577
+ nu_el = ion.get_el_amt_dict()[el_no_oxi_state]
1578
+ components[component] = self.get_total_amount(el, "mol").magnitude / nu_el
1575
1579
  # add H+ and OH-, which would otherwise be excluded
1576
1580
  for k in ["H[+1]", "OH[-1]"]:
1577
1581
  if self.components.get(k):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyEQL
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: A python interface for solution chemistry
5
5
  Author-email: Ryan Kingsbury <kingsbury@princeton.edu>
6
6
  License-Expression: LGPL-3.0-or-later
@@ -7,8 +7,8 @@ import pyEQL
7
7
  from pyEQL.engines import EOS
8
8
  from pyEQL.salt_ion_match import Salt
9
9
 
10
- _CATIONS = ["Na[+1]", "Ca[+2]", "Fe[+3]", "K[+1]", "Li[+1]", "Cu[+2]", "Ba[+2]"]
11
- _ANIONS = ["Cl[-1]", "SO4[-2]", "PO4[-3]", "ClO[-1]", "NO3[-1]", "CO3[-2]", "MnO4[-2]"]
10
+ _CATIONS = ["Na[+1]", "Ca[+2]", "Fe[+3]", "K[+1]", "Li[+1]", "Cu[+2]", "Ba[+2]", "NH4[+1]"]
11
+ _ANIONS = ["Fe(CN)6[-3]", "Cl[-1]", "SO4[-2]", "PO4[-3]", "ClO[-1]", "NO3[-1]", "CO3[-2]", "MnO4[-2]"]
12
12
  _SALTS = list(product(_CATIONS[:3], _ANIONS[:3]))
13
13
  _ACIDS = [("H[+1]", anion) for anion in _ANIONS[:3]]
14
14
  _BASES = [(cation, "OH[-1]") for cation in _CATIONS[:3]]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes