"""
This module contains used interfaces for testing the Generative Adversarial Networks.
"""


class GanBaseClass:
    """
    Base class for the Generative Adversarial Network.
    It defines the interface used by the Exercise class.
    """

    def __init__(self):
        """
        Initializes the class.
        """

    def reset(self):
        """
        Resets the trained GAN to an random state.
        """
        raise NotImplementedError

    def train(self, dataSet):
        """
        Trains the GAN.
        """
        raise NotImplementedError

    def generateDataPoint(self):
        """
        Generates one synthetic data-point.
        """
        return self.generateData(1)[0]

    def generateData(self, numOfSamples=1):
        """
        Generates a list of synthetic data-points.

        *numOfSamples* is an integer > 0. It gives the number of generated samples.
        """
        raise NotImplementedError
