class_docstr: An evaluator simulates the live deployment of a model on historical data.
  It trains a model on an initial time series, and then re-trains that model
  at a specified frequency.
  
  The `EvaluatorBase.get_predict` method returns the train & test predictions
  of a model, as if it were being trained incrementally on the test data in
  the manner described above.
  
  Subclasses define slightly different protocols for different tasks, e.g.
  anomaly detection vs. forecasting.
class_docstr_tok: ["An","evaluator","simulates","the","live","deployment","of","a","model","on","historical","data",".","It","trains","a","model","on","an","initial","time","series",",","and","then","re-trains","that","model","at","a","specified","frequency",".","The","`","EvaluatorBase.get_predict","`","method","returns","the","train","&","test","predictions","of","a","model",",","as","if","it","were","being","trained","incrementally","on","the","test","data","in","the","manner","described","above",".","Subclasses","define","slightly","different","protocols","for","different","tasks",",","e.g",".","anomaly","detection","vs.","forecasting","."]
docstr: Given the ground truth time series & the model's prediction (as produced
  by `EvaluatorBase.get_predict`), compute the specified evaluation
  metric. If no metric is specified, return the appropriate score
  accumulator for the task. Implementation is task-specific.
docstr_tok: ["Given","the","ground","truth","time","series","&","the","model","'s","prediction","(","as","produced","by","`","EvaluatorBase.get_predict","`",")",",","compute","the","specified","evaluation","metric",".","If","no","metric","is","specified",",","return","the","appropriate","score","accumulator","for","the","task",".","Implementation","is","task-specific","."]
code: def evaluate(self, ground_truth, predict, metric):
      """
      Given the ground truth time series & the model's prediction (as produced
      by `EvaluatorBase.get_predict`), compute the specified evaluation
      metric. If no metric is specified, return the appropriate score
      accumulator for the task. Implementation is task-specific.
      """
      raise NotImplementedError
  
imports: from abc import abstractmethod
  from typing import Any, List, Tuple, Union
  import numpy
  import pandas
  from tqdm import tqdm
  from merlion.models.base import ModelBase
  from merlion.models.forecast.base import ForecasterBase
  from merlion.utils.misc import AutodocABCMeta
  from merlion.utils.resample import granularity_str_to_seconds, to_offset
  from merlion.utils.time_series import TimeSeries
label_desc: Use image node_id 12 for calling the EvaluatorBase obj's underlying member method code with example usage: obj.evaluate(ground_truth, predict, metric) without return types