B
    Z                 @   s  d Z ddlZddlZddlZddlZejd dkZejdd dkZerxddlZddl	m
Z
 ddlmZmZ ddlZeZddlZeZddlZddlZddlmZmZmZ ddlZeZeZd	d
 Zdd Zdd Zdd Zdd ZdDddZdZe Z e!Z!e"Z"e#Z#ej$Z$e%Z&e'Z(ej)Z)dd Z*dd Z+dd Z,dd Z-ej.j/Z/ej0j1Z1ej.jZej0j2Z2eZ3e4Z4e
dd d!d"d#gZ5d$d% Z6nddl7Zdd&lmZ dd&lmZ dd'lm6Z6 eZddlZeZddl8Z8ddl9Z9eZeZeZeZeZd(Zd)d ZdEd+d,ZdFd-dZe:Z ej;Z"ej<Z#ej=Z!e$Z$e&Z&e(Z(ej>Z)ej Z*ej"Z+ej!Z,ej#Z-e8j/Z/e9j1Z1ej2Z2e8jZe8jZe?Z3e@Z4d.d/ ZAd0d1 ZBd2d3 ZCyeDZEW n eFk
r   d4d5 ZEY nX eEZDyeGZGW n eFk
r   d6d7 ZGY nX d8d9 ZHd:d; ZId<d= ZJd>d? ZKd@dA ZLy
ejMZMW n   dBdC ZMY nX dS )Gz<
Compatibility tools for differences between Python 2 and 3
    N      )r   r   )
namedtuple)StringIOBytesIO)	HTTPErrorurlretrieveURLErrorc             C   s   t | S )N)str)x_ r   8lib/python3.7/site-packages/statsmodels/compat/python.py<lambda>   s    r   c             C   s   t | tr| S | dS )Nlatin1)
isinstancebytesencode)sr   r   r   asbytes   s    
r   c             C   s   t | tr| S | dS )Nr   )r   r
   decode)r   r   r   r   asstr"   s    
r   c             C   s.   t | tr| S t | tr"| dS t| S d S )Nr   )r   r
   r   r   )r   r   r   r   asstr2'   s
    


r   c             C   s   t | tjS )N)r   ioFileIO)fr   r   r   	isfileobj/   s    r   rc             C   s   t | |ddS )Nz
iso-8859-1)modeencoding)open)filenamer   r   r   r   open_latin12   s    r"   Uc              O   s   t t| |S )N)listrange)argskwargsr   r   r   lrangeB   s    r(   c              O   s   t t| |S )N)r$   zip)r&   r'   r   r   r   lzipE   s    r*   c              O   s   t t| |S )N)r$   map)r&   r'   r   r   r   lmapH   s    r,   c              O   s   t t| |S )N)r$   filter)r&   r'   r   r   r   lfilterK   s    r.   ArgSpecr&   varargskeywordsdefaultsc       	      C   s   t | }|j}g g  }}d\}}x^|D ]V}|| }|jt jjkrH|}n|jt jjkr\|}n
|| |j|j	k	r(||j q(W t
|dkrdn|}t||||S )zj
        Simple workaroung for getargspec deprecation that returns
        an ArgSpec-like object
        )NNr   N)inspectZ	signature
parametersZkindZ	ParameterZVAR_POSITIONALZVAR_KEYWORDappenddefaultemptylenr/   )	funcZsigr4   r&   r2   r0   r1   keyZ	parameterr   r   r   
getargspecV   s    



r;   )r   )r;   Sc             C   s
   t | tS )N)r   file)r   r   r   r   r      s    asciic             C   s   t | tr| S | |S )N)r   Zunicoder   )r   r   r   r   r   	asunicode   s    
r?   c             C   s   t | |dS )N)r   )r    )r!   r   r   r   r   r"      s    c               C   s   t  d S )N   )sysexc_infor   r   r   r   getexception   s    rC   c             C   s2   t | dr&t| ttfs&dd | D S t| S d S )N__iter__c             S   s   g | ]}t |qS r   )asbytes_nested).0yr   r   r   
<listcomp>   s    z"asbytes_nested.<locals>.<listcomp>)hasattrr   r   r
   r   )r   r   r   r   rE      s    rE   c             C   s2   t | dr&t| ttfs&dd | D S t| S d S )NrD   c             S   s   g | ]}t |qS r   )asunicode_nested)rF   rG   r   r   r   rH      s    z$asunicode_nested.<locals>.<listcomp>)rI   r   r   r
   r?   )r   r   r   r   rJ      s    rJ   c             C   s   |   S )N)next)itr   r   r   advance_iterator   s    rM   c             C   s   t dd t| jD S )Nc             s   s   | ]}d |j kV  qdS )__call__N)__dict__)rF   klassr   r   r   	<genexpr>   s    zcallable.<locals>.<genexpr>)anytype__mro__)objr   r   r   callable   s    rV   c             K   s    t | dd}|s| j}|f |S )zreplacement for six's iteritems for Python2/3 compat
       uses 'iteritems' if available and otherwise uses 'items'.

       Passes kwargs to method.
    	iteritemsN)getattritems)rU   r'   r9   r   r   r   rW      s    rW   c             K   s    t | dd }|s| j}|f |S )Niterkeys)rX   keys)rU   r'   r9   r   r   r   rZ      s    rZ   c             K   s    t | dd }|s| j}|f |S )N
itervalues)rX   values)rU   r'   r9   r   r   r   r\      s    r\   c             C   s$   y| j jS  tk
r   | jS X d S )N)Zim_funcZ	func_nameAttributeError__name__)r9   r   r   r   get_function_name   s    r`   c             C   s$   y| j S  tk
r   | jjS X d S )N)Zim_classr^   __self__	__class__)r9   r   r   r   	get_class   s    rc   c             #   s   t |  t }||krd S t|}t  fdd|D V  xx.tt|D ]}|| || | krLP qLW d S ||  d7  < x*t|d |D ]}||d  d ||< qW t  fdd|D V  q>W d S )Nc             3   s   | ]} | V  qd S )Nr   )rF   i)poolr   r   rQ      s    zcombinations.<locals>.<genexpr>r@   c             3   s   | ]} | V  qd S )Nr   )rF   rd   )re   r   r   rQ     s    )tupler8   r(   reversedr%   )iterabler   nindicesrd   jr   )re   r   combinations   s    rl   )r   )r>   )r   )N__doc__	functools	itertoolsrA   Zurllibversion_infoZPY3ZPY3_2builtinscollectionsr   r   r   r   r3   Z	cStringIOpickleZcPickleZurllib.requestZurllib.parser   r   r	   r   r
   r?   r   r   r   r   r"   Zstrcharr%   r+   r)   r-   reduceintZlongchrZunichrzip_longestr(   r*   r,   r.   ZrequestZurlopenparseZurljoinZ	urlencodeZstring_typesinputr/   r;   Z__builtin__Zurllib2ZurlparseZxrangeZizipZifilterZimapZizip_longestZ
basestringZ	raw_inputrC   rE   rJ   rK   rM   	NameErrorrV   rW   rZ   r\   r`   rc   rl   r   r   r   r   <module>   s   




