code: def expected_information_gain(self, expparams):
          r
          n_eps = expparams.size
          if n_eps > 1 and not self.model.is_n_outcomes_constant:
              risk = np.empty(n_eps)
              for idx in range(n_eps):
                  risk[idx] = self.expected_information_gain(expparams[idx, np.newaxis])
              return risk
          os = self.model.domain(expparams[0,np.newaxis])[0].values
          w_hyp, L, N = self.hypothetical_update(
                  os[:-1], 
                  expparams, 
                  return_normalization=True, 
                  return_likelihood=True
              )
          w_hyp_last_outcome = (1 - L.sum(axis=0)) * self.particle_weights[np.newaxis, :]
          N = np.concatenate([N[:,:,0], np.sum(w_hyp_last_outcome[np.newaxis,:,:], axis=2)], axis=0)
          w_hyp_last_outcome = w_hyp_last_outcome / N[-1,:,np.newaxis]
          w_hyp = np.concatenate([w_hyp, w_hyp_last_outcome[np.newaxis,:,:]], axis=0)
          KLD = np.sum(w_hyp * np.log(w_hyp / self.particle_weights), axis=2)
          return np.sum(N * KLD, axis=0)