Пример #1
0
 def setUpClass(cls):
     cls.centers = (np.linspace(-1.6, 1.4, 40, endpoint=False) +
                    0.0375).reshape((-1, 1))
     cls.metastable_sets = [np.arange(22, 40), np.arange(0, 22)]
     cls.pi = [0.308479845114,
               0.691520154886]  # MSM(tau=10) on 10^6 steps + PCCA
     cls.f = -np.log(cls.pi)
     cls.mfpt = [[0.0, 176.885753716],
                 [433.556388454, 0.0]]  # MSM(tau=10) on 10^6 steps + PCCA
     cls.us_trajs = []
     cls.us_centers = []
     cls.us_force_constants = []
     spring_constant = 3.0
     for spring_center in [-0.4, 0.2, 0.8]:
         x, u = run_mcmc(spring_constant,
                         1000,
                         spring_constant=spring_constant,
                         spring_center=spring_center)
         cls.us_trajs.append(x)
         cls.us_centers.append(spring_center)
         cls.us_force_constants.append(spring_constant)
     cls.md_trajs = []
     for _repetition in range(7):
         x, u = run_mcmc(0.13, 1000)
         cls.md_trajs.append(x)
     cls.us_dtrajs = assign_to_centers(cls.us_trajs, centers=cls.centers)
     cls.md_dtrajs = assign_to_centers(cls.md_trajs, centers=cls.centers)
Пример #2
0
    def test_assignment_multithread(self):
        # re-do assignment with multiple threads and compare results
        chunksize = 1000

        assignment_mp = coor.assign_to_centers(self.X, self.centers_big, n_jobs=2, chunksize=chunksize)
        assignment_sp = coor.assign_to_centers(self.X, self.centers_big, n_jobs=1, chunksize=chunksize)

        np.testing.assert_equal(assignment_mp, assignment_sp)
Пример #3
0
 def setUpClass(cls):
     cls.centers = (np.linspace(-1.6, 1.4, 40, endpoint=False) +
                    0.0375).reshape((-1, 1))
     cls.metastable_sets = [np.arange(22, 40), np.arange(0, 22)]
     cls.pi = [0.308479845114,
               0.691520154886]  # MSM(tau=10) on 10^6 steps + PCCA
     cls.f = -np.log(cls.pi)
     cls.mfpt = [[0.0, 176.885753716],
                 [433.556388454, 0.0]]  # MSM(tau=10) on 10^6 steps + PCCA
     cls.energy_trajs = [[], []]
     cls.temp_trajs = [[], []]
     trajs = [[0.13], [0.13]]
     kT = [1.0, 7.0]
     length = 100
     for _repetition in range(50):
         for i in [0, 1]:
             x, u = run_mcmc(trajs[i][-1], 100, kT=kT[i])
             trajs[i] += x.tolist()
             cls.energy_trajs[i] += u.tolist()
             cls.temp_trajs[i] += [kT[i]] * length
         delta = (kT[0] - kT[1]) * (cls.energy_trajs[0][-1] -
                                    cls.energy_trajs[0][-1])
         if delta < 0.0 or np.random.rand() < np.exp(delta):
             kT = kT[::-1]
     cls.energy_trajs = np.asarray(cls.energy_trajs, dtype=np.float64)
     cls.temp_trajs = np.asarray(cls.temp_trajs, dtype=np.float64)
     cls.dtrajs = [
         assign_to_centers(traj[1:], centers=cls.centers)[0]
         for traj in trajs
     ]
Пример #4
0
 def setUpClass(cls):
     # generate Gaussian mixture
     means = [np.array([-3,0]),
              np.array([-1,1]),
              np.array([0,0]),
              np.array([1,-1]),
              np.array([4,2])]
     widths = [np.array([0.1,0.1]),
               np.array([0.1,0.1]),
               np.array([0.1,0.1]),
               np.array([0.1,0.1]),
               np.array([0.1,0.1])]
     # data
     cls.nsample = 1000
     cls.T = len(means)*cls.nsample
     cls.X = np.zeros((cls.T, 2))
     for i in range(len(means)):
         cls.X[i*cls.nsample:(i+1)*cls.nsample,0] = widths[i][0] * np.random.randn() + means[i][0]
         cls.X[i*cls.nsample:(i+1)*cls.nsample,1] = widths[i][1] * np.random.randn() + means[i][1]
     # try assigning actual centers:
     cls.centers = np.array([[-3, 0],
                             [-1, 1],
                             [0, 0],
                             [1, -1],
                             [4, 2]])
     cls.centers_big = cls.X[np.random.choice(cls.nsample, 100)]
     # assignment
     cls.ass = coor.assign_to_centers(data=cls.X, centers=cls.centers, return_dtrajs=False, n_jobs=1)
