a
    =_                     @   sh  d Z ddlZddlZddlmZ ddlmZ ddlmZ	 G dd dej
Zdd	 Zd
d ZG dd deje	ZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deje	ZG dd deZG dd deZG dd deZG d d! d!eZG d"d# d#e	ZG d$d% d%e	ZG d&d' d'eje	ZG d(d) d)eje	ZG d*d+ d+eZG d,d- d-eZG d.d/ d/eZ G d0d1 d1eZ!G d2d3 d3eZ"G d4d5 d5eZ#G d6d7 d7eje	Z$G d8d9 d9e$Z%G d:d; d;e$Z&G d<d= d=e$Z'G d>d? d?e$Z(G d@dA dAe$Z)G dBdC dCeje	Z*G dDdE dEeje	Z+G dFdG dGeje	Z,G dHdI dIe,Z-G dJdK dKe,Z.G dLdM dMe,Z/G dNdO dOe,Z0G dPdQ dQeje	Z1G dRdS dSe1Z2G dTdU dUe1Z3G dVdW dWeje	Z4G dXdY dYe4Z5G dZd[ d[e4Z6G d\d] d]e4Z7G d^d_ d_e4Z8G d`da dae4Z9G dbdc dce4Z:G ddde deeje	Z;G dfdg dge;Z<G dhdi die;Z=G djdk dke;Z>G dldm dme;Z?G dndo doe;Z@G dpdq dqe;ZAG drds dse;ZBG dtdu due;ZCG dvdw dwe;ZDG dxdy dye;ZEG dzd{ d{eje	ZFG d|d} d}eFZGG d~d deFZHdd ZIeJdkrdddlKZKeLeKjM eN  ejOdd dS )z6Test module for evaluating expressions under PyTables.    N)common)unittest)PyTablesTestCasec                   @   s8   e Zd Ze Ze Ze Z	e
 ZejddZdS )Record   )itemsizeN)__name__
__module____qualname__tablesInt32ColZcolInt32Int64ColZcolInt64Z
Float32ColZ
colFloat32Z
Float64ColZ
colFloat64Z
ComplexColZ
colComplex r   r   ;lib/python3.9/site-packages/tables/tests/test_expression.pyr      s
   r   c                 C   s@   i }|   D ].\}}t|dr2|||| ||< q|||< q|S )N__len__)itemshasattr)npvarsstartstopstepnpvars_namevarr   r   r   get_sliced_vars#   s    

r   c           
      C   sJ   i }dd |D }t |||||< |  D ]\}}	|	t|||< q*|S )Nc                 S   s   g | ]}t d qS )N)slice).0Zdimr   r   r   
<listcomp>/       z$get_sliced_vars2.<locals>.<listcomp>)r   r   __getitem__tuple)
r   r   r   r   shapemaindimr   Zslicesr   r   r   r   r   get_sliced_vars2-   s    r#   c                       s8   e Zd ZdZ fddZdd Zdd Zdd	 Z  ZS )
ExprTestCase)
      c           
         s*  t t|   d| _t| j}tjd|dd| j | _	}tj|d| dd| j | _
}tjd| d| dd| j | _}tj|dd| j | _}|||d| _| jj}| jd	kr| j|d
|| _	| j|d|| _
| j|d|| _| j|d|| _n| jdkr| jj|d
tj|j| jd| _	| jj|dtj|j| jd| _
| jj|dtj|j| jd| _| jj|dtj|j| jd| _|| j	d d < || j
d d < || jd d < n@| jdkrt| j}d|d< | jj|d
tj|j|d| _	| jj|dtj|j|d| _
| jj|dtj|j|d| _| jj|dtj|j|d| _| j	| | j
| | j| | j| np| jdkrtjj||||gd| jdd  fd  d}| j|d|}	|	jj| _	|	jj | _
|	jj!| _|	jj"| _#| j	| j
| jd| _$d S )Nz2 * a*b + cr   int32dtype   int64   abcArrayr.   r/   r0   r1CArrayatomr!   EArrayColumnz%si4,%si8,%si4,%si8      t)%superr$   setUpexprnpprodr!   arangereshaper.   r/   r0   emptyr2   r   h5filerootkindcreate_arraycreate_carrayr   Atom
from_dtyper)   listcreate_earrayappendrec
fromarrayscreate_tablecolsZf0f1f2Zf3dvars)
selfNr.   r/   r0   r2   rD   r!   rar:   	__class__r   r   r<   <   s    "&





