code: def is_line_different(
      output_line: str, ref_line: str, epsilon: float
  ) -> Tuple[bool, str, bool]:
      output_tokens = re.split("[ \t:,@=]+", output_line)
      ref_tokens = re.split("[ \t:,@=]+", ref_line)
  
      # some compile flags cause VW to report different code line number for the same exception
      # if this is the case we want to ignore that from the diff
      if (
          ref_tokens[0] == "[critical]"
          and output_tokens[0] == "[critical]"
      ):
          # check that exception format is being followed
          if ref_tokens[2][0] == "(" and ref_tokens[3][-1] == ")":
              if ref_tokens[3][:-1].isnumeric():
                  # remove the line number before diffing
                  ref_tokens.pop(3)
                  output_tokens.pop(3)
  
      if len(output_tokens) != len(ref_tokens):
          return True, "Number of tokens different", False
  
      found_close_floats = False
      for output_token, ref_token in zip(output_tokens, ref_tokens):
          output_is_float = is_float(output_token)
          ref_is_float = is_float(ref_token)
          if output_is_float and ref_is_float:
              close = fuzzy_float_compare(
                  output_token, ref_token, epsilon
              )
              if close:
                  found_close_floats = True
                  continue
  
              return (
                  True,
                  f"Floats don't match {output_token} {ref_token}",
                  found_close_floats,
              )
          else:
              if output_token != ref_token:
                  return (
                      True,
                      f"Mismatch at token {output_token} {ref_token}",
                      found_close_floats,
                  )
  
      # ignore whitespace when considering delimiting tokens
      output_delimiters = re.findall("[:,@]+", output_line)
      ref_delimiters = re.findall("[:,@]+", ref_line)
  
      if len(output_delimiters) != len(ref_delimiters):
          return True, "Number of tokens different", found_close_floats
  
      for output_token, ref_token in zip(
          output_delimiters, ref_delimiters
      ):
          if output_token != ref_token:
              return (
                  True,
                  f"Mismatch at token {output_token} {ref_token}",
                  found_close_floats,
              )
  
      return False, "", found_close_floats
  
imports: import shutil
  import threading
  import argparse
  import difflib
  from pathlib import Path
  import re
  import os
  import subprocess
  import sys
  import traceback
  import shlex
  import math
  import json
  from concurrent.futures import ThreadPoolExecutor, Future
  from enum import Enum
  import socket
  from typing import Any, Callable, Dict, List, Mapping, Optional, Set, Tuple, Type, Union, cast
  from run_tests_common import TestData
  import runtests_flatbuffer_converter
label_desc: Use image node_id 6 for calling a global function with example usage: is_line_different(output_line, ref_line, epsilon) and returns: False,  str,  found_close_floats, True,  str,  False, True,  str,  found_close_floats, True,  str, output_token, str, ref_token,  found_close_floats, True,  str, output_token, str, ref_token,  found_close_floats, True,  str, output_token, str, ref_token,  found_close_floats