code: def parse_annotation_function(code, func_name):
      
      expr = parse_annotation(code)
      call = expr.value
      assert type(call) is ast.Call, 'Annotation is not a function call'
  
      assert type(call.func) is ast.Attribute, 'Unexpected annotation function'
      assert type(call.func.value) is ast.Name, 'Invalid annotation function name'
      assert call.func.value.id == 'nni', 'Annotation is not a NNI function'
      assert call.func.attr == func_name, 'internal error #2'
  
      assert len(call.keywords) == 1, 'Annotation function contains more than one keyword argument'
      assert call.keywords[0].arg == 'name', 'Annotation keyword argument is not "name"'
      name = call.keywords[0].value
  
      return name, call
docs: Parse an annotation function.
      Return the value of `name` keyword argument and the AST Call node.
      func_name: expected function name