zExprTestCase.setUpc                 C   s`   t | j| j}| }t| j| j}tjrHtdt	| tdt	| | 
t||d dS )z0Checking that expression is correctly evaluated.Computed expression:Should look like:$Evaluate is returning a wrong value.N)r   Exprr=   rT   evalr   r   verboseprintrepr
assertTrueareArraysEqualrU   r=   r2   r2r   r   r   test00_simpley   s    zExprTestCase.test00_simplec                 C   s   t | j| j}|| j | }| jdkr:|dd }t| j| j}t	j
rjtdt| tdt| | t	||d dS )z=Checking that expression is correctly evaluated (`out` param)NumPyNrZ   r[   r\   )r   r]   r=   rT   
set_outputr2   r^   rE   r   r   r_   r`   ra   rb   rc   rd   r   r   r   
test01_out   s    
zExprTestCase.test01_outc           	      C   s   t | j| j}t| j}|d |d d  }}}|||| | }tj	| j|j
d}|||| }| | |  tjrtdt| tdt| | t||d dS )zkChecking that expression is correctly evaluated when slice is
        outside of data samples (`out` param)r8   r*   N)r!   r)   rZ   r[   r\   )r   r]   r=   rT   maxr!   set_inputs_ranger^   r>   zerosr)   ZassertListEqualtolistr   r_   r`   ra   rb   rc   )	rU   r=   Zmaxshaper   r   r   r2   rl   re   r   r   r   
test02_out   s    
zExprTestCase.test02_out)	r   r	   r
   r!   r<   rf   ri   rn   __classcell__r   r   rX   r   r$   7   s
   =r$   c                   @   s   e Zd ZdZdS )	ExprNumPyrg   Nr   r	   r
   rE   r   r   r   r   rp      s   rp   c                   @   s   e Zd ZdZdS )	ExprArrayr1   Nrq   r   r   r   r   rr      s   rr   c                   @   s   e Zd ZdZdS )
ExprCArrayr3   Nrq   r   r   r   r   rs      s   rs   c                   @   s   e Zd ZdZdS )
ExprEArrayr6   Nrq   r   r   r   r   rt      s   rt   c                   @   s   e Zd ZdZdS )
ExprColumnr7   Nrq   r   r   r   r   ru      s   ru   c                       s\   e Zd Z f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  ZS )MixedContainersTestCasec                    s  t t|   d| _| jj}| j|d}t| j	}tj
d|dd| j	}tj
|d| dd| j	}tj
d| d| dd| j	}tj
d| d	| dd| j	}tj
d	| d
| dd| j	}td | _}	td | _}
||||||	|
d| _| }|| _|| _| j|d|| _| j|| _| jj|dtj|j| j	d| _|| jd d < | j|| _t| j	}d|d< | jj|dtj|j|d| _ | j !| | j || _"i }| j	dd  }t#||||||fD ]$\}}tj$%|jj&||d| < q| j'|d|}| j	d }|j(}t)|D ]>}t#||||||fD ]\}}|| |d| < qH|!  q0|*  |j+j,| _-|j+j.| _/| j| j| j| j | j-| j| jd| _0d S )Nz2 * a*b + c**2+d**2+e-f+goutsr   r'   r(   r*   r+   r,   r9      )r.   r/   r0   rS   efgr/   r0   r4   rS   r8   zf%dr:   )1r;   rv   r<   r=   rC   rD   Zcreate_groupr>   r?   r!   r@   rA   intrz   int16r{   r   copyr.   rndarF   r/   rarrrG   r   rH   rI   r)   r0   rcarrrJ   rK   rS   rL   rearr	enumerateZColZfrom_sctypetyperO   rowrangeflushrP   Zf4ry   Zf5rcolrT   )rU   rD   rw   rV   r.   r/   r0   rS   ry   rz   r{   r   ZeshapeZrtypeZcolshapeicolr:   Znrowsr   ZnrowrX   r   r   r<      s^       



zMixedContainersTestCase.setUpc                 C   sh   t | j| j}| }t| j| j}tjrPtdt	||j
 tdt	||j
 | t||d dS )z(Checking expressions with mixed objects.rZ   r[   r\   N)r   r]   r=   rT   r^   r   r   r_   r`   ra   r)   rb   rc   rd   r   r   r   test00a_simple  s    z&MixedContainersTestCase.test00a_simplec                 C   s|   d}t || j}| }t|| j}tjrPtdt||j	 tdt||j	 | 
