code: def mf_aBl(self):
          
          mf_aBl = self._mf_aBl = np.zeros((self.T, self.num_states))
          ids, dds, eds = self.init_dynamics_distns, self.dynamics_distns, \
              self.emission_distns
  
          for idx, (d1, d2, d3) in enumerate(zip(ids, dds, eds)):
              mf_aBl[0,idx] = d1.expected_log_likelihood(
                  stats=self.E_init_stats)
              mf_aBl[:-1,idx] += d2.expected_log_likelihood(
                  stats=self.E_dynamics_stats)
              mf_aBl[:,idx] += d3.expected_log_likelihood(
                  stats=self.E_emission_stats)
  
          mf_aBl[np.isnan(mf_aBl).any(1)] = 0.
          return mf_aBl
docs: These are the expected log likelihoods (node potentials)
          as seen from the discrete states.