a
    ߙfb4T                  
   @   s  d dl Z d dlZd dlZddlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlmZ ee	gZeree ej eddd Z!g dZ"ej e"e#e"ee"ddgddd Z$dd Z%ej&'dG dd deZ(dd Z)dd Z*ej&+dee,dd e,dd ej- ee,dd d!dgd"d# Z.d$d% Z/d&d' Z0dS )(    N   )	SetupData)BST)SortedArray)SCEngine)QTableRowTableColumnhstack)units)Time)
BaseColumn)	get_indexSlicedIndex)HAS_SORTEDCONTAINERS)paramsc                 C   s   | j S NZparamZrequest r   =lib/python3.9/site-packages/astropy/table/tests/test_index.pyengine   s    r   r               jyearformatc                 C   s   | j S r   r   r   r   r   r   main_col!   s    r!   c                 C   sB   t | tr&t| t|ddks>J nt| | |ks>J d S Nr   r   )
isinstancer   npall	__class__)colarrayr   r   r   assert_col_equal*   s    
r)   table_typesc                       s   e Zd Z fddZdd Zdd Zedd Zej	
d	d
dg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d0d1 Z  ZS )2	TestIndexc                    sN   t  | || _t|tjr$t| _t|ts8dd | _	t|ttjf| _
d S )Nc                 S   s   | S r   r   )xr   r   r   <lambda>9       z"TestIndex._setup.<locals>.<lambda>)super_setupr!   r#   uQuantityr   _table_typelist_column_typemutable)selfr!   r*   r&   r   r   r0   3   s    

zTestIndex._setupc                 C   s   | j ||dS )N)name)r5   )r7   r9   Zlstr   r   r   make_col<   s    zTestIndex.make_colc                 C   s   t | jtrt|ddS |S r"   )r#   r!   r   )r7   valr   r   r   make_val?   s    zTestIndex.make_valc                 C   sT   t | dsN|  | _| g d| jd< | g d| jd< | | j| jd< | jS )N_t)      @ffffff@@      @皙?b)7891011ca)hasattrr3   r=   r5   r!   )r7   r   r   r   tD   s    

zTestIndex.t	compositeFTc              
   C   s  |  || | j}|j|rdnd|d t|jd  g dksHJ | jsRd S d|d d< |d d|d d	< |	d
 |d t
|d tg d t|d tg dsJ t|d jtg dksJ |jd }t|j }|rDt|ddgfddgfddgfdd	gfddgfdd
gfgksJ n>t|ddgfdddgfdd	gfddgfdd
gfgksJ |d t|jdksJ d S )NrJ   rC   rJ   r   r   r   r   r   r   r   r   )      @rD      
   r   r   )      @rF   r   )r   r   rS   r   rR   r   rC   )r>   r?   rA   rB   rQ   rT   rI   )rD   rE   rG   rH   rD   rF   )r   r?   r   )r   r>   )r   rT   r   )r   rB   )rR   rQ   )rS   rA   )r   )r   )r   )rR   )rS   )r0   rL   	add_indexr$   r%   indicessorted_datar6   add_rowZ
remove_rowr)   r(   Zallclosedatar4   itemsZremove_indiceslen)r7   r!   r*   rM   r   rL   indexZllr   r   r   test_table_indexQ   s@     


"


zTestIndex.test_table_indexc                 C   s   |  || | j}|jd|d t|jd  g dks@J ddgtddgfD ]p}|| }t|jdkstJ t	|d ddg t|jd  ddgksJ t|jd  g dksVJ qVd S )NrJ   rO   r   rP   r   r   r   )
r0   rL   rU   r$   r%   rV   rW   r(   r[   r)   )r7   r!   r*   r   rL   Zslice_t2r   r   r   test_table_slicingx   s      zTestIndex.test_table_slicingc                 C   s  |  || | jsd S | j}|jd|d | }|d t|d g d t|j	d 
 g dksnJ g dtg dtdddfD ]H}| }|| t|d dd	g t|j	d 
 dd
gksJ qtt |d W d    n1 s0    Y  d S )NrJ   rO   r   )r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )r0   r6   rL   rU   copyremove_rowsr)   r$   r%   rV   rW   r(   slicepytestraises
ValueError)r7   r!   r*   r   rL   r^   Zcutr   r   r   test_remove_rows   s     
 $
"zTestIndex.test_remove_rowsc           
      C   s  |  || | j}|jd|d |dd }t|d ddg t|jd  ddgks^J |d dd }t|ddg t|d t	rt