|j|jkor|j	|j	kor||kd dS )z7Checking that scalars in expression evaluate correctly.	2 * f + grZ   r[   r\   N)r   r]   rT   r^   r   r   r_   r`   ra   r)   rb   r!   rU   Zexpr_strr=   r2   re   r   r   r   test00b_simple_scalars  s    z.MixedContainersTestCase.test00b_simple_scalarsc                 C   s   t | j| j}| j| j| j| j| jfD ]}t	j
r@tdt| || | }t|t| jsn|dd }t| j| j}t	j
rtdt||j tdt||j | t	||d q(dS )z5Checking expressions with mixed objects (`out` param)Checking output container:NrZ   r[   r\   )r   r]   r=   rT   r   r   r   r   r   r   r_   r`   r   rh   r^   
isinstancer   ra   r)   rb   rc   rd   r   r   r   test01a_out  s    
z#MixedContainersTestCase.test01a_outc                 C   s   t | jdkrdS d}t|| j}| j| j| j| j| j	fD ]|}t
jrTtdt| || | }|d }t|| j}t
jrtdt||j tdt||j | t
||d q<dS )	z>Checking expressions with mixed objects (`out` param, scalars)r8   Nr   r   r   rZ   r[   r\   )lenr!   r   r]   rT   r   r   r   r   r   r   r_   r`   r   rh   r^   r   ra   r)   rb   rc   r   r   r   r   test01b_out_scalars/  s"    
z+MixedContainersTestCase.test01b_out_scalarsc                 C   s   | j | jd  }}}t| j| j}|||| | }t| j	|||}t| j|}t
jrtdt||j tdt||j | t
||d dS )z0Checking mixed objects and start, stop, step (I)r8   rZ   r[   r\   N)r   r   r   r]   r=   rT   rk   r^   r   r   r   r_   r`   ra   r)   rb   rc   rU   r   r   r   r=   r2   r   re   r   r   r   test02a_sssD  s    z#MixedContainersTestCase.test02a_sssc                 C   s   d| j d | j  }}}t| j| j}|||| | }t| j	|||}t| j|}t
jrtdt||j tdt||j | t
||d dS )z1Checking mixed objects and start, stop, step (II)r   rZ   r[   r\   N)r!   r   r   r]   r=   rT   rk   r^   r   r   r   r_   r`   ra   r)   rb   rc   r   r   r   r   test02b_sssS  s    z#MixedContainersTestCase.test02b_sssc                 C   s   | j | j| j  }}}t| j| j}|||| | }t	| j
|||}t| j|}tjrtdt||j tdt||j | t||d dS )z2Checking mixed objects and start, stop, step (III)rZ   r[   r\   Nr   r   r   r   r]   r=   rT   rk   r^   r   r   r   r_   r`   ra   r)   rb   rc   r   r   r   r   test02c_sssb  s    z#MixedContainersTestCase.test02c_sssc                 C   s   dd | j | j| jfD \}}}t| j| j}|||| | }t	| j
|||}t| j|}tjrtdt||j tdt||j | t||d dS )z*Checking start, stop, step as numpy.int64.c                 S   s   g | ]}t |qS r   )r>   r+   )r   r   r   r   r   r   t  r   z6MixedContainersTestCase.test03_sss.<locals>.<listcomp>rZ   r[   r\   Nr   r   r   r   r   
test03_sssq  s    z"MixedContainersTestCase.test03_sss)r   r	   r
   r<   r   r   r   r   r   r   r   r   ro   r   r   rX   r   rv      s   Crv   c                   @   s   e Zd ZdZd\ZZZdS )MixedContainers0r8   )r   r8   r8   Nr   r	   r
   r!   r   r   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZd\ZZZdS )MixedContainers1r%   )r,      r*   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZd\ZZZdS )MixedContainers2)r%   rx   )r*   	   r,   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZd\ZZZdS )MixedContainers3)r%   r,   r*   )r*   r8   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )UnalignedObjectc                 C   s   t jddd}t jddd}| }| }t j||||g}|d }|d }| |jjd | |jjd d}t	
|}	|	 }
t|}tjrtd	t|
|
j td
t||j | t|
|d dS )z,Checking expressions with unaligned objects.r%   int8r(   r'   rQ   rR   F	2 * a + brZ   r[   r\   N)r>   rB   r@   r~   rM   rN   assertEqualflagsalignedr   r]   r^   r   r_   r`   ra   r)   rb   rc   rU   Za0a1Za2Za3rW   r.   r/   sexprr=   r2   re   r   r   r   rf     s&    
zUnalignedObject.test00_simplec                 C   s   t jddd}t jddddd}| }| }t j||||g}|d }|d	 }| |jj	d
 | |jj	d
 d}t
|}	|	 }
t|}tjrtdt|
|
j tdt||j | t|
|d dS )z8Checking expressions with unaligned objects (MD version))r%   r9   r   r(   (   r'   r%   r9   rQ   rR   Fr   rZ   r[   r\   N)r>   rB   r@   rA   r~   rM   rN   r   r   r   r   r]   r^   r   r_   r`   ra   r)   rb   rc   r   r   r   r   	test01_md  s&    
zUnalignedObject.test01_mdN)r   r	   r
   rf   r   r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )NonContiguousObjectc                 C   s   t jddd}|ddd }|d }| |jjd | |jjd d}t|}| }t|}t	j
rtd	t||j td
t||j | t	||d dS )z0Checking expressions with non-contiguous objectsr%   r'   r(   Nr*   FTr   rZ   r[   r\   )r>   r@   r   r   
contiguousr   r   r]   r^   r   r_   r`   ra   r)   rb   rc   rU   r.   r/   r   r=   r2   re   r   r   r   rf     s    
z!NonContiguousObject.test00_simplec                 C   s   t jddddd}|ddd }|d }| |jjd | |jjd	 d
}t|}|	 }t	|}t
jrtdt||j tdt||j | t
||d dS )z@Checking expressions with non-contiguous objects (MD version, I)r   r'   r(   r%   r9   Nr*   FTr   rZ   r[   r\   r>   r@   rA   r   r   r   r   r   r]   r^   r   r_   r`   ra   r)   rb   rc   r   r   r   r   
test01a_md  s    
zNonContiguousObject.test01a_mdc                 C   s   t jddddd}|dddddf }|d }| |jjd | |jjd	 d
}t|}|	 }t	|}t
jrtdt||j tdt||j | t
||d dS )zAChecking expressions with non-contiguous objects (MD version, II)r   r'   r(   r%   r9   Nr*   FTr   rZ   r[   r\   r   r   r   r   r   
test01b_md  s    
zNonContiguousObject.test01b_mdN)r   r	   r
   rf   r   r   r   r   r   r   r     s   r   c                       sH   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	  Z
