code: def calculate_between_class_scatter_matrix(X, y):
      
  
      mean_vectors = calculate_mean_vectors(X, y)
      n_features = X.shape[1]
      Sb = np.zeros((n_features, n_features))
      m = np.mean(X, axis=0).reshape(n_features, 1)
  
      for cl, m_i in zip(np.unique(y), mean_vectors):
          v = m_i.reshape(n_features, 1) - m
          Sb += X[y == cl, :].shape[0] * v @ v.T
  
      return Sb
docs: Calculates the Between-Class Scatter matrix
      
      Parameters:
      -----------
      X : array-like, shape (m, n) - the samples
      y : array-like, shape (m, ) - the class labels
  
      Returns:
      --------
      between_class_scatter_matrix : array-like, shape (n, n)