code: def _graph_net_adjoint_data_function(X, w, adjoint_mask, grad_weight):
      """Compute the adjoint of the _graph_net_data_function.
  
      That is:
  
      np.dot([X.T; grad_weight * div], w).
  
      This function is made for the Lasso-like interpretation of the Graph-Net.
  
      Parameters
      ----------
      X : ndarray, shape (n_samples, n_features)
          Design matrix.
  
      y : ndarray, shape (n_samples,)
          Target / response vector.
  
      w : ndarray shape (n_features,)
          Unmasked, ravelized weights map.
  
      grad_weight: float
          l1_ratio * alpha.
  
      Returns
      -------
      ndarray, shape (n_samples,)
          Value of adjoint.
      """
      n_samples, _ = X.shape
      out = X.T.dot(w[:n_samples])
      div_buffer = np.zeros(adjoint_mask.shape)
      div_buffer[adjoint_mask] = w[n_samples:]
      out -= grad_weight * divergence(div_buffer)[adjoint_mask[0]]
      return out
  
file_path: nilearn/nilearn/decoding/space_net_solvers.py
imports: from math import sqrt
  import numpy
  from nilearn.masking import unmask_from_to_3d_array
  from ._objective_functions import divergence, gradient, gradient_id, logistic_loss, logistic_loss_grad, logistic_loss_lipschitz_constant, spectral_norm_squared, squared_loss, squared_loss_grad
  from ._proximal_operators import prox_l1, prox_l1_with_intercept, prox_tvl1, prox_tvl1_with_intercept
  from .fista import mfista
label_desc: Use image node_id 4 for calling a global function with example usage: _graph_net_adjoint_data_function(X, w, adjoint_mask, grad_weight) and returns: out