S )	ExprErrorr   c                    s~   t t|   t| j}tj|dd| j| _tj|dd| j| _	tj|dd| j| _
tj|dd| j| _d S )Nr'   r(   r+   )r;   r   r<   r>   r?   r!   r@   rA   r.   r/   r0   rB   r2   )rU   rV   rX   r   r   r<     s    zExprError.setUpc                 C   sH   | j | jd | _ d}| j| j | jd}t||}| t|j	 dS )z/Checking that inconsistent shapes are detected.r   	a * b + cr-   N)
r/   rA   r!   r.   r0   r   r]   assertRaises
ValueErrorr^   rU   r=   vars_r   r   r   _test00_shape  s
    zExprError._test00_shapec                 C   s:   | j d| _ d}| j| j | jd}| ttj|| dS )z7Checking that uint64 arrays in expression are detected.Zuint64r   r-   N)r/   Zviewr.   r0   r   NotImplementedErrorr   r]   r   r   r   r   test02_uint64%  s    zExprError.test02_uint64c                 C   sL   G dd dt j}| jdd|}d}|| j| jd}| tt j|| dS )z0Checking that tables in expression are detected.c                   @   s   e Zd Ze Ze ZdS )z#ExprError.test03_table.<locals>.RecN)r   r	   r
   r   r   col1r   col2r   r   r   r   Rec0  s   r   /r.   r   r-   N)	r   IsDescriptionrC   rO   r/   r0   r   	TypeErrorr]   )rU   r   r:   r=   r   r   r   r   test03_table-  s
    zExprError.test03_tablec                 C   s   G dd dt j}| jdd|}d}|jjj}|| j| jd}t 	||}|
 }| | |jj}|| j| jd}| tt j	|| dS )z5Checking that nested cols in expression are detected.c                   @   s&   e Zd Ze ZG dd dejZdS )z+ExprError.test04_nestedcols.<locals>.Nestedc                   @   s   e Zd Ze ZdS )z0ExprError.test04_nestedcols.<locals>.Nested.col2N)r   r	   r
   r   r   col3r   r   r   r   r   ?  s   r   N)r   r	   r
   r   r   r   r   r   r   r   r   r   Nested<  s   r   r   r.   r   r-   N)r   r   rC   rO   rP   r   r   r/   r0   r]   r^   assertIsNotNoner   r   )rU   r   r:   r=   r.   r   r2   r   r   r   test04_nestedcols9  s    

zExprError.test04_nestedcolsc                 C   s>   | j ddt }d}|| j| jd}| ttj|| dS )z2Checking that VLArrays in expression are detected.r   r.   r   r-   N)	rC   Zcreate_vlarrayr   r   r/   r0   r   r   r]   )rU   Zvlar=   r   r   r   r   test05_vlarrayO  s    zExprError.test05_vlarray)r   r	   r
   r!   r<   r   r   r   r   r   ro   r   r   rX   r   r     s   
	r   c                   @   s   e Zd Zdd ZdS )BroadcastTestCasec                 C   sh  | j | j| jf}tjt|d dd|d }tjt|d dd|d }tjt|d dd|d }| jj}|j	d dkr| j
