pyEQL logo

pyEQL: A python interface for water chemistry


The goal of pyEQL is to provide a stable, intuitive, easy to learn python interface for water chemistry that can be connected to a variety of different modeling engines

Specifically, pyEQL defines a Solution class to represent an aqueous electrolyte solution. Virtually all of the user-facing functions in pyEQL are accessed through the Solution class. It also includes a number of other utilities to support water chemistry analysis including a database of diffusion coefficients, activity correction parameters, and other data on a variety of common electrolytes.

1-minute Tutorial


pip install pyEQL

Create a Solution

>>> from pyEQL import Solution
>>> s1 = Solution({'Na+':'0.5 mol/kg', 'Cl-': '0.5 mol/kg'},
                         temperature = '20 degC',
                         volume='8 L')

Get properties

>>> s1.density
<Quantity(1.03710384, 'kilogram / liter')>
>>> s1.conductivity
<Quantity(8.09523295, 'siemens / meter')>
<Quantity(46.7798197, 'standard_atmosphere')>
>>> s1.get_amount('Na+', 'ug/L')
<Quantity(22989769.3, 'microgram / liter')>

Key Features

pyEQL is designed to be customizable and easy to integrate into projects that require modeling of chemical thermodyanmics of aqueous solutions. It aspires to provide a flexible, extensible framework for the user, with a high level of transparency about data sources and calculation methods.

  • Build accurate solution properties using a minimum of inputs. Just specify the identity and quantity of a solute and pyEQL will do the rest.

  • “Graceful Decay” from more sophisticated, data-intensive modeling approaches to simpler, less accurate ones depending on the amount of data supplied.

  • Not limited to dilute solutions. pyEQL contains out of the box support for the Pitzer Model and other methods for modeling concentrated solutions.

  • Built in database containing hundreds of model parameters and physicochemical properties for different ions.

  • Customizable modeling engine system that allows the Solution API to work with multiple electrolyte models.

  • Units-aware calculations (by means of the pint library)