U
    ¾mœd ‚  ã                   @   sF  d dl mZ d dlZd dlZd dlmZ d dlZd dlm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ ejj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 0d-d.d/d0g dgg¡d1d2„ ƒZ1dS )3é    )Úcatch_warningsN)Ú	Timestamp)Ú	DataFrameÚHDFStoreÚIndexÚ
MultiIndexÚSeriesÚ_testingÚbdate_rangeÚconcatÚ
date_rangeÚisnaÚread_hdf)Ú_maybe_removeÚensure_clean_store)ÚTermc                 C   s  t ddddgdddggdddd	d	d
d
dddg
dd	d
dd	d	d
dd	d
g
gddgd�}ttj dd¡|dddgd�}t| ƒ�N}|jd|dd� |dg }t |j	ddgd�|¡ t |j	ddd�|¡ W 5 Q R X t
tj d¡|dd�}t| ƒ�,}|jd|dd� t |j	ddd�|¡ W 5 Q R X d S )NÚfooÚbarZbazZquxÚoneÚtwoÚthreer   é   é   é   Zfoo_nameZbar_name)ZlevelsÚcodesÚnamesé
   ÚAÚBÚC©ÚindexÚcolumnsÚdfÚtable©Úformat©r"   zcolumns=['A']©Úwhere)r!   ÚnameÚs)r   r   ÚnpÚrandomÚrandnr   ÚputÚtmÚassert_frame_equalÚselectr   Zassert_series_equal)Ú
setup_pathr!   r#   ÚstoreÚexpectedr+   © r6   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/io/pytables/test_select.pyÚtest_select_columns_in_where    s    .ý

 
r8   c              	   C   s^  t tj dd¡ddddgd�}tdddd�|_t| ƒ�„}| d	|¡ | d	¡}|}t	j
||d
d� |jd	|jd�}|}t	j
||d
d� |jd	dgd�}|jd d …dgf }t	 
||¡ W 5 Q R X tt tj dd¡ddddgd�t tjjdddd� dd¡ddgd�gdd�}tdddd�|_t| ƒ�À}| d	|¡ | d	¡}|}t	j
||d
d� |jd	|jd�}|}t	j
||d
d� |jd d …dgf }|jd	dgd�}t	j
||d
d� |jd d …ddgf }|jd	ddgd�}t	j
||d
d� W 5 Q R X t| ƒ�b}| d	|¡ | d	|¡ |jd d …ddgf }t||gƒ}|jd	ddgd�}t	j
||d
d� W 5 Q R X d S )Nr   é   r   r   r'   z20130101 9:30ÚT)ÚperiodsÚfreqr#   T)Z	by_blocksr   é   )Úsizer   r   r   ©Zaxis)r   r,   r-   r.   r   r!   r   Úappendr2   r0   r1   r"   Úlocr   ÚrandintZreshape)r3   r#   r4   Úresultr5   r6   r6   r7   Útest_select_with_dups<   sX    

 ÿþù	


rD   c              
   C   s®  t | ƒ��š}tdd���‚ t ¡ }t|dƒ | d|¡ |jdddgd�}|jddgd�}t ||¡ | ddg¡}|jddgd�}t ||¡ t|dƒ |jd|dgd� |jdd	gddgd�}||j	d
k jddgd�}t ||¡ t|dƒ |jd|dd� |jdd	gddgd�}||j	d
k jddgd�}t ||¡ t|dƒ |jd|dgd� |jdd	gddgd�}||j	d
k jddgd�}t ||¡ W 5 Q R X W 5 Q R X d S )NT)Úrecordr#   r   r   r'   zcolumns=['A', 'B']©Údata_columnszA > 0r   r   ÚD)
r   r   r0   ÚmakeTimeDataFramer   r@   r2   Úreindexr1   r   )r3   r4   r#   rC   r5   r6   r6   r7   Útest_selectz   s4    



