U
    Kvf'o                     @   s  d ddddddddd	d
dddddddddddddgZ ddlZddlZddlZddlmZ ddlm	Z	 zddl
Z
W n ek
r   daY nX datoee
dZtsdZn@ee
d rd!d" Zn,ee
d#ree
jjd$dZnee
jjd$dZedk	Zddd%d&Zd'd( Zded)d Zd*d+ Zd,d- Zd.d/ Zd0d Zd1d2 Zd3D ]"Zeeer6eeeZ qdq6dsdt d4D ]"Z!eee!rheee!Z" qqhdst d5d Z#d6d Z$d7d8 Z%G d9d: d:e&Z'd;d< Z(G d=d> d>e&Z)d?d@ Z*dAd Z+g fdBdZ,dCdD Z-G dEd de&Z.dFdG Z/dHd	 Z0ej1e0e2gdIZ3dJdK Z4dLdM Z5dNd Z6dOdP Z7dQd Z8dRdS Z9dTd Z:dUd Z;dVdW Z<dXd Z=dYd Z>dZd[ Z?d\d Z@d]d^ ZAd_d ZBd`d ZCdad ZDdbdc ZEdS )fatleast_2d_column_defaultuniqueify_listwidest_floatwidest_complexwide_dtype_forwidenrepr_pretty_delegaterepr_pretty_implSortAnythingKeysafe_scalar_isnan
safe_isnaniterablehave_pandashave_pandas_categoricalhave_pandas_categorical_dtypepandas_Categorical_from_codespandas_Categorical_categoriespandas_Categorical_codes safe_is_pandas_categorical_dtypesafe_is_pandas_categoricalsafe_issubdtypeno_picklingassert_no_picklingsafe_string_eq    N)	cStringIO   )optional_dep_okFTCategoricalCategoricalDtypec                 C   s   t t| d| tjS )Ndtype)
isinstancegetattrpandasr   x r%   ./tmp/pip-unpacked-wheel-68fdvdus/patsy/util.py<lambda>/       r'   apiZis_categorical_dtypec                 C   sX   t rFt| tjtjfrFi }t| dr.| j|d< | j| f||d|S tj	| |||dS )Nname)copyr   )r+   r   subok)
r   r    r"   Series	DataFramehasattrr*   	__class__nparray)ar+   r   r,   
extra_argsr%   r%   r&   asarray_or_pandas9   s    

r5   c               	   C   s  dd l } ttdddgtjks$t|  l}| ddt ttt	dddggtjks`tttt	dddggddtj	kst|d kstW 5 Q R X t
dddg}t||kstt|dd	}t||std
|d< t||rtttdddgtddddgsttdddgtdjttks<tt||jd}d|d< |d dksdttrtjdddgddddgd}t|}|jdkstt|jdddgstd|d< |d dkstt|dd	}|jdkstt|jdddgstt||std
|d< t||r4tt|tdjttksRtt||jd}|jdksptt|jdddgstd|d< |d dksttjdddggdddgdgd}	t|	}
d|
jd< t|
jdddgstt|
jdgst|	jd dkstt|	dd	}t||	s8tt|jdddgsRtt|jdgshtd
|jd< t||	rtt|	td}|d jttkstt||	stt|jdddgstt|jdgstt|	|	d jd}t|jdddgstt|jdgs.tt|	|s@tt}zRdatttdddgtjksnttttdddggtjkstW 5 |aX d S )Nr   r         ignorethe matrix subclassT)r,   )r+   d   r         ?       @      @c   A
         r*   indexe   BC)columnsrE   )rA   r@   F)warningstyper5   r1   ndarrayAssertionErrorcatch_warningsfilterwarningsPendingDeprecationWarningmatrixr2   array_equalallclosefloatr   r   r"   r-   r*   rE   r.   locrI   )rJ   wr3   Za_copyZa_viewsZs_view1Zs_copyZs_view2dfZdf_view1Zdf_copyZdf_convertedZdf_view2
had_pandasr%   r%   r&   test_asarray_or_pandasF   s    
$ 
$


rZ   c                 C   sh   |r.t r.t| tjrt| S t| tjr.| S t| } t| } | jdkrV| 	d} | jdksdt
| S )Nr   )r   r6   )r   r    r"   r-   r.   r1   asarrayZ
atleast_1dndimreshaperM   )r3   preserve_pandasr%   r%   r&   r      s    