|jjdksJ |d d d }t|d tg d |d d d }t|d tg d	 t|jd  g d
ksJ |d d }t|d tddg t|jd  ddgksRJ |dd  |dd |dd  fD ]:}t
|d dksJ t|jd  g kstJ qt| jr|d d dk}	||	 }t|d g d t|jd  g dksJ d S )NrJ   rO   r   r   r   r   )r   r   r   )r   r   r   r   r   r   )r   r   r   )r0   rL   rU   r)   r$   r%   rV   rW   r#   r   r[   infor(   r6   )
r7   r!   r*   r   rL   r^   Z	col_slicet3Zt_emptymaskr   r   r   test_col_get_slice   s4     ""&"zTestIndex.test_col_get_slicec                 C   s  |  || | jsd S | j}|jd|d | }tddg|d dd< t|d tg d t|j	d 
 g d	ksJ | }|dd }t|d td
dg t|j	d 
 ddgksJ d|d d< t|d tddg t|d tg d t|j	d 
 ddgks.J t|j	d 
 g dksPJ | }|d d
 dk}d|d |< t|d g d t|j	d 
 g dksJ d S )NrJ   rO   rR      r   r   )r   rR   rn   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   g        )r   r   r   r   r   )r   r   r   r   r   )r0   r6   rL   rU   ra   r$   r(   r)   r%   rV   rW   )r7   r!   r*   r   rL   r^   rk   rl   r   r   r   test_col_set_slice   s.      ""zTestIndex.test_col_set_slicec                 C   s  |  || | jsd S | j}|jd|d tddD ]}|dd|f q4t|d dd td	dD  t|j	d
 
 dd tdD ksJ |d d d }t|j	d
 
 dd tdD ksJ |d d d }|j	d
 }|j|j|jfdksJ t|
 dd tdddD ks$J d
|dd < tdd td	dD }	d
|	d d |	d d d d	k< t|d |	 t|d |	d d d  t|d |	d d d d d d  t|j	d
 
 g ddd tddD  ksJ t|j	d
 
 dd tdD ksJ t|j	d
 
 dd tdddD ksDJ |d	dd }
t|
d g d t|
j	d
 
 dd tdD ksJ |
d d d }t|d g d t|j	d
 
 g d ksJ |dd d }t|d g d! t|j	d
 
 g d"ksJ d S )#NrJ   rO   rR   3         ?Ac                 S   s   g | ]}|qS r   r   .0ir   r   r   
