class HMDBMixValidIterator:

    stochastic = False

    def __init__(self, dataset=None, batch_size=None, num_batches=None,
                 data_specs=False, return_tuple=False, rng=None):

        self._hmdb_iterator = HMDBIterator(dataset._hmdb, batch_size,
                                           num_batches,
                                           data_specs, return_tuple,
                                           rng)

        self._dvd_iterator = AtousaDatasetIterator(dataset._dvd, batch_size,
                                                   num_batches,
                                                   data_specs, return_tuple,
                                                   rng)
        self.num_examples = self._hmdb_iterator.num_examples + self._dvd_iterator.num_examples
        self.cur = 0
        self.batch_size = batch_size
        self.dataset = dataset
        self.hmdb_stop = False
        self.dvd_stop = False

    def __iter__(self):
        return self

    def next(self):
        print(self.hmdb_stop, self.cur, self.num_examples)
        if not self.hmdb_stop and self.cur % 2 == 0:
            print "herehmdb"
            try:
                x,y = self._hmdb_iterator.next()
            except:
                self.hmdb_stop = True
                if self.dvd_stop:
                    raise StopIteration()
                else:
                    return self.next()
                
        else:
            try:
                print "heredvd"
                x, y_tmp = self._dvd_iterator.next() 
            except:
                self.dvd_stop = True
                if self.hmdb_stop:
                    raise StopIteration()
                else:
                    return self.next()

            ### Adapt labels
            y = np.zeros((self.batch_size, 51)).astype(config.floatX)
            for i in xrange(0, self.batch_size):
                for j in xrange(0, len(self.dataset.label_transfer)):
                    y[i, self.dataset.label_transfer[j, 1]] = y_tmp[i, self.dataset.label_transfer[j, 0]]
                

        self.cur = self.cur + 1
        return x, y
    def __init__(self,
                 dataset=None,
                 batch_size=None,
                 num_batches=None,
                 data_specs=False,
                 return_tuple=False,
                 rng=None):

        self._hmdb_iterator = HMDBIterator(dataset._hmdb, batch_size,
                                           num_batches, data_specs,
                                           return_tuple, rng)

        self._dvd_iterator = AtousaDatasetIterator(dataset._dvd, batch_size,
                                                   num_batches, data_specs,
                                                   return_tuple, rng)
        self.num_examples = self._hmdb_iterator.num_examples + self._dvd_iterator.num_examples
        self.cur = 0
        self.batch_size = batch_size
        self.dataset = dataset
        self.hmdb_stop = False
        self.dvd_stop = False
    def __init__(self, dataset=None, batch_size=None, num_batches=None,
                 data_specs=False, return_tuple=False, rng=None):

        self._hmdb_iterator = HMDBIterator(dataset._hmdb, batch_size,
                                           num_batches,
                                           data_specs, return_tuple,
                                           rng)

        self._dvd_iterator = AtousaDatasetIterator(dataset._dvd, batch_size,
                                                   num_batches,
                                                   data_specs, return_tuple,
                                                   rng)
        self.num_examples = self._hmdb_iterator.num_examples + self._dvd_iterator.num_examples
        self.cur = 0
        self.batch_size = batch_size
        self.dataset = dataset
        self.hmdb_stop = False
        self.dvd_stop = False
class HMDBMixValidIterator:

    stochastic = False

    def __init__(self,
                 dataset=None,
                 batch_size=None,
                 num_batches=None,
                 data_specs=False,
                 return_tuple=False,
                 rng=None):

        self._hmdb_iterator = HMDBIterator(dataset._hmdb, batch_size,
                                           num_batches, data_specs,
                                           return_tuple, rng)

        self._dvd_iterator = AtousaDatasetIterator(dataset._dvd, batch_size,
                                                   num_batches, data_specs,
                                                   return_tuple, rng)
        self.num_examples = self._hmdb_iterator.num_examples + self._dvd_iterator.num_examples
        self.cur = 0
        self.batch_size = batch_size
        self.dataset = dataset
        self.hmdb_stop = False
        self.dvd_stop = False

    def __iter__(self):
        return self

    def next(self):
        print(self.hmdb_stop, self.cur, self.num_examples)
        if not self.hmdb_stop and self.cur % 2 == 0:
            print "herehmdb"
            try:
                x, y = self._hmdb_iterator.next()
            except:
                self.hmdb_stop = True
                if self.dvd_stop:
                    raise StopIteration()
                else:
                    return self.next()

        else:
            try:
                print "heredvd"
                x, y_tmp = self._dvd_iterator.next()
            except:
                self.dvd_stop = True
                if self.hmdb_stop:
                    raise StopIteration()
                else:
                    return self.next()

            ### Adapt labels
            y = np.zeros((self.batch_size, 51)).astype(config.floatX)
            for i in xrange(0, self.batch_size):
                for j in xrange(0, len(self.dataset.label_transfer)):
                    y[i, self.dataset.label_transfer[j, 1]] = y_tmp[
                        i, self.dataset.label_transfer[j, 0]]

        self.cur = self.cur + 1
        return x, y