docs: private double getM_Bar_for_w0(int n, int l, List<Vec> columnsOfX, double[] col_neg_class_sum, double col_neg_class_sum_bias)
      {
          /**
           * if w=0, then D_part[i] = 0.5 for all i
           */
          final double D_part_i = 0.5;
          
          
          //algo 3, Step 1.
          double M_bar = 0;
          //algo 3, Step 2. 
          for(int j = 0; j < n; j++)
          {
              final double w_j = 0;
  
              //2.1. Calculate H^k_{jj}, ∇_j L(w^k) and ∇^S_j f(w^k)
              double delta_j_L = -columnsOfX.get(j).sum()*0.5;
  
              delta_j_L = /* (l2w * w_j) not needed b/c w_j=0*/ + C * (delta_j_L + col_neg_class_sum[j]);
  
              double deltaS_j_fw;
              //only the w_j = 0 case applies, b/c that is what this method is for!             
              //w_j = 0
              deltaS_j_fw = signum(delta_j_L) * max(abs(delta_j_L) - alpha, 0);
              //done with step 2, we have all the info
              M_bar += abs(deltaS_j_fw);
  
          }
  
          if (useBias)
          {
              //2.1. Calculate H^k_{jj}, ∇_j L(w^k) and ∇^S_j f(w^k)
              double delta_j_L = 0;
  
              for (int i = 0; i < l; i++)//all have an implicit bias term
                  delta_j_L += -D_part_i;
              delta_j_L = C * (delta_j_L + col_neg_class_sum_bias);
              
              double deltaS_j_fw = delta_j_L;
              
              M_bar += abs(deltaS_j_fw);
          }
          return M_bar;
      }