public class org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization
  super_class: java.lang.Object
{
  private static final int DEFAULT_MAX_ITERATIONS;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1000

  private static final double DEFAULT_THRESHOLD;
    descriptor: D
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1.0E-5

  private final double[][] data;
    descriptor: [[D
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution fittedModel;
    descriptor: Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;
    flags: (0x0002) ACC_PRIVATE

  private double logLikelihood;
    descriptor: D
    flags: (0x0002) ACC_PRIVATE

  public void <init>(double[][]);
    descriptor: ([[D)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=3, args_size=2
        start local 0 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization this
        start local 1 // double[][] data
         0: .line 86
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 74
            aload 0 /* this */
            dconst_0
            putfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.logLikelihood:D
         2: .line 90
            aload 1 /* data */
            arraylength
            iconst_1
            if_icmpge 4
         3: .line 91
            new org.apache.commons.math3.exception.NotStrictlyPositiveException
            dup
            aload 1 /* data */
            arraylength
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokespecial org.apache.commons.math3.exception.NotStrictlyPositiveException.<init>:(Ljava/lang/Number;)V
            athrow
         4: .line 94
      StackMap locals: org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization double[][]
      StackMap stack:
            aload 0 /* this */
            aload 1 /* data */
            arraylength
            aload 1 /* data */
            iconst_0
            aaload
            arraylength
            multianewarray [[D 2
            putfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.data:[[D
         5: .line 96
            iconst_0
            istore 2 /* i */
        start local 2 // int i
         6: goto 17
         7: .line 97
      StackMap locals: int
      StackMap stack:
            aload 1 /* data */
            iload 2 /* i */
            aaload
            arraylength
            aload 1 /* data */
            iconst_0
            aaload
            arraylength
            if_icmpeq 11
         8: .line 99
            new org.apache.commons.math3.exception.DimensionMismatchException
            dup
            aload 1 /* data */
            iload 2 /* i */
            aaload
            arraylength
         9: .line 100
            aload 1 /* data */
            iconst_0
            aaload
            arraylength
        10: .line 99
            invokespecial org.apache.commons.math3.exception.DimensionMismatchException.<init>:(II)V
            athrow
        11: .line 102
      StackMap locals:
      StackMap stack:
            aload 1 /* data */
            iload 2 /* i */
            aaload
            arraylength
            iconst_2
            if_icmpge 15
        12: .line 103
            new org.apache.commons.math3.exception.NumberIsTooSmallException
            dup
            getstatic org.apache.commons.math3.exception.util.LocalizedFormats.NUMBER_TOO_SMALL:Lorg/apache/commons/math3/exception/util/LocalizedFormats;
        13: .line 104
            aload 1 /* data */
            iload 2 /* i */
            aaload
            arraylength
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            iconst_2
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            iconst_1
        14: .line 103
            invokespecial org.apache.commons.math3.exception.NumberIsTooSmallException.<init>:(Lorg/apache/commons/math3/exception/util/Localizable;Ljava/lang/Number;Ljava/lang/Number;Z)V
            athrow
        15: .line 106
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.data:[[D
            iload 2 /* i */
            aload 1 /* data */
            iload 2 /* i */
            aaload
            aload 1 /* data */
            iload 2 /* i */
            aaload
            arraylength
            invokestatic org.apache.commons.math3.util.MathArrays.copyOf:([DI)[D
            aastore
        16: .line 96
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
        17: iload 2 /* i */
            aload 1 /* data */
            arraylength
            if_icmplt 7
        end local 2 // int i
        18: .line 108
            return
        end local 1 // double[][] data
        end local 0 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   19     0  this  Lorg/apache/commons/math3/distribution/fitting/MultivariateNormalMixtureExpectationMaximization;
            0   19     1  data  [[D
            6   18     2     i  I
    Exceptions:
      throws org.apache.commons.math3.exception.NotStrictlyPositiveException, org.apache.commons.math3.exception.DimensionMismatchException, org.apache.commons.math3.exception.NumberIsTooSmallException
    MethodParameters:
      Name  Flags
      data  

  public void fit(org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution, int, double);
    descriptor: (Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;ID)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=27, args_size=4
        start local 0 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization this
        start local 1 // org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution initialMixture
        start local 2 // int maxIterations
        start local 3 // double threshold
         0: .line 138
            iload 2 /* maxIterations */
            iconst_1
            if_icmpge 2
         1: .line 139
            new org.apache.commons.math3.exception.NotStrictlyPositiveException
            dup
            iload 2 /* maxIterations */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokespecial org.apache.commons.math3.exception.NotStrictlyPositiveException.<init>:(Ljava/lang/Number;)V
            athrow
         2: .line 142
      StackMap locals:
      StackMap stack:
            dload 3 /* threshold */
            ldc 4.9E-324
            dcmpg
            ifge 4
         3: .line 143
            new org.apache.commons.math3.exception.NotStrictlyPositiveException
            dup
            dload 3 /* threshold */
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            invokespecial org.apache.commons.math3.exception.NotStrictlyPositiveException.<init>:(Ljava/lang/Number;)V
            athrow
         4: .line 146
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.data:[[D
            arraylength
            istore 5 /* n */
        start local 5 // int n
         5: .line 150
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.data:[[D
            iconst_0
            aaload
            arraylength
            istore 6 /* numCols */
        start local 6 // int numCols
         6: .line 151
            aload 1 /* initialMixture */
            invokevirtual org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution.getComponents:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            istore 7 /* k */
        start local 7 // int k
         7: .line 154
            aload 1 /* initialMixture */
            invokevirtual org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution.getComponents:()Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.apache.commons.math3.util.Pair
            invokevirtual org.apache.commons.math3.util.Pair.getSecond:()Ljava/lang/Object;
            checkcast org.apache.commons.math3.distribution.MultivariateNormalDistribution
            invokevirtual org.apache.commons.math3.distribution.MultivariateNormalDistribution.getMeans:()[D
            arraylength
         8: .line 153
            istore 8 /* numMeanColumns */
        start local 8 // int numMeanColumns
         9: .line 156
            iload 8 /* numMeanColumns */
            iload 6 /* numCols */
            if_icmpeq 11
        10: .line 157
            new org.apache.commons.math3.exception.DimensionMismatchException
            dup
            iload 8 /* numMeanColumns */
            iload 6 /* numCols */
            invokespecial org.apache.commons.math3.exception.DimensionMismatchException.<init>:(II)V
            athrow
        11: .line 160
      StackMap locals: org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution int double int int int int
      StackMap stack:
            iconst_0
            istore 9 /* numIterations */
        start local 9 // int numIterations
        12: .line 161
            dconst_0
            dstore 10 /* previousLogLikelihood */
        start local 10 // double previousLogLikelihood
        13: .line 163
            aload 0 /* this */
            ldc -Infinity
            putfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.logLikelihood:D
        14: .line 166
            aload 0 /* this */
            new org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution
            dup
            aload 1 /* initialMixture */
            invokevirtual org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution.getComponents:()Ljava/util/List;
            invokespecial org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution.<init>:(Ljava/util/List;)V
            putfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.fittedModel:Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;
        15: .line 168
            goto 91
        16: .line 170
      StackMap locals: int double
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.logLikelihood:D
            dstore 10 /* previousLogLikelihood */
        17: .line 171
            dconst_0
            dstore 12 /* sumLogLikelihood */
        start local 12 // double sumLogLikelihood
        18: .line 175
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.fittedModel:Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;
            invokevirtual org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution.getComponents:()Ljava/util/List;
        19: .line 174
            astore 14 /* components */
        start local 14 // java.util.List components
        20: .line 178
            iload 7 /* k */
            newarray 7
            astore 15 /* weights */
        start local 15 // double[] weights
        21: .line 180
            iload 7 /* k */
            anewarray org.apache.commons.math3.distribution.MultivariateNormalDistribution
            astore 16 /* mvns */
        start local 16 // org.apache.commons.math3.distribution.MultivariateNormalDistribution[] mvns
        22: .line 182
            iconst_0
            istore 17 /* j */
        start local 17 // int j
        23: goto 27
        24: .line 183
      StackMap locals: org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution int double int int int int int double double java.util.List double[] org.apache.commons.math3.distribution.MultivariateNormalDistribution[] int
      StackMap stack:
            aload 15 /* weights */
            iload 17 /* j */
            aload 14 /* components */
            iload 17 /* j */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.apache.commons.math3.util.Pair
            invokevirtual org.apache.commons.math3.util.Pair.getFirst:()Ljava/lang/Object;
            checkcast java.lang.Double
            invokevirtual java.lang.Double.doubleValue:()D
            dastore
        25: .line 184
            aload 16 /* mvns */
            iload 17 /* j */
            aload 14 /* components */
            iload 17 /* j */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.apache.commons.math3.util.Pair
            invokevirtual org.apache.commons.math3.util.Pair.getSecond:()Ljava/lang/Object;
            checkcast org.apache.commons.math3.distribution.MultivariateNormalDistribution
            aastore
        26: .line 182
            iinc 17 /* j */ 1
      StackMap locals:
      StackMap stack:
        27: iload 17 /* j */
            iload 7 /* k */
            if_icmplt 24
        end local 17 // int j
        28: .line 191
            iload 5 /* n */
            iload 7 /* k */
            multianewarray [[D 2
            astore 17 /* gamma */
        start local 17 // double[][] gamma
        29: .line 194
            iload 7 /* k */
            newarray 7
            astore 18 /* gammaSums */
        start local 18 // double[] gammaSums
        30: .line 197
            iload 7 /* k */
            iload 6 /* numCols */
            multianewarray [[D 2
            astore 19 /* gammaDataProdSums */
        start local 19 // double[][] gammaDataProdSums
        31: .line 199
            iconst_0
            istore 20 /* i */
        start local 20 // int i
        32: goto 47
        33: .line 200
      StackMap locals: org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution int double int int int int int double double java.util.List double[] org.apache.commons.math3.distribution.MultivariateNormalDistribution[] double[][] double[] double[][] int
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.fittedModel:Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.data:[[D
            iload 20 /* i */
            aaload
            invokevirtual org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution.density:([D)D
            dstore 21 /* rowDensity */
        start local 21 // double rowDensity
        34: .line 201
            dload 12 /* sumLogLikelihood */
            dload 21 /* rowDensity */
            invokestatic org.apache.commons.math3.util.FastMath.log:(D)D
            dadd
            dstore 12 /* sumLogLikelihood */
        35: .line 203
            iconst_0
            istore 23 /* j */
        start local 23 // int j
        36: goto 45
        37: .line 204
      StackMap locals: double int
      StackMap stack:
            aload 17 /* gamma */
            iload 20 /* i */
            aaload
            iload 23 /* j */
            aload 15 /* weights */
            iload 23 /* j */
            daload
            aload 16 /* mvns */
            iload 23 /* j */
            aaload
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.data:[[D
            iload 20 /* i */
            aaload
            invokevirtual org.apache.commons.math3.distribution.MultivariateNormalDistribution.density:([D)D
            dmul
            dload 21 /* rowDensity */
            ddiv
            dastore
        38: .line 205
            aload 18 /* gammaSums */
            iload 23 /* j */
            dup2
            daload
            aload 17 /* gamma */
            iload 20 /* i */
            aaload
            iload 23 /* j */
            daload
            dadd
            dastore
        39: .line 207
            iconst_0
            istore 24 /* col */
        start local 24 // int col
        40: goto 43
        41: .line 208
      StackMap locals: int
      StackMap stack:
            aload 19 /* gammaDataProdSums */
            iload 23 /* j */
            aaload
            iload 24 /* col */
            dup2
            daload
            aload 17 /* gamma */
            iload 20 /* i */
            aaload
            iload 23 /* j */
            daload
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.data:[[D
            iload 20 /* i */
            aaload
            iload 24 /* col */
            daload
            dmul
            dadd
            dastore
        42: .line 207
            iinc 24 /* col */ 1
      StackMap locals:
      StackMap stack:
        43: iload 24 /* col */
            iload 6 /* numCols */
            if_icmplt 41
        end local 24 // int col
        44: .line 203
            iinc 23 /* j */ 1
      StackMap locals:
      StackMap stack:
        45: iload 23 /* j */
            iload 7 /* k */
            if_icmplt 37
        end local 23 // int j
        end local 21 // double rowDensity
        46: .line 199
            iinc 20 /* i */ 1
      StackMap locals:
      StackMap stack:
        47: iload 20 /* i */
            iload 5 /* n */
            if_icmplt 33
        end local 20 // int i
        48: .line 213
            aload 0 /* this */
            dload 12 /* sumLogLikelihood */
            iload 5 /* n */
            i2d
            ddiv
            putfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.logLikelihood:D
        49: .line 217
            iload 7 /* k */
            newarray 7
            astore 20 /* newWeights */
        start local 20 // double[] newWeights
        50: .line 218
            iload 7 /* k */
            iload 6 /* numCols */
            multianewarray [[D 2
            astore 21 /* newMeans */
        start local 21 // double[][] newMeans
        51: .line 220
            iconst_0
            istore 22 /* j */
        start local 22 // int j
        52: goto 60
        53: .line 221
      StackMap locals: org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution int double int int int int int double double java.util.List double[] org.apache.commons.math3.distribution.MultivariateNormalDistribution[] double[][] double[] double[][] double[] double[][] int
      StackMap stack:
            aload 20 /* newWeights */
            iload 22 /* j */
            aload 18 /* gammaSums */
            iload 22 /* j */
            daload
            iload 5 /* n */
            i2d
            ddiv
            dastore
        54: .line 222
            iconst_0
            istore 23 /* col */
        start local 23 // int col
        55: goto 58
        56: .line 223
      StackMap locals: int
      StackMap stack:
            aload 21 /* newMeans */
            iload 22 /* j */
            aaload
            iload 23 /* col */
            aload 19 /* gammaDataProdSums */
            iload 22 /* j */
            aaload
            iload 23 /* col */
            daload
            aload 18 /* gammaSums */
            iload 22 /* j */
            daload
            ddiv
            dastore
        57: .line 222
            iinc 23 /* col */ 1
      StackMap locals:
      StackMap stack:
        58: iload 23 /* col */
            iload 6 /* numCols */
            if_icmplt 56
        end local 23 // int col
        59: .line 220
            iinc 22 /* j */ 1
      StackMap locals:
      StackMap stack:
        60: iload 22 /* j */
            iload 7 /* k */
            if_icmplt 53
        end local 22 // int j
        61: .line 228
            iload 7 /* k */
            anewarray org.apache.commons.math3.linear.RealMatrix
            astore 22 /* newCovMats */
        start local 22 // org.apache.commons.math3.linear.RealMatrix[] newCovMats
        62: .line 229
            iconst_0
            istore 23 /* j */
        start local 23 // int j
        63: goto 66
        64: .line 230
      StackMap locals: org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution int double int int int int int double double java.util.List double[] org.apache.commons.math3.distribution.MultivariateNormalDistribution[] double[][] double[] double[][] double[] double[][] org.apache.commons.math3.linear.RealMatrix[] int
      StackMap stack:
            aload 22 /* newCovMats */
            iload 23 /* j */
            new org.apache.commons.math3.linear.Array2DRowRealMatrix
            dup
            iload 6 /* numCols */
            iload 6 /* numCols */
            invokespecial org.apache.commons.math3.linear.Array2DRowRealMatrix.<init>:(II)V
            aastore
        65: .line 229
            iinc 23 /* j */ 1
      StackMap locals:
      StackMap stack:
        66: iload 23 /* j */
            iload 7 /* k */
            if_icmplt 64
        end local 23 // int j
        67: .line 232
            iconst_0
            istore 23 /* i */
        start local 23 // int i
        68: goto 79
        69: .line 233
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 24 /* j */
        start local 24 // int j
        70: goto 77
        71: .line 235
      StackMap locals: int
      StackMap stack:
            new org.apache.commons.math3.linear.Array2DRowRealMatrix
            dup
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.data:[[D
            iload 23 /* i */
            aaload
            aload 21 /* newMeans */
            iload 24 /* j */
            aaload
            invokestatic org.apache.commons.math3.util.MathArrays.ebeSubtract:([D[D)[D
            invokespecial org.apache.commons.math3.linear.Array2DRowRealMatrix.<init>:([D)V
        72: .line 234
            astore 25 /* vec */
        start local 25 // org.apache.commons.math3.linear.RealMatrix vec
        73: .line 237
            aload 25 /* vec */
            aload 25 /* vec */
            invokeinterface org.apache.commons.math3.linear.RealMatrix.transpose:()Lorg/apache/commons/math3/linear/RealMatrix;
            invokeinterface org.apache.commons.math3.linear.RealMatrix.multiply:(Lorg/apache/commons/math3/linear/RealMatrix;)Lorg/apache/commons/math3/linear/RealMatrix;
            aload 17 /* gamma */
            iload 23 /* i */
            aaload
            iload 24 /* j */
            daload
            invokeinterface org.apache.commons.math3.linear.RealMatrix.scalarMultiply:(D)Lorg/apache/commons/math3/linear/RealMatrix;
        74: .line 236
            astore 26 /* dataCov */
        start local 26 // org.apache.commons.math3.linear.RealMatrix dataCov
        75: .line 238
            aload 22 /* newCovMats */
            iload 24 /* j */
            aload 22 /* newCovMats */
            iload 24 /* j */
            aaload
            aload 26 /* dataCov */
            invokeinterface org.apache.commons.math3.linear.RealMatrix.add:(Lorg/apache/commons/math3/linear/RealMatrix;)Lorg/apache/commons/math3/linear/RealMatrix;
            aastore
        end local 26 // org.apache.commons.math3.linear.RealMatrix dataCov
        end local 25 // org.apache.commons.math3.linear.RealMatrix vec
        76: .line 233
            iinc 24 /* j */ 1
      StackMap locals:
      StackMap stack:
        77: iload 24 /* j */
            iload 7 /* k */
            if_icmplt 71
        end local 24 // int j
        78: .line 232
            iinc 23 /* i */ 1
      StackMap locals:
      StackMap stack:
        79: iload 23 /* i */
            iload 5 /* n */
            if_icmplt 69
        end local 23 // int i
        80: .line 243
            iload 7 /* k */
            iload 6 /* numCols */
            iload 6 /* numCols */
            multianewarray [[[D 3
            astore 23 /* newCovMatArrays */
        start local 23 // double[][][] newCovMatArrays
        81: .line 244
            iconst_0
            istore 24 /* j */
        start local 24 // int j
        82: goto 86
        83: .line 245
      StackMap locals: org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution int double int int int int int double double java.util.List double[] org.apache.commons.math3.distribution.MultivariateNormalDistribution[] double[][] double[] double[][] double[] double[][] org.apache.commons.math3.linear.RealMatrix[] double[][][] int
      StackMap stack:
            aload 22 /* newCovMats */
            iload 24 /* j */
            aload 22 /* newCovMats */
            iload 24 /* j */
            aaload
            dconst_1
            aload 18 /* gammaSums */
            iload 24 /* j */
            daload
            ddiv
            invokeinterface org.apache.commons.math3.linear.RealMatrix.scalarMultiply:(D)Lorg/apache/commons/math3/linear/RealMatrix;
            aastore
        84: .line 246
            aload 23 /* newCovMatArrays */
            iload 24 /* j */
            aload 22 /* newCovMats */
            iload 24 /* j */
            aaload
            invokeinterface org.apache.commons.math3.linear.RealMatrix.getData:()[[D
            aastore
        85: .line 244
            iinc 24 /* j */ 1
      StackMap locals:
      StackMap stack:
        86: iload 24 /* j */
            iload 7 /* k */
            if_icmplt 83
        end local 24 // int j
        87: .line 250
            aload 0 /* this */
            new org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution
            dup
            aload 20 /* newWeights */
        88: .line 251
            aload 21 /* newMeans */
        89: .line 252
            aload 23 /* newCovMatArrays */
            invokespecial org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution.<init>:([D[[D[[[D)V
        90: .line 250
            putfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.fittedModel:Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;
        end local 23 // double[][][] newCovMatArrays
        end local 22 // org.apache.commons.math3.linear.RealMatrix[] newCovMats
        end local 21 // double[][] newMeans
        end local 20 // double[] newWeights
        end local 19 // double[][] gammaDataProdSums
        end local 18 // double[] gammaSums
        end local 17 // double[][] gamma
        end local 16 // org.apache.commons.math3.distribution.MultivariateNormalDistribution[] mvns
        end local 15 // double[] weights
        end local 14 // java.util.List components
        end local 12 // double sumLogLikelihood
        91: .line 168
      StackMap locals: org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution int double int int int int int double
      StackMap stack:
            iload 9 /* numIterations */
            iinc 9 /* numIterations */ 1
            iload 2 /* maxIterations */
            if_icmpgt 94
        92: .line 169
            dload 10 /* previousLogLikelihood */
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.logLikelihood:D
            dsub
            invokestatic org.apache.commons.math3.util.FastMath.abs:(D)D
            dload 3 /* threshold */
        93: .line 168
            dcmpl
            ifgt 16
        94: .line 255
      StackMap locals:
      StackMap stack:
            dload 10 /* previousLogLikelihood */
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.logLikelihood:D
            dsub
            invokestatic org.apache.commons.math3.util.FastMath.abs:(D)D
            dload 3 /* threshold */
            dcmpl
            ifle 96
        95: .line 257
            new org.apache.commons.math3.exception.ConvergenceException
            dup
            invokespecial org.apache.commons.math3.exception.ConvergenceException.<init>:()V
            athrow
        96: .line 259
      StackMap locals:
      StackMap stack:
            return
        end local 10 // double previousLogLikelihood
        end local 9 // int numIterations
        end local 8 // int numMeanColumns
        end local 7 // int k
        end local 6 // int numCols
        end local 5 // int n
        end local 3 // double threshold
        end local 2 // int maxIterations
        end local 1 // org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution initialMixture
        end local 0 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   97     0                   this  Lorg/apache/commons/math3/distribution/fitting/MultivariateNormalMixtureExpectationMaximization;
            0   97     1         initialMixture  Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;
            0   97     2          maxIterations  I
            0   97     3              threshold  D
            5   97     5                      n  I
            6   97     6                numCols  I
            7   97     7                      k  I
            9   97     8         numMeanColumns  I
           12   97     9          numIterations  I
           13   97    10  previousLogLikelihood  D
           18   91    12       sumLogLikelihood  D
           20   91    14             components  Ljava/util/List<Lorg/apache/commons/math3/util/Pair<Ljava/lang/Double;Lorg/apache/commons/math3/distribution/MultivariateNormalDistribution;>;>;
           21   91    15                weights  [D
           22   91    16                   mvns  [Lorg/apache/commons/math3/distribution/MultivariateNormalDistribution;
           23   28    17                      j  I
           29   91    17                  gamma  [[D
           30   91    18              gammaSums  [D
           31   91    19      gammaDataProdSums  [[D
           32   48    20                      i  I
           34   46    21             rowDensity  D
           36   46    23                      j  I
           40   44    24                    col  I
           50   91    20             newWeights  [D
           51   91    21               newMeans  [[D
           52   61    22                      j  I
           55   59    23                    col  I
           62   91    22             newCovMats  [Lorg/apache/commons/math3/linear/RealMatrix;
           63   67    23                      j  I
           68   80    23                      i  I
           70   78    24                      j  I
           73   76    25                    vec  Lorg/apache/commons/math3/linear/RealMatrix;
           75   76    26                dataCov  Lorg/apache/commons/math3/linear/RealMatrix;
           81   91    23        newCovMatArrays  [[[D
           82   87    24                      j  I
    Exceptions:
      throws org.apache.commons.math3.linear.SingularMatrixException, org.apache.commons.math3.exception.NotStrictlyPositiveException, org.apache.commons.math3.exception.DimensionMismatchException
    MethodParameters:
                Name  Flags
      initialMixture  final
      maxIterations   final
      threshold       final

  public void fit(org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution);
    descriptor: (Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization this
        start local 1 // org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution initialMixture
         0: .line 281
            aload 0 /* this */
            aload 1 /* initialMixture */
            sipush 1000
            ldc 1.0E-5
            invokevirtual org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.fit:(Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;ID)V
         1: .line 282
            return
        end local 1 // org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution initialMixture
        end local 0 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Lorg/apache/commons/math3/distribution/fitting/MultivariateNormalMixtureExpectationMaximization;
            0    2     1  initialMixture  Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;
    Exceptions:
      throws org.apache.commons.math3.linear.SingularMatrixException, org.apache.commons.math3.exception.NotStrictlyPositiveException
    MethodParameters:
                Name  Flags
      initialMixture  

  public static org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution estimate(double[][], int);
    descriptor: ([[DI)Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=19, args_size=2
        start local 0 // double[][] data
        start local 1 // int numComponents
         0: .line 306
            aload 0 /* data */
            arraylength
            iconst_2
            if_icmpge 2
         1: .line 307
            new org.apache.commons.math3.exception.NotStrictlyPositiveException
            dup
            aload 0 /* data */
            arraylength
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokespecial org.apache.commons.math3.exception.NotStrictlyPositiveException.<init>:(Ljava/lang/Number;)V
            athrow
         2: .line 309
      StackMap locals:
      StackMap stack:
            iload 1 /* numComponents */
            iconst_2
            if_icmpge 4
         3: .line 310
            new org.apache.commons.math3.exception.NumberIsTooSmallException
            dup
            iload 1 /* numComponents */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            iconst_2
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            iconst_1
            invokespecial org.apache.commons.math3.exception.NumberIsTooSmallException.<init>:(Ljava/lang/Number;Ljava/lang/Number;Z)V
            athrow
         4: .line 312
      StackMap locals:
      StackMap stack:
            iload 1 /* numComponents */
            aload 0 /* data */
            arraylength
            if_icmple 6
         5: .line 313
            new org.apache.commons.math3.exception.NumberIsTooLargeException
            dup
            iload 1 /* numComponents */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aload 0 /* data */
            arraylength
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            iconst_1
            invokespecial org.apache.commons.math3.exception.NumberIsTooLargeException.<init>:(Ljava/lang/Number;Ljava/lang/Number;Z)V
            athrow
         6: .line 316
      StackMap locals:
      StackMap stack:
            aload 0 /* data */
            arraylength
            istore 2 /* numRows */
        start local 2 // int numRows
         7: .line 317
            aload 0 /* data */
            iconst_0
            aaload
            arraylength
            istore 3 /* numCols */
        start local 3 // int numCols
         8: .line 320
            iload 2 /* numRows */
            anewarray org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow
            astore 4 /* sortedData */
        start local 4 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow[] sortedData
         9: .line 321
            iconst_0
            istore 5 /* i */
        start local 5 // int i
        10: goto 13
        11: .line 322
      StackMap locals: double[][] int int int org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow[] int
      StackMap stack:
            aload 4 /* sortedData */
            iload 5 /* i */
            new org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow
            dup
            aload 0 /* data */
            iload 5 /* i */
            aaload
            invokespecial org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow.<init>:([D)V
            aastore
        12: .line 321
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        13: iload 5 /* i */
            iload 2 /* numRows */
            if_icmplt 11
        end local 5 // int i
        14: .line 324
            aload 4 /* sortedData */
            invokestatic java.util.Arrays.sort:([Ljava/lang/Object;)V
        15: .line 327
            dconst_1
            iload 1 /* numComponents */
            i2d
            ddiv
            dstore 5 /* weight */
        start local 5 // double weight
        16: .line 331
            new java.util.ArrayList
            dup
            iload 1 /* numComponents */
            invokespecial java.util.ArrayList.<init>:(I)V
        17: .line 330
            astore 7 /* components */
        start local 7 // java.util.List components
        18: .line 334
            iconst_0
            istore 8 /* binIndex */
        start local 8 // int binIndex
        19: goto 44
        20: .line 336
      StackMap locals: double[][] int int int org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow[] double java.util.List int
      StackMap stack:
            iload 8 /* binIndex */
            iload 2 /* numRows */
            imul
            iload 1 /* numComponents */
            idiv
            istore 9 /* minIndex */
        start local 9 // int minIndex
        21: .line 339
            iload 8 /* binIndex */
            iconst_1
            iadd
            iload 2 /* numRows */
            imul
            iload 1 /* numComponents */
            idiv
            istore 10 /* maxIndex */
        start local 10 // int maxIndex
        22: .line 342
            iload 10 /* maxIndex */
            iload 9 /* minIndex */
            isub
            istore 11 /* numBinRows */
        start local 11 // int numBinRows
        23: .line 345
            iload 11 /* numBinRows */
            iload 3 /* numCols */
            multianewarray [[D 2
            astore 12 /* binData */
        start local 12 // double[][] binData
        24: .line 348
            iload 3 /* numCols */
            newarray 7
            astore 13 /* columnMeans */
        start local 13 // double[] columnMeans
        25: .line 351
            iload 9 /* minIndex */
            istore 14 /* i */
        start local 14 // int i
        26: iconst_0
            istore 15 /* iBin */
        start local 15 // int iBin
        27: goto 36
        28: .line 352
      StackMap locals: double[][] int int int org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow[] double java.util.List int int int int double[][] double[] int int
      StackMap stack:
            iconst_0
            istore 16 /* j */
        start local 16 // int j
        29: goto 34
        30: .line 353
      StackMap locals: int
      StackMap stack:
            aload 4 /* sortedData */
            iload 14 /* i */
            aaload
            invokevirtual org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow.getRow:()[D
            iload 16 /* j */
            daload
            dstore 17 /* val */
        start local 17 // double val
        31: .line 354
            aload 13 /* columnMeans */
            iload 16 /* j */
            dup2
            daload
            dload 17 /* val */
            dadd
            dastore
        32: .line 355
            aload 12 /* binData */
            iload 15 /* iBin */
            aaload
            iload 16 /* j */
            dload 17 /* val */
            dastore
        end local 17 // double val
        33: .line 352
            iinc 16 /* j */ 1
      StackMap locals:
      StackMap stack:
        34: iload 16 /* j */
            iload 3 /* numCols */
            if_icmplt 30
        end local 16 // int j
        35: .line 351
            iinc 14 /* i */ 1
            iinc 15 /* iBin */ 1
      StackMap locals:
      StackMap stack:
        36: iload 14 /* i */
            iload 10 /* maxIndex */
            if_icmplt 28
        end local 15 // int iBin
        end local 14 // int i
        37: .line 359
            dconst_1
            iload 11 /* numBinRows */
            i2d
            ddiv
            aload 13 /* columnMeans */
            invokestatic org.apache.commons.math3.util.MathArrays.scaleInPlace:(D[D)V
        38: .line 363
            new org.apache.commons.math3.stat.correlation.Covariance
            dup
            aload 12 /* binData */
            invokespecial org.apache.commons.math3.stat.correlation.Covariance.<init>:([[D)V
            invokevirtual org.apache.commons.math3.stat.correlation.Covariance.getCovarianceMatrix:()Lorg/apache/commons/math3/linear/RealMatrix;
            invokeinterface org.apache.commons.math3.linear.RealMatrix.getData:()[[D
        39: .line 362
            astore 14 /* covMat */
        start local 14 // double[][] covMat
        40: .line 365
            new org.apache.commons.math3.distribution.MultivariateNormalDistribution
            dup
            aload 13 /* columnMeans */
            aload 14 /* covMat */
            invokespecial org.apache.commons.math3.distribution.MultivariateNormalDistribution.<init>:([D[[D)V
        41: .line 364
            astore 15 /* mvn */
        start local 15 // org.apache.commons.math3.distribution.MultivariateNormalDistribution mvn
        42: .line 367
            aload 7 /* components */
            new org.apache.commons.math3.util.Pair
            dup
            dload 5 /* weight */
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aload 15 /* mvn */
            invokespecial org.apache.commons.math3.util.Pair.<init>:(Ljava/lang/Object;Ljava/lang/Object;)V
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 15 // org.apache.commons.math3.distribution.MultivariateNormalDistribution mvn
        end local 14 // double[][] covMat
        end local 13 // double[] columnMeans
        end local 12 // double[][] binData
        end local 11 // int numBinRows
        end local 10 // int maxIndex
        end local 9 // int minIndex
        43: .line 334
            iinc 8 /* binIndex */ 1
      StackMap locals: double[][] int int int org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow[] double java.util.List int
      StackMap stack:
        44: iload 8 /* binIndex */
            iload 1 /* numComponents */
            if_icmplt 20
        end local 8 // int binIndex
        45: .line 370
            new org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution
            dup
            aload 7 /* components */
            invokespecial org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution.<init>:(Ljava/util/List;)V
            areturn
        end local 7 // java.util.List components
        end local 5 // double weight
        end local 4 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow[] sortedData
        end local 3 // int numCols
        end local 2 // int numRows
        end local 1 // int numComponents
        end local 0 // double[][] data
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   46     0           data  [[D
            0   46     1  numComponents  I
            7   46     2        numRows  I
            8   46     3        numCols  I
            9   46     4     sortedData  [Lorg/apache/commons/math3/distribution/fitting/MultivariateNormalMixtureExpectationMaximization$DataRow;
           10   14     5              i  I
           16   46     5         weight  D
           18   46     7     components  Ljava/util/List<Lorg/apache/commons/math3/util/Pair<Ljava/lang/Double;Lorg/apache/commons/math3/distribution/MultivariateNormalDistribution;>;>;
           19   45     8       binIndex  I
           21   43     9       minIndex  I
           22   43    10       maxIndex  I
           23   43    11     numBinRows  I
           24   43    12        binData  [[D
           25   43    13    columnMeans  [D
           26   37    14              i  I
           27   37    15           iBin  I
           29   35    16              j  I
           31   33    17            val  D
           40   43    14         covMat  [[D
           42   43    15            mvn  Lorg/apache/commons/math3/distribution/MultivariateNormalDistribution;
    Exceptions:
      throws org.apache.commons.math3.exception.NotStrictlyPositiveException, org.apache.commons.math3.exception.DimensionMismatchException
    MethodParameters:
               Name  Flags
      data           final
      numComponents  final

  public double getLogLikelihood();
    descriptor: ()D
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization this
         0: .line 379
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.logLikelihood:D
            dreturn
        end local 0 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/commons/math3/distribution/fitting/MultivariateNormalMixtureExpectationMaximization;

  public org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution getFittedModel();
    descriptor: ()Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization this
         0: .line 388
            new org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution
            dup
            aload 0 /* this */
            getfield org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization.fittedModel:Lorg/apache/commons/math3/distribution/MixtureMultivariateNormalDistribution;
            invokevirtual org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution.getComponents:()Ljava/util/List;
            invokespecial org.apache.commons.math3.distribution.MixtureMultivariateNormalDistribution.<init>:(Ljava/util/List;)V
            areturn
        end local 0 // org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/commons/math3/distribution/fitting/MultivariateNormalMixtureExpectationMaximization;
}
SourceFile: "MultivariateNormalMixtureExpectationMaximization.java"
NestMembers:
  org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow
InnerClasses:
  private DataRow = org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization$DataRow of org.apache.commons.math3.distribution.fitting.MultivariateNormalMixtureExpectationMaximization