code: def assert_equals_metadata(expected, got, exclude_keys=None):
      # Check if the keys match
      exclude_keys = set(
          exclude_keys if exclude_keys is not None else []
      )
      k1_set = set(expected.keys()).difference(exclude_keys)
      k2_set = set(got.keys()).difference(exclude_keys)
      sym_diff = k1_set.symmetric_difference(k2_set)
      if len(sym_diff) > 0:
          raise ExpectationFailed(
              "keys: %s" % str(k1_set), "keys: %s" % str(k2_set)
          )
      # At this point, we compare the metadata values, types and dates.
      for k in k1_set:
          if expected[k] != got[k]:
              raise ExpectationFailed(
                  "[%s]: %s" % (k, str(expected[k])),
                  "[%s]: %s" % (k, str(got[k])),
              )
  
imports: import sys
  import os
  from metaflow.exception import MetaflowException
  from metaflow import current
  from metaflow.cards import get_cards
  from metaflow.plugins.cards.exception import CardNotPresentException
label_desc: Use image node_id 10 for calling a global function with example usage: assert_equals_metadata(expected, got, exclude_keys) without return types