def test_ExtendedDict(self): " ExtendedDict " # check ExtendedDict() and refill_buf p = BufferDict() p['a'] = 1. p['b'] = [2., 3.] p['log(c)'] = 0. p['sqrt(d)'] = [5., 6.] p['erfinv(e)'] = [[33.]] newp = ExtendedDict(p) for i in range(2): for k in p: assert np.all(p[k] == newp[k]) assert newp['c'] == np.exp(newp['log(c)']) assert np.all(newp['d'] == np.square(newp['sqrt(d)'])) assert np.all(newp['e'] == gv.erf(newp['erfinv(e)'])) assert np.all(p.buf == newp.stripped_buf) p.buf[:] = [10., 20., 30., 1., 2., 3., 4.] newp.buf = np.array(p.buf.tolist() + i * [114., 135., 4223., 0.7]) # trim redundant keys oldp = trim_redundant_keys(newp) assert 'c' not in oldp assert 'd' not in oldp assert np.all(oldp.buf == p.buf) # nonredundant keys assert set(nonredundant_keys(newp.keys())) == set(p.keys()) # stripkey for ks, f, k in [ ('aa', np.exp, 'log(aa)'), ('aa', np.square, 'sqrt(aa)'), ]: assert (ks, f) == ExtendedDict.stripkey(k) # addparentheses pvar = BufferDict() pvar['a'] = p['a'] pvar['b'] = p['b'] pvar['logc'] = p['log(c)'] pvar['sqrtd'] = p['sqrt(d)'] pvar['erfinv(e)'] = p['erfinv(e)'] pvar = add_parameter_parentheses(pvar) for k in p: assert k in pvar assert np.all(p[k] == pvar[k]) for k in pvar: assert k in p pvar = add_parameter_parentheses(pvar) for k in p: assert k in pvar assert np.all(p[k] == pvar[k]) for k in pvar: assert k in p pvar['log(c(23))'] = 1.2 pvar = ExtendedDict(pvar) assert 'c(23)' in pvar assert 'log(c(23))' in pvar
def test_del(self): """ del b[k] """ global b for k in b: newb = BufferDict(b) keys = list(b.keys()) del newb[k] keys.remove(k) self.assertEqual(keys, list(newb.keys())) size = np.size(b[k]) self.assertEqual(len(b.buf) - size, len(newb.buf)) for l in newb: self.assertTrue(np.all(newb[l] == b[l]))
def test_keys(self): """ b.keys """ global b, bkeys self.assertSequenceEqual(list(b), bkeys) # check unusual keys bb = BufferDict() bb[('a', 1)] = 2. bb[(3, 4, 5)] = 3. bb[('a', 'b')] = 22. bb[0] = 2. bb['log(c)'] = 5. bb['c'] = 75. self.assertSequenceEqual(list(bb.keys()), [('a', 1), (3, 4, 5), ('a', 'b'), 0, 'log(c)', 'c'])
def test_bufferdict_b(self): """ BufferDict(b) """ global b, bkeys, bvalues, bslices, bbuf nb = BufferDict(b) for k in bkeys: self.assert_arraysequal(nb[k], b[k]) nb[k] += 10. self.assert_arraysequal(nb[k], b[k] + 10.) nb = BufferDict(nb, buf=b.flat) for k in bkeys: self.assert_arraysequal(nb[k], b[k]) self.assertEqual(b.size, nb.size) b.flat[-1] = 130. self.assertEqual(nb.flat[-1], 130.) with self.assertRaises(ValueError): nb = BufferDict(b, buf=nb.flat[:-1]) nb = BufferDict(b, keys=reversed(bkeys)) nbkeys = list(nb.keys()) self.assertEqual(nbkeys, list(reversed(bkeys)))
def test_extension_mapping(self): " BufferDict extension and mapping properties " p = BufferDict() p['a'] = 1. p['b'] = [2., 3.] p['log(c)'] = 0. p['sqrt(d)'] = [5., 6.] p['erfinv(e)'] = [[33.]] newp = BufferDict(p) for i in range(2): for k in p: assert np.all(p[k] == newp[k]) assert newp['c'] == np.exp(newp['log(c)']) assert np.all(newp['d'] == np.square(newp['sqrt(d)'])) assert np.all(newp['e'] == gv.erf(newp['erfinv(e)'])) assert np.all(p.buf == newp.buf) p.buf[:] = [10., 20., 30., 1., 2., 3., 4.] newp.buf = np.array(p.buf.tolist()) self.assertEqual(gv.get_dictkeys(p, ['c', 'a', 'log(c)', 'e', 'd']), ['log(c)', 'a', 'log(c)', 'erfinv(e)', 'sqrt(d)']) self.assertEqual( [gv.dictkey(p, k) for k in ['c', 'a', 'log(c)', 'e', 'd']], ['log(c)', 'a', 'log(c)', 'erfinv(e)', 'sqrt(d)']) self.assertTrue(gv.BufferDict.has_dictkey(p, 'a')) self.assertTrue(gv.BufferDict.has_dictkey(p, 'b')) self.assertTrue(gv.BufferDict.has_dictkey(p, 'c')) self.assertTrue(gv.BufferDict.has_dictkey(p, 'd')) self.assertTrue(gv.BufferDict.has_dictkey(p, 'e')) self.assertTrue(gv.BufferDict.has_dictkey(p, 'log(c)')) self.assertTrue(gv.BufferDict.has_dictkey(p, 'sqrt(d)')) self.assertTrue(gv.BufferDict.has_dictkey(p, 'erfinv(e)')) self.assertTrue(not gv.BufferDict.has_dictkey(p, 'log(a)')) self.assertTrue(not gv.BufferDict.has_dictkey(p, 'sqrt(b)')) self.assertEqual(list(p), ['a', 'b', 'log(c)', 'sqrt(d)', 'erfinv(e)']) np.testing.assert_equal(list(p.values()), [10.0, [20., 30.], 1.0, [2., 3.], [[4.]]]) self.assertEqual(p.get('c'), p['c']) # tracking? self.assertAlmostEqual(p['c'], np.exp(1)) self.assertAlmostEqual(p['log(c)'], 1.) p['log(c)'] = 2. self.assertAlmostEqual(p['c'], np.exp(2)) self.assertAlmostEqual(p['log(c)'], 2.) p['a'] = 12. self.assertAlmostEqual(p['c'], np.exp(2)) self.assertAlmostEqual(p['log(c)'], 2.) self.assertEqual( list(p), ['a', 'b', 'log(c)', 'sqrt(d)', 'erfinv(e)'], ) # the rest is not so important # trim redundant keys oldp = trim_redundant_keys(newp) assert 'c' not in oldp assert 'd' not in oldp assert np.all(oldp.buf == newp.buf) # nonredundant keys assert set(nonredundant_keys(newp.keys())) == set(p.keys()) # stripkey for ks, f, k in [ ('aa', np.exp, 'log(aa)'), ('aa', np.square, 'sqrt(aa)'), ]: assert (ks, f) == gv._bufferdict._stripkey(k) # addparentheses pvar = BufferDict() pvar['a'] = p['a'] pvar['b'] = p['b'] pvar['logc'] = p['log(c)'] pvar['sqrtd'] = p['sqrt(d)'] pvar['erfinv(e)'] = p['erfinv(e)'] pvar = add_parameter_parentheses(pvar) for k in p: assert k in pvar assert np.all(p[k] == pvar[k]) for k in pvar: assert k in p pvar = add_parameter_parentheses(pvar) for k in p: assert k in pvar assert np.all(p[k] == pvar[k]) for k in pvar: assert k in p pvar['log(c(23))'] = 1.2 pvar = BufferDict(pvar) assert 'c(23)' not in pvar assert 'log(c(23))' in pvar self.assertAlmostEqual(gv.exp(pvar['log(c(23))']), pvar['c(23)'])