|d|}n| jj|dt |j	d}| | | j
|d|}| | | j
|d	|}| | td
}	|	 }
td}tjrPtd| j | j| j tdt|
|
j tdt||j | t|
|d dS )z!Checking broadcast in expression.r   i4r(   r8   r*   r   r4   b1c12 * a1 + b1-c12 * a + b-cTested shapes:rZ   r[   r\   N)shape1shape2shape3r>   r@   r?   rA   rC   rD   r!   rF   rK   r   r   r   r]   r^   r   r_   r`   ra   r)   rb   rc   )rU   shapesr.   r/   r0   rD   r   r   r   r=   r2   re   r   r   r   rf   [  s2    """



zBroadcastTestCase.test00_simpleNr   r	   r
   rf   r   r   r   r   r   Y  s   r   c                   @   s   e Zd ZdZdZdZdS )
Broadcast0r   r,   r9   r,   r9   r9   Nr   r	   r
   r   r   r   r   r   r   r   r   z  s   r   c                   @   s   e Zd ZdZdZdZdS )
Broadcast1r*   r,   r9   r   r   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )
Broadcast2r   r   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )
Broadcast3r   r   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )
Broadcast4r   r   r   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )
Broadcast5r   )r,   r8   r   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )DiffLengthTestCasec                    s  t | jt | jt | jf}tjt|d dd|d }tjt|d dd|d }tjt|d dd|d }t	d}|
 }tdd |D  t fd	dt|D }t|D ]\}}	t|	 kr||	d< qtjt|d dd|d }| | tjt|d dd|d }| | tjt|d dd|d }| | t
d}
tjrtd
| j| j| j tdt||j tdt|
|
j | t||
d dS )z/Checking different length inputs in expression.r   r   r(   r8   r*   r   c                 S   s   g | ]}t |qS r   r   )r   r!   r   r   r   r     r   z4DiffLengthTestCase.test00_simple.<locals>.<listcomp>c                    s$   g | ]\}}t | kr|d  qS r   r   )r   r   r!   Zmaxdimr   r   r     s   r   rZ   r[   r\   N)rJ   r   r   r   r>   r@   r?   rA   r   r]   r^   rj   minr   r   r   r   r_   r`   ra   r)   rb   rc   )rU   r   r.   r/   r0   r=   r2   Zminlenr   r!   re   r   r   r   rf     s2    """

"
"
"
z DiffLengthTestCase.test00_simpleNr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )DiffLength0r   r   r&   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )DiffLength1r,   r   r   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )DiffLength2r   r   r9   r,   r9   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )DiffLength3)r8   r,   r9   r   r   Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdS )DiffLength4r   r   r   Nr   r   r   r   r   r     s   r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TypesTestCasec           	      C   s   t g d}t g d}| jj}| j|d|}| | | j|d|}| | td}| }td}t	j
rtdt||j tdt||j | t	||d d	S )
z Checking booleans in expression.)TFT)FTFr   r   za | brZ   r[   r\   Nr>   arrayrC   rD   rF   r   r   r]   r^   r   r_   r`   ra   r)   rb   rc   	rU   r.   r/   rD   r   r   r=   r2   re   r   r   r   test00_bool  s     


zTypesTestCase.test00_boolc                 C   s  dD ]}t jrtd| tg d|}tg d|}| jj}| j|d|}| j|d|}td}| 	|tj
 td}| }	tg dd	}tg dd	}td
}
t jrtdt|	|	j tdt|
|
j | |	j|
j | t |	|
d |  |  qdS )z9Checking int8,uint8,int16,uint16 and int32 in expression.)r   Zuint8r}   Zuint16r'   Checking type:r8   r*   r,   r,   r9   rx   r   r   r*   ztwo * a1-b1r'   z	two * a-brZ   r[   r\   N)r   r_   r`   r>   r   rC   rD   rF   r'   ZassertIsInstanceZintegerr   r]   r^   ra   r)   r   rb   rc   remove)rU   r)   r.   r/   rD   r   r   Ztwor=   r2   re   r   r   r   test01_shortint  s0    



zTypesTestCase.test01_shortintc           
      C   s   dD ]}t jrtd| tg d|}tg d|}| jj}| j|d|}| j|d|}t	d}|
 }tg dd}tg dd}t
d	}	t jrtd
t||j tdt|	|	j | |j|	j | t ||	d |  |  qdS )z(Checking uint32 and int64 in expression.)Zuint32r+   r   r   r   r   r   	2 * a1-b1r+   2 * a-brZ   r[   r\   Nr   r_   r`   r>   r   rC   rD   rF   r   r]   r^   ra   r)   r   rb   rc   r   
rU   r)   r.   r/   rD   r   r   r=   r2   re   r   r   r   test02_longint  s,    

zTypesTestCase.test02_longintc           
      C   s   dD ]}t jrtd| tg d|}tg d|}| jj}| j|d|}| j|d|}t	d}|
 }tg d|}tg d|}t
d}	t jrtd	t||j td
t|	|	j | |j|	j | t ||	d |  |  qdS )z+Checking float32 and float64 in expression.)Zfloat32float64r   r   r   r   r   r   r   rZ   r[   r\   Nr   r   r   r   r   test03_float0  s,    

zTypesTestCase.test03_floatc           
      C   s   dD ]}t jrtd| tg d|}tg d|}| jj}| j|d|}| j|d|}t	d}|
 }tg dd}tg dd}t
d	}	t jrtd
t||j tdt|	|	j | |j|	j | t ||	d |  |  qdS )z0Checking complex64 and complex128 in expression.)Z	complex64
complex128r   )r8   y               @y      @       @)r,   y              @y      @      ?r   r   r   r   r   rZ   r[   r\   Nr   r   r   r   r   test04_complexK  s,    

zTypesTestCase.test04_complexc           	      C   s   t g dd}t g dd}| jj}| j|d|}| | | j|d|}| | td}| }td}t	j
rtdt||j td	t||j | t	||d
 dS )zChecking strings in expression.)r.   ZbdZcdS)r.   ZbdcdZccdcr   r   z(a1 > b'a') | ( b1 > b'b')z(a > b'a') | ( b > b'b')rZ   r[   r\   Nr   r   r   r   r   test05_stringf  s     


zTypesTestCase.test05_stringN)	r   r	   r
   r   r   r   r   r   r  r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )FunctionsTestCasec           	      C   s   t g d}t g d}| jj}| j|d|}| | | j|d|}| | td}| }t 	|t 
| }tjrtdt||j tdt||j | t||d d	S )
z+Checking some math functions in expression.)g?g?333333?)r  g?g      ?r   r   zsin(a1) * sqrt(b1)rZ   r[   r\   N)r>   r   rC   rD   rF   r   r   r]   r^   ZsinZsqrtr   r_   r`   ra   r)   rb   rc   r   r   r   r   rf   ~  s     


zFunctionsTestCase.test00_simpleNr   r   r   r   r   r  |  s   r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )MaindimTestCasec                 C   s  t | j}tjt|dd|}| }| }| jj}d|| j	< | jj
|dt |d}| jj
|dt |d}| jj
|dt |d}|| || || td}	|	 }
td	}tjrtd
| tdt|
|
j tdt||j | t|
|d dS )z3Checking other dimensions than 0 as main dimension.r   r(   r   r   r4   r   r   r   r   Tested shape:rZ   r[   r\   N)rJ   r!   r>   r@   r?   rA   r~   rC   rD   r"   rK   r   r   rL   r]   r^   r   r_   r`   ra   r)   rb   rc   )rU   r!   r.   r/   r0   rD   r   r   r   r=   r2   re   r   r   r   rf     s8    






zMaindimTestCase.test00_simplec                 C   sP  t | j}tjt|dd|}| }| }| jj}d|| j	< | jj
|dt |d}| jj
|dt |d}| jj
|dt |d}| jj
|dt |d}	|| || || |	| td	}
|
|	 |
  td
}tjr0td| tdt|	dd |	j tdt||j | t|	dd |d dS )z8Checking other dimensions than 0 as main dimension (out)r   r(   r   r   r4   r   r   r2   r   r   r  rZ   Nr[   r\   )rJ   r!   r>   r@   r?   rA   r~   rC   rD   r"   rK   r   r   rL   r]   rh   r^   r   r_   r`   ra   r)   rb   rc   rU   r!   r.   r/   r0   rD   r   r   r   r2   r=   re   r   r   r   ri     sB    








zMaindimTestCase.test01_outc                 C   sh  t | j}tjt|dd|}| }| }| jj}|dd }d|| j	< d|d< | jj
|dt |d}| |j	| j	 | jj
|dt |d}| |j	d | jj
|dt |d}	| jj
|d	t |d}
|| || |	| |
| td
}| }
td}tjrPtd| tdt|
|
j tdt||j | t|
|d dS )z-Checking different main dimensions in inputs.r   r(   Nr   r   r4   r   r   r2   r   r   r  rZ   r[   r\   )rJ   r!   r>   r@   r?   rA   r~   rC   rD   r"   rK   r   r   r   rL   r]   r^   r   r_   r`   ra   r)   rb   rc   rU   r!   r.   r/   r0   rD   r   r   r   r   r2   r=   re   r   r   r   test02_diff_in_maindims  sH    







z'MaindimTestCase.test02_diff_in_maindimsc                 C   s  t | j}tjt|dd|}| }| }| jj}|dd }d|| j	< d|d< | jj
|dt |d}| |j	| j	 | jj
|dt |d}| jj
|dt |d}	| jj
|d	t |d}
| |
j	d || || |	| |
| td
}||
 |  td}tjrbtd| tdt|
dd |
j tdt||j | t|
dd |d dS )z1Checking different maindims in inputs and output.r   r(   Nr   r   r4   r   r   r2   r   r   r  rZ   r[   r\   )rJ   r!   r>   r@   r?   rA   r~   rC   rD   r"   rK   r   r   r   rL   r]   rh   r^   r   r_   r`   ra   r)   rb   rc   r  r   r   r   test03_diff_in_out_maindims  sJ    








z+MaindimTestCase.test03_diff_in_out_maindimsc                 C   sD  t | j}tjt|dd|}| }| }| jj}|dd }d|| j	< d|d< | jj
|dt |d}| |j	| j	 | jj
|dt |d}| jj
|dt |d}	| jj
|d	t |d}
| |
j	d || || || || |	| |	| |
| td
}||
 | t|j dS )z=Checking different maindims and lengths in inputs and output.r   r(   Nr   r   r4   r   r   r2   r   )rJ   r!   r>   r@   r?   rA   r~   rC   rD   r"   rK   r   r   r   rL   r]   rh   r   r   r^   )rU   r!   r.   r/   r0   rD   r   r   r   r   r2   r=   r   r   r   #test04_diff_in_out_maindims_lengths"  s@    










z3MaindimTestCase.test04_diff_in_out_maindims_lengthsN)r   r	   r
   rf   ri   r	  r
  r  r   r   r   r   r    s
   "%&r  c                   @   s   e Zd ZdZdZdS )Maindim0r8   )r8   r*   Nr   r	   r
   r"   r!   r   r   r   r   r  F  s   r  c                   @   s   e Zd ZdZdZdS )Maindim1r8   )r*   r,   Nr  r   r   r   r   r  K  s   r  c                   @   s   e Zd ZdZdZdS )Maindim2r8   r   Nr  r   r   r   r   r  P  s   r  c                   @   s   e Zd ZdZdZdS )Maindim3r*   r   Nr  r   r   r   r   r  U  s   r  c                   @   s   e Zd Zdd ZdS )AppendModeTestCasec                 C   sX  ddg}t jt |dd|}| }| }d|d< | jj}| jj|dt	 |d}| jj|d	t	 |d}| jj|d
t	 |d}| jj|dt	 |d}	|
| |
| |
| | j
s|	
| td}
|
j|	| j
d |
  td}tjr8td| tdt|	dd |	j tdt||j | t|	dd |d dS )z&Checking append mode in `set_output()`r,   r*   r   r(   r   r8   r   r4   r   r   r2   r   )Zappend_moder   r  rZ   Nr[   r\   )r>   r@   r?   rA   r~   rC   rD   rK   r   r   rL   r]   rh   r^   r   r_   r`   ra   r)   rb   rc   r  r   r   r   test01_append]  sD    





z AppendModeTestCase.test01_appendN)r   r	   r
   r  r   r   r   r   r  [  s   r  c                   @   s   e Zd ZdZdS )AppendModeTrueTNr   r	   r
   rL   r   r   r   r   r    s   r  c                   @   s   e Zd ZdZdS )AppendModeFalseFNr  r   r   r   r   r    s   r  c                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )iterTestCasec           	         s   t t|   t| j}tjt|dd|}|	 }|	 }|||d| _
d|| j< | jj}| jj|dt |d}| jj|dt |d}| jj|dt |d}|| || || |||d| _d	| _d S )
Nr   r(   r-   r   r   r4   r   r   r   )r;   r  r<   rJ   r!   r>   r@   r?   rA   r~   r   r"   rC   rD   rK   r   r   rL   rT   r   )	rU   r!   r.   r/   r0   rD   r   r   r   rX   r   r   r<     s,    




ziterTestCase.setUpc                 C   s   t | j| j}tdd |D }t| j| j}tj	rtt
d| j| j t
dt|dd |j t
dt||j | t|dd |d dS )zChecking the __iter__ iterator.c                 S   s   g | ]}|qS r   r   r   r   r   r   r   r     r   z,iterTestCase.test00_iter.<locals>.<listcomp>Tested shape, maindim:rZ   Nr[   r\   )r   r]   r   rT   r>   r   r^   r   r   r_   r`   r!   r"   ra   r)   rb   rc   rd   r   r   r   test00_iter  s    ziterTestCase.test00_iterc                 C   s   | j d dd  }}}t| j| j}|||| tdd |D }t| j	|||| j
| j}t| j|}tjrtd| j
| j tdt|dd |j tdt||j | t|dd |d dS )	z/Checking the __iter__ iterator (with ranges, I)r   Nc                 S   s   g | ]}|qS r   r   r  r   r   r   r     r   z,iterTestCase.test01a_sss.<locals>.<listcomp>r  rZ   r[   r\   range_r   r]   r   rT   rk   r>   r   r#   r   r!   r"   r^   r   r_   r`   ra   r)   rb   rc   r   r   r   r   test01a_sss  s    ziterTestCase.test01a_sssc                 C   s   | j d | j d d  }}}t| j| j}|||| tdd |D }t| j	|||| j
| j}t| j|}tjrtd| j
| j tdt|dd |j tdt||j | t|dd |d	 dS )
z0Checking the __iter__ iterator (with ranges, II)r   r*   Nc                 S   s   g | ]}|qS r   r   r  r   r   r   r     r   z,iterTestCase.test01b_sss.<locals>.<listcomp>r  rZ   r[   r\   r  r   r   r   r   test01b_sss  s    ziterTestCase.test01b_sssc                 C   s   | j \}}}t| j| j}|||| tdd |D }t| j	|||| j
| j}t| j|}tjrtd| j
| j tdt|dd |j tdt||j | t|dd |d dS )z1Checking the __iter__ iterator (with ranges, III)c                 S   s   g | ]}|qS r   r   r  r   r   r   r     r   z,iterTestCase.test01c_sss.<locals>.<listcomp>r  rZ   Nr[   r\   r  r   r   r   r   test01c_sss  s    ziterTestCase.test01c_sss)	r   r	   r
   r<   r  r  r  r  ro   r   r   rX   r   r    s
   r  c                   @   s   e Zd ZdZdZdZdS )iter0r   r   r8   r*   r8   Nr   r	   r
   r"   r!   r  r   r   r   r   r    s   r  c                   @   s   e Zd ZdZdZdZdS )iter1r   r   r   Nr!  r   r   r   r   r"    s   r"  c                   @   s   e Zd ZdZdZdZdS )iter2r   r,   r*   r   r,   r*   Nr!  r   r   r   r   r#    s   r#  c                   @   s   e Zd ZdZdZdZdS )iter3r8   r$  r%  Nr!  r   r   r   r   r&    s   r&  c                   @   s   e Zd ZdZdZdZdS )iter4r*   )r,   r*   r8   r8   r,   r*   Nr!  r   r   r   r   r'    s   r'  c                   @   s   e Zd ZdZdZdZdS )iter5r*   )r8   r*   rx   )r   r9   r*   Nr!  r   r   r   r   r)    s   r)  c                   @   s   e Zd Zdd Zdd ZdS )setOutputRangeTestCasec                 C   s>  t | j}| j\}}}tjt|dd|}| }| }| jj	}| j
|d|}	| |	 | j
|d|}
| |
 | j
|d|}td}|| |||| |  td}|dtt||| ||||< tjrtd	| td
t|dd |j tdt||j | t|dd |d dS )z(Checking the range selection for output.r   r(   r   r   r2   a1-b1-1a-b-1Nr  rZ   r[   r\   )rJ   r!   r  r>   r@   r?   rA   r~   rC   rD   rF   r   r   r]   rh   set_output_ranger^   r   r   r   r_   r`   ra   r)   rb   rc   )rU   r!   r   r   r   r.   r/   rrD   r   r   r2   r=   re   r   r   r   rf     s0    




"
z$setOutputRangeTestCase.test00_simplec              	   C   s  t | j}| j\}}}tjt|dd|}| }| }d|| j< | j	j
}| j	j|dt |d}	| j	j|dt |d}
| j	j|dt |d}|	| |
| || td}|| |||| |  td	}ttd
g| j }tt|||}||t|||f ||td|f  tjrxtd| tdt|d
d
 |j tdt||j | t|d
d
 |d d
S )z5Checking the range selection for output (maindim > 0)r   r(   r   r   r4   r   r2   r+  r,  Nr  rZ   r[   r\   ) rJ   r!   r  r>   r@   r?   rA   r~   r"   rC   rD   rK   r   r   rL   r]   rh   r-  r^   r    r   r   r   __setitem__r   r   r_   r`   ra   r)   rb   rc   )rU   r!   r   r   r   r.   r/   r.  rD   r   r   r2   r=   re   Zlsllr   r   r   test01_maindim(  sH    







z%setOutputRangeTestCase.test01_maindimN)r   r	   r
   rf   r1  r   r   r   r   r*  	  s   r*  c                   @   s   e Zd ZdZdZdZdS )setOutputRange0r   r   )r   r8   r*   Nr!  r   r   r   r   r2  O  s   r2  c                   @   s   e Zd ZdZdZdZdS )setOutputRange1r   r   )r   r%   r*   Nr!  r   r   r   r   r3  U  s   r3  c                   @   s   e Zd ZdZdZdZdS )setOutputRange2r   r   )r8   r%   r*   Nr!  r   r   r   r   r4  [  s   r4  c                   @   s   e Zd ZdZdZdZdS )setOutputRange3r   )r%   r8   r8   r%   r,   Nr!  r   r   r   r   r5  a  s   r5  c                   @   s   e Zd ZdZdZdZdS )setOutputRange4r   )r%   r*   r6  Nr!  r   r   r   r   r7  g  s   r7  c                   @   s   e Zd ZdZdZdZdS )setOutputRange5r   )rx   r,   r8   )r8   rx   r8   Nr!  r   r   r   r   r8  m  s   r8  c                   @   s   e Zd ZdZdZdZdS )setOutputRange6r8   )r*   rx   r(  Nr!  r   r   r   r   r9  s  s   r9  c                   @   s   e Zd ZdZdZdZdS )setOutputRange7r8   )r*   rx   r8   r(  Nr!  r   r   r   r   r:  y  s   r:  c                   @   s   e Zd ZdZdZdZdS )setOutputRange8r*   )r8   r,   rx   )r8   rx   r*   Nr!  r   r   r   r   r;    s   r;  c                   @   s   e Zd ZdZdZdZdS )setOutputRange9r,   )r8   r,   r9   rx   )r8   rx   r,   Nr!  r   r   r   r   r<    s   r<  c                   @   s   e Zd Zdd Zdd ZdS )VeryLargeInputsTestCasec           	      C   sN  | j }tddur&tjdddd}n.tddurFtjdddd}ntjddd}| jj}| jj|dtjd	d
||d}| | | jj|dtjdd
||d}| | | jj|dtjd	d
||d}t	d}|
| |  |dd }tjddd}tjr6td| tdt||j tdt||j | t||d dS )zChecking very large inputs.ZbloscNr8   F	complevelZcomplibshufflelzor?  r@  r.   r,   Zdfltr5   r!   filtersr/   r*   r2   za * b-6ir%   r   r(   r  zTen last rows:r[   r\   )r!   r   which_lib_versionFiltersrC   rD   rG   ZFloat64Atomr   r]   rh   r^   r>   rl   r   r_   r`   ra   r)   rb   rc   )	rU   r!   rE  rD   r.   r/   r2   r=   re   r   r   r   rf     sF    










z%VeryLargeInputsTestCase.test00_simplec                 C   s  | j }|d dkr$tjr td dS tddurDtjdddd}ntjddd	}| jj}| jj	|d
tj
dd||d}| | | jj	|dtj
dd||d}| | | jj	|dtj
dd||d}td}t|}tjrtd| td| tdd | |dd dS )z-Checking very large inputs (__iter__ version)r   i   zSkipping this *very* long testNrA  r8   Fr>  rB  r.   rC  rD  r/   r*   r2   r,   za-b + 1r  zCummulated sum:r[   r\   )r!   r   r_   r`   r   rF  rG  rC   rD   rG   Z	Int32Atomr   r]   sumr   )rU   r!   rE  rD   r.   r/   r2   r=   r   r   r   test01_iter  s<    











z#VeryLargeInputsTestCase.test01_iterN)r   r	   r
   rf   rI  r   r   r   r   r=    s   &r=  c                   @   s   e Zd ZdZdS )VeryLargeInputs1)i   Nr   r	   r
   r!   r   r   r   r   rJ    s   rJ  c                   @   s   e Zd ZdZdS )VeryLargeInputs2)l       NrK  r   r   r   r   rL    s   rL  c                  C   s6  t  } d}t|D ]}| t t | t t | t t | t t | t t	 | t t
 | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t | t t  | t t! | t t" | t t# | t t$ | t t% | t t& | t t' | t t( | t t) | t t* | t t+ | t t, | t t- | t t. | t t/ | t t0 | t t1 | t t2 | t t3 | t t4 t5j6r| t t7 q| S )zCReturn a test suite consisting of all the test cases in the module.r8   )8r   Z	TestSuiter   ZaddTestZ	makeSuiterp   rr   rs   rt   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r"  r#  r&  r'  r)  r2  r3  r4  r5  r7  r8  r9  r:  r;  r<  rJ  r   ZheavyrL  )ZtheSuiteZniterr   r   r   r   suite  sl    rM  __main__)ZdefaultTest)P__doc__Znumpyr>   r   Ztables.testsr   Ztables.tests.commonr   r   ZTestCaser   r   r   r#   ZTempFileMixinr$   rp   rr   rs   rt   ru   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r"  r#  r&  r'  r)  r*  r2  r3  r4  r5  r7  r8  r9  r:  r;  r<  r=  rJ  rL  rM  r   sysZ
parse_argvargvZprint_versionsmainr   r   r   r   <module>   s   	

q F6@L!$  2&ZFP=
