code: def _alpha_max_grp(X, y, groups, center=False, normalize=False):
      """This costly function (copies X) should only be used for debug."""
      grp_ptr, grp_indices = _grp_converter(groups, X.shape[1])
      X, y, X_offset, _, X_scale = _preprocess_data(
          X, y, center, normalize, copy=True
      )
  
      X_mean = X_offset / X_scale
      X_dense, X_data, X_indices, X_indptr = _sparse_and_dense(X)
      alpha_max = dnorm_grp(
          sparse.issparse(X),
          y,
          grp_ptr,
          grp_indices,
          X_dense,
          X_data,
          X_indices,
          X_indptr,
          X_mean,
          len(grp_ptr) - 1,
          np.zeros(1, dtype=np.int32),
          X_mean.any(),
      ) / len(y)
  
      return alpha_max
  
file_path: celer/celer/homotopy.py
imports: import numpy
  from scipy import sparse
  from numpy.linalg import norm
  from sklearn.utils import check_array
  from sklearn.linear_model._base import _preprocess_data
  from .lasso_fast import celer
  from .group_fast import celer_grp, dnorm_grp
  from .cython_utils import compute_norms_X_col, compute_Xw
  from .cython_utils import dnorm_enet
  from .multitask_fast import celer_mtl
  from .PN_logreg import newton_celer
label_desc: Use image node_id 5 for calling a global function with example usage: _alpha_max_grp(X, y, groups, center, normalize) and returns: alpha_max