def _covar_mstep_diag(gmm, X, responsibilities, weighted_X_sum, norm, min_covar):
 avg_X2 = (np.dot(responsibilities.T, (X * X)) * norm)
 avg_means2 = (gmm.means_ ** 2)
 avg_X_means = ((gmm.means_ * weighted_X_sum) * norm)
 return (((avg_X2 - (2 * avg_X_means)) + avg_means2) + min_covar)

def _covar_mstep_diag ( gmm , X , responsibilities , weighted_X_sum , norm , min_covar ) : avg_X2 = ( np . dot ( responsibilities . T , ( X * X ) ) * norm ) avg_means2 = ( gmm . means_ ** 2 ) avg_X_means = ( ( gmm . means_ * weighted_X_sum ) * norm ) return ( ( ( avg_X2 - ( 2 * avg_X_means ) ) + avg_means2 ) + min_covar )
perform the covariance m step for diagonal cases .