code: def performance_measure(y_true, y_pred):
      
      performace_dict = dict()
      if any(isinstance(s, list) for s in y_true):
          y_true = [item for sublist in y_true for item in sublist]
          y_pred = [item for sublist in y_pred for item in sublist]
      performace_dict['TP'] = sum(y_t == y_p for y_t, y_p in zip(y_true, y_pred)
                                  if ((y_t != 'O') or (y_p != 'O')))
      performace_dict['FP'] = sum(y_t != y_p for y_t, y_p in zip(y_true, y_pred))
      performace_dict['FN'] = sum(((y_t != 'O') and (y_p == 'O'))
                                  for y_t, y_p in zip(y_true, y_pred))
      performace_dict['TN'] = sum((y_t == y_p == 'O')
                                  for y_t, y_p in zip(y_true, y_pred))
  
      return performace_dict
docs: Compute the performance metrics: TP, FP, FN, TN
  
      Args:
          y_true : 2d array. Ground truth (correct) target values.
          y_pred : 2d array. Estimated targets as returned by a tagger.
  
      Returns:
          performance_dict : dict
  
      Example:
          >>> from seqeval.metrics import performance_measure
          >>> y_true = [['O', 'O', 'O', 'B-MISC', 'I-MISC', 'O', 'B-ORG'], ['B-PER', 'I-PER', 'O']]
          >>> y_pred = [['O', 'O', 'B-MISC', 'I-MISC', 'I-MISC', 'O', 'O'], ['B-PER', 'I-PER', 'O']]
          >>> performance_measure(y_true, y_pred)
          (3, 3, 1, 4)