docstr: fit for one iteration
  :param data: could be a tuple with numpy ndarray with form (x, y)
  x: 3-d array in format (no. of samples, past sequence length, 2+feature length),
  in the last dimension, the 1st col is the time index (data type needs to be numpy datetime
  type, e.g. "datetime64"),
  the 2nd col is the target value (data type should be numeric)
  y: 2-d numpy array in format (no. of samples, future sequence length)
  if future sequence length > 1,
  or 1-d numpy array in format (no. of samples, ) if future sequence length = 1
  :param validation_data: tuple in format (x_test,y_test), data used for validation.
  If this is specified, validation result will be the optimization target for automl.
  Otherwise, train metric will be the optimization target.
  :param config: optimization hyper parameters
  :return: the resulting metric
docstr_tok: ["fit","for","one","iteration",":","param","data",":","could","be","a","tuple","with","numpy","ndarray","with","form","(","x",",","y",")","x",":","3-d","array","in","format","(","no",".","of","samples",",","past","sequence","length",",","2+feature","length",")",",","in","the","last","dimension",",","the","1st","col","is","the","time","index","(","data","type","needs","to","be","numpy","datetime","type",",","e.g",".","``","datetime64","''",")",",","the","2nd","col","is","the","target","value","(","data","type","should","be","numeric",")","y",":","2-d","numpy","array","in","format","(","no",".","of","samples",",","future","sequence","length",")","if","future","sequence","length",">","1",",","or","1-d","numpy","array","in","format","(","no",".","of","samples",",",")","if","future","sequence","length","=","1",":","param","validation_data",":","tuple","in","format","(","x_test",",","y_test",")",",","data","used","for","validation",".","If","this","is","specified",",","validation","result","will","be","the","optimization","target","for","automl",".","Otherwise",",","train","metric","will","be","the","optimization","target",".",":","param","config",":","optimization","hyper","parameters",":","return",":","the","resulting","metric"]
code: def fit_eval(
      self, data, validation_data=None, mc=False, verbose=0, **config
  ):
      """
      fit for one iteration
      :param data: could be a tuple with numpy ndarray with form (x, y)
      x: 3-d array in format (no. of samples, past sequence length, 2+feature length),
      in the last dimension, the 1st col is the time index (data type needs to be numpy datetime
      type, e.g. "datetime64"),
      the 2nd col is the target value (data type should be numeric)
      y: 2-d numpy array in format (no. of samples, future sequence length)
      if future sequence length > 1,
      or 1-d numpy array in format (no. of samples, ) if future sequence length = 1
      :param validation_data: tuple in format (x_test,y_test), data used for validation.
      If this is specified, validation result will be the optimization target for automl.
      Otherwise, train metric will be the optimization target.
      :param config: optimization hyper parameters
      :return: the resulting metric
      """
      x, y = data[0], data[1]
      x, y, decoder_input_data, validation_data = self._pre_processing(
          x, y, validation_data
      )
  
      # if model is not initialized, __build the model
      if self.model is None:
          self._build_train(mc=mc, **config)
  
      # batch_size = config.get('batch_size', 64)
      # lr = self.lr
      # name = "seq2seq-batch_size-{}-epochs-{}-lr-{}-time-{}"\
      #     .format(batch_size, epochs, lr, time())
      # tensorboard = TensorBoard(log_dir="logs/" + name)
  
      hist = self.model.fit(
          [x, decoder_input_data],
          y,
          validation_data=validation_data,
          batch_size=self.batch_size,
          epochs=config.get("epochs", 10),
          verbose=verbose,
          # callbacks=[tensorboard]
      )
      # check input metric value
      hist_metric_name = keras.metrics.get(self.metric).__name__
      # model.metrics_names are available only after a keras model has been trained/evaluated
      compiled_metric_names = self.model.metrics_names.copy()
      print(compiled_metric_names)
      compiled_metric_names.remove("loss")
      if hist_metric_name in compiled_metric_names:
          metric_name = hist_metric_name
      elif self.metric in compiled_metric_names:
          metric_name = self.metric
      else:
          raise ValueError(
              f"Input metric in fit_eval should be one of the metrics that are used "
              f"to compile the model. Got metric value of {self.metric} and "
              f"the metrics in compile are {compiled_metric_names}"
          )
      if validation_data is None:
          result = hist.history.get(metric_name)[-1]
      else:
          result = hist.history.get("val_" + metric_name)[-1]
      return {self.metric: result}
  
imports: import pickle
  import numpy
  from tensorflow.keras.models import Model
  from tensorflow.keras.layers import Input, LSTM, Dense
  import tensorflow.keras
  from zoo.orca.automl.model.abstract import BaseModel
  from zoo.orca.automl.metrics import Evaluator
label_desc: Use image node_id 10 for calling the LSTMSeq2Seq obj's underlying member method code with example usage: obj.fit_eval(data, validation_data, mc, verbose) and returns: dict