code: def draw_core(self, benchmark_metric=None, benchmark_value=None):
      sample_index = list(self.data.keys())
      sample_index = sample_index[0]
      metric_keys = list(
          self.data[sample_index][Const.KEY_HISTORY_EVALUATION].keys()
      )
  
      metrics = {metric: [] for metric in metric_keys}
  
      iterations = []
      for num_iter, history_scores in self.data.items():
          iterations.append(num_iter)
          for metric_key in metric_keys:
              metrics[metric_key].append(
                  history_scores[Const.KEY_HISTORY_EVALUATION][
                      metric_key
                  ]
              )
  
      # plot each metric line
      for idx, metric in enumerate(metric_keys):
          values = metrics[metric]
          ax = sns.pointplot(
              x=iterations,
              y=values,
              color=Const.PLOT_LINE_COLORS[idx],
              scale=0.5,
          )
      if benchmark_value is not None:
          ax = sns.lineplot(
              x=iterations,
              y=[benchmark_value] * len(iterations),
              color="red",
              dashes=True,
          )
          ax.lines[-1].set_linestyle("--")
          if benchmark_metric is not None:
              metric_keys.append("benchmark (%s)" % benchmark_metric)
  
      ax.legend(
          handles=ax.lines[:: len(iterations) + 1],
          labels=metric_keys,
          bbox_to_anchor=(1, 1),
      )
      self.label_ax = ax
  
imports: import matplotlib.pyplot
  import numpy
  import pandas
  import seaborn
  import xai.constants
  from wordcloud import WordCloud
  import shap
  from xai.graphs.basic_graph import Graph
  from typing import List
  from collections import Counter
  import operator
  from xai.data.exceptions import NoItemsError
label_desc: Use image node_id 2 for calling the EvaluationLinePlot obj's underlying member method code with example usage: obj.draw_core(benchmark_metric, benchmark_value) without return types