Skip to content
Free planNo credit card requiredStart writing

Search 250 million research papers

Read the abstract, see who wrote it and who cites it, and get the citation in APA, MLA, Chicago or Harvard.

About 10,000 papers for “Python library”

Supplementary files for the dingo Python library

Apostolos Chalkis, Vissarion Fisikopoulos, Elias Tsigaridas et al. · Zenodo (CERN European Organization for Nuclear Research) · 2022

Under the <em>simpl_transf_polytopes.zip</em> the polytopes retrieved after the simplify() and transform() functions of the PolyRound library can be found. These polytopes where used as input for the dingo implementation of the MMCS algorithm. Similarly, under the <em>simpl_transf_rounded_polytopes.zip </em>the polytopes retrieved after both the simplify() and transform() but also the round() functions of the PolyRound library can be found. These polytopes were used as input for the hopsy library that was compared with dingo, asking for the PSRF returned by dingo. Under the <em>dingo_samples</em> the resulted samples from <em>dingo</em> can be found. Under the <em>hopsy_samples_dingo_psrf</em> folder the resulted samples from <em>hopsy </em>library, using the PSRF the <em>dingo </em>returned for each model and a thinning of 8d^2, can be found. Finally, the <em>hopsy_steady_states_dingo_psrf </em>folder contains their mapped points in the initial polytope. A file called <em>mode_psrf.csv </em>points out the PSRF used for each model.

Cited by 0Open access

Supplementary files for the dingo Python library

Apostolos Chalkis, Vissarion Fisikopoulos, Elias Tsigaridas et al. · Zenodo (CERN European Organization for Nuclear Research) · 2022

To compare the Multiphase Monte Carlo flux Sampling (MMCS) feature of the dingo library with the fastest approach for sampling on metabolic networks, a set of 7 models with a ranging dimension was used (<em>ext_data</em>). Under the <em>simpl_transf_polytopes</em> the polytopes retrieved after the simplify() and transform() functions of the PolyRound library can be found. These polytopes where used as input for the dingo implementation of the MMCS algorithm asking for an ESS of 1,000. Under the <em>dingo_samples_on_simpl_transf_polytopes</em> the resulted samples from <em>dingo</em> can be found. Similarly, under the <em>polyrounded_polytopes </em>the polytopes retrieved after both the simplify() and transform() but also the round() functions of the PolyRound library can be found. These polytopes were used as input for the hopsy library that was compared with dingo, again, asking for an ESS of 1,000. Under the <em>hopsy_samples</em> folder the resulted samples from hopsy<em> </em>library, using a thinning of 100<em>d </em>;<em> </em>only in case of Recon3D a thinning of 200<em>d </em>was used as suggested from the authors.<br>

Cited by 0Open access

pyEQL: A python library for water chemistry

Kingsbury, Ryan · Zenodo (CERN European Organization for Nuclear Research) · 2026

