parameters: (obj, attr)
return_statement: return attr.startswith('__')
docstring: Test if the attribute given is an internal python attribute.  For
      example this function returns `True` for the `func_code` attribute of
      python objects.  This is useful if the environment method
      :meth:`~SandboxedEnvironment.is_safe_attribute` is overridden.
  
      >>> from jinja2.sandbox import is_internal_attribute
      >>> is_internal_attribute(str, "mro")
      True
      >>> is_internal_attribute(str, "upper")
      False
docstring_summary: Test if the attribute given is an internal python attribute.  For
      example this function returns `True` for the `func_code` attribute of
      python objects.  This is useful if the environment method
      :meth:`~SandboxedEnvironment.is_safe_attribute` is overridden.
docstring_tokens: Test if the attribute given is an internal python attribute . For example this function returns True for the func_code attribute of python objects . This is useful if the environment method : meth : ~SandboxedEnvironment . is_safe_attribute is overridden .
function: def is_internal_attribute(obj, attr):
      """Test if the attribute given is an internal python attribute.  For
      example this function returns `True` for the `func_code` attribute of
      python objects.  This is useful if the environment method
      :meth:`~SandboxedEnvironment.is_safe_attribute` is overridden.
  
      >>> from jinja2.sandbox import is_internal_attribute
      >>> is_internal_attribute(str, "mro")
      True
      >>> is_internal_attribute(str, "upper")
      False
      """
      if isinstance(obj, types.FunctionType):
          if attr in UNSAFE_FUNCTION_ATTRIBUTES:
              return True
      elif isinstance(obj, types.MethodType):
          if attr in UNSAFE_FUNCTION_ATTRIBUTES or \
             attr in UNSAFE_METHOD_ATTRIBUTES:
              return True
      elif isinstance(obj, type):
          if attr == 'mro':
              return True
      elif isinstance(obj, (types.CodeType, types.TracebackType, types.FrameType)):
          return True
      elif isinstance(obj, types.GeneratorType):
          if attr in UNSAFE_GENERATOR_ATTRIBUTES:
              return True
      elif hasattr(types, 'CoroutineType') and isinstance(obj, types.CoroutineType):
          if attr in UNSAFE_COROUTINE_ATTRIBUTES:
              return True
      elif hasattr(types, 'AsyncGeneratorType') and isinstance(obj, types.AsyncGeneratorType):
          if attr in UNSAFE_ASYNC_GENERATOR_ATTRIBUTES:
              return True
      return attr.startswith('__')
function_tokens: def is_internal_attribute ( obj , attr ) : if isinstance ( obj , types . FunctionType ) : if attr in UNSAFE_FUNCTION_ATTRIBUTES : return True elif isinstance ( obj , types . MethodType ) : if attr in UNSAFE_FUNCTION_ATTRIBUTES or attr in UNSAFE_METHOD_ATTRIBUTES : return True elif isinstance ( obj , type ) : if attr == 'mro' : return True elif isinstance ( obj , ( types . CodeType , types . TracebackType , types . FrameType ) ) : return True elif isinstance ( obj , types . GeneratorType ) : if attr in UNSAFE_GENERATOR_ATTRIBUTES : return True elif hasattr ( types , 'CoroutineType' ) and isinstance ( obj , types . CoroutineType ) : if attr in UNSAFE_COROUTINE_ATTRIBUTES : return True elif hasattr ( types , 'AsyncGeneratorType' ) and isinstance ( obj , types . AsyncGeneratorType ) : if attr in UNSAFE_ASYNC_GENERATOR_ATTRIBUTES : return True return attr . startswith ( '__' )