class_docstr: Wrapper class that defines synchronous `_sync` method wrappers
  
  around async-native methods.
  
  Every coroutine method automatically gets an `_sync` alias
  that runs it synchronously.
class_docstr_tok: ["Wrapper","class","that","defines","synchronous","`","_sync","`","method","wrappers","around","async-native","methods",".","Every","coroutine","method","automatically","gets","an","`","_sync","`","alias","that","runs","it","synchronously","."]
code: def __dir__(self):
      attrs = super().__dir__()
      seen = set()
      for cls in self.__class__.mro():
          for name, value in cls.__dict__.items():
              if name in seen:
                  continue
              seen.add(name)
              if inspect.iscoroutinefunction(value):
                  async_name = name + "_sync"
                  attrs.append(async_name)
      return attrs
  
file_path: ipyparallel/ipyparallel/_async.py
imports: import asyncio
  import concurrent.futures
  import inspect
  import threading
  from functools import partial
  from tornado.ioloop import IOLoop
label_desc: Use image node_id 5 for calling the AsyncFirst obj's underlying member method code with example usage: obj.__dir__() and returns: attrs