U
    QCc>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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d0D ]"Zeeer$eeeZ  qRq$dsRt!d1D ]"Z"eee"rVeee"Z# qqVd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#   
extra_args r.   i/mounts/lovelace/software/anaconda3/envs/qiime2-amplicon-2023.9/lib/python3.8/site-packages/patsy/util.pyasarray_or_pandas<   s    

r0   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)columnsr@   )r<   r;   F)warningstyper0   r*   ndarrayAssertionErrorcatch_warningsfilterwarningsPendingDeprecationWarningmatrixr+   array_equalallclosefloatr"   r   r%   r&   r    r@   r'   locrD   )rE   wr,   Za_copy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    
$ 
$


rV   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   r1   )r   r$   r%   r&   r'   r*   asarray
atleast_1dndimreshaperH   )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 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   r1   r2   )r   r   )r   r   r   r2   r   r3   r4   T)r\   r<         hir,   bcr?   F)rE   r*   allr   rH   shaperI   rJ   rK   rF   rL   rG   r   r%   r&   r'   r$   rD   r@   )rE   rQ   rS   rT   rU   r.   r.   r/   test_atleast_2d_column_default   s    (








re   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'   rd   len
ValueErrorrD   )r,   	new_shaper.   r.   r/   pandas_friendly_reshape   s    


ri   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   r<      r1   )r1   rj   xr   r2   r,   ra   rb   )r@   r]   )r2   )   )r   r2   )r2   r2   F)pytestr*   rN   ri   aranger[   rH   r   r%   r'   r$   rM   r@   rD   r&   r    raisesrg   AttributeError)rm   rT   noopZsquozenrU   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   r1   r2   rl   )r   rH   r.   r.   r.   r/   test_to_uniqueify_list%  s    "rz   )float128float96float64)
complex256Z
complex196
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*   rX   r   r"   integerfloatingr   complexfloatingr   rg   arrr.   r.   r/   r   7  s    
c                 C   s   t j| t| dS )Nr6   )r*   rX   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   r1   r2   r7   r8   r9   y      ?        r   r`   )
r*   rN   r   rH   r"   r   r   rm   ro   rg   )rm   r.   r.   r/   test_wide_dtype_for_and_widenC  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__N  s    zPushbackAdapter.__init__c                 C   s   | S rs   r.   r   r.   r.   r/   __iter__R  s    zPushbackAdapter.__iter__c                 C   s   | j | d S rs   )r   ru   r   ry   r.   r.   r/   	push_backU  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/   nextX  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   StopIterationrg   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   rg   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/   r   M  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   r1   r2   rl   r   r<   r=   )	r   iterr   rH   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_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 )NIPythonr   )r   )r   sysmodules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= ))r)   r   r   rf   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   r,   r   )foobar)r   r   z'MyClass('a', 1, foo='bar', asdf='asdf'))r   rH   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	   rH   r   ry   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   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 )Nr=   r<   r      )keyg      r,   g     4@ra   c                   @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.aNr   r.   r.   r.   r/   r,     s   c                   @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.bNr   r.   r.   r.   r/   ra     s   c                   @   s   e Zd ZdS )ztest_SortAnythingKey.<locals>.zNr   r.   r.   r.   r/   z!  s   r   r   )sortedr	   rH   r   )r,   ra   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)r*   isnanrO   r   rg   NotImplementedError)rk   r.   r.   r/   r
   ,  s    )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   r1   r2   r   r1   r2   )r
   rH   r*   rX   nanfloat32rO   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*   rM   r   r   rH   rZ   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   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   rH   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   rH   r*   rX   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   rW   r,   ra   )r   r   r*   rc   rX   rH   r   )rb   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   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   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   r*   rc   r   rH   r   r   r%   r&   )rb   rS   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 )Nr<   r,   ra   categoryr6   )	r   r*   rn   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*   
issubdtype)dt1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,   ra   r   r6   )r   intr*   r   rH   r"   rO   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   )picklerm   ro   r   dumps)ry   r   rm   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   )r1   r1   )r   rH   r   PY3unicoder*   emptyr.   r.   r.   r/   test_safe_string_eq  s
    r   )FNF)F)G__all__r   numpyr*   r   	six.movesr   r   compatr   r%   ImportErrorr   r(   r   r   r   r   typesr   getattrcorecommonr0   rV   r   re   ri   rr   r   rz   Z
float_typer   rH   complex_typer   r   r   r   r   r   r   r   r   r   r   r   r	   r   r
   	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
@	





	
#$#		

