U
    e»{j”S  ã                
   @   sˆ  d dl Zd dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZ d dlmZmZ d dlmZ dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Z d!d"„ Z!d#d$„ Z"d%d&„ Z#d'd(„ Z$d)d*„ Z%d+d,„ Z&ej'j(e �oed-d.�d/d0„ ƒZ)d1d2„ Z*d3d4„ Z+d5d6„ Z,ej' -d7ej.d8d9gd:d;�ej/d8d9gd<d;�ej0d8d9gd=d>gd?d@�g¡dAdB„ ƒZ1dS )Cé    N)ÚcoordinatesÚtime)Úunits)ÚColumnÚNdarrayMixinÚQTableÚTableÚtable_helpersÚunique)ÚNUMPY_LT_1_22ÚNUMPY_LT_1_22_1)ÚAstropyUserWarningc                 C   s   t | ƒt |ƒkS ©N)Úsorted)Zlist1Zlist2© r   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/table/tests/test_groups.pyÚsort_eq   s    r   c                 C   sÌ   dD ]Â}t | |d�}|d  ¡ }| |d ¡}t |jjt ddddg¡k¡sRt‚| |d ¡}t |jjt ddd	dd
ddg¡k¡sŠt‚| |d  	¡ ¡}t |jjt ddd	dd
ddg¡k¡st‚qd S )N©FT©ÚmaskedÚar   é   é   é   ©r   Úbé   é   é   )
r   ÚcopyÚgroup_byÚnpÚallÚgroupsÚindicesÚarrayÚAssertionErrorÚas_array)ÚT1r   Út1Zt1aZt1agr   r   r   Útest_column_group_by   s    $*r*   c                 C   s  dD �]}t | |d�}| d¡}t |jjt ddddg¡k¡sDt‚t|jƒdksVt‚t|d jƒd	kslt‚| 	¡ d
ddddddddddgks’t‚|j
d dks¤t‚|d j
d dksºt‚|d jdksÌt‚| |d ¡}| 	¡ | 	¡ ksît‚ddgdfD ]`}| |¡}t |jjt dddddddg¡k¡�s4t‚| 	¡ d
ddddddddddgksút‚qú| |d ¡}| 	¡ | 	¡ k�s€t‚| |d  ¡ ¡}| 	¡ | 	¡ k�s¨t‚| t ddddddddg¡¡}t |jjt ddddg¡k¡�sît‚| 	¡ d
ddddddddddgkst‚qdS )zl
    Test basic table group_by functionality for possible key types and for
    masked/unmasked tables.
    r   r   r   r   r   r   r   z<TableGroups indices=[0 1 4 8]>z <ColumnGroups indices=[0 1 4 8]>ú a   b   c   d   q ú                 m ú--- --- --- --- ---z  0   a 0.0   4 4.0z  1   b 3.0   5 5.0ú  1   a 2.0   6 6.0ú  1   a 1.0   7 7.0ú  2   c 7.0   0 0.0ú  2   b 5.0   1 1.0ú  2   b 6.0   2 2.0ú  2   a 4.0   3 3.0ÚtaÚcúcolumn cr   r   r   r   r   é   N)r   r    r!   r"   r#   r$   r%   r&   ÚstrÚpformatÚmetaÚdescriptionr'   )r(   r   r)   ÚtgÚtg2Úkeysr   r   r   Útest_table_group_by#   sv    

$õ

,õ &õr?   c                 C   sä   |   d¡}|jj}|jjdks"t‚t |d t dddg¡k¡sDt‚|   ddg¡}|jj}|jjdksjt‚t |d t ddddddg¡k¡s’t‚t |d t ddddddg¡k¡sºt‚|   | d ¡}|jj}|jjd ksàt‚d S )	Nr   ©r   r   r   r7   r   r   r5   )	r    r#   r>   ÚdtypeÚnamesr&   r!   r"   r%   )r(   r<   r>   r   r   r   Útest_groups_keyss   s    
"((rC   c                 C   s`   |   d¡}t|jƒD ]F\}}| ¡ |j|  ¡ ks6t‚|d d |d |jj|  kst‚qd S )Nr   r   )r    Ú	enumerater#   r9   r&   r$   )r(   r<   ÚiiÚgroupr   r   r   Útest_groups_iterator…   s    
rG   c           	   
   C   sÐ   dD ]Æ}t | |d�}| d¡}| ¡ }t |jj|jjk¡s@t‚t |jj|jjk¡sZt‚|d  ¡ }t |jj|d jjk¡s„t‚|d  ¡ }| |d ¡}| ¡ }t |jjt 	ddddg¡k¡st‚qdS )	zH
    Test that copying a table or column copies the groups properly
    r   r   r   r   r   r   r   N)