Major Changes New Electrolyte Engine - phreeqc2026 This release features a new interface to IPHREEQC developed by @vineetbansal of Princeton University's Research Software Engineering group. This new interface "talks" directly to the USGS-provided IPHREEQC libraries, providing a much more robust way of accessing PHREEQC functionality via pyEQL as compared to the legacy engine based on phreeqpython. This new engine can be specified by passing engine='phreeqc2026 to Solution.__init__. Thanks to pyEQL's modular API, no other changes to your script are needed - it is a "drop-in" replacement for the legacy phreeqc engine. The legacy phreeqc engine is still present and is still used for speciation by the default native engine. However, the native engine will adopt phreeqc2026 for speciation calculations in the next release. You may see a warning about this when you call equilibrate(). Solid-liquid and gas-liquid equilibrium The equilibrate() method now supports equilibrating a Solution with gas and/or solid phases, thanks to work by @vineetbansal , @SuixiongTay , and @YitongPan1 . In addition to user-specified phases, a convenience argument atmosphere has been added if you simply want to consider the effects of, e.g., atmospheric carbonate on your system: >>> from pyEQL import Solution >>> s1 = Solution({}, pH=7.0, volume="1 L", engine="phreeqc2026") >>> s1.equilibrate(atmosphere=True) >>> s1.components {'H2O(aq)': 55.34457593619076, 'O2(aq)': 0.0002675300582572652, 'CO2(aq)': 1.424944456303147e-05, 'H[+1]': 2.51988623743169e-06, 'HCO3[-1]': 2.5169971787125935e-06, 'OH[-1]': 4.007874338794804e-09, 'CO3[-2]': 4.7053998717451746e-11, ...} The new equilibrate capabilities work across all engines - native, phreeqc, and phreeqc2026 Performance Loading times for Solution that contain a large number of solutes have been significantly improved (by a factor of ~10x in some cases) thanks to a caching optimization identified by @vineetbansal . See additional details in the CHANGELOG. <!-- Release notes generated using configuration in .github/release.yml at main --> Detailed Changes 🐛 Bug Fixes Fix behavior of PHREEQC equilibrate when composition contains pure elements by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/282 Fix incorrect reduction of dimers/polymers in standardize_formula by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/309 phreeqc2026 engine: ensure unit osmotic coefficient; refactor tests by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/333 from_file: address subtle volume bug by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/347 Use to_file to generate yaml by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/350 Remove N2 from ATMOSPHERE by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/339 equilibrate: exclude H and O from missing element check by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/355 🛠 Enhancements added a nested parameter to 2 methods in the Solution class by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/284 enable solid-liquid and gas-liquid equilibrium calculations in equilibrate() by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/292 Speciation calculations in new wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/306 Fix the postprocess workflow; refactor PHREEQC2026 wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/318 Watching for Phreeqc invocation errors by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/319 Solution.from_preset: Add representative industrial wastewaters by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/317 PhreeqcEOS inherits from Phreeqc2026EOS by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/351 equilibrate: modify total conc check for missing elements by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/352 engines.py: NativeEOS inherits from PhreeqcEOS; eliminate redundant code by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/353 📖 Documentation migrate docs theme to sphinx-immaterial by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/272 Update Solution.equilibrate()'s docstring with NativeEOS.equilibrate() docstring by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/344 Phreeqc2026 docs by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/349 🧹 House-Keeping Vb/noblack by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/285 🏥 Package Health CI run with pinned deps common to all py/platforms by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/314 Release Workflow for CI by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/320 🤷‍♂️ Other Changes Add pqi_pqo_files to tests by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/289 'PHREEQC' pytest by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/294 Phreeqc wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/291 Bump actions/checkout from 5 to 6 in the actions group by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/293 Bump urllib3 from 2.5.0 to 2.6.0 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/298 Bump urllib3 from 2.6.0 to 2.6.3 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/308 Bump pynacl from 1.5.0 to 1.6.2 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/307 Bump filelock from 3.16.0 to 3.20.1 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/305 Bump fonttools from 4.53.1 to 4.60.2 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/304 Bump virtualenv from 20.26.4 to 20.36.1 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/312 Bump filelock from 3.20.1 to 3.20.3 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/313 Diffusion Coefficient from Phreeqc by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/316 Bump the actions group with 3 updates by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/321 Test new release workflow by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/322 Test release workflow, take 2 by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/323 bump the tag in changelog by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/324 Release rc4 by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/325 Triggering release on published action by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/327 updating basic tools before twine upload by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/328 Patch for trusted publishing by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/330 Bump cryptography from 46.0.3 to 46.0.5 by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/334 Fixing warnings on docs generation by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/338 Bump pillow from 12.1.0 to 12.1.1 by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/341 Pulled out lint+docs as its own workflow; Other workflows ignore docs folder by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/340 utils: ensure python floats in FormulaDict by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/342 Adjust DeprecationWarning by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/348 Add the to_phreeqc() method by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/288 New Contributors @vineetbansal made their first contribution in https://github.com/KingsburyLab/pyEQL/pull/284 Full Changelog: https://github.com/KingsburyLab/pyEQL/compare/v1.3.2...v1.4.0

