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)
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)
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 ]
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)
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)
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)
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)
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)
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)
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))
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)
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)