Source code for chempy.util.tests.test_arithmeticdict

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


from ..arithmeticdict import ArithmeticDict


[docs]def test_ArithmeticDict(): d1 = ArithmeticDict(float, [('a', 1.0), ('b', 2.0)]) d2 = ArithmeticDict(float, [('c', 5.0), ('b', 3.0)]) d3 = d1+d2 assert d3['a'] == 1.0 assert d3['b'] == 5.0 assert d3['c'] == 5.0 d3 += {'c': 1.0} assert d3['a'] == 1.0 assert d3['b'] == 5.0 assert d3['c'] == 6.0 d4 = {'a': 7.0} + d1 assert d4['a'] == 8.0 d5 = d1 + {'a': 9.0} assert d5['a'] == 10.0 d6 = d1 - d2 assert d6 == {'a': 1.0, 'b': -1.0, 'c': -5.0} d6 -= d3 assert d6 == {'b': -6.0, 'c': -11.0}
[docs]def test_ArithmeticDict_add(): d1 = ArithmeticDict(int, [('a', 1), ('b', 2)]) d2 = d1+3 assert d2['a'] == 4 assert d2['b'] == 5 d2 = 3+d1 assert d2['a'] == 4 assert d2['b'] == 5 assert d2['c'] == 0 d3 = d1 + d2 assert d3['a'] == 5 assert d3['b'] == 7 assert d3['c'] == 0
[docs]def test_ArithmeticDict_iadd(): d1 = ArithmeticDict(int, [('a', 1), ('b', 2)]) d1 += 3 assert d1['a'] == 4 assert d1['b'] == 5 assert d1['c'] == 0
[docs]def test_ArithmeticDict_sub(): d1 = ArithmeticDict(int, [('a', 1), ('b', 2)]) d2 = d1-7 assert d2['a'] == -6 assert d2['b'] == -5 d2 = 3-d1 assert d2['a'] == 2 assert d2['b'] == 1 assert d2['c'] == 0 d3 = d1 - d2 assert d3['a'] == -1 assert d3['b'] == 1
[docs]def test_ArithmeticDict_isub(): d1 = ArithmeticDict(int, [('a', 1), ('b', 2)]) d1 -= 7 assert d1['a'] == -6 assert d1['b'] == -5 assert d1['c'] == 0
[docs]def test_ArithmeticDict_mul(): d1 = ArithmeticDict(int, [('a', 1), ('b', 2)]) d2 = d1*3 assert d2['a'] == 3 assert d2['b'] == 6 d2 = 3*d1 assert d2['a'] == 3 assert d2['b'] == 6 assert d2['c'] == 0 d3 = d1 * d2 assert d3['a'] == 3 assert d3['b'] == 12 assert d3['c'] == 0
[docs]def test_ArithmeticDict_imul(): d1 = ArithmeticDict(int, [('a', 1), ('b', 2)]) d1 *= 3 assert d1['a'] == 3 assert d1['b'] == 6 assert d1['c'] == 0
[docs]def test_ArithmeticDict_div(): d1 = ArithmeticDict(int, [('a', 6), ('b', 9)]) d2 = d1/3 assert d2['a'] == 2 assert d2['b'] == 3 d2 = d1.copy() / 3 assert d2['a'] == 2 assert d2['b'] == 3 d2 = 54/d1 assert d2['a'] == 9 assert d2['b'] == 6 assert d2['c'] == 0 d1['c'] = 1 d3 = (6*d2)/d1 assert d3['a'] == 9 assert d3['b'] == 4 assert d3['c'] == 0
[docs]def test_ArithmeticDict_floordiv(): d1 = ArithmeticDict(int, [('a', 6), ('b', 9)]) d2 = d1//2 assert d2['a'] == 3 assert d2['b'] == 4 d2 = d1.copy() // 5 assert d2['a'] == 1 assert d2['b'] == 1 d2 = 55//d1 assert d2['a'] == 9 assert d2['b'] == 6 assert d2['c'] == 0 d1['c'] = 1 d3 = (6*d2 + 1)//d1 assert d3['a'] == 9 assert d3['b'] == 4 assert d3['c'] == 1
[docs]def test_ArithmeticDict_idiv(): d1 = ArithmeticDict(int, [('a', 6), ('b', 9)]) d1 /= 3 assert d1['a'] == 2 assert d1['b'] == 3 assert d1['c'] == 0
[docs]def test_ArithmeticDict_div_float(): d = ArithmeticDict(float) d['a'] = 6.0 d['b'] = 9.0 t = d/3.0 assert t['a'] == 2.0 assert t['b'] == 3.0
[docs]def test_ArithmeticDict_isclose(): d1 = ArithmeticDict(float) d2 = ArithmeticDict(float) assert d1.isclose(d2) d1['a'] = 2 assert not d1.isclose(d2) d2['a'] = 2+1e-15 assert d1.isclose(d2) d2['b'] = 1e-15 assert not d1.isclose(d2) assert d1.isclose(d2, atol=1e-14)
[docs]def test_ArithmeticDict_all_non_negative(): d1 = ArithmeticDict(float) assert d1.all_non_negative() d1['a'] = .1 assert d1.all_non_negative() d1['b'] = 0 assert d1.all_non_negative() d1['b'] -= 1e-15 assert not d1.all_non_negative()