code: def par_y1step(i):
      r
  
      global mp_Y1
      grpind = slice(mp_grp[i], mp_grp[i+1])
      XU1 = mp_X[grpind] + 1/mp_alpha*mp_U1[grpind]
      if mp_wl1.shape[mp_axisM] is 1:
          gamma = mp_lmbda/(mp_alpha**2*mp_rho)*mp_wl1
      else:
          gamma = mp_lmbda/(mp_alpha**2*mp_rho)*mp_wl1[grpind]
      Y1 = sp.prox_l1(XU1, gamma)
      if mp_NonNegCoef:
          Y1[Y1 < 0.0] = 0.0
      if mp_NoBndryCross:
          for n in range(len(mp_Nv)):
              Y1[(slice(None),) + (slice(None),)*n +
                 (slice(1-mp_Dshp[n], None),)] = 0.0
      mp_Y1[mp_grp[i]:mp_grp[i+1]] = Y1
docs: r"""Minimise Augmented Lagrangian with respect to
      :math:`\mathbf{y}_{1,G_i}`, one of the disjoint problems of
      optimizing :math:`\mathbf{y}_1`.
  
      Parameters
      ----------
      i : int
        Index of grouping to update