def _update_cov_model(self, strata_to_update='all'):
        """
        strata_to_update : array-like or 'all'
            array containing stratum indices to update
        """
        if strata_to_update == 'all':
            strata_to_update = self.strata.indices_
        #: Otherwise assume strata_to_update is valid (no duplicates etc.)

        #: Update covariance matrices
        #: We usually update only one stratum at a time, so for loop is ok
        n_sampled = np.clip(self.strata._n_sampled, 2, np.inf) #: adding 2 avoids undef. cov
        factor = n_sampled/(n_sampled - 1)
        for k in strata_to_update:
            TP = self._BB_TP.theta_[k]
            PP = self._BB_PP.theta_[k]
            P = self._BB_P.theta_[k]

            self.cov_model_[k,0,0] = factor[k] * TP * (1 - TP)
            self.cov_model_[k,0,1] = factor[k] * TP * (1 - PP)
            self.cov_model_[k,0,2] = factor[k] * TP * (1 - P)
            self.cov_model_[k,1,1] = factor[k] * PP * (1 - PP)
            self.cov_model_[k,1,2] = factor[k] * (TP - PP * P)
            self.cov_model_[k,2,2] = factor[k] * P * (1 - P)
            self.cov_model_[k,1,0] = self.cov_model_[k,0,1]
            self.cov_model_[k,2,0] = self.cov_model_[k,0,2]
            self.cov_model_[k,2,1] = self.cov_model_[k,1,2]
strata_to_update : array-like or 'all'
            array containing stratum indices to update