rK   c              	   C   sô  t | ƒ��@}ttddd�tj d¡dœƒ}t|dƒ |jd|ddgd� | dd	¡}||j	t
d
ƒk }t ||¡ ttj dd¡ddgd�}d|d< d|jdd…df< |d dk|d< t|dƒ |jd|dd� ||jdk jddgd�}dD ]*}|jdd|› �ddgd�}t ||¡ qî||jdk jddgd�}dD ],}|jdd|› �ddgd�}t ||¡ �q8ttj d¡tj d¡dœƒ}t|dƒ | d|¡ | dd¡}|jt|jƒdd… dgd�}t ||¡ ttj d¡tj d¡tjdd d!�d"œƒ}t|d#ƒ | d#|¡ | d#d$¡}|jt|jƒdd… dgd�}t ||¡ W 5 Q R X t | ƒ��.}ttd%ƒtd%ƒd&œd'd!�}|d( d  t¡|d(< |jd)|dd� |jd)d*d+�}||d, d-k }t ||¡ tj|jd< ||d, d-k }|jd.|ddd/� |jd.d*d+�}t ||¡ ttd%ƒtd%ƒd&œd'd!�}|d( d  t¡|d(< tj|jd0< ||d, d-k }|jd1|dd� |jd1d*d+�}t ||¡ W 5 Q R X t | ƒ�T}t ¡ }||d dk }|jd|dd� t d¡}|jdd2gd+�}t ||¡ W 5 Q R X d S )3Nú
2012-01-01é,  ©r;   )Útsr   r#   rO   r   rF   úts>=Timestamp('2012-02-01')ú
2012-02-01é   r   r   r'   r   Úobjectr   r9   r   ÚboolvT)TÚtruer   z	boolv == F)FÚfalser   r=   )r   r   Zdf_intzindex<10 and columns=['A']r   r    Zf8©Zdtype)r   r   r!   Zdf_floatzindex<10.0 and columns=['A']é   ©ÚcolsÚvaluesÚfloat64rZ   Údf1ú
values>2.0r(   r[   g       @Údf2©rG   r!   r   Údf4z	A>np_zero)r   r   r
   r,   r-   r.   r   r@   r2   rO   r   r0   r1   rA   rT   rJ   ZrandÚlistr!   ZarangeÚrangeÚapplyÚstrÚnanÚilocZmakeDataFramer\   )r3   r4   r#   rC   r5   ÚvZnp_zeror6   r6   r7   Útest_select_dtypes    sˆ    

þÿ




ýÿ



ri   c              	   C   sÚ  t | ƒ��Æ}ttddd�tj d¡tdƒdgd dgd  dgd  d	d
„ tdƒD ƒ dœƒ}t|dƒ |jd|ddddgd� | 	dd¡}||j
tdƒk }t ||¡ | 	dd¡}||j
tdƒk|j dddg¡@  }t ||¡ dddgdd
„ tdƒD ƒ }| 	dd¡}||j
tdƒk|j |¡@  }t ||¡ tddƒ}| 	dd¡}||j |¡ }t ||¡ t|ƒdk�s|t‚t|j
dd… jƒ}| 	dd¡}||j
 |j¡ }t ||¡ t|ƒdk�sÌt‚W 5 Q R X d S )NrL   rM   rN   Úaé2   ÚbÚcéd   c                 S   s   g | ]}d |d›�‘qS ©rj   Z03dr6   ©Ú.0Úir6   r6   r7   Ú
<listcomp>  s     z0test_select_with_many_inputs.<locals>.<listcomp>)rO   r   r   Úusersr#   rO   r   r   rt   rF   rP   rQ   z1ts>=Timestamp('2012-02-01') & users=['a','b','c']c                 S   s   g | ]}d |d›�‘qS ro   r6   rp   r6   r6   r7   rs   &  s     é<   z.ts>=Timestamp('2012-02-01') and users=selectoréÈ   z
B=selectorr   zts=selector)r   r   r
   r,   r-   r.   rc   r   r@   r2   rO   r   r0   r1   rt   Úisinr   ÚlenÚAssertionErrorr   r[   )r3   r4   r#   rC   r5   Úselectorr6   r6   r7   Útest_select_with_many_inputs	  sL    

