#import tensorflow

class BaseModel():
    def name(self):
        return 'BaseModel'

    def initialize(self, opt):
        pass
        '''
        self.opt = opt #arguments parser
        self.gpu_ids = opt.gpu_ids
        self.is_training = opt.is_training
        #self.tensor = if self.gpu_ids else ... ## multiple gpu tensor
        self.save_dir = os.path.join(opt.checkpoints_dir, opt.name)
        '''

    @staticmethod
    def create_input_placeholder(self, shape=None, name='input'):
        pass

    def forward(self):
        #forward pass of networks
        pass

    def test(self):
        pass

    def get_image_paths(self):
        pass

    def optimize_parameters(self):
        pass

    def get_current_visuals(self):
        return self.input

    def get_current_errors(self):
        return {}

    def save(self, label):
        pass

    def update_learning_rate():
        pass

    '''
    # helper saving function that can be used by subclasses
    def save_network(self, network, network_label, epoch_label, gpu_ids):
        save_filename = '%s_net_%s.pth' % (epoch_label, network_label)
        save_path = os.path.join(self.save_dir, save_filename)
        torch.save(network.cpu().state_dict(), save_path)
        if len(gpu_ids) and torch.cuda.is_available():
            network.cuda(device_id=gpu_ids[0])

    # helper loading function that can be used by subclasses
    def load_network(self, network, network_label, epoch_label):
        save_filename = '%s_net_%s.pth' % (epoch_label, network_label)
        save_path = os.path.join(self.save_dir, save_filename)
        network.load_state_dict(torch.load(save_path))
    '''

