code: def icon_from_typename(name, icon_type):
      
      ICONS = {
          'CLASS': ICON_CLASS,
          'IMPORT': ICON_NAMESPACE,
          'STATEMENT': ICON_VAR,
          'FORFLOW': ICON_VAR,
          'FORSTMT': ICON_VAR,
          'WITHSTMT': ICON_VAR,
          'GLOBALSTMT': ICON_VAR,
          'MODULE': ICON_NAMESPACE,
          'KEYWORD': ICON_KEYWORD,
          'PARAM': ICON_VAR,
          'ARRAY': ICON_VAR,
          'INSTANCEELEMENT': ICON_VAR,
          'INSTANCE': ICON_VAR,
          'PARAM-PRIV': ICON_VAR,
          'PARAM-PROT': ICON_VAR,
          'FUNCTION': ICON_FUNC,
          'DEF': ICON_FUNC,
          'FUNCTION-PRIV': ICON_FUNC_PRIVATE,
          'FUNCTION-PROT': ICON_FUNC_PROTECTED
      }
      ret_val = None
      icon_type = icon_type.upper()
      # jedi 0.8 introduced NamedPart class, which have a string instead of being
      # one
      if hasattr(name, "string"):
          name = name.string
      if icon_type == "FORFLOW" or icon_type == "STATEMENT":
          icon_type = "PARAM"
      if icon_type == "PARAM" or icon_type == "FUNCTION":
          if name.startswith("__"):
              icon_type += "-PRIV"
          elif name.startswith("_"):
              icon_type += "-PROT"
      if icon_type in ICONS:
          ret_val = ICONS[icon_type]
      elif icon_type:
          _logger().warning("Unimplemented completion icon_type: %s", icon_type)
      return ret_val
docs: Returns the icon resource filename that corresponds to the given typename.
  
      :param name: name of the completion. Use to make the distinction between
          public and private completions (using the count of starting '_')
      :pram typename: the typename reported by jedi
  
      :returns: The associate icon resource filename or None.