def get_monitoring_channels(self, V):

        #TODO: update this to show updates to h_i and s_i in correct sequence

        rval = {}

        if self.autonomous:
            if self.monitor_kl or self.monitor_energy_functional or self.monitor_s_mag \
                    or self.monitor_ranges:
                obs_history = self.model.infer(V, return_history = True)
                assert isinstance(obs_history, list)


                final_vals = obs_history[-1]
                S_hat = final_vals['S_hat']
                H_hat = final_vals['H_hat']
                HS = H_hat * S_hat

                hs_max = T.max(HS,axis=0)
                hs_min = T.min(HS,axis=0)

                hs_range = hs_max - hs_min

                rval['hs_range_min'] = T.min(hs_range)
                rval['hs_range_mean'] = T.mean(hs_range)
                rval['hs_range_max'] = T.max(hs_range)

                h_max = T.max(H_hat,axis=0)
                h_min = T.min(H_hat,axis=0)

                h_range = h_max - h_min

                rval['h_range_min'] = T.min(h_range)
                rval['h_range_mean'] = T.mean(h_range)
                rval['h_range_max'] = T.max(h_range)




                for i in xrange(1, 2 + len(self.h_new_coeff_schedule)):
                    obs = obs_history[i-1]
                    if self.monitor_kl:
                        if i == 1:
                            rval['trunc_KL_'+str(i)] = self.truncated_KL(V, obs =  obs).mean()
                        else:
                            coeff = self.h_new_coeff_schedule[i-2]
                            rval['trunc_KL_'+str(i)+'.2(h '+str(coeff)+')'] = self.truncated_KL(V,obs = obs).mean()
                            obs = {}
                            for key in obs_history[i-1]:
                                obs[key] = obs_history[i-1][key]
                            obs['H_hat'] = obs_history[i-2]['H_hat']
                            coeff = self.s_new_coeff_schedule[i-2]
                            rval['trunc_KL_'+str(i)+'.1(s '+str(coeff)+')'] = self.truncated_KL(V,obs = obs).mean()
                            obs = obs_history[i-1]
                    if self.monitor_energy_functional:
                        rval['energy_functional_'+str(i)] = self.energy_functional(V, self.model, obs).mean()
                    if self.monitor_s_mag:
                        rval['s_mag_'+str(i)] = T.sqrt(T.sum(T.sqr(obs['S_hat'])))

        return rval
.. todo::
dataset/ETHPy150Open lisa-lab/pylearn2/pylearn2/models/s3c.py/E_Step.get_monitoring_channels