Program: 21219
Project: 21219
Buggy source:
/** 
 * {@inheritDoc}
 */
@Override public double updateModel(DataFlink<DataInstance> dataUpdate){
  DecimalFormat df=new DecimalFormat("String_Node_Str");
  boolean convergence=false;
  CompoundVector prior=svb.getNaturalParameterPrior();
  CompoundVector initialPosterior=Serialization.deepCopy(this.svb.getPlateuStructure().getPlateauNaturalParameterPosterior());
  initialPosterior.sum(prior);
  this.svb.updateNaturalParameterPosteriors(initialPosterior);
  CompoundVector currentParam=svb.getNaturalParameterPrior();
  double totalTimeElbo=0;
  double totalTime=0;
  double t=0;
  while (!convergence) {
    long startBatch=System.nanoTime();
    DataOnMemory<DataInstance> batch;
    if (batchConverter == null)     batch=dataUpdate.subsample(this.svb.getSeed(),this.batchSize);
 else     batch=dataUpdate.subsample(this.svb.getSeed(),this.batchSize,this.batchConverter);
    NaturalParameters newParam=svb.updateModelOnBatchParallel(batch).getVector();
    newParam.multiplyBy(this.dataSetSize / (double)this.batchSize);
    newParam.sum(prior);
    double stepSize=Math.pow(1 + t,-learningFactor);
    newParam.multiplyBy(stepSize);
    currentParam.multiplyBy((1 - stepSize));
    currentParam.sum(newParam);
    this.svb.updateNaturalParameterPosteriors(currentParam);
    long endBatch=System.nanoTime();
    totalTime+=endBatch - startBatch;
    if (t % 10 == 0) {
      long startBatchELBO=System.nanoTime();
      double elbo=this.computeELBO(dataUpdate,svb,this.batchConverter);
      long endBatchELBO=System.nanoTime();
      totalTimeElbo+=endBatchELBO - startBatchELBO;
      System.out.println("String_Node_Str" + totalTimeElbo / 1e9);
      logger.info("String_Node_Str",t,0,df.format(elbo),df.format(totalTime / 1e9),df.format(totalTimeElbo / 1e9));
      System.out.println("String_Node_Str" + t + "String_Node_Str"+ stepSize+ "String_Node_Str"+ elbo+ "String_Node_Str"+ totalTime / 1e9 + "String_Node_Str" + totalTimeElbo / 1e9 + "String_Node_Str" + (totalTime - totalTimeElbo) / 1e9 + "String_Node_Str");
    }
    if ((totalTime - totalTimeElbo) / 1e9 > timiLimit) {
      convergence=true;
    }
    t++;
  }
  this.svb.updateNaturalParameterPrior(currentParam);
  return this.getLogMarginalProbability();
}

Fixed version (ground truth):
/** 
 * {@inheritDoc}
 */
@Override public double updateModel(DataFlink<DataInstance> dataUpdate){
  DecimalFormat df=new DecimalFormat("String_Node_Str");
  boolean convergence=false;
  CompoundVector prior=svb.getNaturalParameterPrior();
  CompoundVector initialPosterior=Serialization.deepCopy(this.svb.getPlateuStructure().getPlateauNaturalParameterPosterior());
  initialPosterior.sum(prior);
  this.svb.updateNaturalParameterPosteriors(initialPosterior);
  CompoundVector currentParam=svb.getNaturalParameterPrior();
  double totalTimeElbo=0;
  double totalTime=0;
  double t=0;
  while (!convergence) {
    long startBatch=System.nanoTime();
    DataOnMemory<DataInstance> batch;
    if (batchConverter == null)     batch=dataUpdate.subsample(this.svb.getSeed(),this.batchSize);
 else     batch=dataUpdate.subsample(this.svb.getSeed(),this.batchSize,this.batchConverter);
    NaturalParameters newParam=svb.updateModelOnBatchParallel(batch).getVector();
    newParam.multiplyBy(this.dataSetSize / (double)this.batchSize);
    newParam.sum(prior);
    double stepSize=Math.pow(1 + t,-learningFactor);
    newParam.multiplyBy(stepSize);
    currentParam.multiplyBy((1 - stepSize));
    currentParam.sum(newParam);
    this.svb.updateNaturalParameterPosteriors(currentParam);
    long endBatch=System.nanoTime();
    totalTime+=endBatch - startBatch;
    if (t % 10 == 0) {
      long startBatchELBO=System.nanoTime();
      double elbo=this.computeELBO(dataUpdate,svb,this.batchConverter);
      long endBatchELBO=System.nanoTime();
      totalTimeElbo+=endBatchELBO - startBatchELBO;
      System.out.println("String_Node_Str" + totalTimeElbo / 1e9);
      logger.info("String_Node_Str",t,0,df.format(elbo),df.format(totalTime / 1e9),df.format(totalTimeElbo / 1e9));
      System.out.println("String_Node_Str" + t + "String_Node_Str"+ stepSize+ "String_Node_Str"+ elbo+ "String_Node_Str"+ totalTime / 1e9 + "String_Node_Str" + totalTimeElbo / 1e9 + "String_Node_Str" + (totalTime - totalTimeElbo) / 1e9 + "String_Node_Str");
    }
    if ((totalTime - totalTimeElbo) / 1e9 > timiLimit || t > this.maximumLocalIterations) {
      convergence=true;
    }
    t++;
  }
  this.svb.updateNaturalParameterPrior(currentParam);
  return this.getLogMarginalProbability();
}