r   r    r   r!   r"   r#   r$   r&   r>   r%   )	r(   r   r)   r<   ZtgcZtacÚc1Zgc1Zgc1cr   r   r   Útest_grouped_copyŒ   s    
rI   c              	   C   sd   dD ]Z}t | |d�}| d¡}|dd… }t |jjt dt|ƒg¡k¡sNt‚|jj	dkst‚qdS )z=
    Test that slicing a table removes previous grouping
    r   r   r   r   r   r   N)
r   r    r!   r"   r#   r$   r%   Úlenr&   r>   )r(   r   r)   r<   r=   r   r   r   Útest_grouped_slicing    s    
$rK   c              	   C   sb   | d   t | d ¡¡}t |jjt dddg¡k¡s:t‚t |jjt ddddg¡k¡s^t‚dS )	z0
    Group a column that is part of a table
    r5   r   r   r   r7   r   r   N)r    r!   r%   r"   r#   r>   r&   r$   )r(   Zcgr   r   r   Útest_group_column_from_table¯   s    "rL   c                 C   s¬   dD ]¢}t | |d� d¡}|jt dddg¡ }t|jƒdksBt‚|jd  ¡ |jd  ¡ ksbt‚|jd  ¡ |jd  ¡ ks‚t‚t |jj	d t ddg¡k¡st‚qd	S )
z<
    Use boolean mask as item in __getitem__ for groups
    r   r   r   TFr7   r   r   N©
r   r    r#   r!   r%   rJ   r&   r9   r"   r>   ©r(   r   r)   Út2r   r   r   Útest_table_groups_mask_index¸   s      rP   c                 C   sª   dD ] }t | |d� d¡}|jt ddg¡ }t|jƒdks@t‚|jd  ¡ |jd  ¡ ks`t‚|jd  ¡ |jd  ¡ ks€t‚t |jj	d t ddg¡k¡st‚qdS )z;
    Use numpy array as item in __getitem__ for groups
    r   r   r   r   r7   r   NrM   rN   r   r   r   Útest_table_groups_array_indexÆ   s      rQ   c                 C   s–  dD �]Š}t | |d� d¡}|jdd… }t|jƒdks<t‚|jd  ¡ |jd  ¡ ks\t‚|jd  ¡ |jd  ¡ ks|t‚t |jjd t 	ddg¡k¡s t‚|jdd… }t|jƒdksÀt‚|jd  ¡ |jd  ¡ ksàt‚t |jjd t 	dg¡k¡�st‚|jddd… }t|jƒdk�s(t‚|jd  ¡ |jd  ¡ k�sJt‚|jd  ¡ |jd  ¡ k�slt‚t |jjd t 	ddg¡k¡st‚qdS )	z.
    Test that slicing table groups works
    r   r   r   r   r7   r   r   N)
r   r    r#   rJ   r&   r9   r!   r"   r>   r%   rN   r   r   r   Útest_table_groups_slicingÔ   s     
  $ $""rR   c                 C   sì   dD ]â}t | |d�}| d¡}|d }t |jj|jjk¡s@t‚t |jj|jjk¡sZt‚|j tj	¡}| 
¡ ddddd	gks‚t‚|d
 }t |jj|jjk¡s¤t‚t |jj|jjk¡s¾t‚|j tj	¡}| 
¡ dddddgkst‚qdS )z5
    Test that column slicing preserves grouping
    r   r   r   ©r   r5   Údú a   c    d ú--- ---- ---ú  0  0.0   4ú  1  6.0  18ú  2 22.0   6)r5   rT   z c    d z---- ---z 0.0   4z 6.0  18z22.0   6N)r   r    r!   r"   r#   r>   r&   r$   Ú	aggregateÚsumr9   )r(   r   r)   r<   ZtgsZtgsar   r   r   Útest_grouped_item_accessñ   s2    
