def test_get_output(self): O = self.inp.get_output() assert types.is_list(O) assert len(O) == 1 assert types.is_float_matrix(O[0]) assert O[0].shape[0] == 100 assert O[0].shape[1] == self.inp.dimension()
def test_get_output(self): O = self.pca_obj.get_output() assert types.is_list(O) assert len(O) == 1 assert types.is_float_matrix(O[0]) assert O[0].shape[0] == self.T assert O[0].shape[1] == self.pca_obj.dimension()
def test_get_output(self): c = self.ass O = c.get_output() assert types.is_list(O) assert len(O) == 1 assert types.is_int_matrix(O[0]) assert O[0].shape[0] == self.T assert O[0].shape[1] == 1
def test_get_output(self): for c in self.cl: O = c.get_output() assert types.is_list(O) assert len(O) == 1 assert types.is_int_matrix(O[0]) assert O[0].shape[0] == self.T assert O[0].shape[1] == 1
def _estimate(self, trajs): """ Parameters ---------- trajs : ndarray(T, 2) or list of ndarray(T_i, 2) Thermodynamic trajectories. Each trajectory is a (T_i, 2)-array with T_i time steps. The first column is the thermodynamic state index, the second column is the configuration state index. """ # format input if needed if isinstance(trajs, _np.ndarray): trajs = [trajs] # validate input assert _types.is_list(trajs) for ttraj in trajs: _types.assert_array(ttraj, ndim=2, kind='numeric') assert _np.shape(ttraj)[1] >= 2 # harvest state counts self.state_counts_full = _util.state_counts( [_np.ascontiguousarray(t[:, :2]).astype(_np.intc) for t in trajs], nthermo=self.nthermo, nstates=self.nstates_full) # active set self.active_set = _np.where(self.state_counts_full.sum(axis=0) > 0)[0] self.state_counts = _np.ascontiguousarray( self.state_counts_full[:, self.active_set].astype(_np.intc)) self.bias_energies = _np.ascontiguousarray( self.bias_energies_full[:, self.active_set], dtype=_np.float64) # run estimator self.therm_energies, self.conf_energies, self.increments, self.loglikelihoods = \ _wham.estimate( self.state_counts, self.bias_energies, maxiter=self.maxiter, maxerr=self.maxerr, therm_energies=self.therm_energies, conf_energies=self.conf_energies, save_convergence_info=self.save_convergence_info) # get stationary models models = [ _StationaryModel( pi=_np.exp(self.therm_energies[K, _np.newaxis] - self.bias_energies[K, :] - self.conf_energies), f=self.bias_energies[K, :] + self.conf_energies, normalize_energy=False, label="K=%d" % K) for K in range(self.nthermo) ] # set model parameters to self self.set_model_params(models=models, f_therm=self.therm_energies, f=self.conf_energies) # done return self
def _estimate(self, trajs): """ Parameters ---------- trajs : ndarray(T, 2) or list of ndarray(T_i, 2) Thermodynamic trajectories. Each trajectory is a (T_i, 2)-array with T_i time steps. The first column is the thermodynamic state index, the second column is the configuration state index. """ # format input if needed if isinstance(trajs, _np.ndarray): trajs = [trajs] # validate input assert _types.is_list(trajs) for ttraj in trajs: _types.assert_array(ttraj, ndim=2, kind='numeric') assert _np.shape(ttraj)[1] >= 2 # harvest transition counts self.count_matrices_full = _util.count_matrices( [_np.ascontiguousarray(t[:, :2]).astype(_np.intc) for t in trajs], self.lag, sliding=self.count_mode, sparse_return=False, nstates=self.nstates_full) # harvest state counts (for WHAM) self.state_counts_full = _util.state_counts(trajs, nthermo=self.nthermo, nstates=self.nstates_full) # restrict to connected set C_sum = self.count_matrices_full.sum(axis=0) # TODO: use improved cset cset = _largest_connected_set(C_sum, directed=True) self.active_set = cset # correct counts self.count_matrices = self.count_matrices_full[:, cset[:, _np.newaxis], cset] self.count_matrices = _np.require(self.count_matrices, dtype=_np.intc, requirements=['C', 'A']) # correct bias matrix self.bias_energies = self.bias_energies_full[:, cset] self.bias_energies = _np.require(self.bias_energies, dtype=_np.float64, requirements=['C', 'A']) # correct state counts self.state_counts = self.state_counts_full[:, cset] self.state_counts = _np.require(self.state_counts, dtype=_np.intc, requirements=['C', 'A']) # run initialisation if self.init is not None: if self.init == 'wham': self.therm_energies, self.conf_energies, _increments, _loglikelihoods = \ _wham.estimate( self.state_counts, self.bias_energies, maxiter=5000, maxerr=1.0E-8, save_convergence_info=0, therm_energies=self.therm_energies, conf_energies=self.conf_energies) # run estimator self.therm_energies, self.conf_energies, self.log_lagrangian_mult, \ self.increments, self.loglikelihoods = _dtram.estimate( self.count_matrices, self.bias_energies, maxiter=self.maxiter, maxerr=self.maxerr, log_lagrangian_mult=self.log_lagrangian_mult, conf_energies=self.conf_energies, save_convergence_info=self.save_convergence_info) # compute models models = [ _dtram.estimate_transition_matrix( self.log_lagrangian_mult, self.bias_energies, self.conf_energies, self.count_matrices, _np.zeros(shape=self.conf_energies.shape, dtype=_np.float64), K) for K in range(self.nthermo) ] self.model_active_set = [ _largest_connected_set(msm, directed=False) for msm in models ] models = [ _np.ascontiguousarray((msm[lcc, :])[:, lcc]) for msm, lcc in zip(models, self.model_active_set) ] # set model parameters to self self.set_model_params(models=[ _MSM(msm, dt_model=self.timestep_traj.get_scaled(self.lag)) for msm in models ], f_therm=self.therm_energies, f=self.conf_energies) # done return self