c               	   C   s  dd l } ttdddgdgdgdggks0ttdjdksBttdgjdksVttdggjdkslttdgggjdksttdddgjdksttdgdgdggjdkst|  <}| dd	t t	tt
dtjkst|d kstW 5 Q R X trt	ttddgtjks,tt	ttdgdggtjksRtt	ttddgd
dtjksxtt	ttdgdggd
dtjksttjdddgddddgd}t|d
d}t|tjstt|jdgkstt|jdddgkst|  D}| dd	t t	tt
dd
dtjksJt|d ksXtW 5 Q R X t	tdddgd
dtjksttrt}zXdat	ttddgd
dtjkstt	ttdgdggd
dtjkstW 5 |aX d S )Nr   r   r6   r7   )r   r   )r   r   r   r7   r   r8   r9   T)r_   rA         hir3   bcrD   F)rJ   r1   allr   rM   shaperN   rO   rP   rK   rQ   rL   r   r"   r-   r.   r    rI   rE   )rJ   rV   rW   rX   rY   r%   r%   r&   test_atleast_2d_column_default   s    (








rh   c                 C   s   t s| |S t| tjs$| |S || jkr2| S t|dkrt| jd dkrt|d | jd krftd| | jd  S td| j|f d S )Nr   r   zarrays have incompatible sizesz4cannot reshape a DataFrame with shape %s to shape %s)	r   r^   r    r"   r.   rg   len
ValueErrorrI   )r3   Z	new_shaper%   r%   r&   pandas_friendly_reshape   s    


rk   c                  C   s<  dd l } tttddddtddds:ttr8tj	ddddgid	d
dgd}t|d}t
|tj	sxtt|jd	d
dgstt|jdgstt|d}t
|tjstt|jd	d
dgst|jdkst| tt|d | tt|d | tt|d t}zda| tt|d W 5 |aX d S )Nr   rA      r6   )r6   rl   r$   r   r7   r3   rd   re   )rE   r`   )r7   )   )r   r7   )r7   r7   F)pytestr1   rS   rk   aranger^   rM   r   r"   r.   r    rR   rE   rI   r-   r*   raisesrj   AttributeError)rn   rX   ZnoopZsquozenrY   r%   r%   r&   test_pandas_friendly_reshape   s0    

rr   c                 C   s4   g }t  }| D ] }||kr|| || q|S N)setappendadd)seqZseq_newseenobjr%   r%   r&   r     s    
c                   C   sh   t dddgdddgkstt ddddddgdddgks>tt dddddddgddddgksdtd S )Nr   r6   r7   rm   )r   rM   r%   r%   r%   r&   test_to_uniqueify_list"  s    "rz   )Zfloat128Zfloat96Zfloat64)Z
complex256Z
complex196Z
complex128c                 C   sP   t | } t| jt js&t| jt jr*tS t| jt jr<tS t	d| jf d S )Nz"cannot widen a non-numeric type %r)
r1   r\   r   r   integerfloatingr   Zcomplexfloatingr   rj   Zarrr%   r%   r&   r   4  s    
c                 C   s   t j| t| dS )Nr;   )r1   r\   r   r}   r%   r%   r&   r   =  s    c                  C   s   t tdddgdddgs ttdddgjtks8tt tdddgdddgsXttdddgjtksptt tdddgdddgsttdddgjtkstdd l} | t	td	g d S )
Nr   r6   r7   r<   r=   r>   y      ?        r   rc   )
r1   rS   r   rM   r   r   r   rn   rp   rj   )rn   r%   r%   r&   test_wide_dtype_for_and_widen@  s       r~   c                   @   s@   e Zd Zdd Zdd Zdd Zdd ZeZd	d
 Zdd Z	dS )PushbackAdapterc                 C   s   || _ g | _d S rs   )_it_pushed)selfitr%   r%   r&   __init__K  s    zPushbackAdapter.__init__c                 C   s   | S rs   r%   r   r%   r%   r&   __iter__O  s    zPushbackAdapter.__iter__c                 C   s   | j | d S rs   )r   ru   r   ry   r%   r%   r&   	push_backR  s    zPushbackAdapter.push_backc                 C   s    | j r| j  S t| jS d S rs   )r   popsixadvance_iteratorr   r   r%   r%   r&   nextU  s    
zPushbackAdapter.nextc                 C   s:   zt | }W n tk
r*   tdY nX | | |S )Nzno more data)r   r   StopIterationrj   r   r   r%   r%   r&   peek]  s    
zPushbackAdapter.peekc                 C   s,   z|    W n tk
r"   Y dS X dS d S NFT)r   rj   r   r%   r%   r&   has_moree  s
    zPushbackAdapter.has_moreN)
__name__
__module____qualname__r   r   r   r   __next__r   r   r%   r%   r%   r&   r   J  s   r   c                  C   s   t tddddg} |  s tt| dks2t| d t| dksNtt| dks`t|  dkspt| d |  dkst| d |  dkst|  stt| ddddgkst|  rtd S )Nr   r6   r7   rm   r   rA   rB   )	r   iterr   rM   r   r   r   r   list)r   r%   r%   r&   test_PushbackAdapterm  s    


