code: def _is_number_match_OO(numobj1_in, numobj2_in):
      
      # We only care about the fields that uniquely define a number, so we copy these across explicitly.
      numobj1 = _copy_core_fields_only(numobj1_in)
      numobj2 = _copy_core_fields_only(numobj2_in)
  
      # Early exit if both had extensions and these are different.
      if (numobj1.extension is not None and
          numobj2.extension is not None and
          numobj1.extension != numobj2.extension):
          return MatchType.NO_MATCH
  
      country_code1 = numobj1.country_code
      country_code2 = numobj2.country_code
      # Both had country_code specified.
      if country_code1 != 0 and country_code2 != 0:
          if numobj1 == numobj2:
              return MatchType.EXACT_MATCH
          elif (country_code1 == country_code2 and
                _is_national_number_suffix_of_other(numobj1, numobj2)):
              # A SHORT_NSN_MATCH occurs if there is a difference because of the
              # presence or absence of an 'Italian leading zero', the presence
              # or absence of an extension, or one NSN being a shorter variant
              # of the other.
              return MatchType.SHORT_NSN_MATCH
          # This is not a match.
          return MatchType.NO_MATCH
  
      # Checks cases where one or both country_code fields were not
      # specified. To make equality checks easier, we first set the country_code
      # fields to be equal.
      numobj1.country_code = country_code2
      # If all else was the same, then this is an NSN_MATCH.
      if numobj1 == numobj2:
          return MatchType.NSN_MATCH
      if _is_national_number_suffix_of_other(numobj1, numobj2):
          return MatchType.SHORT_NSN_MATCH
      return MatchType.NO_MATCH
docs: Takes two phone number objects and compares them for equality.