docs: def heldout_log_likelihood(self, test_mask=None):
          """
          Compute the log likelihood of the masked data given the latent
          discrete and continuous states.
          """
          if test_mask is None:
              # If a test mask is not supplied, use the negation of this object's mask
              if self.mask is None:
                  return 0
              else:
                  test_mask = ~self.mask
  
          xs = np.hstack((self.gaussian_states, self.inputs))
          if self.single_emission:
              return self.emission_distns[0].\
                  log_likelihood((xs, self.data), mask=test_mask).sum()
          else:
              hll = 0
              z = self.stateseq
              for idx, ed in enumerate(self.emission_distns):
                  hll += ed.log_likelihood((xs[z == idx], self.data[z == idx]),
                                           mask=test_mask[z == idx]).sum()