û
ûr\   c              	   C   sZ  dD �]N}t | |d�}| d¡}| dddddtj f¡ t |jjt 	dt
|ƒg¡k¡s^t‚|jjdksnt‚| d¡}| d¡ t |jjt 	dt
|ƒg¡k¡s¦t‚|jjdks¶t‚| d¡}|jj ¡ }| tdt t
|ƒ¡d	�¡ t |jj|k¡sþt‚t |d jj|k¡�st‚t |d jj|jjk¡�s:t‚| d¡}| d
¡ t |jj|k¡�sft‚|jjjjdk�s|t‚t |d jj|k¡�s˜t‚| d¡}| d¡ t |jj|k¡�sÄt‚|jjjjdk�sÚt‚t |d
 jj|k¡�söt‚| d¡}| dd¡ t |jj|k¡�s$t‚|jjjjdk�s:t‚t |d jj|k¡st‚qdS )z”
    Operations like adding or deleting a row should removing grouping,
    but adding or removing or renaming a column should retain grouping.
    r   r   r   r   ç      @r   NÚe)ÚnameÚdatar   r@   Zaa)r   r    Úadd_rowÚuÚmr!   r"   r#   r$   r%   rJ   r&   r>   Z
remove_rowr   Ú
add_columnr   ÚarangeZremove_columnrA   rB   Zrename_column)r(   r   r)   r<   r$   r   r   r   Útest_mutable_operations  s>    

$

$
 




rf   c                 C   sX   t | dd�}d|d jd< d|d jd< | d¡ ¡ dd	d
ddddddddgksTt‚d S )NTr   r5   r   rT   r   r   r+   r,   r-   z  0   a  --   4 4.0z  1   b 3.0  -- 5.0r.   r/   r0   r1   r2   r3   )r   Úmaskr    r9   r&   )r(   Út1mr   r   r   Útest_group_by_maskedF  s     õri   c              	   C   sÌ   t  t¡� |  d¡ W 5 Q R X t  t¡� |  ddg¡ W 5 Q R X t  t¡� |  t ddg¡¡ W 5 Q R X t  t¡� |  d¡ W 5 Q R X t| dd�}d|d jd	< t  t¡� | d¡ W 5 Q R X dS )
z(
    Appropriate errors get raised.
    ÚfÚgr   r7   NTr   r   r   )	ÚpytestZraisesÚ
ValueErrorr    r!   r%   Ú	TypeErrorr   rg   )r(   r)   r   r   r   Útest_group_by_errorsY  s    ro   c                 C   sX  |   d¡}|jjjd dks t‚|d jjjd dks:t‚|jd jjjd dksVt‚|d jt dddg¡ jjjd dks‚t‚|   | d ¡}|jjjd dks¦t‚|d jjjd dksÀt‚|jd jjjd dksÜt‚|   | d  ¡ ¡}t|jjd	ƒ�rt‚t|d jjd	ƒ�rt‚|   | d ¡}d|jjjk�s<t‚d|d jjjk�sTt‚d
S )zF
    Make sure the keys meta['grouped_by_table_cols'] is working.
    r   Zgrouped_by_table_colsTr5   r   rT   Fr   r:   N)	r    r#   r>   r:   r&   r!   r%   r'   Úhasattr)r(   r<   r   r   r   Útest_groups_keys_metat  s,    