r   c                   @   sF   e Zd Zdd Zdd ZdddZdd	 Zd
d Zdd Zdd Z	dS )_MiniPPrinterc                 C   s   t  | _d| _d S Nr   )StringIO_outindentationr   r%   r%   r&   r     s    z_MiniPPrinter.__init__c                 C   s   | j | d S rs   r   write)r   textr%   r%   r&   r     s    z_MiniPPrinter.text c                 C   s   | j | d S rs   r   )r   sepr%   r%   r&   	breakable  s    z_MiniPPrinter.breakablec                 C   s   |  | d S rs   r   r   _r   r%   r%   r&   begin_group  s    z_MiniPPrinter.begin_groupc                 C   s   |  | d S rs   r   r   r%   r%   r&   	end_group  s    z_MiniPPrinter.end_groupc                 C   s*   t |dr|| d n| t| d S )N_repr_pretty_F)r/   r   r   reprr   r%   r%   r&   pretty  s    
z_MiniPPrinter.prettyc                 C   s
   | j  S rs   )r   getvaluer   r%   r%   r&   r     s    z_MiniPPrinter.getvalueN)r   )
r   r   r   r   r   r   r   r   r   r   r%   r%   r%   r&   r     s   
r   c                 C   s   t  }||  | S rs   )r   r   r   )ry   printerr%   r%   r&   _mini_pretty  s    
r   c                 C   s.   t r"dtjkr"ddlm} || S t| S d S )NZIPythonr   )r   )r   sysmodulesZIPython.lib.prettyr   r   )ry   r   r%   r%   r&   r     s    c           	         s   |j j} t|d d|f  dg fdd}|D ]}|   | q:|D ]F\}}|   t|d d|f   |  t|d d qT t|d d d S )	Nr   z%s(Fc                      s&   d r  d    dd< d S )Nr   ,T)r   r   r%   pstartedr%   r&   new_item  s    
z"repr_pretty_impl.<locals>.new_itemz%s= ))r0   r   r   ri   r   r   )	r   ry   argskwargsr*   r   arglabelvaluer%   r   r&   r     s    
c                  C   sR   t ddkstt } G dd dt}t| | ddgddg |  d	ksNtd S )
Nasdfz'asdf'c                   @   s   e Zd ZdS )z!test_repr_pretty.<locals>.MyClassNr   r   r   r%   r%   r%   r&   MyClass  s   r   r3   r   )foobar)r   r   z'MyClass('a', 1, foo='bar', asdf='asdf'))r   rM   r   objectr   r   )r   r   r%   r%   r&   test_repr_pretty  s     r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r	   c                 C   s
   || _ d S rs   ry   r   r%   r%   r&   r     s    zSortAnythingKey.__init__c                 C   s*   z| j |k W S  tk
r$   t Y S X d S rs   )ry   	TypeErrorNotImplemented)r   Z	other_objr%   r%   r&   
_python_lt  s    zSortAnythingKey._python_ltc                 C   s   t |tst| |j}|tk	r&|S | dtk	r8dS |dtk	rJdS | j|jkrZdS | jjjt| jf|jjjt|jfk S )Nr   TF)	r    r	   rM   r   ry   r   r0   r   id)r   otherresultr%   r%   r&   __lt__  s    zSortAnythingKey.__lt__N)r   r   r   r   r   r   r%   r%   r%   r&   r	     s   c                  C   s   t ddddgtdddddgks$tt ddgtdddgks@tt dddd	gtddddd	gksdtG d
d dt} G dd	 d	t}G dd dt}|  }| }| }t }t ||d||gtdd||||gkstd S )NrB   rA   r      )keyg      r3   g     4@rd   c                   @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.aNr   r%   r%   r%   r&   r3     s   c                   @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.bNr   r%   r%   r%   r&   rd     s   c                   @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.zNr   r%   r%   r%   r&   z  s   r   r   )sortedr	   rM   r   )r3   rd   r   Za_objZb_objZz_objZo_objr%   r%   r&   test_SortAnythingKey  s    $$r   c              
   C   s2   zt t| W S  tttfk
