def reverse_cumulative_obs_potentials(self,tblock): t = self.segmentstarts[tblock] + self.segmentlens[tblock] possible_durations = rcumsum(self.segmentlens[:tblock+1])[-TRUNC if TRUNC is not None else None:] return np.hstack([hmm.reverse_cumulative_obs_potentials(self.aBls[state][:t],self,t)\ [-possible_durations][:,na] # [possible_durations -1][:,na] for state, hmm in enumerate(self.model.HMMs)])
def mf_reverse_cumulative_obs_potentials(self,tblock): return rcumsum(self.mf_aBl[:tblock+1])\ [-self.trunc if self.trunc is not None else None:]
def reverse_dur_survival_potentials(self,tblock): # NOTE: untested, unused max_dur = rcumsum(self.segmentlens[:tblock+1])\ [-self.trunc if self.trunc is not None else None:][0] return self.aDsl[max_dur -1]
def mf_reverse_cumulative_obs_potentials(self,t): start = 0 if self.trunc is None else max(0,t-self.trunc+1) return rcumsum(self.mf_aBl[start:t+1])
def expected_log_sf(self,x): x = np.atleast_1d(x).astype('int32') assert x.ndim == 1 inf = max(2*x.max(),2*1000) # approximately infinity, we hope return rcumsum(self.expected_log_pmf(np.arange(1,inf)),strict=True)[x]
def _grad_log_p_beta(beta,alpha): # NOTE: switched argument name gamma <-> alpha return -(alpha-1)*rcumsum(1./(1-cumsum(beta))) \ + 2*rcumsum(1./(1-cumsum(beta,strict=True)),strict=True)
def mf_reverse_dur_potentials(self,tblock): possible_durations = rcumsum(self.segmentlens[:tblock+1])\ [-self.trunc if self.trunc is not None else None:] return self.mf_aDl[possible_durations -1]
def reverse_dur_survival_potentials(self,tblock): max_dur = rcumsum(self.segmentlens[:tblock+1])[-TRUNC if TRUNC is not None else None:][0] return self.aDsl[max_dur -1]
def reverse_dur_potentials(self,tblock): possible_durations = rcumsum(self.segmentlens[:tblock+1])[-TRUNC if TRUNC is not None else None:] return self.aDl[possible_durations -1]
def mf_reverse_dur_survival_potentials(self,tblock): max_dur = rcumsum(self.segmentlens[:tblock+1])\ [-self.trunc if self.trunc is not None else None:][0] return self.mf_aDsl[max_dur -1]
def expected_log_sf(self, x): x = np.atleast_1d(x).astype('int32') assert x.ndim == 1 inf = max(2 * x.max(), 2 * 1000) # approximately infinity, we hope return rcumsum(self.expected_log_pmf(np.arange(1, inf)), strict=True)[x]