docs: protected double[][] generateConditional(double P[], boolean M[][]) {
  
          int L = P.length;
  
          double Q[][] = new double[L][L];
  
          // set priors
          for (int j = 0; j < L; j++) {
              Q[j][j] = P[j];
          }
  
          // create conditionals
          for (int j = 0; j < Q.length; j++) {
              for (int k = j + 1; k < Q[j].length; k++) {
  
                  // dependence
                  if (M[j][k]) {
                      // min = tending toward mutual exclusivity
                      // max = tending toward total co-occurence
                      // @NOTE it would also be an option to select in [min,max], but since
                      //       we are approximating the joint distribution, we can take
                      //       a stronger approach, and just take either min or max.
                      Q[j][k] = (m_MetaRandom.nextBoolean() ? min(P[j], P[k]) : max(P[j], P[k]));
                      Q[k][j] = (Q[j][k] * Q[j][j]) / Q[k][k]; // Bayes Rule
                  } // independence
                  else {
                      Q[j][k] = P[j];
                      Q[k][j] = (Q[j][k] * P[k]) / P[j]; // Bayes Rule
                  }
              }
          }
  
          return Q;
      }