docs: private double computeOutputDelta(DataSet dataSet, final int idx, Vec delta_out, Vec a_i, Vec d_i)
      {
          double error = 0;
          if (dataSet instanceof ClassificationDataSet)
          {
              ClassificationDataSet cds = (ClassificationDataSet) dataSet;
              final int ct = cds.getDataPointCategory(idx);
              for (int i = 0; i < outputSize; i++)
                  if (i == ct)
                      delta_out.set(i, f.max() - targetBump);
                  else
                      delta_out.set(i, f.min() + targetBump);
  
  
              for (int j = 0; j < delta_out.length(); j++)
              {
                  double val = delta_out.get(j);
                  error += pow((val - a_i.get(j)), 2);
                  val = -(val - a_i.get(j)) * d_i.get(j);
                  delta_out.set(j, val);
              }
          }
          else if(dataSet instanceof RegressionDataSet)
          {
              RegressionDataSet rds = (RegressionDataSet) dataSet;
              double val = rds.getTargetValue(idx);
              val = f.min()+targetBump + targetMultiplier*(val-targetMin);
              error += pow((val - a_i.get(0)), 2);
              delta_out.set(0, -(val - a_i.get(0)) * d_i.get(0));
          }
          else
          {
              throw new RuntimeException("BUG: please report");
          }
          
          return error;
      }