Cited by 0Open access

python-ags4: A Python library to read, write, andvalidate AGS4 geodata files

Asitha Senanayake, Roger Chandler, Tony Daly et al. · The Journal of Open Source Software · 2022

Data gathered from geotechnical, geoenvironmental, and geophysical investigations can be broadly described as "geodata". The AGS4 data format (Association of Geotechnical and Geoenvironmental Specialists, 2011 It is a plain text format consisting of multiple tables of comma-separated values, tied together with a robust data schema and a comprehensive suite of validation rules. The basic structure of an AGS4 file is shown in Figure

Cited by 2Open access

pyEQL: A python library for water chemistry

Kingsbury, Ryan · Zenodo (CERN European Organization for Nuclear Research) · 2024

Version 1.1.0 See CHANGELOG for a detailed explanation of changes. <!-- Release notes generated using configuration in .github/release.yml at 15255521360790a227af6ab90238c0145eebc503 --> What's Changed 🐛 Bug Fixes DB: add missing units to radius_ionic for Cr+3 and Ni+2 by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/148 Equlibrate: fix bug with pH charge balancing; mypy by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/150 🛠 Enhancements Solution: add automatic charge balancing and other misc improvements by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/151 🏥 Package Health CI: updates per scientific python repo review by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/149 Full Changelog: https://github.com/KingsburyLab/pyEQL/compare/v1.0.3...v1.1.0

Cited by 0Open access

Supplementary files for the dingo Python library

Apostolos Chalkis, Vissarion Fisikopoulos, Elias Tsigaridas et al. · Zenodo (CERN European Organization for Nuclear Research) · 2023

We compare the Multiphase Monte Carlo flux Sampling (MMCS) feature of the dingo library against the combined method of PolyRound (for rounding) followed by hopsy (for sampling) on a set of 7 models with a ranging dimension (ext_data.zip). The simpl_transf_polytopes.zip contains the polytopes retrieved after the simplify() and transform() functions of the PolyRound library. These polytopes were used as input for the dingo implementation of the MMCS algorithm asking for an ESS of 1000. Under the dingo_samples_on_simpl_transf_polytopes.zip the resulting samples from dingo can be found using the MMCS algorithm. Similarly, polyrounded_polytopes.zip contains the polytopes retrieved after applying simplify(), transform() and round() functions of the PolyRound library. These polytopes were used as input for the hopsy library, again, asking for an ESS of 1000. The hopsy_samples.zip folder contains the resulting samples from hopsy library, using a thinning of 100d ; only in the case of Recon3D a thinning of 200d was used as suggested by the authors. Under the hopsy_samples_ess_1000.zip folder, we provide the hopsy samples with an ESS of 1000. Last, the samples produced using the efficient Billiard Walk implementation of dingo can be found under the BWRsamples.zip file. In this case, 20000 points were sampled for each model. Further, the sars_samples.zip file contains dingo samples from the solution space of the SARS-CoV-2 integrated model of Renz et al (2020) for the following cases: unbiased; where the zero vector has been used as the objective function of the model after maximising for the human biomass after maximising for the virus biomass objective function (VBOF) The following Python scripts to perform these experiments are included: polyround_preproces.py : runs the PolyRound functions and builds the simplified and transformed polytopes that dingo will use as well as the simplified, transformed and rounded polytopes hopsy uses hopsy_on_polyrounded_polytopes.py : performs sampling with hopsy dingo_on_simpl_transf_polytopes.py : performs sampling with dingo run_bwr_exp.py computes samples using the efficient Billiard Walk of dingo binary_search.py : a function to return the index in the chain where ESS becomes 1000 compute_ess.py: based on a model's hopsy samples (under the hopsy_samples.zip folder) it retrieves the samples with an ESS of 1000 and the corresponding required time for hopsy to build them. The script requires the total time of the hopsy experiment recorded in the model's corresponding .txt file (you can find this under the hopsy_samples.zip) compute_ess_psrf_per_phase.py computes ESS and PSRF in specific indices which correspond to those when MMCS switches from a phase a to next one A notebook is available for how the integrated model was sampled.

Cited by 0Open access

rdata: A Python library for R datasets

Carlos Ramos-Carreño, Tuomas Rossi · The Journal of Open Source Software · 2024

Research work usually requires the analysis and processing of data from different sources.Traditionally in statistical computing, the R language has been widely used for this task, and a huge amount of datasets have been compiled in the Rda and Rds formats, native to this programming language.As these formats contain internally the representation of R objects, they cannot be directly used from Python, another widely used language for data analysis and processing.The library rdata allows to load and convert these datasets to Python objects, without the need of exporting them to other intermediate formats which may not keep all the original information.This library has minimal dependencies, ensuring that it can be used in contexts where an R installation is not available.The capability to write data in Rda and Rds formats is also under development.Thus, the library rdata facilitates data interchange, enabling the usage of the same datasets in both languages (e.g. for reproducibility, comparisons of results against methods in both languages, or the creation of complex processing pipelines that involve steps in both R and Python).

Cited by 0Open access

CausationEntropy: A Python Library for Causal Discovery

Slote, Kevin, Fish, Jeremie, Bollt, Erik · Zenodo (CERN European Organization for Nuclear Research) · 2025

[0.1.0] - 2025-09-15 Added All math code parsed to new API [1.0.0] - 2025-10-01 Added Full test coverage. Full API design [1.1.0] - 2025-11-12 Added Added support for converting causal networks to pandas DataFrames. Added utility for importing and processing Tigramite network structures. Added companion matrix calculation for better FPR/TPR calculations. Added plot_causal_network function that implements some automated graph layout algorithms to plot causal networks. Enforce non-negative conditional mututal information and non-negative mutual information.

Cited by 0Open access

pymnet: A Python Library for Multilayer Networks

Nurmi, Tarmo, Badie-Modiri, Arash, Coupette, Corinna et al. · Zenodo (CERN European Organization for Nuclear Research) · 2024

This repository includes the manuscript submission archival version of pymnet, a Python library for multilayer networks.

Cited by 0Open access

pyEQL: A python library for water chemistry

Ryan S. Kingsbury · Zenodo (CERN European Organization for Nuclear Research) · 2026

This is a pre-release to test new GitHub actions tooling. <!-- Release notes generated using configuration in .github/release.yml at main --> What's Changed 🐛 Bug Fixes Fix behavior of PHREEQC equilibrate when composition contains pure elements by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/282 Fix incorrect reduction of dimers/polymers in standardize_formula by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/309 🛠 Enhancements added a nested parameter to 2 methods in the Solution class by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/284 enable solid-liquid and gas-liquid equilibrium calculations in equilibrate() by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/292 Speciation calculations in new wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/306 Fix the postprocess workflow; refactor PHREEQC2026 wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/318 Watching for Phreeqc invocation errors by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/319 🧹 House-Keeping Vb/noblack by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/285 🏥 Package Health CI run with pinned deps common to all py/platforms by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/314 Release Workflow for CI by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/320 🤷‍♂️ Other Changes Add pqi_pqo_files to tests by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/289 'PHREEQC' pytest by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/294 Phreeqc wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/291 Bump actions/checkout from 5 to 6 in the actions group by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/293 Bump urllib3 from 2.5.0 to 2.6.0 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/298 Bump urllib3 from 2.6.0 to 2.6.3 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/308 Bump pynacl from 1.5.0 to 1.6.2 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/307 Bump filelock from 3.16.0 to 3.20.1 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/305 Bump fonttools from 4.53.1 to 4.60.2 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/304 Bump virtualenv from 20.26.4 to 20.36.1 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/312 Bump filelock from 3.20.1 to 3.20.3 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/313 Diffusion Coefficient from Phreeqc by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/316 Bump the actions group with 3 updates by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/321 Test new release workflow by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/322 Test release workflow, take 2 by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/323 bump the tag in changelog by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/324 Release rc4 by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/325 Triggering release on published action by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/327 updating basic tools before twine upload by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/328 New Contributors @vineetbansal made their first contribution in https://github.com/KingsburyLab/pyEQL/pull/284 Full Changelog: https://github.com/KingsburyLab/pyEQL/compare/v1.3.2...v1.4.0rc9

Cited by 0Open access

PM4Py: A process mining library for Python

Alessandro Berti, Sebastiaan van Zelst, Daniel Schuster · Software Impacts · 2023

PM4Py is a Python library providing a comprehensive array of tools for process mining. This paper presents an in-depth overview of the PM4Py library, including its integration with other Python libraries and its latest features, such as object-centric process mining. Furthermore, we discuss the significant impact of PM4Py within academia, industry, and the open-source community, evidenced by its wide adoption and substantial evolution. In short, the PM4Py library is an essential tool for researchers and practitioners, paving the way for advancements in process mining.

Cited by 126Open access

pyEQL: A python library for water chemistry

Kingsbury, Ryan · Zenodo (CERN European Organization for Nuclear Research) · 2026

Major Changes New Electrolyte Engine - phreeqc2026 This release features a new interface to IPHREEQC developed by @vineetbansal of Princeton University's Research Software Engineering group. This new interface "talks" directly to the USGS-provided IPHREEQC libraries, providing a much more robust way of accessing PHREEQC functionality via pyEQL as compared to the legacy engine based on phreeqpython. This new engine can be specified by passing engine='phreeqc2026' to Solution.__init__. Thanks to pyEQL's modular API, no other changes to your script are needed - it is a "drop-in" replacement for the legacy phreeqc engine. The legacy phreeqc engine is still present and is still used for speciation by the default native engine. However, the native engine will adopt phreeqc2026 for speciation calculations in the next release. You may see a warning about this when you call equilibrate(). Solid-liquid and gas-liquid equilibrium The equilibrate() method now supports equilibrating a Solution with gas and/or solid phases, thanks to work by @vineetbansal , @SuixiongTay , and @YitongPan1 . In addition to user-specified phases, a convenience argument atmosphere has been added if you simply want to consider the effects of, e.g., atmospheric carbonate on your system: >>> from pyEQL import Solution >>> s1 = Solution({}, pH=7.0, volume="1 L", engine="phreeqc2026") >>> s1.equilibrate(atmosphere=True) >>> s1.components {'H2O(aq)': 55.34457593619076, 'O2(aq)': 0.0002675300582572652, 'CO2(aq)': 1.424944456303147e-05, 'H[+1]': 2.51988623743169e-06, 'HCO3[-1]': 2.5169971787125935e-06, 'OH[-1]': 4.007874338794804e-09, 'CO3[-2]': 4.7053998717451746e-11, ...} The new equilibrate capabilities work across all engines - native, phreeqc, and phreeqc2026 Performance Loading times for Solution that contain a large number of solutes have been significantly improved (by a factor of ~10x in some cases) thanks to a caching optimization identified by @vineetbansal . See additional details in the CHANGELOG. <!-- Release notes generated using configuration in .github/release.yml at main --> What's Changed 🐛 Bug Fixes Fix behavior of PHREEQC equilibrate when composition contains pure elements by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/282 Fix incorrect reduction of dimers/polymers in standardize_formula by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/309 phreeqc2026 engine: ensure unit osmotic coefficient; refactor tests by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/333 from_file: address subtle volume bug by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/347 Use to_file to generate yaml by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/350 Remove N2 from ATMOSPHERE by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/339 equilibrate: exclude H and O from missing element check by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/355 🛠 Enhancements added a nested parameter to 2 methods in the Solution class by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/284 enable solid-liquid and gas-liquid equilibrium calculations in equilibrate() by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/292 Speciation calculations in new wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/306 Fix the postprocess workflow; refactor PHREEQC2026 wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/318 Watching for Phreeqc invocation errors by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/319 Solution.from_preset: Add representative industrial wastewaters by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/317 PhreeqcEOS inherits from Phreeqc2026EOS by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/351 equilibrate: modify total conc check for missing elements by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/352 engines.py: NativeEOS inherits from PhreeqcEOS; eliminate redundant code by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/353 📖 Documentation migrate docs theme to sphinx-immaterial by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/272 Update Solution.equilibrate()'s docstring with NativeEOS.equilibrate() docstring by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/344 Phreeqc2026 docs by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/349 🧹 House-Keeping Vb/noblack by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/285 🏥 Package Health CI run with pinned deps common to all py/platforms by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/314 Release Workflow for CI by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/320 🤷‍♂️ Other Changes Add pqi_pqo_files to tests by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/289 'PHREEQC' pytest by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/294 Phreeqc wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/291 Bump actions/checkout from 5 to 6 in the actions group by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/293 Bump urllib3 from 2.5.0 to 2.6.0 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/298 Bump urllib3 from 2.6.0 to 2.6.3 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/308 Bump pynacl from 1.5.0 to 1.6.2 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/307 Bump filelock from 3.16.0 to 3.20.1 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/305 Bump fonttools from 4.53.1 to 4.60.2 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/304 Bump virtualenv from 20.26.4 to 20.36.1 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/312 Bump filelock from 3.20.1 to 3.20.3 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/313 Diffusion Coefficient from Phreeqc by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/316 Bump the actions group with 3 updates by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/321 Test new release workflow by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/322 Test release workflow, take 2 by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/323 bump the tag in changelog by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/324 Release rc4 by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/325 Triggering release on published action by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/327 updating basic tools before twine upload by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/328 Patch for trusted publishing by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/330 Bump cryptography from 46.0.3 to 46.0.5 by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/334 Fixing warnings on docs generation by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/338 Bump pillow from 12.1.0 to 12.1.1 by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/341 Pulled out lint+docs as its own workflow; Other workflows ignore docs folder by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/340 utils: ensure python floats in FormulaDict by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/342 Adjust DeprecationWarning by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/348 Add the to_phreeqc() method by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/288 update CHANGELOG and AUTHORS for v1.4.0 release by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/356 New Contributors @vineetbansal made their first contribution in https://github.com/KingsburyLab/pyEQL/pull/284 Full Changelog: https://github.com/KingsburyLab/pyEQL/compare/v1.3.2...v1.4.0

Cited by 0Open access

pyEQL: A python library for water chemistry

Kingsbury, Ryan · Zenodo (CERN European Organization for Nuclear Research) · 2026

Major Changes New Electrolyte Engine - phreeqc2026 This release features a new interface to IPHREEQC developed by @vineetbansal of Princeton University's Research Software Engineering group. This new interface "talks" directly to the USGS-provided IPHREEQC libraries, providing a much more robust way of accessing PHREEQC functionality via pyEQL as compared to the legacy engine based on phreeqpython. This new engine can be specified by passing engine='phreeqc2026' to Solution.__init__. Thanks to pyEQL's modular API, no other changes to your script are needed - it is a "drop-in" replacement for the legacy phreeqc engine. The legacy phreeqc engine is still present and is still used for speciation by the default native engine. However, the native engine will adopt phreeqc2026 for speciation calculations in the next release. You may see a warning about this when you call equilibrate(). Solid-liquid and gas-liquid equilibrium The equilibrate() method now supports equilibrating a Solution with gas and/or solid phases, thanks to work by @vineetbansal , @SuixiongTay , and @YitongPan1 . In addition to user-specified phases, a convenience argument atmosphere has been added if you simply want to consider the effects of, e.g., atmospheric carbonate on your system: >>> from pyEQL import Solution >>> s1 = Solution({}, pH=7.0, volume="1 L", engine="phreeqc2026") >>> s1.equilibrate(atmosphere=True) >>> s1.components {'H2O(aq)': 55.34457593619076, 'O2(aq)': 0.0002675300582572652, 'CO2(aq)': 1.424944456303147e-05, 'H[+1]': 2.51988623743169e-06, 'HCO3[-1]': 2.5169971787125935e-06, 'OH[-1]': 4.007874338794804e-09, 'CO3[-2]': 4.7053998717451746e-11, ...} The new equilibrate capabilities work across all engines - native, phreeqc, and phreeqc2026 Performance Loading times for Solution that contain a large number of solutes have been significantly improved (by a factor of ~10x in some cases) thanks to a caching optimization identified by @vineetbansal . See additional details in the CHANGELOG. <!-- Release notes generated using configuration in .github/release.yml at main --> What's Changed 🐛 Bug Fixes Fix behavior of PHREEQC equilibrate when composition contains pure elements by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/282 Fix incorrect reduction of dimers/polymers in standardize_formula by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/309 phreeqc2026 engine: ensure unit osmotic coefficient; refactor tests by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/333 from_file: address subtle volume bug by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/347 Use to_file to generate yaml by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/350 Remove N2 from ATMOSPHERE by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/339 equilibrate: exclude H and O from missing element check by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/355 🛠 Enhancements added a nested parameter to 2 methods in the Solution class by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/284 enable solid-liquid and gas-liquid equilibrium calculations in equilibrate() by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/292 Speciation calculations in new wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/306 Fix the postprocess workflow; refactor PHREEQC2026 wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/318 Watching for Phreeqc invocation errors by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/319 Solution.from_preset: Add representative industrial wastewaters by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/317 PhreeqcEOS inherits from Phreeqc2026EOS by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/351 equilibrate: modify total conc check for missing elements by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/352 engines.py: NativeEOS inherits from PhreeqcEOS; eliminate redundant code by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/353 📖 Documentation migrate docs theme to sphinx-immaterial by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/272 Update Solution.equilibrate()'s docstring with NativeEOS.equilibrate() docstring by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/344 Phreeqc2026 docs by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/349 🧹 House-Keeping Vb/noblack by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/285 🏥 Package Health CI run with pinned deps common to all py/platforms by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/314 Release Workflow for CI by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/320 🤷‍♂️ Other Changes Add pqi_pqo_files to tests by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/289 'PHREEQC' pytest by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/294 Phreeqc wrapper by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/291 Bump actions/checkout from 5 to 6 in the actions group by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/293 Bump urllib3 from 2.5.0 to 2.6.0 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/298 Bump urllib3 from 2.6.0 to 2.6.3 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/308 Bump pynacl from 1.5.0 to 1.6.2 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/307 Bump filelock from 3.16.0 to 3.20.1 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/305 Bump fonttools from 4.53.1 to 4.60.2 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/304 Bump virtualenv from 20.26.4 to 20.36.1 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/312 Bump filelock from 3.20.1 to 3.20.3 in /requirements by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/313 Diffusion Coefficient from Phreeqc by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/316 Bump the actions group with 3 updates by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/321 Test new release workflow by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/322 Test release workflow, take 2 by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/323 bump the tag in changelog by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/324 Release rc4 by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/325 Triggering release on published action by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/327 updating basic tools before twine upload by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/328 Patch for trusted publishing by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/330 Bump cryptography from 46.0.3 to 46.0.5 by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/334 Fixing warnings on docs generation by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/338 Bump pillow from 12.1.0 to 12.1.1 by @dependabot[bot] in https://github.com/KingsburyLab/pyEQL/pull/341 Pulled out lint+docs as its own workflow; Other workflows ignore docs folder by @vineetbansal in https://github.com/KingsburyLab/pyEQL/pull/340 utils: ensure python floats in FormulaDict by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/342 Adjust DeprecationWarning by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/348 Add the to_phreeqc() method by @SuixiongTay in https://github.com/KingsburyLab/pyEQL/pull/288 update CHANGELOG and AUTHORS for v1.4.0 release by @rkingsbury in https://github.com/KingsburyLab/pyEQL/pull/356 New Contributors @vineetbansal made their first contribution in https://github.com/KingsburyLab/pyEQL/pull/284 Full Changelog: https://github.com/KingsburyLab/pyEQL/compare/v1.3.2...v1.4.0

Cited by 0Open access