code: def predictive_probability(self, M_c, X_L, X_D, Y, Q):
          
          return su.predictive_probability(M_c, X_L, X_D, Y, Q)
docs: Calculate probability of cells jointly taking values given a
          latent state.
  
          :param Y: A list of constraints to apply when querying.  Each constraint
              is a triplet of (r, d, v): r is the row index, d is the column
              index and v is the value of the constraint
          :type Y: list of lists
          :param Q: A list of values to query.  Each value is triplet of (r, d, v):
              r is the row index, d is the column index, and v is the value at
              which the density is evaluated.
          :type Q: list of lists
  
          :returns: float -- joint log probability of the values specified by Q