code: def matches(value, pattern):
      
      # types must match exactly
      if type(value) != type(pattern):
          return False
  
      # primitive value, such as None, True, False etc
      if not isinstance(value, ast.AST) and not isinstance(pattern, ast.AST):
          return value == pattern
  
      fields = [
          (field, getattr(pattern, field))
          for field in pattern._fields
          if hasattr(pattern, field)
      ]
      for field_name, field_value in fields:
          if not matches(getattr(value, field_name), field_value):
              return False
      return True
docs: Check whether `value` matches `pattern`.
  
      Parameters
      ----------
      value : ast.AST
      pattern : ast.AST
  
      Returns
      -------
      matched : bool