o
    #e'o                     @   sx  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y-   daY nw dato6ee
dZts<dZn ee
d	rFd
d Znee
drTee
jjdd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 nqJ dD ]Z eee reee Z! nqJ 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d0d1Z+d2d3 Z,G d4d5 d5e%Z-d6d7 Z.d8d9 Z/ej0e/e1gd:Z2d;d< Z3d=d> Z4d?d@ Z5dAdB Z6dCdD Z7dEdF Z8dGdH Z9dIdJ Z:dKdL Z;dMdN Z<dOdP Z=dQdR Z>dSdT Z?dUdV Z@dWdX ZAdYdZ ZBd[d\ ZCd]d^ ZDdS )a)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%   *lib/python3.10/site-packages/patsy/util.py<lambda>/   s    r'   apiZis_categorical_dtypec                 C   sX   t r#t| tjtjfr#i }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   

r4   c                  C   s  dd l } ttg dtju sJ |  9}| 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 sAJ |d u sGJ W d    n1 sQw   Y  t	g d}t||u seJ t|dd}t
||ssJ d|d< t
||rJ ttg dtd	g d
sJ tg dtd	jttksJ t||jd	}d|d< |d dksJ tr@t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sJ t
||sJ d|d< t
||rJ t|td	jttks J t||jd	}|jdks/J t
|jg ds;J d|d< |d dksHJ tjg dgg ddgd}	t|	}
d|
jd< t
|
jg dskJ t
|
jdgsvJ |	jd dksJ t|	dd}t
||	sJ t
|jg dsJ t
|jdgsJ d|jd< t
||	rJ 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sJ t
|jdgsJ t
|	|sJ t}z*datttg dtju s&J tttg dgtju s8J W |ad S |aw d S )Nr   r         ignorethe matrix subclassT)r+   )r*   d   r   g      ?g       @g      @c   A)
         r)   indexe   r?   )r>   BC)columnsrC   )r?   r>   F)warningstyper4   r0   ndarraycatch_warningsfilterwarningsPendingDeprecationWarningmatrixr1   array_equalallclosefloatr   r   r"   r,   r)   rC   r-   locrG   )rH   wr2   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   
" 


rW   c                 C   sh   |rt rt| tjrt| S t| tjr| S t| } t| } | jdkr+| 	d} | jdks2J | S )Nr   )r   r6   )
r   r    r"   r,   r-   r0   asarrayZ
atleast_1dndimreshape)r2   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s*J tdggjdks5J tdgggjdksAJ tg djdksLJ tdgdgdggjdks[J |  #}| d	d
t ttt	dtj
ksuJ |d u s{J W d    n1 sw   Y  trtttddgtj
ksJ tttdgdggtj
ksJ 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sJ t|jg dksJ |  '}| d	d
t ttt	dddtj
ks$J |d u s+J W d    n	1 s6w   Y  ttg dddtj
ksKJ trt}z/datttddgddtj
ksfJ tttdgdggddtj
ks{J W |ad S |aw d S )Nr   r5   r   r6   r7   )r   r   )r   r   r   r7   r   r8   r9   T)r\   )r?         hir2   bcrB   F)rH   r0   allr   shaperK   rL   rM   rI   rN   rJ   r   r"   r,   r-   r    rG   rC   )rH   rS   rT   rU   rV   r%   r%   r&   test_atleast_2d_column_default   s   &




rf   c                 C   s   t s| |S t| tjs| |S || jkr| S t|dkr:| jd dkr:|d | jd kr3td| | jd  S td| j|f )Nr   r   zarrays have incompatible sizesz4cannot reshape a DataFrame with shape %s to shape %s)	r   r[   r    r"   r-   re   len
ValueErrorrG   )r2   Z	new_shaper%   r%   r&   pandas_friendly_reshape   s   


