# Path: sublime_jedi/console_logging.py
# def get_plugin_debug_level(default='error'):
#     def __init__(self, name):
#     def level(self):
#     def _print(self, msg):
#     def log(self, level, msg, **kwargs):
#     def _log(self, level, msg, **kwargs):
#     def debug(self, msg):
#     def info(self, msg):
#     def error(self, msg, exc_info=False):
#     def exception(self, msg):
#     def warning(self, msg):
# class Logger:
# 
# Path: sublime_jedi/utils.py
# def unique(items, pred=lambda x: x):
#     stack = set()
# 
#     for i in items:
#         calculated = pred(i)
#         if calculated in stack:
#             continue
#         stack.add(calculated)
#         yield i


from itertools import chain
from operator import itemgetter
from jedi.api.completion import Parameter
from .console_logging import getLogger
from .utils import unique
import jedi

    def get(self, _action, *args, **kwargs):
        """Action dispatcher."""
        try:
            return getattr(self, 'get_' + _action)(*args, **kwargs)
        except Exception:
            logger.exception('`JediFacade.get_{0}` failed'.format(_action))

    def get_goto(self, follow_imports=True):
        """ Jedi "Go To Definition" """
        return self._goto(follow_imports=follow_imports)

    def get_usages(self, *args, **kwargs):
        """ Jedi "Find Usage" """
        return self._usages()

    def get_funcargs(self, *args, **kwargs):
        """Complete callable object parameters with Jedi."""
        complete_all = self.auto_complete_function_params == 'all'
        call_parameters = self._complete_call_assigments(
            with_keywords=complete_all,
        )
        return ', '.join(p[1] for p in call_parameters)

    def get_autocomplete(self, *args, **kwargs):
        """Jedi completion."""
        completions = chain(
            self._complete_call_assigments(with_keywords=True),
            self._completion()
        )

# Path: sublime_jedi/console_logging.py
# def get_plugin_debug_level(default='error'):
#     def __init__(self, name):
#     def level(self):
#     def _print(self, msg):
#     def log(self, level, msg, **kwargs):
#     def _log(self, level, msg, **kwargs):
#     def debug(self, msg):
#     def info(self, msg):
#     def error(self, msg, exc_info=False):
#     def exception(self, msg):
#     def warning(self, msg):
# class Logger:
# 
# Path: sublime_jedi/utils.py
# def unique(items, pred=lambda x: x):
#     stack = set()
# 
#     for i in items:
#         calculated = pred(i)
#         if calculated in stack:
#             continue
#         stack.add(calculated)
#         yield i


# Path: sublime_jedi/facade.py
from itertools import chain
from operator import itemgetter
from jedi.api.completion import Parameter
from .console_logging import getLogger
from .utils import unique
import jedi


    def get(self, _action, *args, **kwargs):
        """Action dispatcher."""
        try:
            return getattr(self, 'get_' + _action)(*args, **kwargs)
        except Exception:
            logger.exception('`JediFacade.get_{0}` failed'.format(_action))

    def get_goto(self, follow_imports=True):
        """ Jedi "Go To Definition" """
        return self._goto(follow_imports=follow_imports)

    def get_usages(self, *args, **kwargs):
        """ Jedi "Find Usage" """
        return self._usages()

    def get_funcargs(self, *args, **kwargs):
        """Complete callable object parameters with Jedi."""
        complete_all = self.auto_complete_function_params == 'all'
        call_parameters = self._complete_call_assigments(
            with_keywords=complete_all,
        )
        return ', '.join(p[1] for p in call_parameters)

    def get_autocomplete(self, *args, **kwargs):
        """Jedi completion."""
        completions = chain(
            self._complete_call_assigments(with_keywords=True),
            self._completion()
        )

        return list(unique(completions, itemgetter(0)))