B
    < [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	 yddl
Z
W n ek
r   daY nX datoee
dZtsdZdZn2ee
d rdZe
jjjZnee
jjd!dZedk	Zdad"d#Zd$d% Zdbd&d Zd'd( Zd)d* Zd+d, Zd-d Zd.d/ Zx0d0D ]Zeeer&eeeZ P q&W dsRt!x0d1D ]Z"eee"rXeee"Z#P qXW dst!d2d Z$d3d Z%d4d5 Z&G d6d7 d7e'Z(d8d9 Z)G d:d; d;e'Z*d<d= Z+d>d Z,g fd?dZ-d@dA Z.G dBd de'Z/dCdD Z0dEd	 Z1ej2e1e3gdFZ4dGdH Z5dIdJ Z6dKd Z7dLdM Z8dNd Z9dOdP Z:dQd Z;dRd Z<dSdT Z=dUd Z>dVd Z?dWdX Z@dYd ZAdZd[ ZBd\d ZCd]d ZDd^d ZEd_d` ZFdS )c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api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)copydtype)r!   r"   subok)
r   
isinstancepandasSeries	DataFramehasattrr    	__class__nparray)ar!   r"   r#   Z
extra_args r-   )lib/python3.7/site-packages/patsy/util.pyasarray_or_pandas<   s    

r/   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 d 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 d |aX d S )Nr   r         ignorezthe matrix subclassT)r#   )r!   d   )r"   g      ?g       @g      @c   A
         )r    indexe   BC)columnsr9   )r6   r5   F)warningstyper/   r*   ndarrayAssertionErrorcatch_warningsfilterwarningsPendingDeprecationWarningmatrixr+   array_equalallclosefloatr"   r   r%   r&   r    r9   r'   Zlocr=   )r>   wr,   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_pandasI   s    
$$$


rM   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   r0   )r   r$   r%   r&   r'   r*   asarrayZ
atleast_1dndimreshaperA   )r,   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 d 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 d 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 d |aX d S )Nr   r   r0   r1   )r   r   )r   r   r   )r1   r   r2   zthe matrix subclassT)rR   r6         hir,   bc)r    r9   F)r>   r*   allr   rA   shaperB   rC   rD   r?   rE   r@   r   r%   r&   r'   r$   r=   r9   )r>   rI   rJ   rK   rL   r-   r-   r.   test_atleast_2d_column_default   sb    (

rZ   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   rQ   r$   r%   r'   rY   len
ValueErrorr=   )r,   Z	new_shaper-   r-   r.   pandas_friendly_reshape   s    


r]   c              C   s8  ddl m}  tttddddtddds>ttr4t	j
dddd	gid
ddgd}t|d}t|t	j
s|t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 d |aX d S )Nr   )assert_raisesr6      r0   )r0   r_   xr   r1   r,   rV   rW   )r9   )r1   r   )r1   )   )r   r1   )r1   r1   F)
nose.toolsr^   r*   rG   r]   arangerQ   rA   r   r%   r'   r$   rF   r9   r=   r&   r    r\   AttributeError)r^   rK   ZnoopZsquozenrL   r-   r-   r.   test_pandas_friendly_reshape   s,    

