class_docstr: Proxy-object for an asyncio
  
  Any coroutine methods will be wrapped in event_loop.run_
class_docstr_tok: ["Proxy-object","for","an","asyncio","Any","coroutine","methods","will","be","wrapped","in","event_loop.run_"]
code: def __getattr__(self, key):
      attr = getattr(self._obj, key)
      if inspect.iscoroutinefunction(attr):
          # if it's a coroutine method,
          # return a threadsafe wrapper onto the _current_ asyncio loop
          @wraps(attr)
          def _wrapped(*args, **kwargs):
              concurrent_future = asyncio.run_coroutine_threadsafe(
                  attr(*args, **kwargs), self._event_loop
              )
              return asyncio.wrap_future(concurrent_future)
  
          return _wrapped
      else:
          return attr
  
file_path: catboost/contrib/python/ipython/py3/IPython/core/async_helpers.py
imports: import ast
  import asyncio
  import inspect
  from functools import wraps
label_desc: Use image node_id 3 for calling the _AsyncIOProxy obj's underlying member method code with example usage: obj.__getattr__(key) and returns: _wrapped, attr, asyncio