ÿþýüÿ
ÿ
r{   c              	   C   sF  t |ƒ�²}t d¡}t|dƒ | d|¡ | d¡}t|jddd�ƒ}t|ƒ}t ||¡ t|jddd�ƒ}t	|ƒdks|t
‚t|ƒ}t ||¡ t|jddd�ƒ}t|ƒ}t ||¡ W 5 Q R X | | }t d¡}| |d	¡ d
}tjt|d�� t|d	dd� W 5 Q R X tjt|d�� t|d	dd� W 5 Q R X | | }t d¡}|j|ddd� tt|ddd�ƒ}t|ƒ}t	|ƒdk�s€t
‚t ||¡ t |t|dƒ¡ t |ƒ�–}t d¡}	|jd|	dd� t d¡jdjd�}
d|
d< | d|
¡ t|	|
gdd�}|jddgdd�}t|jddgddd�ƒ}t|ƒ}t ||¡ W 5 Q R X d S )Niô  r#   T)Úiteratorrn   ©Ú	chunksizerR   é–   Zdf_non_tablez0can only use an iterator or chunksize on a table©Úmatchr$   r%   r]   rF   ú{}_2r'   r   r   r_   r   r?   )rz   )rz   r~   )r   r0   rI   r   r@   r2   rb   r   r1   rx   ry   Úto_hdfÚpytestÚraisesÚ	TypeErrorr   Úrenamer&   Úselect_as_multiple)Útmp_pathr3   r4   r#   r5   ÚresultsrC   ÚpathÚmsgr]   r_   r6   r6   r7   Útest_select_iterator9  sX    







ÿr�   c           	   	   C   sô  d}t | ƒ�Ê}t dd¡}t|dƒ | d|¡ |jd }|jd }| d¡}t ||¡ d|› d�}|jd|d	�}t ||¡ d
|› d�}|jd|d	�}t ||¡ d|› d|› d�}|jd|d	�}t ||¡ W 5 Q R X t | ƒ��}t dd¡}t|dƒ | d|¡ |jd }|jd }t|jd|d�ƒ}t	|ƒ}t ||¡ d|› d�}t|jd||d�ƒ}t	|ƒ}t ||¡ d
|› d�}t|jd||d�ƒ}t	|ƒ}t ||¡ d|› d|› d�}t|jd||d�ƒ}t	|ƒ}t ||¡ W 5 Q R X d S )Nç     ˆÃ@éà† ÚSr#   r   éÿÿÿÿú
index >= 'ú'r(   ú
index <= 'ú' & index <= 'r}   ©r)   r~   )
r   r0   rI   r   r@   r!   r2   r1   rb   r   )	r3   r~   r4   r5   Úbeg_dtÚend_dtrC   r)   rŠ   r6   r6   r7   Ú"test_select_iterator_complete_8014{  sN    







r™   c           
   	   C   sœ  d}t | ƒ��}t dd¡}t|dƒ | d|¡ |jd }|jd }d|› d�}t|jd||d	�ƒ}t|ƒ}||j|k }	t 	|	|¡ d
|› d�}t|jd||d	�ƒ}t|ƒ}||j|k }	t 	|	|¡ d|› d|› d�}t|jd||d	�ƒ}t|ƒ}||j|k|j|k@  }	t 	|	|¡ W 5 Q R X t | ƒ�d}t dd¡}t|dƒ | d|¡ |jd }d|› d�}t|jd||d	�ƒ}dt
|ƒk�sŽt‚W 5 Q R X d S )NrŽ   r�   r�   r#   r   éþÿÿÿr’   r“   r–   r”   r•   r‘   z	index > 'r   ©r   r0   rI   r   r@   r!   rb   r2   r   r1   rx   ry   ©
r3   r~   r4   r5   r—   r˜   r)   rŠ   rC   Z	rexpectedr6   r6   r7   Ú&test_select_iterator_non_complete_8014À  s<    





r�   c           
   	   C   sˆ  d}t | ƒ��p}t dd¡}t|dƒ | d|¡ |jd }|j|d  }d|› d�}t|jd||d	�ƒ}t|ƒ}||j|k }	t 	|	|¡ d