re   c             C   s8   g }t  }x(| D ] }||kr|| || qW |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   r0   r1   ra   )r   rA   r-   r-   r-   r.   test_to_uniqueify_list%  s    "rl   )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)
r*   rO   r   r"   integerfloatingr   Zcomplexfloatingr   r\   )arrr-   r-   r.   r   7  s    
c             C   s   t j| t| dS )N)r"   )r*   rO   r   )ro   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m}  | t	td
g d S )Nr   r0   r1   g      ?g       @g      @y      ?        r   )r^   rU   )
r*   rG   r   rA   r"   r   r   rb   r^   r\   )r^   r-   r-   r.   test_wide_dtype_for_and_widenC  s       rp   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 )N)_it_pushed)selfitr-   r-   r.   __init__N  s    zPushbackAdapter.__init__c             C   s   | S )Nr-   )rt   r-   r-   r.   __iter__R  s    zPushbackAdapter.__iter__c             C   s   | j | d S )N)rs   rg   )rt   rk   r-   r-   r.   	push_backU  s    zPushbackAdapter.push_backc             C   s    | j r| j  S t| jS d S )N)rs   popsixadvance_iteratorrr   )rt   r-   r-   r.   nextX  s    
zPushbackAdapter.nextc             C   s:   yt | }W n tk
r*   tdY nX | | |S )Nzno more data)rz   r{   StopIterationr\   rx   )rt   rk   r-   r-   r.   peek`  s    
zPushbackAdapter.peekc             C   s*   y|    W n tk
r    dS X dS d S )NFT)r~   r\   )rt   r-   r-   r.   has_moreh  s
    zPushbackAdapter.has_moreN)
__name__
__module____qualname__rv   rw   rx   r|   __next__r~   r   r-   r-   r-   r.   rq   M  s   rq   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   r0   r1   ra   r   r6   r7   )	rq   iterr   rA   rz   r{   rx   r~   list)ru   r-   r-   r.   test_PushbackAdapterp  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_outZindentation)rt   r-   r-   r.   rv     s    z_MiniPPrinter.__init__c             C   s   | j | d S )N)r   write)rt   textr-   r-   r.   r     s    z_MiniPPrinter.text c             C   s   | j | d S )N)r   r   )rt   sepr-   r-   r.   	breakable  s    z_MiniPPrinter.breakablec             C   s   |  | d S )N)r   )rt   _r   r-   r-   r.   begin_group  s    z_MiniPPrinter.begin_groupc             C   s   |  | d S )N)r   )rt   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   repr)rt   rk   r-   r-   r.   pretty  s    
z_MiniPPrinter.prettyc             C   s
   | j  S )N)r   getvalue)rt   r-   r-   r.   r     s    z_MiniPPrinter.getvalueN)r   )
r   r   r   rv   r   r   r   r   r   r   r-   r-   r-   r.   r     s   
r   c             C   s   t  }||  | S )N)r   r   r   )rk   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   )rk   r   r-   r-   r.   r     s    c       	         s   |j j} t|d d|f  dg fdd}x|D ]}|   | q<W xN|D ]F\}}|   t|d d|f   |  t|d d qZW  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= ))r)   r   r   r[   r   r   )	r   rk   argskwargsr    r   argZlabelvaluer-   )r   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   r,   r   )foobar)r   r   z'MyClass('a', 1, foo='bar', asdf='asdf'))r   rA   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 )N)rk   )rt   rk   r-   r-   r.   rv     s    zSortAnythingKey.__init__c             C   s$   y
| j |k S  tk
r   tS X d S )N)rk   	TypeErrorNotImplemented)rt   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	   rA   r   rk   r   r)   r   id)rt   otherresultr-   r-   r.   __lt__  s    zSortAnythingKey.__lt__N)r   r   r   rv   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 )Nr7   r6   r      )keyg      r,   g     4@rV   c               @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.aN)r   r   r   r-   r-   r-   r.   r,     s   c               @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.bN)r   r   r   r-   r-   r-   r.   rV     s   c               @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.zN)r   r   r   r-   r-   r-   r.   z!  s   r   r   )sortedr	   rA   r   )r,   rV   r   Za_objZb_objZz_objZo_objr-   r-   r.   test_SortAnythingKey  s    $$r   c          
   C   s.   yt t| S  tttfk
r(   dS X d S )NF)r*   isnanrH   r   r\   NotImplementedError)r`   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   r0   r1   r   r0   r1   )r
   rA   r*   rO   nanZfloat32rH   r-   r-   r-   r.   test_safe_scalar_isnan3  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   )r*   rF   r   r   rA   rP   r-   r-   r-   r.   test_safe_isnan>  s    r   c             C   s&   yt |  W n tk
r    dS X dS )NFT)r   	Exception)rk   r-   r-   r.   r   G  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   r,   r   )r   rA   r-   r-   r-   r.   test_iterableN  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   rA   r*   rO   r(   r%   r   r   )codes
categoriesr-   r-   r.   r   f  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   rN   r,   rV   )r   r   r*   rX   rO   rA   r   )rW   r-   r-   r.   "test_pandas_Categorical_from_codesq  s
    &r   c             C   s*   t | dr| j} t | dr | jS | jS d S )Ncatr   )r(   r   r   Zlevels)r   r-   r-   r.   r   y  s
    

c             C   s*   t | dr| j} t | dr | jS | jS d S )Nr   r   )r(   r   r   labels)r   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 )Nr   r   rN   r,   rV   )
r   r   r*   rX   r   rA   r   r   r%   r&   )rW   rJ   r-   r-   r.   !test_pandas_Categorical_accessors  s    
r   c             C   s   t sdS t| S )NF)r   _pandas_is_categorical_dtype)Z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 )Nr6   r,   rV   category)r"   )	r   r*   rc   rA   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 )NF)r   r*   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 )Nr,   rV   r   )r"   )r   intr*   rm   rA   r"   rH   rn   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m} |t|j|  d S )Nr   )r^   )picklerb   r^   r   dumps)rk   r   r^   r-   r-   r.   r     s    c             C   s   t | tjr| |kS dS d S )NF)r$   rz   Zstring_types)rk   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   )r0   r0   )r   rA   rz   ZPY3Zunicoder*   emptyr-   r-   r-   r.   test_safe_string_eq  s
    r   )FNF)F)G__all__r   Znumpyr*   rz   Z	six.movesr   r   compatr   r%   ImportErrorr   r(   r   r   r   r   typesr   getattrZcorecommonr/   rM   r   rZ   r]   re   r   rl   Z
float_typer   rA   Zcomplex_typer   r   r   rp   r   rq   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
@	





	
#$#		

