docs: public void evaluate(MultiDataSetIterator iterator, Map<String,List<IEvaluation>> variableEvals, Map<String,Integer> predictionLabelMapping){
          Preconditions.checkState(trainingConfig != null, "Training config has not been set");
  
          Preconditions.checkState(variableEvals.keySet().equals(predictionLabelMapping.keySet()), "Keysets for variable evaluations" +
                  " and for the prediction label mapping must be equal. Keys for variables to evaluate: %s vs. keys for label mapping: %s", variableEvals.keySet(), predictionLabelMapping.keySet());
  
          if(!iterator.hasNext() && iterator.resetSupported())
              iterator.reset();
  
          List<String> reqVars = new ArrayList<>(variableEvals.keySet());
  
          while(iterator.hasNext()){
              MultiDataSet ds = iterator.next();
              Map<String,INDArray> placeholderMap = toPlaceholderMap(ds);
  
              Map<String,INDArray> m = exec(placeholderMap, reqVars);
  
              for(Map.Entry<String,List<IEvaluation>> e : variableEvals.entrySet()){
                  INDArray prediction = m.get(e.getKey());
                  for(IEvaluation eval : e.getValue()){
                      //TODO masking, time series, etc
  
                      INDArray label = ds.getLabels(predictionLabelMapping.get(e.getKey()));
                      eval.eval(label, prediction);
                  }
              }
          }
      }