a
    Pa>o                     @   sz  g d 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yZ   daY n0 datolee
dZts|dZdZn2ee
d	rdZe
jjjZnee
jjd
dZeduZd\ddZdd Zd]ddZdd Zdd Zdd Zdd Zdd ZdD ]ZeeereeeZ  q qds J dD ]"Z!eee!r$eee!Z" qRq$dsRJ dd Z#dd  Z$d!d" Z%G d#d$ d$e&Z'd%d& Z(G d'd( d(e&Z)d)d* Z*d+d, Z+g fd-d.Z,d/d0 Z-G d1d2 d2e&Z.d3d4 Z/d5d6 Z0ej1e0e2gd7Z3d8d9 Z4d:d; Z5d<d= Z6d>d? Z7d@dA Z8dBdC Z9dDdE Z:dFdG Z;dHdI Z<dJdK Z=dLdM Z>dNdO Z?dPdQ Z@dRdS ZAdTdU ZBdVdW ZCdXdY ZDdZd[ ZEdS )^)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.9/site-packages/patsy/util.pyasarray_or_pandas<   s    

r/   c                  C   s  dd l } ttg dtju s"J |  r}| ddt tttg dgtju s\J tttg dgddtju sJ |d u sJ W d    n1 s0    Y  t	g d}t||u sJ t|dd}t
||sJ d|d< t
||rJ ttg dtd	g d
s J tg dtd	jttksBJ t||jd	}d|d< |d dksjJ trtjg ddg dd}t|}|jdksJ t
|jg dsJ d|d< |d dksJ t|dd}|jdksJ t
|jg dsJ t
||sJ d|d< t
||r2J t|td	jttksPJ t||jd	}|jdksnJ t
|jg dsJ d|d< |d dksJ tjg dgg ddgd}	t|	}
d|
jd< t
|
jg dsJ t
|
jdgsJ |	jd dksJ t|	dd}t
||	s.J t
|jg dsFJ t
|jdgs\J d|jd< t
||	rxJ t|	td	}|d jttksJ t||	sJ t
|jg dsJ t
|jdgsJ t|	|	d jd	}t
|jg dsJ t
|jdgsJ t
|	|s0J t}zRdatttg dtju s\J tttg dgtju sJ W |an|a0 d S )Nr   r         ignorethe matrix subclassT)r#   )r!   d   r"   g      ?g       @g      @c   A)
         r    indexe   r:   )r9   BC)columnsr>   )r:   r9   F)warningstyper/   r*   ndarraycatch_warningsfilterwarningsPendingDeprecationWarningmatrixr+   array_equalallclosefloatr"   r   r%   r&   r    r>   r'   ZlocrB   )rC   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    
"*
"


rQ   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sdJ | S )Nr   )r   r1   )
r   r$   r%   r&   r'   r*   asarrayZ
atleast_1dndimreshape)r,   preserve_pandasr-   r-   r.   r      s    




r   c                  C   s  dd l } ttg ddgdgdggks.J tdjdks@J tdgjdksTJ tdggjdksjJ tdgggjdksJ tg djdksJ tdgdgdggjdksJ |  F}| d	d
t ttt	dtj
ksJ |d u sJ W d    n1 s0    Y  trtttddgtj
ks>J tttdgdggtj
ksdJ tttddgddtjksJ tttdgdggddtjksJ tjg ddg dd}t|dd}t|tjsJ t|jdgksJ t|jg dksJ |  N}| d	d
t ttt	dddtj
ksVJ |d u sdJ W d    n1 sz0    Y  ttg dddtj
ksJ trt}z\datttddgddtj
ksJ tttdgdggddtj
ksJ W |an|a0 d S )Nr   r0   r   r1   r2   )r   r   )r   r   r   r2   r   r3   r4   T)rV   )r:         hir,   bcr=   F)rC   r*   allr   shaperF   rG   rH   rD   rI   rE   r   r%   r&   r'   r$   rB   r>   )rC   rM   rN   rO   rP   r-   r-   r.   test_atleast_2d_column_default   s    &
,





.

