code: def same_elements(list1: List[Any], list2: List[Any]) -> bool:
      """Compare equality of two lists of core Ax objects.
  
      Assumptions:
          -- The contents of each list are types that implement __eq__
          -- The lists do not contain duplicates
  
      Checking equality is then the same as checking that the lists are the same
      length, and that one is a subset of the other.
      """
  
      if len(list1) != len(list2):
          return False
  
      for item1 in list1:
          found = False
          for item2 in list2:
              if isinstance(item1, np.ndarray) or isinstance(
                  item2, np.ndarray
              ):
                  if (
                      isinstance(item1, np.ndarray)
                      and isinstance(item2, np.ndarray)
                      and np.array_equal(item1, item2)
                  ):
                      found = True
                      break
              elif item1 == item2:
                  found = True
                  break
          if not found:
              return False
  
      return True
  
file_path: Ax/ax/utils/common/equality.py
imports: from __future__ import annotations
  from datetime import datetime
  from typing import Any, Callable, Dict, List, Optional, Tuple
  import numpy
  import pandas
  from ax.utils.common.typeutils import numpy_type_to_python_type
label_desc: Use image node_id 2 for calling a global function with example usage: same_elements(list1, list2) and returns: True, False, False