<listcomp>   r.   z2TestIndex.test_multiple_slices.<locals>.<listcomp>r   r   c                 S   s   g | ]}|qS r   r   rs   r   r   r   rv      r.   2   r   c                 S   s   g | ]}|qS r   r   rs   r   r   r   rv      r.      rh   )0   rz   c                 S   s   g | ]}|qS r   r   rs   r   r   r   rv      r.      ic                 S   s   g | ]}|qS r   r   rs   r   r   r   rv      r.      )r   r   r   rR      rS               r   r   r   rn   	                  c                 S   s   g | ]}|qS r   r   rs   r   r   r   rv     r.   c                 S   s   g | ]}|qS r   r   rs   r   r   r   rv     r.   c                 S   s   g | ]}|qS r   r   rs   r   r   r   rv     r.   )
r   r   rR   r}   rS   r~   r   r   r   r|   c                 S   s   g | ]}|qS r   r   rs   r   r   r   rv     r.   rS   r   )r   r}   r   r|   r`   )r   r}   r   ri   )r0   r6   rL   rU   rangerX   r)   r$   r%   rV   rW   startstopstepr(   )r7   r!   r*   r   rL   ru   Zevensreverser\   Zexpectedr^   rk   Zt4r   r   r   test_multiple_slices   sN    **
* ",,"zTestIndex.test_multiple_slicesc                 C   s   |  || | jd d d }t|d g d |jd|d t|jd  g dks\J | jsfd S |	 }|
d t|d g d t|jd  g dksJ |	 }|
  t|d g d t|jd  g dksJ d S )	Nrh   rJ   )r   r   r   r   r   rO   r   )r   r   r   r   r   r   rP   )r0   rL   r)   rU   r$   r%   rV   rW   r6   ra   sortr7   r!   r*   r   rL   r^   r   r   r   	test_sort  s     
 zTestIndex.test_sortc                 C   s   |  || | jsd S | j}|jd|d |dd t|d g d t|jd 	 g dkshJ |dd	 t|d g d
 t|jd 	 g dksJ d S )NrJ   rO   r   )rq   12rR   )r   r   rR   r   r   r   r   )r   r   r   r   r   r   r   )r>   Z13r   )r   r   r   rR   r   r   r   )r   r   r   r   r   rR   r   )
r0   r6   rL   rU   Z
insert_rowr)   r$   r%   rV   rW   r7   r!   r*   r   rL   r   r   r   test_insert_row+  s     zTestIndex.test_insert_rowc                 C   s  |  || | j}|jd|d t|ddg jdks:J t|d d d jdksVJ t| |jdksnJ t|jd  g dksJ |	 }|
dv t|ddg jdksJ t|d d d jdksJ t| |jdksJ t|	 jdksJ W d    n1 s0    Y  t|ddg jdksDJ | jsPd S |
d	 t|jd  g dksJ d
|d d< t|jd  g dksJ |d t|jd  g dksJ |ddg t|jd  g dks
J t|d g d t|jd  g dks>J d
|d d< t|jd  g dkslJ W d    n1 s0    Y  t|jd  g dksJ t|d trt|d d d d jjdksJ |
dT t|d ddg jjdksJ t|d ddg jjdks2J W d    n1 sH0    Y  t|d d d d jjdksvJ t|d d d d jjdksJ d S )NrJ   rO   r   r   rh   r   rP   Zdiscard_on_copyZfreezerR   )g      ?r   r   )rR   r   r   r   )r   r   r   r   r   )r   r   r   r   Zcopy_on_getitemr   )r0   rL   rU   r[   rV   r3   r$   r%   rW   ra   Z
index_moder6   rX   rb   r)   r#   r   rj   r   r   r   r   test_index_modes:  sH     8""
"""B"$"B$zTestIndex.test_index_modesc                 C   s   |  || | j}|jd|d |jddg|d t|jdksDJ t|jd jdks\J t|jd jdkstJ tt |jd  W d    n1 s0    Y  d S )NrJ   rO   rI   r   r   )rJ   rI   rC   )	r0   rL   rU   r[   rV   columnsrd   re   
IndexErrorr   r   r   r   test_index_retrievalo  s    zTestIndex.test_index_retrievalc                 C   sJ   |  || | j}|jd|d | j| jg dd}t|jdksFJ dS )z}
        Checks for a previous bug in which copying a Table
        with different column names raised an exception.
        rJ   rO   )defnamesr   N)r0   rL   rU   r3   r[   rV   r   r   r   r   test_col_rename{  s
    zTestIndex.test_col_renamec                 C   s  |  || | j}|jd|d |jd|d |j| d }t|d dg t|ts\J |j| d| d| dg }t|d g d t|ts|jt	
g d }t|d g d t|d g d |j| d| d	 }t|d g d
 |jdddf }t|d g d |jdd }t|d ddg |jddd f }t|d g d |jd d  |jd d  fD ]}t|d g d qd S )NrJ   rO   rC   r   r   r   r   r   r   r   r   )r   r   r   rT   rA   )r?   r@   rA   r   r   )r0   rL   rU   locr<   r)   r#   r   r   r$   r(   Zilocr   r   r   r   test_table_loc  s.    "
 zTestIndex.test_table_locc                 C   s   |  || | j}|jd|d |jd|d |j| d }|dksJJ |j| d| d| dg }t|g dD ]\}}||d kszJ qzd S )	NrJ   rO   rC   r   r   r   r   r   )r0   rL   rU   loc_indicesr<   zipr7   r!   r*   r   rL   r^   ru   pr   r   r   test_table_loc_indices  s    "z TestIndex.test_table_loc_indicesc                 C   s   |  || | j}|d tt  |j| d  W d    n1 sL0    Y  tt  |j| d  W d    n1 s0    Y  d S )NrJ   rR   )	r0   rL   rU   rd   re   KeyErrorr   r<   r   r   r   r   r   test_invalid_search  s    
.zTestIndex.test_invalid_searchc                 C   sj   |  || | j}|d |d | }|jd jd |d u sJJ |jd jd |d u sfJ d S )NrJ   rC   r   )r0   rL   rU   ra   rV   r   r   r   r   r   test_copy_index_references  s    

z$TestIndex.test_copy_index_referencesc                 C   s   |  || | j}|jd|dd t|jd  g dksBJ | jr|t	t
 |d W d    n1 sr0    Y  d S )NrJ   T)r   uniquerP   )rT   rF   r   )r0   rL   rU   r$   r%   rV   rW   r6   rd   re   rf   rX   r   r   r   r   test_unique_index  s     zTestIndex.test_unique_indexc                 C   s   |  t| | j}|d |ddg | || fD ]f}t|jt|jksXJ t|j|jD ]:\}}t	
|jj|jjksJ |jjj|jjjksfJ qfq<d S )NrJ   rC   )r0   _colrL   rU   r3   ra   r[   rV   r   r$   r%   rY   Zcolnames)r7   r*   rL   tpr\   Zindexpr   r   r   test_copy_indexed_table  s    
z!TestIndex.test_copy_indexed_tablec                 C   s   |  || tg dg dg dgdddid}|jd|d	 |jd
|d	 g d|jd< |d }t|g dksvJ g dg dg dg|jg d< g dg dg dg}t|g dD ] \}}t||d  |ksJ qd S )N)rJ   rC   rI   r   r   r   r   r   r   r   r   rR   rJ   rC   rI   r9   first tabler   metarJ   rO   rC   )g(   rw   rI   r   )rJ   r|      )r   rw   <   )rC   r   r   )rJ   r   rC   r   r   )r0   r	   rU   r   r4   r   r   r   r   r   test_updating_row_byindex  s     z#TestIndex.test_updating_row_byindexc                 C   sR  |  || tg dg dg dgdddid}|d tt  g d	g|jd
< W d    n1 sj0    Y  tt* g d	g dg|jg d< W d    n1 s0    Y  tt0 g d	g ddd
gg|jg d< W d    n1 s0    Y  tt0 g d	ddgdd
gg|jg d< W d    n1 sD0    Y  d S )N)r   r   r   r   r   r   r   r9   r   r   rJ   r   r   r   r   )r   r   rR   r   r   r   r   )r0   r	   rU   rd   re   rf   r   r   r   r   r   test_invalid_updates  s    
.8>zTestIndex.test_invalid_updates)__name__
__module____qualname__r0   r:   r<   propertyrL   rd   markparametrizer]   r_   rg   rm   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   r   r8   r   r+   1   s2   	

&%15 r+   c                  C   sj  g d} g d}t | |gdddid}|dg t|dgd}t|tsNJ t|jd	ks`J t|jd
 dksvJ |jd
 jjdksJ t||dg d}t|tsJ t|jd	ksJ t|jd
 dksJ |jd
 jjdksJ t	