r`   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   rU   r$   r%   r'   r_   len
ValueErrorrB   )r,   Z	new_shaper-   r-   r.   pandas_friendly_reshape   s    


rc   c                  C   s8  dd l } tttddddtddds:J tr4tjdg dig dd	}t|d
}t	|tjstJ t
|jg dsJ t
|jdgsJ t|d}t	|tjsJ t
|jg dsJ |jdksJ | tt|d | tt|d | tt|d t}zda| tt|d W |an|a0 d S )Nr   r:      r1   )r1   rd   xr0   r[   )r>   rW   )r2   )   )r   r2   )r2   r2   F)pytestr*   rK   rc   arangerU   r   r%   r'   r$   rJ   r>   rB   r&   r    raisesrb   AttributeError)rg   rO   ZnoopZsquozenrP   r-   r-   r.   test_pandas_friendly_reshape   s0    

rk   c                 C   s4   g }t  }| D ] }||vr|| || q|S N)setappendadd)seqZseq_newseenobjr-   r-   r.   r     s    
r   c                   C   sL   t g dg dksJ t g dg dks0J t g dg dksHJ d S )Nr0   )r   r2   r2   r1   r2   r   )r   r2   r1   )r2   r1   r   rf   r   r1   r2   )r2   r1   r   rf   )r   r-   r-   r-   r.   test_to_uniqueify_list%  s    rs   )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*   rS   r   r"   integerfloatingr   Zcomplexfloatingr   rb   Zarrr-   r-   r.   r   7  s    
r   c                 C   s   t j| t| dS )Nr6   )r*   rS   r   rv   r-   r-   r.   r   @  s    r   c                  C   s   t tg dg dsJ tg djtks2J t tg dg dsNJ tg djtksdJ t tg dg dsJ tg djtksJ dd l} | ttdg d S )Nr0   r7   )y      ?        r1   r2   r   rZ   )	r*   rK   r   r"   r   r   rg   ri   rb   )rg   r-   r-   r.   test_wide_dtype_for_and_widenC  s    rw   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 rl   )_it_pushed)selfitr-   r-   r.   __init__N  s    zPushbackAdapter.__init__c                 C   s   | S rl   r-   r{   r-   r-   r.   __iter__R  s    zPushbackAdapter.__iter__c                 C   s   | j | d S rl   )rz   rn   r{   rr   r-   r-   r.   	push_backU  s    zPushbackAdapter.push_backc                 C   s    | j r| j  S t| jS d S rl   )rz   popsixadvance_iteratorry   r~   r-   r-   r.   nextX  s    
zPushbackAdapter.nextc                 C   s8   zt | }W n ty(   tdY n0 | | |S )Nzno more data)r   r   StopIterationrb   r   r   r-   r-   r.   peek`  s    
zPushbackAdapter.peekc                 C   s*   z|    W n ty    Y dS 0 dS d S NFT)r   rb   r~   r-   r-   r.   has_moreh  s
    zPushbackAdapter.has_moreN)
