def translate(self, type_):
        """
        Given a built-in, an otherwise known type, or a name of known type, return its corresponding wrapper type::

            >>> Types.translate(int)
            <_IntType ('int', 'integer')>

            >>> Types.translate('string')
            <_StrType ('str', 'string', 'unicode')>

        """
        if isinstance(type_, six.string_types):
            for t in self.all_types:
                if type_ in t.aliases:
                    return t
            raise ValueError('Failed to recognise type by name {!r}'.format(type_))

        for t in self.all_types:
            if type_ in t.builtin_types:
                return t

        return type_