Пример #1
0
    def test_SingleFunctionSurrogate(self):
        pd = surrogate.ParamDim('mass', 1., 2.)
        ps = surrogate.ParamSpace('params', [pd])
        t = np.linspace(0., 10., 10)
        ei = np.array([np.ones(10), 1*t])
        nf = []
        for i in range(2):
            dummy = nodeFunction.DummyNodeFunction()
            nf.append(nodeFunction.NodeFunction('node_%s'%(i),
                    node_function=dummy))
        sfs = surrogate.SingleFunctionSurrogate('s', t, ps, ei, nf)

        def check(x, x_nudged, sur):
            res = sur(x)
            ans = x_nudged*(1 + t)
            for r, a in zip(res, ans):
                self.assertEqual(r, a)

        def check_cases(sur):
            check(1.0, 1.0 + 1.e-12, sur)
            check(np.array([1.0]), 1.0 + 1.e-12, sur)
            check(1.0 - 1.e-13, 1.0 + 1.e-12, sur)

        check_cases(sfs)

        sfs.save(TEST_FILE)
        sfs2 = surrogate.SingleFunctionSurrogate()
        sfs2.load(TEST_FILE)

        check_cases(sfs2)
Пример #2
0
    def _test_ParamSpace_nudge(self, xmins, xmaxs, tols):
        params = []
        for xmin, xmax, tol in zip(xmins, xmaxs, tols):
            pd =  surrogate.ParamDim("x", xmin, xmax, rtol=tol/(xmax - xmin))
            params.append(pd)
        ps = surrogate.ParamSpace("param space", params)

        # Nudge all
        xmin = np.array([x for x in xmins])
        xmax = np.array([x for x in xmaxs])
        for i in range(len(xmins)):
            xmin[i] -= 0.9 * tols[i]
            xmax[i] += 0.9 * tols[i]
        xmin = ps.nudge_params(xmin)
        xmax = ps.nudge_params(xmax)
        for i in range(len(xmins)):
            self.assertEqual(xmin[i], xmins[i] + tols[i])
            self.assertEqual(xmax[i], xmaxs[i] - tols[i])

        # Nudge one
        xmin = np.array([x for x in xmins])
        xmax = np.array([x for x in xmaxs])
        for i in range(len(xmins)):
            xmin[i] -= 0.9 * tols[i]
            xmax[i] += 0.9 * tols[i]
            xmin = ps.nudge_params(xmin)
            xmax = ps.nudge_params(xmax)
            self.assertEqual(xmin[i], xmins[i] + tols[i])
            self.assertEqual(xmax[i], xmaxs[i] - tols[i])

        # Check Exceptions
        for i in range(len(xmins)):
            xmin = np.array([x for x in xmins])
            xmax = np.array([x for x in xmaxs])
            xmin[i] -= 1.1*tols[i]
            xmax[i] += 1.1*tols[i]
            with self.assertRaises(Exception):
                ps.nudge_params(xmin)
            with self.assertRaises(Exception):
                ps.nudge_params(xmax)

        # Check unmodified
        x = np.array([x + tol for x, tol in zip(xmins, tols)])
        check_params = [1*x]
        for i in range(len(xmins)):
            x[i] += 0.5*(xmaxs[i] - xmins[i]) - tols[i]
            check_params.append(1*x)
        for i in range(len(xmins)):
            x[i] += 0.5*(xmaxs[i] - xmins[i]) - tols[i]
            check_params.append(1*x)
        for x in check_params:
            x2 = ps.nudge_params(x)
            for xi, xi2 in zip(x, x2):
                self.assertEqual(xi, xi2)
        return ps
Пример #3
0
    def test_ParamSpace(self):
        ps = self._test_ParamSpace_nudge([0.], [1.], [1.e-4])
        ps = self._test_ParamSpace_nudge([1., 2., 100.],
                                         [1.1, 100., 101.],
                                         [1.e-4, 1.e-5, 1.e-6])

        # Test saving/loading
        ps.save(TEST_FILE)
        ps2 = surrogate.ParamSpace("", [])
        ps2.load(TEST_FILE)
        self.assertEqual(ps.name, ps2.name)
        self.assertEqual(ps.dim, ps2.dim)
        for i in range(ps.dim):
            pd = ps._params[i]
            pd2 = ps2._params[i]
            self.assertEqual(pd.min_val, pd2.min_val)
            self.assertEqual(pd.max_val, pd2.max_val)
            self.assertEqual(pd.tol, pd2.tol)
Пример #4
0
    for i in range(12)
]
cim = [
    np.load('%s/NRSurrogate_cim_%s.npy' % (d, i)).reshape(*dim)
    for i in range(12)
]
mode_data = {k: (ei[i], cre[i], cim[i]) for i, k in enumerate(lm_modes)}

# Make parameter space
print 'building...'
q = surrogate.ParamDim('q', 1, 2)
chiA = surrogate.ParamDim('|chiA|', 0, 0.8)
theta = surrogate.ParamDim('theta', 0, np.pi)
phi = surrogate.ParamDim('phi', 0, 2 * np.pi)
chiBz = surrogate.ParamDim('chiB_z', -.8, .8)
param_space = surrogate.ParamSpace('4d2s', [q, chiA, theta, phi, chiBz])
knots = []
for xmin, xmax in zip(param_space.min_vals(), param_space.max_vals()):
    knots.append(np.linspace(xmin, xmax, 5))

# Build surrogate
sur = surrogate.FastTensorSplineSurrogate(
    name='%s%s' % (save_prefix, n),
    domain=t,
    param_space=param_space,
    knot_vecs=knots,
    mode_data=mode_data,
    modes=lm_modes,
)

# Test evaluation
Пример #5
0

f = h5py.File('../surrogates/SpEC_q1_10_NoSpin_nu5thDegPoly_exclude_2_0.h5')

lm_modes = [(int(k[1]), int(k[4])) for k in f.keys()]
mode_data = {}
for (ell, m) in lm_modes:
    print 'loading (%s, %s)...' % (ell, m)
    g = f['l%s_m%s' % (ell, m)]
    name = 'mode_%s_%s' % (ell, m)
    mode_data[(ell, m)] = get_mode_surrogate_data(g, name)

t = np.arange(-2750.0, 100.00001, 0.1)

param_dim_q = surrogate.ParamDim('q', 1, 10)
param_space = surrogate.ParamSpace('Nonspinning_q_1_10', [param_dim_q])

sur = surrogate.MultiModalSurrogate(
    name='SpEC_q1_10_nonspinning_surrogate',
    domain=t,
    param_space=param_space,
    mode_data=mode_data,
    mode_type='amp_phase',
    modes=lm_modes,
)

print 'done making surrogate, testing...'
res = sur(1.1)
res2 = sur(9.9)
print 'saving...'
sur.save('new_SpEC_sur.h5')