|› d�}t|jd||d	�ƒ}t
|ƒdks¼t‚t|ƒ}||j|k }	t 	|	|¡ d|› d|› d�}t|jd||d	�ƒ}t
|ƒdk�st‚t|ƒ}||j|k|j|k@  }	t 	|	|¡ d
|› d|› d�}t|jd||d	�ƒ}t
|ƒdk�szt‚W 5 Q R X d S )Ni'  i † r�   r#   r   r   r’   r“   r–   r”   r•   z' & index >= 'r›   rœ   r6   r6   r7   Ú&test_select_iterator_many_empty_framesñ  s6    

	rž   c           
   
   C   s  t  ¡ }t| ƒ�ê}|jd|dd� |jt|ƒd  }tdƒ}|jjd |ksPt	‚d}d}| 
d||g¡}|j|d …d	d
gf }t  ||¡ | 
d|g¡}|jd d …d	gf }t  ||¡ t  ¡ }| d|¡ d}	tjt|	d�� | 
dd¡ W 5 Q R X W 5 Q R X d S )NÚframer$   r%   r   zindex>=dateÚdatezcolumns=['A', 'D']z	columns=Ar   rH   Zdf_timez day is out of range for month: 0r€   zindex>0)r0   rI   r   r/   r!   rx   r   ÚenvÚscopery   r2   rA   r1   r@   r„   r…   Ú
ValueError)
r3   r#   r4   r    Zcrit1Zcrit2Zcrit3rC   r5   rŒ   r6   r6   r7   Útest_frame_select(  s&    
r¤   c              
   C   s  t  ¡ }d|d< d|j|jdd… df< t| ƒ��Ì}|jd|ddgd� | dd	¡}|j|j|jd
 k|jdk@  }t  ||¡ | dd¡}|j|j|jd
 k|jdk@  }t  ||¡ | dd¡}|j|j|jd
 k|jdkB  }t  ||¡ | dd¡}|j|j|jd
 k|j|jd k@ |jdkB  }t  ||¡ | dd¡}|j|jdk }t  ||¡ d}t	j
t|d�� | dd¡ W 5 Q R X | dd¡}|jd d …|j ddg¡f }t  ||¡ | dd¡}|j|j|jd
 k jddgd�}t  ||¡ W 5 Q R X d S )Nr   Ústringr   r   r9   r#   r$   ©r&   rG   z index>df.index[3] & string="bar"r   z index>df.index[3] & string="foo"z index>df.index[3] | string="bar"z7(index>df.index[3] & index<=df.index[6]) | string="bar"é   zstring!="bar"z6cannot use an invert condition when passing to numexprr€   z~(string="bar")z~(columns=['A','B'])r   r   z(index>df.index[3] & columns in ['A','B']r'   )r0   rI   rA   r!   r   r/   r2   r¥   r1   r„   r…   ÚNotImplementedErrorr"   Ú
differencerJ   )r3   r#   r4   rC   r5   rŒ   r6   r6   r7   Útest_frame_select_complexJ  sH        ÿÿÿ"rª   c              	   C   sà  | d }| d }t ddddddgiƒ}|j|ddd	dgd
� t|ddd�}t tj dd¡dgtjdd„ tdƒD ƒddgd�d�}|j|ddd	d� t|ddd�}|j	 
¡ }t|ƒ� }|jddd�}	t |	|¡ W 5 Q R X t|ddd�}	t |	|¡ |j	}
t|ddd�}	t |	|¡ t|ddd�}	t |	|¡ t|ddd�}	t |	|¡ t|ddd�}	t |	|¡ t|ƒ�n}|jddd�}	t |	|¡ |jddd�}	t |	|¡ |jddd�}	t |	|¡ |jddd�}	t |	|¡ W 5 Q R X d S )Nz
params.hdfzhist.hdfr   r   r   r   r#   Úwr$   )Úmoder&   rG   zA=[2,3]r(   é   Údatac                 S   s"   g | ]}t d ƒD ]}||f‘qqS )rR   )rc   )rq   rr   Újr6   r6   r7   rs   �  s     
  z.test_frame_select_complex2.<locals>.<listcomp>rR   Úl1Úl2)r   )r"   r!   )r¬   r&   zl1=[2, 3, 4]zl1=l0zl1=indexzl1=selection.indexzl1=selection.index.tolist()zl1=list(selection.index))r   rƒ   r   r,   r-   r.   r   Úfrom_tuplesrc   r!   Útolistr   r2   r0   r1   )r‰   ÚppÚhhÚparamsZ	selectionÚhistr5   Zl0r4   rC   r!   r6   r6   r7   Útest_frame_select_complex2€  sN     ÿý


