def __init__(self,
                 num,
                 batch_size=1,
                 progress_bar=False,
                 log_epoch=10,
                 get_fn=None,
                 cycle=False,
                 shuffle=True,
                 stagnant=False,
                 seed=2,
                 dataseed=2,
                 num_batches=-1):
        """Construct a batch iterator.
        Args:
            data: numpy.ndarray, (N, D), N is the number of examples, D is the
            feature dimension.
            labels: numpy.ndarray, (N), N is the number of examples.
            batch_size: int, batch size.
        """

        self._num = num
        self._batch_size = batch_size
        self._step = 0
        self._num_steps = int(np.ceil(self._num / float(batch_size)))
        if num_batches > 0:
            self._num_steps = min(self._num_steps, num_batches)
        self._pb = None
        self._variables = None
        self._get_fn = get_fn
        self.get_fn = get_fn
        self._cycle = cycle
        self._shuffle_idx = np.arange(self._num)
        self._shuffle = shuffle
        self._random = np.random.RandomState(seed)
        if shuffle:
            self._random.shuffle(self._shuffle_idx)
        self._shuffle_flag = False
        self._stagnant = stagnant
        self._log_epoch = log_epoch
        self._log = get_logger()
        self._epoch = 0
        if progress_bar:
            self._pb = pb.get(self._num_steps)
            pass
        self._mutex = threading.Lock()
        pass
from fewshot.configs.episode_config_pb2 import EpisodeConfig
from fewshot.configs.experiment_config_pb2 import ExperimentConfig
from fewshot.experiments.build_model import build_pretrain_net
from fewshot.experiments.get_data_iter import get_dataiter_continual
from fewshot.experiments.get_data_iter import get_dataiter_sim
from fewshot.experiments.get_stats import get_stats
from fewshot.experiments.get_stats import log_results
from fewshot.experiments.utils import get_config
from fewshot.experiments.utils import get_data_fs
from fewshot.experiments.utils import latest_file
from fewshot.utils.logger import get as get_logger
from fewshot.models.model_factory import get_module
from fewshot.models.modules.rnn_encoder import RNNEncoder
from fewshot.models.nets.rnn_encoder_net import RNNEncoderNet

log = get_logger()


def eval_step(x, y, ys, K, T):
    """Leave one out at each step."""
    assert x.shape[0] == 1
    y = y
    ys = ys
    T2 = x.shape[1]
    x = x[:, :T]
    y = y[:, :T]
    ys = ys[:, :T]
    ypred = np.zeros([1, T2, K + 1], dtype=np.float32)
    ypred_id = np.zeros([1, T2], dtype=np.int64)
    ys[ys == K] = -1