B
    nb\                 @   s&  d Z ddlmZ ddlZddlZddlZejd dkZejd dkZej	d dko^ej	d dkZ
erveefZeefZnefZefZeeeeeg ZerXddlZddlZyddlZW n ek
r   Y nX dd	lmZ yddlZ W n ek
r   ddl!Z Y nX yddl"Z#W n ek
r0   ddl#Z#Y nX dd
l$m%Z& ddl'Z(ddl)Z*ddl+Z+ntddlZddlZyddlZW n ek
r   Y nX ddlmZ ddl Z ddl#Z#ddl,m&Z& ddl(Z(ddl*Z*ddl-Z+dd Z.dd Z/dd Z0dd Z1dd Z2d@ddZ3dAddZ4dd Z5dd Z6dd  Z7d!d" Z8d#d$ Z9d%d& Z:erhe;Z<ej=Z>e?Z?ddl@Z@e@jAZBdd'lCmDZE n$e<Z<ej>Z>d(d) Z?ejAZBdd*lCmEZE d+d, ZFerd-d. ZGd/d0 ZHd1d2 ZId3d4 ZJeKd5ZLeKd6ZMeKd7ZNn>d8d. ZGd9d0 ZHd:d2 ZId;d4 ZJeKd<ZLeKd=ZMeKd>ZNeOd?kr"dS )Bz
spyder.py3compat
----------------

Transitional module providing compatibility functions intended to help
migrating from Python 2 to Python 3.

This module should be fully compatible with:
    * Python >=v2.6
    * Python 3
    )print_functionN23         )maxint)	DictMixin)maxsize)MutableMappingc             C   s(   t rt| ttgkS t| ttgkS dS )zReturn True if `obj` is type text string, False if it is anything else,
    like an instance of a class that extends the basestring class.N)PY2typestrunicodebytes)obj r   /lib/python3.7/site-packages/spyder/py3compat.pyis_type_text_stringW   s    r   c             C   s   t rt| tS t| tS dS )zReturn True if `obj` is a text string, False if it is anything else,
    like binary data (Python 3) or QString (Python 2, PyQt API #1)N)r   
isinstanceZ
basestringr   )r   r   r   r   is_text_stringa   s    
r   c             C   s   t rt| tS t| tS dS )zEReturn True if `obj` is a binary string, False if it is anything elseN)r   r   r   r   )r   r   r   r   is_binary_stringk   s    
r   c             C   s   t | pt| S )zReturn True if `obj` is a text or binary Python string object,
    False if it is anything else, like a QString (Python 2, PyQt API #1))r   r   )r   r   r   r   	is_stringt   s    r   c             C   s   t rt| tS t| tS dS )zReturn True if `obj` is unicodeN)r   r   r   r   )r   r   r   r   
is_unicodey   s    
r   c             C   sZ   t r.t| tr| S |dkr"t| S t| |S n(|dkr>t| S t| trL| S t| |S dS )z&Convert `obj` to (unicode) text stringN)r   r   r   r   )r   encodingr   r   r   to_text_string   s    

r   c             C   s:   t r |dkrt| S | |S nt| |dkr0dn|S dS )zCConvert `obj` to binary string (bytes in Python 3, str in Python 2)Nzutf-8)r   r   encoder   )r   r   r   r   r   to_binary_string   s
    r   c             C   s   t r
| jS | jS dS )zReturn function code objectN)r   Z	func_code__code__)funcr   r   r   get_func_code   s    r    c             C   s   t r
| jS | jS dS )zReturn function nameN)r   Z	func_name__name__)r   r   r   r   get_func_name   s    r"   c             C   s   t r
| jS | jS dS )z'Return function default argument valuesN)r   Zfunc_defaults__defaults__)r   r   r   r   get_func_defaults   s    r$   c             C   s   t r
| jS | jS dS )zReturn method function objectN)r   Zim_func__func__)r   r   r   r   get_meth_func   s    r&   c             C   s   t r
| jS | jS dS )zReturn method class instanceN)r   Zim_self__self__)r   r   r   r   get_meth_class_inst   s    r(   c             C   s   t r
| jS | jjS dS )zReturn method classN)r   Zim_classr'   	__class__)r   r   r   r   get_meth_class   s    r*   )izip_longestc             C   s   | |k| |k  S )Nr   )abr   r   r   cmp   s    r.   )zip_longestc             C   s   t t|    S )zDConvert QByteArray object to str in a way compatible with Python 2/3)r   r   ZtoHexdatadecode)Zqbar   r   r   qbytearray_to_str   s    r2   c             K   s   t | jf |S )N)iterkeys)dkwr   r   r   iterkeys   s    r7   c             K   s   t | jf |S )N)r3   values)r5   r6   r   r   r   
itervalues   s    r9   c             K   s   t | jf |S )N)r3   items)r5   r6   r   r   r   	iteritems  s    r;   c             K   s   t | jf |S )N)r3   Zlists)r5   r6   r   r   r   	iterlists  s    r<   r4   r8   r:   c             K   s   | j f |S )N)r7   )r5   r6   r   r   r   r7     s    c             K   s   | j f |S )N)r9   )r5   r6   r   r   r   r9     s    c             K   s   | j f |S )N)r;   )r5   r6   r   r   r   r;     s    c             K   s   | j f |S )N)r<   )r5   r6   r   r   r   r<     s    viewkeys
viewvalues	viewitems__main__)N)N)P__doc__Z
__future__r   operatorossysversionr   ZPY3version_infoZPY36_OR_MOREr   r   Z
TEXT_TYPESintZlongZ	INT_TYPEStuplelistfloatcomplexZNUMERIC_TYPESZ__builtin__builtinsZConfigParserZconfigparser_winregwinregImportErrorr   r
   Z	CStringIOioStringIOZcPicklepickleUserDictr	   r   Zthread_threadreprreprlibZQueuecollectionsZqueuer   r   r   r   r   r   r   r    r"   r$   r&   r(   r*   Z	raw_inputinputZgetcwdugetcwdr.   stringlowerZ	str_lower	itertoolsr+   r/   r2   r7   r9   r;   r<   methodcallerr=   r>   r?   r!   r   r   r   r   <module>   s   



		

				





