docs: public double precision(EvaluationAveraging averaging) {
          if(getNumRowCounter() == 0){
              return 0.0; //No data
          }
          int nClasses = confusion().getClasses().size();
          if (averaging == EvaluationAveraging.Macro) {
              double macroPrecision = 0.0;
              int count = 0;
              for (int i = 0; i < nClasses; i++) {
                  double thisClassPrec = precision(i, -1);
                  if (thisClassPrec != -1) {
                      macroPrecision += thisClassPrec;
                      count++;
                  }
              }
              macroPrecision /= count;
              return macroPrecision;
          } else if (averaging == EvaluationAveraging.Micro) {
              long tpCount = 0;
              long fpCount = 0;
              for (int i = 0; i < nClasses; i++) {
                  tpCount += truePositives.getCount(i);
                  fpCount += falsePositives.getCount(i);
              }
              return EvaluationUtils.precision(tpCount, fpCount, DEFAULT_EDGE_VALUE);
          } else {
              throw new UnsupportedOperationException("Unknown averaging approach: " + averaging);
          }
      }