U
    Mf                     @   sJ  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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, Z0ej1d-d.d/d0g dggd1d2 Z2dS )3    )catch_warningsN)	Timestamp)	DataFrameHDFStoreIndex
MultiIndexSeries_testingbdate_rangeconcat
date_rangeisnaread_hdf)_maybe_removeensure_clean_path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quxZoneZtwoZthreer            Zfoo_nameZbar_name)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*    r5   H/tmp/pip-unpacked-wheel-eb6vo0j3/pandas/tests/io/pytables/test_select.pytest_select_columns_in_where!   s    .

 
r7   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   appendr1   r/   r0   r!   locr   randintZreshape)r2   r"   r3   resultr4   r5   r5   r6   test_select_with_dups>   sX    

 	


rC   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   r/   makeTimeDataFramer   r?   r1   reindexr0   r   )r2   r3   r"   rB   r4   r5   r5   r6   test_select}   s4    



rJ   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"   rN   r   rE   ts>=Timestamp('2012-02-01')
2012-02-01   r   r   r&   r   objectr   r8   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float64rY   df1
values>2.0r'   rZ   g       @df2rF   r    r   df4z	A>np_zero)r   r   r
   r+   r,   r-   r   r?   r1   rN   r   r/   r0   r@   rS   rI   Zrandlistr    ZarangerangeapplystrnanilocZmakeDataFramer[   )r2   r3   r"   rB   r4   vZnp_zeror5   r5   r6   test_select_dtypes   s    










rh   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stW 5 Q R X d S )NrK   rL   rM   a2   bcd   c                 S   s   g | ]}d |dqS ri   Z03dr5   .0ir5   r5   r6   
<listcomp>  s     z0test_select_with_many_inputs.<locals>.<listcomp>)rN   r   r   usersr"   rN   r   r   rs   rE   rO   rP   z1ts>=Timestamp('2012-02-01') & users=['a','b','c']c                 S   s   g | ]}d |dqS rn   r5   ro   r5   r5   r6   rr   0  s     <   z.ts>=Timestamp('2012-02-01') and users=selector   z
B=selectorr   zts=selector)r   r   r
   r+   r,   r-   rb   r   r?   r1   rN   r   r/   r0   rs   isinr   lenAssertionErrorr   rZ   )r2   r3   r"   rB   r4   selectorr5   r5   r6   test_select_with_many_inputs  sL    



rz   c           
   
   C   s^  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| p}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 W 5 Q R X t| j}td}|j|ddd tt|ddd}t|}t	|dkst
t|| t|t|d W 5 Q R X 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)iteratorrm   	chunksizerQ      Zdf_non_tablez0can only use an iterator or chunksize on a tablematchr#   r$   r\   rE   {}_2r&   r   r   r^   r   r>   )ry   )ry   r}   )r   r/   rH   r   r?   r1   ra   r   r0   rw   rx   r   to_hdfpytestraises	TypeErrorr   renamer%   select_as_multiple)
r2   r3   r"   r4   resultsrB   pathmsgr\   r^   r5   r5   r6   test_select_iteratorC  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   r/   rH   r   r?   r    r1   r0   ra   r   )	r2   r}   r3   r4   beg_dtend_dtrB   r(   r   r5   r5   r6   "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stW 5 Q R X d S )Nr   r   r   r"   r   r   r   r   r   r   r   z	index > 'r   r   r/   rH   r   r?   r    ra   r1   r   r0   rw   rx   
r2   r}   r3   r4   r   r   r(   r   rB   Z	rexpectedr5   r5   r6   &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st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   r5   r5   r6   &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   rG   Zdf_timez%could not convert string to Timestampr   zindex>0)r/   rH   r   r.   r    rw   r   envZscoperx   r1   r@   r0   r?   r   r   
ValueError)
r2   r"   r3   r   Zcrit1Zcrit2Zcrit3rB   r4   r   r5   r5   r6   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   r8   r"   r#   r%   rF   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&   )r/   rH   r@   r    r   r.   r1   r   r0   r   r   NotImplementedErrorr!   
differencerI   )r2   r"   r3   rB   r4   r   r5   r5   r6   test_frame_select_complex`  sH        "r   c              	   C   s  t ddg}|\}}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|
| |	  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|}	|	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%   rF   zA=[2,3]r'      datac                 S   s"   g | ]}t d D ]}||fqqS )rQ   )rb   )rp   rq   jr5   r5   r6   rr     s     
  z.test_frame_select_complex2.<locals>.<listcomp>rQ   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-   r   from_tuplesrb   r    tolistr   r1   r/   r0   close)r2   pathspphhparamsZ	selectionhistr4   Zl0r3   rB   r    r5   r5   r6   test_frame_select_complex2  sR     
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'])r/   rH   r   r.   r   r   r   r1   )r2   r"   r3   r   r5   r5   r6   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"   rE   zx=nonezx!=noner^   r   intdf3zint=2zint!=2)r   r/   rH   r@   r    r?   r1   r   r0   copyr+   re   r   r   )r2   r3   r"   rB   r4   r^   r5   r5   r6   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(   ry   r   r   rE   r^   z!'No object named df3 in the file'r   z!'No object named df4 in the file'r`   r   r>   r   F)Z
check_freqzindex>df2.index[4]rQ   rj   )Znperz,all tables must have exactly the same nrows!)r/   rH   r   r%   r   r   r   r   r   r?   KeyErrorr1   r0   r   r   r   r   )r2   r\   r^   r3   r   rB   r4   r5   r5   r6   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   rX   r[   rV   rY   r   r   z13.0z14.0z15.0g      @g      @g      @r   r8   rQ   )r    r"   Tr_   r]   r'   )r   r   rb   rc   rd   r+   re   rf   r?   r1   r/   r0   )r2   r3   r"   r4   rB   r5   r5   r6   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 )Nri   rl   rk   ztest & tester   r   r   r8   rQ   r   r      )ri   rk   testr#   Tr   za = "test & test")r   ri   r   r?   r1   r/   r0   )r2   r"   r4   r3   rB   r5   r5   r6   (test_query_with_nested_special_characterp  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~  eAg$  eAg'1  eAr   r#   Tr   g  eAzA < z.4fg   eAzA > r   r   zA == )	r   r   r?   r1   emptyrx   r@   r/   r0   )r2   r"   r3   cutoffrB   r4   exactr5   r5   r6   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 ]V}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 qd}dD ]B}
|
 d| d}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|| qZqW 5 Q R X d S )&Nz
2014-01-01z
2014-01-02r   rM   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   ri   )r   r   r    zcould not convert string to 1z1.1r   r   r   )r   r   r   r?   r   r1   r@   r/   r0   pdZ	Timedeltatyper   r   r   r   zip)r2   r"   r3   rN   rB   r4   oprg   queryr   colr5   r5   r6   test_query_compare_column_type  sL    



 

r   r(   r   r5   )Nc              
   C   sb   t dddg}tdB}t|.}|d|d t|d| d}t|| W 5 Q R X W 5 Q R X d S )Nr   r   r   zempty_where.h5r"   tr'   )r   r   r   r.   r   r/   r0   )r(   r"   r   r3   rB   r5   r5   r6   test_select_empty_where  s    

r   )3warningsr   Znumpyr+   r   Zpandas._libs.tslibsr   Zpandasr   r   r   r   r   r   r	   r/   r
   r   r   r   r   Zpandas.tests.io.pytables.commonr   r   r   Zpandas.io.pytablesr   markZ
single_cpuZ
pytestmarkr7   rC   rJ   rh   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zparametrizer   r5   r5   r5   r6   <module>   s:   4?)k2EH49#6A+H3