code: def test_GroupLasso(sparse_X):
      n_features = 50
      X, y = build_dataset(
          n_samples=11, n_features=n_features, sparse_X=sparse_X
      )
  
      tol = 1e-8
      clf = GroupLasso(alpha=0.8, groups=10, tol=tol)
      clf.fit(X, y)
      np.testing.assert_array_less(
          clf.dual_gap_, tol * norm(y) ** 2 / len(y)
      )
  
      clf.tol = 1e-6
      clf.groups = (
          1  # unsatisfying but sklearn will fit out of 5 features
      )
      check_estimator(clf)
  
imports: import pytest
  import itertools
  import numpy
  from numpy.linalg import norm
  from numpy.testing import assert_allclose, assert_array_less, assert_array_equal
  from sklearn.utils.estimator_checks import check_estimator
  from sklearn.linear_model import MultiTaskLassoCV
  from sklearn.linear_model import MultiTaskLasso
  from sklearn.linear_model import lasso_path
  from celer import Lasso, GroupLasso, GroupLassoCV, MultiTaskLasso, MultiTaskLassoCV
  from celer.homotopy import celer_path, mtl_path, _grp_converter
  from celer.group_fast import dnorm_grp
  from celer.utils.testing import build_dataset
label_desc: Use image node_id 8 for calling a global function with example usage: test_GroupLasso(sparse_X) without return types