ÿþýÿrq   c              	   C   sÔ  | d }|  d¡}|j tj¡}| ¡ dddddgks:t‚t |jjt 	dd	g¡k¡sZt‚|jj
d
ksjt‚|jd dks|t‚|d jd dks’t‚|d jdks¤t‚t| dd�}d|d jdd…< d|d jdd…< |  d¡}tjtdd�� |j tj¡}W 5 Q R X | ¡ ddddddgk�s$t‚t|dd�}d|d jd< d|d jd< |  d¡}|j tj¡}| ¡ dddddgk�s€t‚|   d¡}tjtdd�� |j tj¡}W 5 Q R X | ¡ dd d!d"d#d$gk�sÐt‚d
S )%z
    Aggregate a table
    rS   r   rU   rV   rW   rX   rY   r   r   Nr4   r   r5   r6   Tr   r   é   rT   z"converting a masked element to nan©Úmatchz a   c    d    q  z               m  z--- ---- ---- ----z  0  nan  nan  4.0z  1  3.0 13.0 18.0z  2 22.0  6.0  6.0r   z  1  3.0  13úCannot aggregate columnz a   c    d   q  z              m  z--- ---- --- ----z  0  0.0   4  4.0z  1  6.0  18 18.0z  2 22.0   6  6.0)r    r#   rZ   r!   r[   r9   r&   r"   r$   r%   r>   r:   r;   r   rg   rl   ÚwarnsÚUserWarningr   )r(   r)   r<   Útgarh   r   r   r   Útest_table_aggregate•  sh    
û
 
ú
û

úry   c              	   C   s.  dd„ }dd„ }dd„ }| d }|  d¡}|j tj¡}|j tj¡}|j |¡}t ||k¡sdt‚t ||k¡svt‚| ¡ d	d
dddgks�t‚|j tj	¡}|j |¡}t ||k¡s¼t‚| ¡ dddddgksÖt‚| d }	|	  d¡}t
jtdd�� |j |¡}
W 5 Q R X |
 ¡ dddddgk�s*t‚dS )zE
    Aggregate table with functions which have a reduceat method
    c                 S   s
   t  | ¡S r   )r!   Úmean©Úxr   r   r   Únp_meanä  s    z.test_table_aggregate_reduceat.<locals>.np_meanc                 S   s
   t  | ¡S r   )r!   r[   r{   r   r   r   Únp_sumç  s    z-test_table_aggregate_reduceat.<locals>.np_sumc                 S   s
   t  | ¡S r   )r!   Úaddr{   r   r   r   Únp_addê  s    z-test_table_aggregate_reduceat.<locals>.np_addrS   r   rU   rV   rW   rX   rY   ú a   c   d ú--- --- ---z  0 0.0 4.0z  1 2.0 6.0z  2 5.5 1.5)r   r5   ru   rs   ú a ú---z  0z  1z  2N)r    r#   rZ   r!   r[   r   r"   r&   r9   rz   rl   rv   r   )r(   r}   r~   r€   r)   r<   Ztga_rZtga_aZtga_nrO   rx   r   r   r   Útest_table_aggregate_reduceatß  s@    
û
û
	
r…   c                 C   sL   dD ]B}t | |d� d¡}|d j tj¡}| ¡ ddddd	gkst‚qd
S )z)
    Aggregate a single table column
    r   r   r   r5   z c  z----z 0.0z 6.0z22.0N)r   r    r#   rZ   r!   r[   r9   r&   )r(   r   r<   rx   r   r   r   Útest_column_aggregate  s    r†   z+https://github.com/numpy/numpy/issues/20699)Úreasonc                  C   sX   dD ]N} t dtjddd�i| d� d¡}|d j tj¡}| ¡ ddd	d
gkst‚qdS )z/https://github.com/astropy/astropy/issues/12706r   r   r7   z>f8©rA   r   rƒ   r„   ú0.0ú1.0N)	r   r!   re   r    r#   rZ   r[   r9   r&   )r   r<   rx   r   r   r   Útest_column_aggregate_f8  s     r‹   c                  C   s~   dd„ } t jddddddd	d
ddg
dd�}| d¡}|j | ¡}|jd  ¡ ddddgks^t‚|jd  ¡ dddgkszt‚dS )ú 
    Table groups filtering
    c                    s:   ‡ fdd„| j D ƒ}|D ]}t | | dk ¡r dS qdS )Nc                    s   g | ]}|ˆ kr|‘qS r   r   )Ú.0r_   ©Úkey_colnamesr   r   Ú