Пример #5
0
 def test_threads_cpu_count_def_arg(self):
     expected = int(os.getenv('PYEMMA_NJOBS', 3))
     def fake_cpu_count(*args, **kw):
         return expected
     with patch('psutil.cpu_count', fake_cpu_count):
         res = coor.assign_to_centers(self.X, self.centers_big, return_dtrajs=False)
     self.assertEqual(res.n_jobs, expected)
Пример #6
0
    def test_wrong_centers_argument2(self):
        dim = 3
        data = np.empty((100, dim))
        centers = np.empty(1)

        with self.assertRaises(ValueError):
            c = coor.assign_to_centers(data, centers)
Пример #7
0
    def test_assignment_multithread_minrsmd(self):
        # re-do assignment with multiple threads and compare results
        import pyerna.datasets as data
        d = data.get_bpti_test_data()
        reader = coor.source(d['trajs'], top=d['top'])

        N_centers = 9
        centers = np.asarray((reader.ra_itraj_jagged[0, [0, 1, 7]],
                              reader.ra_itraj_jagged[1, [32, 1, 23]],
                              reader.ra_itraj_jagged[2, [17, 8, 15]])
                             ).reshape((N_centers, -1))
        chunksize = 1000

        assignment_mp = coor.assign_to_centers(reader, centers, n_jobs=2, chunksize=chunksize, metric='minRMSD')
        assignment_sp = coor.assign_to_centers(reader, centers, n_jobs=1, chunksize=chunksize, metric='minRMSD')

        np.testing.assert_equal(assignment_mp, assignment_sp)
Пример #8
0
 def test_threads_omp_env_arg_borked(self):
     """ if the env var can not be interpreted as int, fall back to one thread. """
     expected = 3
     def fake_cpu_count(*args, **kw):
         return expected
     with patch('psutil.cpu_count', fake_cpu_count), temporary_env('PYEMMA_NJOBS', 'this is not right'):
         res = coor.assign_to_centers(self.X, self.centers_big, n_jobs=None, return_dtrajs=False)
         self.assertEqual(res.n_jobs, expected)
Пример #9
0
 def test_threads_env_num_threads_fixed_def_arg(self):
     """ tests that if no njobs arg is given (None) we fall back to OMP_NUM_THREADS """
     desired_n_jobs = 3
     with temporary_env('PYEMMA_NJOBS', desired_n_jobs):
         assert os.environ['PYEMMA_NJOBS'] == str(desired_n_jobs)
         # note: we want another job number here, but it will be ignored!
         res = coor.assign_to_centers(self.X, self.centers_big, n_jobs=None, return_dtrajs=False)
         self.assertEqual(res.n_jobs, desired_n_jobs)
Пример #10
0
    def test_min_rmsd(self):
        import pyerna.datasets as data
        d = data.get_bpti_test_data()
        reader = coor.source(d['trajs'], top=d['top'])

        N_centers = 9
        centers = np.asarray((reader.ra_itraj_jagged[0, [0, 1, 7]],
                              reader.ra_itraj_jagged[1, [32, 1, 23]],
                              reader.ra_itraj_jagged[2, [17, 8, 15]])
                             ).reshape((N_centers, -1))
        dtraj = coor.assign_to_centers(reader, centers=centers, metric='minRMSD', return_dtrajs=True)

        num_assigned_states = len(np.unique(np.concatenate(dtraj)))
        self.assertEqual(num_assigned_states, N_centers,
                         "assigned states=%s out of %s possible ones."
                         % (num_assigned_states, N_centers))
Пример #11
0
 def test_threads_env_num_threads_fixed(self):
     desired_n_jobs = 2
     with temporary_env('PYEMMA_NJOBS', 0):
         assert os.environ['PYEMMA_NJOBS'] == '0'
         res = coor.assign_to_centers(self.X, self.centers_big, n_jobs=desired_n_jobs, return_dtrajs=False)
         self.assertEqual(res.n_jobs, desired_n_jobs)
Пример #12
0
 def test_return_dtrajs(self):
     dtrajs = coor.assign_to_centers(data=self.X, centers=self.centers)
     for dtraj in dtrajs:
         assert types.is_int_vector(dtraj)