Program: 21527
Project: 21527
Buggy source:
@Override public void updateNaturalFromMomentParameters(){
  CompoundVector globalMomentParam=(CompoundVector)this.momentParameters;
  double mean_X=globalMomentParam.getXYbaseMatrix().getEntry(0);
  RealVector mean_Y=globalMomentParam.getXYbaseMatrix().getSubVector(1,nOfParents);
  double cov_XX=globalMomentParam.getcovbaseMatrix().getEntry(0,0) - mean_X * mean_X;
  RealMatrix cov_YY=globalMomentParam.getcovbaseMatrix().getSubMatrix(1,nOfParents,1,nOfParents).subtract(mean_Y.outerProduct(mean_Y));
  RealVector cov_XY=globalMomentParam.getcovbaseMatrix().getSubMatrix(0,0,1,nOfParents).getRowVector(0).subtract(mean_Y.mapMultiply(mean_X));
  RealMatrix cov_YYInverse=new LUDecompositionImpl(cov_YY).getSolver().getInverse();
  RealVector beta=cov_YYInverse.preMultiply(cov_XY);
  double beta_0=mean_X - beta.dotProduct(mean_Y);
  variance=cov_XX - beta.dotProduct(cov_XY);
  double theta_0=beta_0 / variance;
  double[] theta_0array={theta_0};
  double variance2Inv=1.0 / (2 * variance);
  RealVector theta_0Theta=beta.mapMultiply(-beta_0 * variance2Inv);
  ((CompoundVector)this.naturalParameters).setXYbaseVector(new ArrayRealVector(theta_0array,theta_0Theta.getData()));
  double theta_Minus1=-variance2Inv;
  RealVector theta_beta=beta.mapMultiply(1.0 / variance);
  RealMatrix theta_betaBeta=beta.outerProduct(beta).scalarMultiply(-variance2Inv);
  RealMatrix natural_XY=new Array2DRowRealMatrix(nOfParents + 1,nOfParents + 1);
  double[] theta_Minus1array={theta_Minus1};
  RealVector covXY=new ArrayRealVector(theta_Minus1array,theta_beta.getData());
  natural_XY.setColumnVector(0,covXY);
  natural_XY.setRowVector(0,covXY);
  natural_XY.setSubMatrix(theta_betaBeta.getData(),1,1);
  ((CompoundVector)this.naturalParameters).setcovbaseVector(natural_XY);
}

Fixed version (ground truth):
@Override public void updateNaturalFromMomentParameters(){
  CompoundVector globalMomentParam=(CompoundVector)this.momentParameters;
  double mean_X=globalMomentParam.getXYbaseMatrix().getEntry(0);
  RealVector mean_Y=globalMomentParam.getXYbaseMatrix().getSubVector(1,nOfParents);
  double cov_XX=globalMomentParam.getcovbaseMatrix().getEntry(0,0) - mean_X * mean_X;
  RealMatrix cov_YY=globalMomentParam.getcovbaseMatrix().getSubMatrix(1,nOfParents,1,nOfParents).subtract(mean_Y.outerProduct(mean_Y));
  RealVector cov_XY=globalMomentParam.getcovbaseMatrix().getSubMatrix(0,0,1,nOfParents).getRowVector(0).subtract(mean_Y.mapMultiply(mean_X));
  RealMatrix cov_YYInverse=new LUDecompositionImpl(cov_YY).getSolver().getInverse();
  RealVector beta=cov_YYInverse.preMultiply(cov_XY);
  double beta_0=mean_X - beta.dotProduct(mean_Y);
  double variance=cov_XX - beta.dotProduct(cov_XY);
  double theta_0=beta_0 / variance;
  double[] theta_0array={theta_0};
  double variance2Inv=1.0 / (2 * variance);
  RealVector theta_0Theta=beta.mapMultiply(-beta_0 * variance2Inv);
  ((CompoundVector)this.naturalParameters).setXYbaseVector(new ArrayRealVector(theta_0array,theta_0Theta.getData()));
  double theta_Minus1=-variance2Inv;
  RealVector theta_beta=beta.mapMultiply(1.0 / variance);
  RealMatrix theta_betaBeta=beta.outerProduct(beta).scalarMultiply(-variance2Inv);
  RealMatrix natural_XY=new Array2DRowRealMatrix(nOfParents + 1,nOfParents + 1);
  double[] theta_Minus1array={theta_Minus1};
  RealVector covXY=new ArrayRealVector(theta_Minus1array,theta_beta.getData());
  natural_XY.setColumnVector(0,covXY);
  natural_XY.setRowVector(0,covXY);
  natural_XY.setSubMatrix(theta_betaBeta.getData(),1,1);
  ((CompoundVector)this.naturalParameters).setcovbaseVector(natural_XY);
}