<listcomp>0  s      z;test_table_filter.<locals>.all_positive.<locals>.<listcomp>r   FT)Úcolnamesr!   Úany)Útabler�   r‘   Zcolnamer   rŽ   r   Úall_positive/  s
    z'test_table_filter.<locals>.all_positiveú a c dú	 -2 7.0 0ú	 -2 5.0 1ú 0 0.0 4ú 1 3.0 5ú	 1 2.0 -6ú 1 1.0 7ú 3 3.0 5ú	 3 -2.0 6ú 3 1.0 7Úascii©Úformatr   r   r�   r‚   z -2 7.0   0z -2 5.0   1r   z  0 0.0   4N)r   Úreadr    r#   Úfilterr9   r&   )r”   Útr<   rO   r   r   r   Útest_table_filter*  s0    öó
ü
r¥   c                  C   s´   dd„ } t jddddddd	d
ddg
dd�}| d¡}|d j | ¡}t|jƒdksVt‚|jd  ¡ ddddgkstt‚|jd  ¡ dddgks�t‚|jd  ¡ dddddgks°t‚dS )rŒ   c                 S   s   t  | dk ¡rdS dS )Nr   FT)r!   r’   )Úcolumnr   r   r   r”   V  s    z(test_column_filter.<locals>.all_positiver•   r–   r—   r˜   r™   rš   r›   rœ   r�   rž   rŸ   r    r   r5   r   r   z c r„   z7.0z5.0r   r‰   r7   z3.0z2.0rŠ   N)r   r¢   r    r#   r£   rJ   r&   r9   )r”   r¤   r<   Úc2r   r   r   Útest_column_filterQ  s*    öó
r¨   c                  C   s$  t  d¡} t  ddddg¡}|tj }t |tj ¡}t |tj ¡}t	j
ddd�t	j|d d	d� }tj||d
�}t |¡}t jddddgdd� t¡}t| ||||||||g	dddddddddg	d�}	ddddddddg}
|
D ]´}|	 |¡}t  |d ddddgk¡�st‚dD ]€}t  |	| ddg |jd | k¡�sBt‚t  |	| dg |jd | k¡�sjt‚t  |	| dg |jd | k¡�st‚�qqât|	|
d�}t|ƒdk�s¶t‚t  |d dddgk¡�sÔt‚t  |d dddgk¡�sòt‚|	d  |	|
 ¡}t  |ddddgk¡�s t‚d S )!z2
    Test grouping a table with mixin columns
    r   r]   g      ð?g       @iÐ  Zjyearr    g»½×Ùß|Û=Úsec)ÚraÚdec)r   r5   )r   r   )r7   r   z<i4,|S1rˆ   Úidxr|   ÚqÚlonÚlatÚtmÚscÚawÚnd©rB   r   r   r7   r   )r|   r­   r®   r¯   r°   r²   r³   )r>   N)r!   re   r%   rb   rc   r   Z	LongitudeÚdegZLatituder   ÚTimeÚ	TimeDeltaÚSkyCoordr	   ZArrayWrapperÚviewr   r   r    r"   r&   r#   r
   rJ   )r¬   r|   r­   r®   r¯   r°   r±   r²   r³   ZqtZ
mixin_keysÚkeyZqtgr_   ZuqtZidxgr   r   r   Útest_group_mixinss  s:    

 
ÿþ
 *(.r»   Úcolr   r7   r©   r    Zcxcsecr   r   zdeg,deg)Úunitc              	   C   sV   t ddgddg| gdddgd�}| d¡}tjtdd	�� |j tj¡ W 5 Q R X d
S )z@Test that aggregating unsupported mixins produces a warning onlyr   r   r   r   r   Zmixr´   zCannot aggregate column 'mix'rs   N)	r   r    rl   rv   r   r#   rZ   r!   r[   )r¼   r¤   r<   r   r   r   Útest_group_mixins_unsupported¥  s     
r¾   )2Únumpyr!   rl   Zastropyr   r   r   rb   Zastropy.tabler   r   r   r   r	   r
   Zastropy.utils.compatr   r   Zastropy.utils.exceptionsr   r   r*   r?   rC   rG   rI   rK   rL   rP   rQ   rR   r\   rf   ri   ro   rq   ry   r…   r†   ÚmarkZskipifr‹   r¥   r¨   r»   Zparametrizer·   r¶   r¸   r¾   r   r   r   r   Ú<module>   sR    P	"3!J4

þ
	'"2ýþ