Source code for chempy.util.tests.test_stoich

# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division, print_function)

try:
    import numpy as np
except ImportError:
    np = None
else:
    from ..stoich import (
        get_coeff_mtx, decompose_yields,
    )
from chempy.units import units_library, allclose, _sum
from ..testing import requires


@requires('numpy')
[docs]def test_get_coeff_mtx(): r = [ ({'A': 1}, {'B': 1}), ({'A': 1, 'B': 1}, {'C': 2}) ] A = get_coeff_mtx('ABC', r) Aref = np.array([ [-1, -1], [1, -1], [0, 2] ]) assert np.allclose(A, Aref)
@requires('numpy')
[docs]def test_decompose_yields_1(): from chempy import Reaction gamma_yields = { 'OH-': 0.5, 'H2O2': 0.7, 'OH': 2.7, 'H2': 0.45, 'H': 0.66, 'H+': 3.1, 'HO2': 0.02, 'e-(aq)': 2.6, } rxns = [ Reaction({'H2O': 1}, {'H+': 1, 'OH-': 1}), Reaction({'H2O': 1}, {'H+': 1, 'e-(aq)': 1, 'OH': 1}), Reaction({'H2O': 1}, {'H': 2, 'H2O2': 1}, inact_reac={'H2O': 1}), Reaction({'H2O': 1}, {'H2': 1, 'H2O2': 1}, inact_reac={'H2O': 1}), Reaction({'H2O': 1}, {'H2': 1, 'OH': 2}, inact_reac={'H2O': 1}), Reaction({'H2O': 1}, {'H2': 3, 'HO2': 2}, inact_reac={'H2O': 3}), ] k = decompose_yields(gamma_yields, rxns) k_ref = [0.5, 2.6, 0.33, 0.37, 0.05, 0.01] assert np.allclose(k, k_ref) G_H2O = sum(rxn.net_stoich(['H2O'])[0]*k[i] for i, rxn in enumerate(rxns)) assert abs(G_H2O+4.64) < 1e-3
@requires(units_library)
[docs]def test_decompose_yields__units_1(): from chempy import Reaction from chempy.units import default_units as u gamma_yields = { 'OH-': 0.5*u.per100eV, 'H2O2': 0.7*u.per100eV, 'OH': 2.7*u.per100eV, 'H2': 0.45*u.per100eV, 'H': 0.66*u.per100eV, 'H+': 3.1*u.per100eV, 'HO2': 0.02*u.per100eV, 'e-(aq)': 2.6*u.per100eV, } rxns = [ Reaction({'H2O': 1}, {'H+': 1, 'OH-': 1}), Reaction({'H2O': 1}, {'H+': 1, 'e-(aq)': 1, 'OH': 1}), Reaction({'H2O': 1}, {'H': 2, 'H2O2': 1}, inact_reac={'H2O': 1}), Reaction({'H2O': 1}, {'H2': 1, 'H2O2': 1}, inact_reac={'H2O': 1}), Reaction({'H2O': 1}, {'H2': 1, 'OH': 2}, inact_reac={'H2O': 1}), Reaction({'H2O': 1}, {'H2': 3, 'HO2': 2}, inact_reac={'H2O': 3}), ] k = decompose_yields(gamma_yields, rxns) k_ref = [0.5, 2.6, 0.33, 0.37, 0.05, 0.01]*u.per100eV assert allclose(k, k_ref) G_H2O = [rxn.net_stoich(['H2O'])[0]*k[i] for i, rxn in enumerate(rxns)] ref = 4.64*u.per100eV assert abs((_sum(G_H2O)+ref)/ref) < 1e-3
@requires('numpy')
[docs]def test_decompose_yields_2(): from chempy import Reaction yields = {'B': 3.0, 'C': 24.0} rxns = [ Reaction({'A': 1}, {'B': 1, 'C': 1}, inact_reac={'A': 1}), Reaction({'A': 1}, {'C': 3}) ] k = decompose_yields(yields, rxns) k_ref = [3, 7] rtol = 1e-12 for a, b in zip(k, k_ref): assert abs(a-b) < abs(a*rtol)