ri   c                  C   s8  dd l } tttddddtdddsJ trtjdg dig dd	}t|d
}t	|tjs9J t
|jg dsDJ t
|jdgsNJ t|d}t	|tjs[J t
|jg dsfJ |jdksmJ | tt|d | tt|d | tt|d t}zda| tt|d W |ad S |aw d S )Nr   r?      r6   )r6   rj   r$   r5   ra   )rC   r]   )r7   )   )r   r7   )r7   r7   F)pytestr0   rP   ri   aranger[   r   r"   r-   r    rO   rC   rG   r,   r)   raisesrh   AttributeError)rl   rU   ZnoopZsquozenrV   r%   r%   r&   test_pandas_friendly_reshape   s2   

rp   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sJ t g dg dks$J d S )Nr5   )r   r7   r7   r6   r7   r   )r   r7   r6   )r7   r6   r   rk   r   r6   r7   )r7   r6   r   rk   )r   r%   r%   r%   r&   test_to_uniqueify_list"  s   rx   )Zfloat128Zfloat96Zfloat64)Z
complex256Z
complex196Z
complex128c                 C   sL   t | } t| jt jst| jt jrtS t| jt jrtS t	d| jf )Nz"cannot widen a non-numeric type %r)
r0   rY   r   r   integerfloatingr   Zcomplexfloatingr   rh   Zarrr%   r%   r&   r   4  s   
r   c                 C   s   t j| t| dS )Nr;   )r0   rY   r   r{   r%   r%   r&   r   =  s   r   c                  C   s   t tg dg dsJ tg djtksJ t tg dg ds'J tg djtks2J t tg dg ds@J tg djtksKJ dd l} | ttdg d S )Nr5   r<   )y      ?        r6   r7   r   r`   )	r0   rP   r   r   r   r   rl   rn   rh   )rl   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 rq   )_it_pushed)selfitr%   r%   r&   __init__K  s   
zPushbackAdapter.__init__c                 C   s   | S rq   r%   r   r%   r%   r&   __iter__O  s   zPushbackAdapter.__iter__c                 C      | j | d S rq   )r   rs   r   rw   r%   r%   r&   	push_backR     zPushbackAdapter.push_backc                 C   s   | j r| j  S t| jS rq   )r   popsixadvance_iteratorr~   r   r%   r%   r&   nextU  s   
zPushbackAdapter.nextc                 C   s4   zt | }W n ty   tdw | | |S )Nzno more data)r   r   StopIterationrh   r   r   r%   r%   r&   peek]  s   
zPushbackAdapter.peekc                 C   s$   z|    W dS  ty   Y dS w NFT)r   rh   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g d} |  sJ t| dksJ | d t| dks%J t| dks.J |  dks6J | d |  dksCJ | d |  dksPJ |  sVJ t| g dks`J |  rfJ d S )	N)r   r6   r7   rk   r   r   r6   r7   r?   r@   )r@   r?   r7   rk   )r}   iterr   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_outZindentationr   r%   r%   r&   r     s   
z_MiniPPrinter.__init__c                 C   r   rq   r   write)r   textr%   r%   r&   r     r   z_MiniPPrinter.text c                 C   r   rq   r   )r   sepr%   r%   r&   	breakable  r   z_MiniPPrinter.breakablec                 C      |  | d S rq   r   r   _r   r%   r%   r&   begin_group     z_MiniPPrinter.begin_groupc                 C   r   rq   r   r   r%   r%   r&   	end_group  r   z_MiniPPrinter.end_groupc                 C   s,   t |dr|| d d S | t| d S )N_repr_pretty_F)r.   r   r   reprr   r%   r%   r&   pretty  s   
z_MiniPPrinter.prettyc                 C   s
   | j  S rq   )r   getvaluer   r%   r%   r&   r        
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 rq   )r   r   r   )rw   printerr%   r%   r&   _mini_pretty  s   
r   c                 C   s*   t rdtjv rddlm} || S t| S )NZIPythonr   )r   )r   sysmodulesZIPython.lib.prettyr   r   )rw   r   r%   r%   r&   r     s   r   c           	         s   |j j} t|d d|f  dg fdd}|D ]
}|   | q|D ]#\}}|   t|d d|f   |  t|d d q* 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   rg   r   r   )	r   rw   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s'J d S )
Nasdfz'asdf'c                   @      e Zd ZdS )z!test_repr_pretty.<locals>.MyClassNr   r   r   r%   r%   r%   r&   MyClass      r   r2   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 rq   rw   r   r%   r%   r&   r     r   zSortAnythingKey.__init__c                 C   s$   z| j |k W S  ty   t Y S w rq   )rw   	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rdS |dtur%dS | j|jkr-dS | jjjt| jf|jjjt|jfk S )Nr   TF)r    r	   r   rw   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sJ t g dtdg dks*J G dd	 d	t} G d
d dt}G dd dt}|  }| }| }t }t ||d||gtdd||||gksbJ d S )N)r@   r?   r      )key)r   r?   r   r@   r?   g      )r?   r2        4@rb   )r?   r   r2   rb   c                   @   r   )ztest_SortAnythingKey.<locals>.aNr   r%   r%   r%   r&   r2     r   r2   c                   @   r   )ztest_SortAnythingKey.<locals>.bNr   r%   r%   r%   r&   rb     r   rb   c                   @   r   )ztest_SortAnythingKey.<locals>.zNr   r%   r%   r%   r&   z  r   r   r   )sortedr	   r   )r2   rb   r   Za_objZb_objZz_objZo_objr%   r%   r&   test_SortAnythingKey  s   r   c              
   C   s,   zt t| W S  tttfy   Y dS w NF)r0   isnanrQ   r   rh   NotImplementedErrorr#   r%   r%   r&   r
   )  s
   r
   )Zotypesc                   C   s   t drJ t d rJ t drJ t drJ t tg dr#J t tjgr+J t tjs2J t ttjs<J t ttjsEJ d S )NTZsadfr5   )r
   r0   rY   nanZfloat32rQ   r%   r%   r%   r&   test_safe_scalar_isnan0  s   r   c                   C   sb   t tddd t jdgg dsJ tt jjdksJ tt js#J td r)J tdr/J d S )Nr   Tr   )FFFTFr   )r0   rO   r   r   rZ   r%   r%   r%   r&   test_safe_isnan;  s   r   c                 C   s$   zt |  W dS  ty   Y dS w r   )r   	Exceptionr   r%   r%   r&   r   D  s   
r   c                   C   sD   t dsJ t g sJ t ddisJ t drJ t t r J d S )Nr   r2   r   )r   r%   r%   r%   r&   test_iterableK  s
   r   c                 C   s8   t sJ t| } ttjdrtj| |S t| |S )N
from_codes)r   r0   rY   r.   r"   r   r   )codes
categoriesr%   r%   r&   r   c  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 s+J d S )Nr   r   r   rX   r2   rb   rX   )rb   rb   r2   )r   r   r0   rd   rY   r   )rc   r%   r%   r&   "test_pandas_Categorical_from_codesn  s
   $r   c                 C   &   t | dr| j} t | dr| jS | jS )Ncatr   )r.   r   r   Zlevelsr   r%   r%   r&   r   v  
   

r   c                 C   r   )Nr   r   )r.   r   r   labelsr   r%   r%   r&   r     r   r   c                  C   s   t sd S tg dddg} tt| ddgksJ tt| g dks'J trHt| }tt|ddgks;J tt|g dksJJ d S d S )Nr   r2   rb   )	r   r   r0   rd   r   r   r   r"   r,   )rc   rT   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   sZ   t tdr	J trtddg} t | sJ tr)tjddgdd}t |s+J d S d S )Nr?   r2   rb   categoryr;   )r   r0   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   r0   Z
issubdtype)Zdt1Zdt2r%   r%   r&   r     s   r   c                  C   sz   t ttjsJ t tttjsJ t ttjrJ t tttjr&J tr9tj	ddgdd} t | tjr;J d S d S )Nr2   rb   r   r;   )
r   intr0   ry   r   rQ   rz   r   r"   r,   )Z	bad_dtyper%   r%   r&   test_safe_issubdtype  s   r   c                  O   s   t d)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   )picklerl   rn   r   dumps)rw   r   rl   r%   r%   r&   r     s   r   c                 C   s   t | tjr
| |kS dS r   )r    r   Zstring_types)rw   r   r%   r%   r&   r     s   r   c                   C   sL   t ddsJ t ddrJ tjst tddsJ t tddr$J d S )Nr   r   )r6   r6   )r   r   ZPY3Zunicoder0   emptyr%   r%   r%   r&   test_safe_string_eq  s
   r   )FNF)F)E__all__r   Znumpyr0   r   Z	six.movesr   r   compatr   r"   ImportErrorr   r.   r   r   r!   r(   typescorecommonr   r4   rW   r   rf   ri   rp   r   rx   Z
float_typer   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@	



	
#$#		