__name__
__module____qualname__r}   r   r   r   __next__r   r   r-   r-   r-   r.   rx   M  s   rx   c                  C   s   t tg d} |  sJ t| dks.J | d t| dksJJ t| dks\J |  dkslJ | d |  dksJ | d |  dksJ |  sJ t| g dksJ |  rJ d S )	N)r   r1   r2   rf   r   r   r1   r2   r:   r;   )r;   r:   r2   rf   )rx   iterr   r   r   r   r   list)r|   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indentationr~   r-   r-   r.   r}     s    z_MiniPPrinter.__init__c                 C   s   | j | d S rl   r   write)r{   textr-   r-   r.   r     s    z_MiniPPrinter.text c                 C   s   | j | d S rl   r   )r{   sepr-   r-   r.   	breakable  s    z_MiniPPrinter.breakablec                 C   s   |  | d S rl   r   r{   _r   r-   r-   r.   begin_group  s    z_MiniPPrinter.begin_groupc                 C   s   |  | d S rl   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 rl   )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 rl   )r   r   r   )rr   printerr-   r-   r.   _mini_pretty  s    
r   c                 C   s.   t r"dtjv r"ddlm} || S t| S d S )NZIPythonr   )r   )r   sysmodulesZIPython.lib.prettyr   r   )rr   r   r-   r-   r.   r     s    r   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-   pZstartedr-   r.   new_item  s    
z"repr_pretty_impl.<locals>.new_itemz%s= ))r)   r   r   ra   r   r   )	r   rr   argskwargsr    r   argZlabelvaluer-   r   r.   r     s    
r   c                  C   sR   t ddksJ t } G dd dt}t| | ddgddg |  d	ksNJ 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   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 rl   rr   r   r-   r-   r.   r}     s    zSortAnythingKey.__init__c                 C   s(   z| j |k W S  ty"   t Y S 0 d S rl   )rr   	TypeErrorNotImplemented)r{   Z	other_objr-   r-   r.   
_python_lt  s    zSortAnythingKey._python_ltc                 C   s   t |tsJ | |j}|tur&|S | dtur8dS |dtu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	   r   rr   r   r)   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   r	   c                  C   s   t g dtdg dksJ t ddgtdddgks8J t g dtdg dksTJ G dd	 d	t} G d
d dt}G dd dt}|  }| }| }t }t ||d||gtdd||||gksJ d S )N)r;   r:   r      )key)r   r:   r   r;   r:   g      )r:   r,        4@r\   )r:   r   r,   r\   c                   @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.aNr   r-   r-   r-   r.   r,     s   r,   c                   @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.bNr   r-   r-   r-   r.   r\     s   r\   c                   @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.zNr   r-   r-   r-   r.   z!  s   r   r   )sortedr	   r   )r,   r\   r   Za_objZb_objZz_objZo_objr-   r-   r.   test_SortAnythingKey  s    r   c              
   C   s0   zt t| W S  tttfy*   Y dS 0 d S NF)r*   isnanrL   r   rb   NotImplementedError)re   r-   r-   r.   r
   ,  s    r
   )Zotypesc                   C   s   t drJ t d rJ t dr$J t dr0J t tg drFJ t tjgrVJ t tjsdJ t ttjsxJ t ttjsJ d S )NTZsadfr0   )r
   r*   rS   nanZfloat32rL   r-   r-   r-   r.   test_safe_scalar_isnan3  s    r   c                   C   sb   t tddd t jdgg ds$J tt jjdks8J tt jsFJ td rRJ tdr^J d S )Nr   Tr   )FFFTFr   )r*   rJ   r   r   rT   r-   r-   r-   r.   test_safe_isnan>  s    r   c                 C   s&   zt |  W n ty    Y dS 0 dS r   )r   	Exceptionr   r-   r-   r.   r   G  s
    r   c                   C   sD   t dsJ t g sJ t ddis(J t dr4J t t r@J d S )Nr   r,   r   )r   r-   r-   r-   r.   test_iterableN  s
    r   c                 C   s<   t sJ t| } ttjdr,tj| |S t| |S d S )N
from_codes)r   r*   rS   r(   r%   r   r   )codes
categoriesr-   r-   r.   r   f  s
    
r   c                  C   sZ   t sd S tg dddg} tt| d d g dks>J tt| d sVJ d S )Nr   r   r   rR   r,   r\   rR   )r\   r\   r,   )r   r   r*   r^   rS   r   )r]   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
    

r   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
    

r   c                  C   s   t sd S tg dddg} tt| ddgks4J tt| g dksNJ trt| }tt|ddgksvJ tt|g dksJ d S )Nr   r,   r\   )	r   r   r*   r^   r   r   r   r%   r&   )r]   rN   r-   r-   r.   !test_pandas_Categorical_accessors  s    
r   c                 C   s   t sdS t| S r   )r   _pandas_is_categorical_dtype)Zdtr-   r-   r.   r     s    r   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    

r   c                  C   sV   t tdrJ tr0tddg} t | s0J trRtjddgdd}t |sRJ d S )Nr:   r,   r\   categoryr6   )r   r*   rh   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   r*   Z
issubdtype)Zdt1Zdt2r-   r-   r.   r     s    r   c                  C   sv   t ttjsJ t tttjs&J t ttjr6J t tttjrLJ trrtj	ddgdd} t | tjrrJ d S )Nr,   r\   r   r6   )
r   intr*   rt   r"   rL   ru   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    r   c                 C   s$   dd l }dd l}|t|j|  d S r   )picklerg   ri   r   dumps)rr   r   rg   r-   r-   r.   r     s    r   c                 C   s   t | tjr| |kS dS d S r   )r$   r   Zstring_types)rr   r   r-   r-   r.   r     s    r   c                   C   sL   t ddsJ t ddrJ tjs4t tdds4J t tddrHJ d S )Nr   r   )r1   r1   )r   r   ZPY3Zunicoder*   emptyr-   r-   r-   r.   test_safe_string_eq  s
    r   )FNF)F)F__all__r   Znumpyr*   r   Z	six.movesr   r   compatr   r%   ImportErrorr   r(   r   r   r   r   typesr   getattrZcorecommonr/   rQ   r   r`   rc   rk   r   rs   Z
float_typer   Zcomplex_typer   r   r   rw   r   rx   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
@	





	
#$#		

