# Path: ronin/utils/unicode.py



from .unicode import string, to_str
from inspect import isclass
    Human-readable name of type(s). Built-in types will avoid the "__builtin__" prefix.

    Tuples are always handled as a join of "|". 
    
    :param the_type: type(s)
    :type the_type: type|(type)
    :returns: name of type(s)
    :rtype: str
    """

    if isinstance(the_type, tuple):
        return '|'.join([type_name(v) for v in the_type])    
    module = to_str(the_type.__module__)
    name = to_str(the_type.__name__)
    return name if module == '__builtin__' else '{}.{}'.format(module, name)


def verify_type(value, the_type):
    """
    Raises :class:`TypeError` if the value is not an instance of the type.

    :param value: value
    :param the_type: type or type name
    :type the_type: type|str
    :raises TypeError: if ``value`` is not an instance of ``the_type``
    :raises ~exceptions.ValueError: if ``the_type`` is invalid
    :raises ImportError: if could not import the module
    :raises AttributeError: if could not find the symbol in the module
    """
    

# Path: ronin/utils/unicode.py



# Path: ronin/utils/types.py
from .unicode import string, to_str
from inspect import isclass

    Human-readable name of type(s). Built-in types will avoid the "__builtin__" prefix.

    Tuples are always handled as a join of "|". 
    
    :param the_type: type(s)
    :type the_type: type|(type)
    :returns: name of type(s)
    :rtype: str
    """

    if isinstance(the_type, tuple):
        return '|'.join([type_name(v) for v in the_type])    
    module = to_str(the_type.__module__)
    name = to_str(the_type.__name__)
    return name if module == '__builtin__' else '{}.{}'.format(module, name)


def verify_type(value, the_type):
    """
    Raises :class:`TypeError` if the value is not an instance of the type.

    :param value: value
    :param the_type: type or type name
    :type the_type: type|str
    :raises TypeError: if ``value`` is not an instance of ``the_type``
    :raises ~exceptions.ValueError: if ``the_type`` is invalid
    :raises ImportError: if could not import the module
    :raises AttributeError: if could not find the symbol in the module
    """
    

    if isinstance(the_type, string):