r¸   c              
   C   s€   t  ¡ }t| ƒ�f}|jd|dd� d}tjt|d�� | dd¡ W 5 Q R X tjt|d�� | dd¡ W 5 Q R X W 5 Q R X d S )Nr#   r$   r%   z unable to collapse Joint Filtersr€   zcolumns=['A'] | columns=['B']z!columns=['A','B'] & columns=['C'])r0   rI   r   r/   r„   r…   r¨   r2   )r3   r#   r4   rŒ   r6   r6   r7   Útest_invalid_filtering»  s    
r¹   c              	   C   st  t | ƒ��`}t ¡ }d|d< d|j|jdd… df< |jd|dgd� | dd¡}||jdk }t ||¡ | dd	¡}||jdk }t ||¡ | 	¡ }t
j|j|jdkdf< |jd
|dgd� | d
d	¡}|t|jƒ }t ||¡ d|d< d|j|jdd… df< |jd|dgd� | dd¡}||jdk }t ||¡ | dd¡}||jdk }t ||¡ W 5 Q R X d S )NÚnoneÚxÚ r   é   r#   rF   zx=nonezx!=noner_   r   ÚintÚdf3zint=2zint!=2)r   r0   rI   rA   r!   r@   r2   r»   r1   Úcopyr,   rf   r   r¾   )r3   r4   r#   rC   r5   r_   r6   r6   r7   Útest_string_selectÍ  s4    rÁ   c              
   C   s¬  t  ¡ }t  ¡ jdjd�}d|d< t| ƒ��v}d}tjt|d�� |jd ddgd	d
� W 5 Q R X |j	d	|ddgd� | 	d|¡ tjt|d�� |jd ddgd	d
� W 5 Q R X tjt|d�� |jd gddgd	d
� W 5 Q R X d}tjt
|d�� |jd	dgddgd	d
� W 5 Q R X tjt
|d�� |jdgddgd	d
� W 5 Q R X tjt
dd�� |jd	dgddgdd
� W 5 Q R X | d	ddg¡}|jd	gddgd	d
�}t  ||¡ |jd	ddgd	d
�}t  ||¡ |jd	dgddgd	d
�}t||gdd�}||jdk|jdk@  }t j||dd� |jd	dgddd
�}t||gdd�}|dd … }t  ||¡ | 	dt jdd�¡ d}tjt|d�� |jd	dgddgd	d
� W 5 Q R X W 5 Q R X d S )Nr‚   r'   r   r   zkeys must be a list/tupler€   zA>0zB>0r]   )r)   rz   r   r   rF   r_   z!'No object named df3 in the file'r¿   z!'No object named df4 in the file'ra   r   r?   r   F)Z
check_freqzindex>df2.index[4]rR   rk   )Znperz,all tables must have exactly the same nrows!)r0   rI   r‡   r&   r   r„   r…   r†   rˆ   r@   ÚKeyErrorr2   r1   r   r   r   r£   )r3   r]   r_   r4   rŒ   rC   r5   r6   r6   r7   Útest_select_as_multiple÷  sz       ÿ   ÿ  ÿ  ÿ  ÿ  ÿrÃ   c              	   C   s¦   t | ƒ�”}ttdƒtdƒdœdd�}|d d  t¡|d< tj|jd< tdd	d
gdddgdœdddgd�}|jd|ddgd� |j	ddd�}t
 ||¡ W 5 Q R X d S )Nr§   rY   r\   rW   rZ   r   r   z13.0z14.0z15.0g      @g      @g      @r   r9   rR   )r!   r#   Tr`   r^   r(   )r   r   rc   rd   re   r,   rf   rg   r@   r2   r0   r1   )r3   r4   r#   r5   rC   r6   r6   r7   Útest_nan_selection_bug_4858=  s    
