# Path: disentanglement_lib/data/ground_truth/ground_truth_data.py
# class GroundTruthData(object):
#   def num_factors(self):
#   def factors_num_values(self):
#   def observation_shape(self):
#   def sample_factors(self, num, random_state):
#   def sample_observations_from_factors(self, factors, random_state):
#   def sample(self, num, random_state):
#   def sample_observations(self, num, random_state):


from disentanglement_lib.data.ground_truth import ground_truth_data


class IdentityObservationsData(ground_truth_data.GroundTruthData):
  """Data set where dummy factors are also the observations."""

  @property
  def num_factors(self):
    return 10

  @property
  def observation_shape(self):
    return 10

  @property
  def factors_num_values(self):
    return [1] * 10

  def sample_factors(self, num, random_state):
    """Sample a batch of factors Y."""
    return random_state.random_integers(10, size=(num, self.num_factors))

  def sample_observations_from_factors(self, factors, random_state):
    """Sample a batch of observations X given a batch of factors Y."""
    return factors

  @property
  def factor_names(self):
    return ["Factor {}".format(i) for i in range(self.num_factors)]



# Path: disentanglement_lib/data/ground_truth/ground_truth_data.py
# class GroundTruthData(object):
#   def num_factors(self):
#   def factors_num_values(self):
#   def observation_shape(self):
#   def sample_factors(self, num, random_state):
#   def sample_observations_from_factors(self, factors, random_state):
#   def sample(self, num, random_state):
#   def sample_observations(self, num, random_state):


# Path: disentanglement_lib/data/ground_truth/dummy_data.py
from disentanglement_lib.data.ground_truth import ground_truth_data



class IdentityObservationsData(ground_truth_data.GroundTruthData):
  """Data set where dummy factors are also the observations."""

  @property
  def num_factors(self):
    return 10

  @property
  def observation_shape(self):
    return 10

  @property
  def factors_num_values(self):
    return [1] * 10

  def sample_factors(self, num, random_state):
    """Sample a batch of factors Y."""
    return random_state.random_integers(10, size=(num, self.num_factors))

  def sample_observations_from_factors(self, factors, random_state):
    """Sample a batch of observations X given a batch of factors Y."""
    return factors

  @property
  def factor_names(self):
    return ["Factor {}".format(i) for i in range(self.num_factors)]



class DummyData(ground_truth_data.GroundTruthData):