t& t|dg|dg d W d    n1 s"0    Y  t	
t t|d d d W d    n1 s\0    Y  d S )N)r   r   r   r   rn   r   -   )g       @rT   gffffff @g@g333333@g      @gffffff
@rN   r9   r   r   rJ   r   r   r   rn   )
table_copy)r   r   )r	   rU   r   r#   r   r[   r   rj   r9   rd   re   rf   )rJ   rC   rL   Zx1Zx2r   r   r   test_get_index  s$    6r   c                 C   sv   t  }tg dddd|d< g d|d< tjdd	}|jd
| d W d    n1 sX0    Y  t|dksrJ d S )Nr   r   Ztai)r    ZscalerJ   )r   r   r   rC   T)recordrN   rO   r   )r	   r   warningscatch_warningsrU   r[   )r   tabZwlistr   r   r   test_table_index_time_warning  s    ,r   r'   iP  iU  Zmjdc                 C   sh   t  }| |d< |d |d }|jjs,J |dd  }|jjrDJ |dd  }|d }|jjsdJ d S )NrL   r   )r   rU   rj   rV   )r'   r   rL   ZtxZtabxr   r   r   4test_table_index_does_not_propagate_to_column_slices*  s    
r   c                  C   sx   t tdtj gdgd} | d tttdtjdgdgd}t	| |g}|d j
jg ksfJ |jg kstJ d S )NrT   sr   )ZunitrL   )r   r$   aranger1   mrU   r	   r
   r   r   rj   rV   )Zqtabr   Zqstackr   r   r   test_hstack_qtable_table>  s    
 r   c                   C   s<   t jtdd td d  W d    n1 s.0    Y  d S )Nz"index_slice must be tuple or slice)match)rd   re   	TypeErrorr   r   r   r   r   test_index_slice_exceptionI  s    r   )1r   rd   Znumpyr$   Z
test_tabler   Zastropy.table.bstr   Zastropy.table.sorted_arrayr   Zastropy.table.socor   Zastropy.tabler   r   r	   r
   r   Zastropyr   r1   Zastropy.timer   Zastropy.table.columnr   Zastropy.table.indexr   r   Z"astropy.utils.compat.optional_depsr   Zavailable_enginesappendZfixturer   r   r2   r!   r)   r   Zusefixturesr+   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sP   





   V