þrÄ   c              
   C   s~   t ddddddddgdddd	d
dddgdœƒ}||jdk }t| ƒ�$}|jd|ddd� | dd¡}W 5 Q R X t ||¡ d S )Nrj   rm   rl   ztest & testÚer   r   r   r9   rR   r§   r½   é   )rj   rl   Útestr$   Tr¦   za = "test & test")r   rj   r   r@   r2   r0   r1   )r3   r#   r5   r4   rC   r6   r6   r7   Ú(test_query_with_nested_special_characterN  s    þÿ
rÈ   c              	   C   sÐ   t ddddgiƒ}t| ƒ�¬}|jd|ddd� d	}| dd
|d›�¡}|jsPt‚d}| dd|d›�¡}|jddgd d …f }t ||¡ d}| dd|d›�¡}|jdgd d …f }t ||¡ W 5 Q R X d S )Nr   g~  eÍÍAg$  eÍÍAg'1  eÍÍArÇ   r$   Tr¦   g©  eÍÍAzA < z.4fgÅ   eÍÍAzA > r   r   zA == )	r   r   r@   r2   Úemptyry   rA   r0   r1   )r3   r#   r4   ÚcutoffrC   r5   Úexactr6   r6   r7   Útest_query_long_float_literal\  s    

rÌ   c                 C   s  t ddgtddd�ddgddgdœd	d
ddgd�}t| ƒ��¼}|jd|ddd� tdƒ}|jddd�}|jdgd d …f }t ||¡ dD �]f}ddtdƒt	 
dd¡fD ]N}d|› d�}d|› dt|ƒ› d�}	tjt|	d�� |jd|d� W 5 Q R X q¨d}dD ]R}
|
› d|› d�}|
d
k�r$d }	nd!}	tjt|	d�� |jd|d� W 5 Q R X �q td"d#dgddd
gƒD ]†\}}
|
› d|› d�}|jd|d�}|d$k�r°|jd%gd d …f }n2|d&k�rÐ|jdgd d …f }n|jg d d …f }t ||¡ �qjqŠW 5 Q R X d S )'Nz
2014-01-01z
2014-01-02r   rN   gš™™™™™ñ?g333333ó?r   )r    Ú	real_dateÚfloatr¾   r    rÍ   rÎ   r¾   r'   rÇ   r$   Tr¦   zreal_date > tsr(   )ú<ú>ú==gÍÌÌÌÌÌ @r+   zdate z vzCannot compare z	 of type z to string columnr€   rj   )r¾   rÎ   rÍ   ú z+Given date string "a" not likely a datetimezcould not convert string to Ú1z1.1rÑ   r   rÐ   )r   r   r   r@   r   r2   rA   r0   r1   ÚpdZ	TimedeltaÚtyper„   r…   r†   r£   Úzip)r3   r#   r4   rO   rC   r5   Úoprh   ÚqueryrŒ   Úcolr6   r6   r7   Útest_query_compare_column_typer  sP    
ü
ù


 ÿ

rÚ   r)   r¼   r6   )Nc              	   C   sV   t dddgƒ}| d }t|ƒ�.}| d|d¡ t|d|d�}t ||¡ W 5 Q R X d S )Nr   r   r   zempty_where.h5r#   Útr(   )r   r   r/   r   r0   r1   )r‰   r)   r#   r‹   r4   rC   r6   r6   r7   Útest_select_empty_where¨  s    
rÜ   )2Úwarningsr   Únumpyr,   r„   Zpandas._libs.tslibsr   ZpandasrÔ   r   r   r   r   r   r	   r0   r
   r   r   r   r   Zpandas.tests.io.pytables.commonr   r   Zpandas.io.pytablesr   ÚmarkZ
single_cpuZ
pytestmarkr8   rD   rK   ri   r{   r�   r™   r�   rž   r¤   rª   r¸   r¹   rÁ   rÃ   rÄ   rÈ   rÌ   rÚ   ZparametrizerÜ   r6   r6   r6   r7   Ú<module>   s:   4>&i0BE17"6;*F6