예제 #1
0
    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
예제 #2
0
 def assert_fitclose(self, fitp, p):
     """ GVars in fitp agree within NSIG sigma with parameters p. """
     chi2 = 0
     dof = 0
     fitp = gv.trim_redundant_keys(fitp)
     for k in fitp:
         for fpi, pi in zip(fitp[k].flat, p[k].flat):
             delta_mean = abs(abs(fpi.mean) - abs(pi))
             sdev = fpi.sdev
             self.assertLess(delta_mean, NSIG * sdev)
             dof += 1
             chi2 += delta_mean ** 2 / sdev ** 2
     if PRINT_FITS:
         print("param chi2/dof = %.2g [%d]\n" % (chi2 / dof, dof))
예제 #3
0
 def assert_fitsagree(self, fitp1, fitp2):
     """ fit outputs fitp1 and fitp2 agree with each other (approximately)"""
     chi2 = 0
     dof = 0
     fitp1 = gv.trim_redundant_keys(fitp1)
     for k in fitp1:
         p1 = fitp1[k].flat
         p2 = fitp2[k].flat
         for p1i, p2i in zip(p1, p2):
             delta_mean = abs(abs(p1i.mean) - abs(p2i.mean))
             sdev = p1i.sdev
             self.assertLess(delta_mean, NSIG * sdev)
             delta_sdev = abs(p1i.sdev - p2i.sdev)
             self.assertLess(delta_sdev, NSIG * sdev)
예제 #4
0
    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)'])