r,   Y dS X d S NF)r1   isnanrT   r   rj   NotImplementedErrorr#   r%   r%   r&   r
   )  s    )Zotypesc                   C   s   t drtt d rtt dr$tt dr0tt tdddgrHtt tjgrXtt tjsftt ttjsztt ttjstd S )NTZsadf)r   r6   r7   r   r6   r7   )r
   rM   r1   r\   nanZfloat32rT   r%   r%   r%   r&   test_safe_scalar_isnan0  s    r   c                   C   sh   t tddd t jdgdddddgs*ttt jjdks>ttt jsLttd rXttdrdtd S )Nr   Tr   Fr   )r1   rR   r   r   rM   r]   r%   r%   r%   r&   test_safe_isnan;  s    r   c                 C   s(   zt |  W n tk
r"   Y dS X dS r   )r   	Exceptionr   r%   r%   r&   r   D  s
    c                   C   sD   t dstt g stt ddis(tt dr4tt t r@td S )Nr   r3   r   )r   rM   r%   r%   r%   r&   test_iterableK  s
    r   c                 C   s<   t stt| } ttjdr,tj| |S t| |S d S )N
from_codes)r   rM   r1   r\   r/   r"   r   r   )codes
categoriesr%   r%   r&   r   c  s
    
c                  C   s`   t sd S tddddgddg} tt| d d dddgksDttt| d s\td S Nr   r   r[   r3   rd   )r   r   r1   rf   r\   rM   r   )re   r%   r%   r&   "test_pandas_Categorical_from_codesn  s
    &r   c                 C   s*   t | dr| j} t | dr | jS | jS d S )Ncatr   )r/   r   r   levelsr   r%   r%   r&   r   v  s
    

c                 C   s*   t | dr| j} t | dr | jS | jS d S )Nr   r   )r/   r   r   labelsr   r%   r%   r&   r     s
    

c                  C   s   t sd S tddddgddg} tt| ddgks8ttt| ddddgksVttrt	| }tt|ddgks~ttt|ddddgkstd S r   )
r   r   r1   rf   r   rM   r   r   r"   r-   )re   rW   r%   r%   r&   !test_pandas_Categorical_accessors  s    
r   c                 C   s   t sdS t| S r   )r   _pandas_is_categorical_dtype)dtr%   r%   r&   r     s    c                 C   s0   t sdS t| tjrdS t| dr,t| jS dS )NFTr   )r   r    r"   r   r/   r   r   )datar%   r%   r&   r     s    

c                  C   sV   t tdrttr0tddg} t | s0ttrRtjddgdd}t |sRtd S )NrA   r3   rd   categoryr;   )	r   r1   ro   rM   r   r"   r   r   r-   )Zc_objZs_objr%   r%   r&   test_safe_is_pandas_categorical  s    r   c                 C   s   t | rdS t| |S r   )r   r1   Z
issubdtype)Zdt1Zdt2r%   r%   r&   r     s    c                  C   sv   t ttjstt tttjs&tt ttjr6tt tttjrLttrrt	j
ddgdd} t | tjrrtd S )Nr3   rd   r   r;   )r   intr1   r{   rM   r   rT   r|   r   r"   r-   )Z	bad_dtyper%   r%   r&   test_safe_issubdtype  s    r   c                  O   s   t dd S )NzeSorry, pickling not yet supported. See https://github.com/pydata/patsy/issues/26 if you want to help.)r   )r   r   r%   r%   r&   r     s    c                 C   s$   dd l }dd l}|t|j|  d S r   )picklern   rp   r   dumps)ry   r   rn   r%   r%   r&   r     s    c                 C   s   t | tjr| |kS dS d S r   )r    r   string_types)ry   r   r%   r%   r&   r     s    c                   C   sL   t ddstt ddrttjs4t tdds4tt tddrHtd S )Nr   r   )r6   r6   )r   rM   r   PY3unicoder1   emptyr%   r%   r%   r&   test_safe_string_eq  s
    r   )FNF)F)F__all__r   Znumpyr1   r   Z	six.movesr   r   compatr   r"   ImportErrorr   r/   r   r   r!   r)   typescorecommonr   r5   rZ   r   rh   rk   rr   r   rz   Z
float_typer   rM   Zcomplex_typer   r   r   r~   r   r   r   r   r   r   r   r   r	   r   r
   Z	vectorizeboolr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r%   r%   r&   <module>   s         



 
V
@	





	
#$#		

