a
    =Â×_èX  ã                   @   sØ   d Z 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	 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je	ƒZdd„ ZedkrÔddlZe ej¡ e ¡  ejdd dS )z0Test module for enumerated types under PyTables.é    N)Úcommon)Úunittest)ÚPyTablesTestCasec                   @   sz   e Zd ZdZd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S ) ÚCreateColTestCasez-Test creating enumerated column descriptions.Úuint32© c                 C   s|   t j||||d}t  |¡}|  |jd¡ |  |jjj|jj¡ |  t|j	ƒt|| ƒ¡ |  |jj
|¡ |  |j|¡ dS )z2Create and check an enumerated column description.©ÚbaseÚshapeÚenumN)ÚtablesÚEnumColÚEnumÚassertEqualÚtypeÚdtyper	   ÚnameÚintÚdfltr
   r   )Úselfr   r   r	   r
   ÚenumcolÚsameEnumr   r   ú5lib/python3.9/site-packages/tables/tests/test_enum.pyÚ
_createCol   s    
zCreateColTestCase._createColc                 C   s   t  g d¢¡}|  |d¡ dS )z4Describing an enumerated column from an enumeration.©ÚredÚgreenÚbluer   N)r   r   r   ©r   Úcolorsr   r   r   Útest00a_validFromEnum(   s    z'CreateColTestCase.test00a_validFromEnumc                 C   s   ddddœ}|   |d¡ dS )z2Describing an enumerated column from a dictionary.é   é   é   r   r   N©r   r   r   r   r   Útest00b_validFromDict.   s    z'CreateColTestCase.test00b_validFromDictc                 C   s   g d¢}|   |d¡ dS )z,Describing an enumerated column from a list.r   r   Nr$   r   r   r   r   Útest00c_validFromList4   s    z'CreateColTestCase.test00c_validFromListc                 C   s   d}|   t| j|d¡ dS )z7Describing an enumerated column from an invalid object.é{   r   N)ÚassertRaisesÚ	TypeErrorr   r   r   r   r   Útest00d_invalidFromType:   s    z)CreateColTestCase.test00d_invalidFromTypec                 C   s"   ddddœ}|   t| j|d¡ dS )z?Describing an enumerated column with an invalid default object.r!   r"   r#   r   ÚblackN)r(   ÚKeyErrorr   r   r   r   r   Útest01_invalidDflt@   s    z$CreateColTestCase.test01_invalidDfltc                 C   s   ddddœ}|   |dd¡ dS )z4Describing an enumerated column with a broader type.r!   r"   r#   r   r   Úint64Nr$   r   r   r   r   Útest02a_validDtypeBroaderF   s    z+CreateColTestCase.test02a_validDtypeBroaderc                 C   s*   dd„ t dƒD ƒ}|  t| j|dd¡ dS )z7Describing an enumerated column with a too narrow type.c                 S   s   g | ]}d | ‘qS ©ze%dr   ©Ú.0Úir   r   r   Ú
<listcomp>O   ó    zCCreateColTestCase.test02b_invalidDtypeTooNarrow.<locals>.<listcomp>é,  Ze0Úuint8N)Úranger(   r)   r   r   r   r   r   Útest02b_invalidDtypeTooNarrowL   s    z/CreateColTestCase.test02b_invalidDtypeTooNarrowc                 C   s   g d¢}| j |ddd dS )z<Describing an enumerated column with multidimensional shape.r   r   ©r"   ©r
   Nr$   r   r   r   r   Útest03a_validShapeMDR   s    z&CreateColTestCase.test03a_validShapeMDc                    sP   t  g d¢¡}t j|dddd}d‰ ‡ fdd„t d	¡D ƒ}|  t|ƒ|¡ d
S )z5Checking the string representation of an enumeration.r   r   r   r   r   z[EnumCol(enum=Enum({%s}), dflt='red', base=UInt32Atom(shape=(), dflt=0), shape=(), pos=None)c                    s   g | ]}ˆ d   |¡ ‘qS )z, )Újoin)r2   Úitems©Útemplater   r   r4   c   s   z;CreateColTestCase.test04a_validReprEnum.<locals>.<listcomp>)z	'blue': 2z
'green': 1z'red': 0N)r   r   r   Ú	itertoolsÚpermutationsZassertInÚrepr)r   r   r   Zpermitationsr   r?   r   Útest04a_validReprEnumX   s    ÿ
ÿÿz'CreateColTestCase.test04a_validReprEnumc                 C   s&   ddi}| j t| j|dt ¡ d dS )z<Describing an enumerated column of floats (not implemented).r   ç      ð?©r	   N)r(   ÚNotImplementedErrorr   r   Ú	FloatAtomr   r   r   r   Útest99a_nonIntEnumi   s    ÿz$CreateColTestCase.test99a_nonIntEnumc                 C   s    g d¢}|   t| j|dd¡ dS )zXDescribing an enumerated column encoded as floats.

        (not implemented).

        r   r   Úfloat64N)r(   rG   r   r   r   r   r   Útest99b_nonIntDtypep   s    ÿz%CreateColTestCase.test99b_nonIntDtypec                 C   s*   ddi}| j t| j|dtjddd dS )zADescribing an enumerated column of non-scalars (not implemented).r   ©r#   r"   é   rM   r;   rF   N)r(   rG   r   r   ÚIntAtomr   r   r   r   Útest99b_nonScalarEnum{   s    
ÿz'CreateColTestCase.test99b_nonScalarEnumN)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r%   r&   r*   r-   r/   r9   r<   rD   rI   rK   rO   r   r   r   r   r      s   
r   c                   @   sj   e Zd ZdZd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S )ÚCreateAtomTestCasezTest creating enumerated atoms.r   r   c                 C   s`   t j||||d}t  |¡}|  |jd¡ |  |jjj|jj¡ |  |j|¡ |  |j	|¡ dS )z$Create and check an enumerated atom.r   r   N)
r   ÚEnumAtomr   r   r   r   r	   r   r
   r   )r   r   r   r	   r
   Zenumatomr   r   r   r   Ú_createAtom†   s    
zCreateAtomTestCase._createAtomc                 C   s   t  g d¢¡}|  |d¡ dS )z2Describing an enumerated atom from an enumeration.r   r   N)r   r   rV   r   r   r   r   r       s    z(CreateAtomTestCase.test00a_validFromEnumc                 C   s   ddddœ}|   |d¡ dS )z0Describing an enumerated atom from a dictionary.r!   r"   r#   r   r   N©rV   r   r   r   r   r%   –   s    z(CreateAtomTestCase.test00b_validFromDictc                 C   s   g d¢}|   |d¡ dS )z*Describing an enumerated atom from a list.r   r   NrW   r   r   r   r   r&   œ   s    z(CreateAtomTestCase.test00c_validFromListc                 C   s   d}|   t| j|d¡ dS )z5Describing an enumerated atom from an invalid object.r'   r   N)r(   r)   rV   r   r   r   r   r*   ¢   s    z*CreateAtomTestCase.test00d_invalidFromTypec                 C   s    ddddœ}| j |ddd dS )	z2Describing an enumerated atom with a broader type.r!   r"   r#   r   r   r.   rF   NrW   r   r   r   r   r/   ¨   s    z,CreateAtomTestCase.test02a_validDtypeBroaderc                 C   s*   dd„ t dƒD ƒ}|  t| j|dd¡ dS )z5Describing an enumerated atom with a too narrow type.c                 S   s   g | ]}d | ‘qS r0   r   r1   r   r   r   r4   ±   r5   zDCreateAtomTestCase.test02b_invalidDtypeTooNarrow.<locals>.<listcomp>r6   r   r7   N)r8   r(   r)   rV   r   r   r   r   r9   ®   s    z0CreateAtomTestCase.test02b_invalidDtypeTooNarrowc                 C   s   g d¢}| j |ddd dS )z:Describing an enumerated atom with multidimensional shape.r   r   r:   r;   NrW   r   r   r   r   r<   ´   s    z'CreateAtomTestCase.test03a_validShapeMDc                 C   s&   ddi}| j t| j|dt ¡ d dS )z:Describing an enumerated atom of floats (not implemented).r   rE   rF   N)r(   rG   rV   r   rH   r   r   r   r   rI   º   s    ÿz%CreateAtomTestCase.test99a_nonIntEnumc                 C   s    g d¢}|   t| j|dd¡ dS )zWDescribing an enumerated atom encoded as a float.

        (not implemented).

        r   r   rJ   N)r(   rG   rV   r   r   r   r   rK   Á   s    ÿz&CreateAtomTestCase.test99b_nonIntDtypec                 C   s*   ddi}| j t| j|dtjddd dS )z?Describing an enumerated atom of non-scalars (not implemented).r   rL   rM   r;   rF   N)r(   rG   rV   r   rN   r   r   r   r   rO   Ì   s    
ÿz(CreateAtomTestCase.test99b_nonScalarEnumN)r   r   )rP   rQ   rR   rS   rV   r    r%   r&   r*   r/   r9   r<   rI   rK   rO   r   r   r   r   rT   ƒ   s   

rT   c                   @   sx   e Zd ZdZe dddddœ¡ZdZejZ	dZ
d	Zd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S )ÚEnumTableTestCasez$Test tables with enumerated columns.r!   r"   r#   r   ©r   r   r   r+   r+   éÒ  Úuint16r   c                    s   G ‡ ‡fdd„dt jƒ}|S )Nc                       s2   e Zd ZejddZej” j” j” j	”ddZ
dS )z7EnumTableTestCase._description.<locals>.TestDescriptionr   )Úposr#   )r	   r
   r\   N)rP   rQ   rR   r   ZIntColÚridr   r   ÚdefaultNameÚenumTypeÚrcolorr   ©r   r
   r   r   ÚTestDescriptionÞ   s
   þrb   )r   ZIsDescription)r   r
   rb   r   ra   r   Ú_descriptionÝ   s    zEnumTableTestCase._descriptionc                 C   sD   | j jdd|  ¡ |  ¡ d |  ¡  |  | j jj d¡| j	d¡ dS )z3Reopening a file with tables using enumerated data.ú/Útest©Útitler`   ú5Enumerated type was not restored correctly from disk.N©
Úh5fileÚcreate_tablerc   Ú_getMethodNameÚ_reopenr   Úrootre   Úget_enumr   ©r   r   r   r   Útest00a_reopenæ   s    ÿþz EnumTableTestCase.test00a_reopenc                 C   sF   | j jdd|  d¡|  ¡ d |  ¡  |  | j jj d¡| j	d¡ dS )zMReopening a file with tables using enumerated multi-dimensional
        data.rd   re   r:   rf   r`   rh   Nri   rp   r   r   r   Útest00b_reopenMDò   s    ÿþz"EnumTableTestCase.test00b_reopenMDc                 C   sÔ   | j jdd|  ¡ |  ¡ d}d| jfd| jfg}|j}|d d |d< |d d |d	< | ¡  |d d |d< |  t	t
j|d	|d d ¡ | ¡  d
|_| ¡ }t d|dd… |f ¡ |  |dd… |d¡ dS )z3Appending enumerated values using ``row.append()``.rd   re   rf   é
   é   r   r]   r#   r`   Úpythonú&* appended value: %s
* read value: %s
NéÿÿÿÿúWritten and read values differ.)rj   rk   rc   rl   ÚvalueInEnumÚvalueOutOfEnumÚrowÚappendr(   Ú
ValueErrorÚoperatorÚsetitemÚflushÚflavorÚreadr   ÚverbosePrintr   )r   ÚtblÚappendedr{   r‚   r   r   r   Útest01_rowAppendÿ   s2    ÿþÿþÿÿz"EnumTableTestCase.test01_rowAppendc                 C   st   | j jdd|  ¡ |  ¡ d}d| jfd| jfg}| |¡ | ¡  d|_| 	¡ }t
 d||f ¡ |  ||d¡ d	S )
z5Appending enumerated values using ``table.append()``.rd   re   rf   rs   rt   ru   rv   rx   N)rj   rk   rc   rl   ry   rz   r|   r€   r   r‚   r   rƒ   r   )r   r„   r…   r‚   r   r   r   Útest02_append  s     ÿþ
þÿzEnumTableTestCase.test02_appendc                 C   sŒ   | j jdd|  ¡ |  ¡ d}d| jfd| jfg}| |¡ d| jfd| jfg}||dd…< d|_| ¡ }t	 
d||f ¡ |  ||d	¡ dS )
z9Changing enumerated values using ``table.__setitem__()``.rd   re   rf   rs   rt   Nru   ú%* written value: %s
* read value: %s
rx   )rj   rk   rc   rl   ry   r|   rz   r   r‚   r   rƒ   r   )r   r„   r…   Úwrittenr‚   r   r   r   Útest03_setitem1  s&    ÿþ
þþÿz EnumTableTestCase.test03_setitemc                 C   s  | j jdd|  d¡|  ¡ d}d| j| jffd| j| jffg}|j}|d d |d< |  tt	j
|d	|d d
 ¡ | |¡ | ¡  d|_| ¡ }tt|ƒƒD ]n}|  || d || d d¡ |  || d
 d || d
 d d¡ |  || d
 d
 || d
 d
 d¡ qœdS )z,Appending multi-dimensional enumerated data.rd   re   r:   rf   rs   rt   r   r]   r`   r#   ru   rx   N)rj   rk   rc   rl   ry   rz   r{   r(   r}   r~   r   r|   r€   r   r‚   r8   Úlenr   )r   r„   r…   r{   r‚   r3   r   r   r   Útest04_multidimH  s2    ÿþÿ
ÿ ÿ ÿz!EnumTableTestCase.test04_multidimc              	   C   s¤   | j jdd|  ¡ |  ¡ d}d| jfd| jfd| jfg}| |¡ | ¡  dd„ | d	d
| ji¡D ƒ}t	 
d| j|jj||dd… f ¡ |  ||dd… d¡ dS )zSearching enumerated data.rd   re   rf   rs   rt   é   c                 S   s   g | ]}|d  |d f‘qS )r]   r`   r   )r2   r{   r   r   r   r4   p  s   ÿz2EnumTableTestCase.test05_where.<locals>.<listcomp>zrcolor == vÚvz\* ``valueInEnum``: %s
* ``rcolor`` column: ``%s``
* ``searched``: %s
* Should look like: %s
Nrw   z"Search returned incorrect results.)rj   rk   rc   rl   ry   rz   r|   r€   Úwherer   rƒ   Zcolsr`   r   )r   r„   r…   Zsearchedr   r   r   Útest05_wherec  s(    ÿý
þüÿÿzEnumTableTestCase.test05_whereN)r   )rP   rQ   rR   rS   r   r   r   r^   r   ry   rz   r_   rc   rq   rr   r†   r‡   rŠ   rŒ   r   r   r   r   r   rX   Ô   s   
	rX   c                   @   s„   e Zd ZdZe dddddœ¡ZejZdZ	dZ
d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S ) ÚEnumEArrayTestCasez,Test extendable arrays of enumerated values.r!   r"   r#   r   rY   rZ   r[   r   c                 C   s   t j| jd| j|dS ©Nr   r   ©r   rU   r   r_   ra   r   r   r   Ú_atom…  s    ÿzEnumEArrayTestCase._atomc                 C   sP   | j jdd|  ¡ d|  ¡ d d| j jj_|  ¡  |  | j jj 	¡ | j
d¡ dS )z>Reopening a file with extendable arrays using enumerated data.rd   re   ©r   ©r
   rg   ru   rh   N©rj   Úcreate_earrayr”   rl   rn   re   r   rm   r   ro   r   rp   r   r   r   rq   ‰  s    þþz!EnumEArrayTestCase.test00a_reopenc                 C   sP   | j jdd|  ¡ d|  ¡ d d| j jj_|  ¡  |  | j jj 	¡ | j
d¡ dS )zXReopening a file with extendable arrays using enumerated
        multi-dimensional data.rd   re   ©r   r"   r–   ru   rh   Nr—   rp   r   r   r   rr   —  s    þþz#EnumEArrayTestCase.test00b_reopenMDc                 C   sx   d}t j| j|| jdd}| jjdd|d|  ¡ d |  ¡  |  | jj	j
 ¡ | jd¡ |  | jj	j
jj| j| d	¡ d S )
Nr   r   r   rd   re   r•   r–   rh   úJThe default value of enumerated type was not restored correctly from disk.©r   rU   r   r_   rj   r˜   rl   rm   r   rn   re   ro   Úatomr   ©r   r   rœ   r   r   r   Ú!test_enum_default_persistence_red¦  s     ÿÿþþz4EnumEArrayTestCase.test_enum_default_persistence_redc                 C   sx   d}t j| j|| jdd}| jjdd|d|  ¡ d |  ¡  |  | jj	j
 ¡ | jd¡ |  | jj	j
jj| j| d	¡ d S )
Nr   r   r   rd   re   r•   r–   rh   rš   r›   r   r   r   r   Ú#test_enum_default_persistence_green¸  s     ÿÿþþz6EnumEArrayTestCase.test_enum_default_persistence_greenc                 C   sx   d}t j| j|| jdd}| jjdd|d|  ¡ d |  ¡  |  | jj	j
 ¡ | jd¡ |  | jj	j
jj| j| d	¡ d S )
Nr   r   r   rd   re   r•   r–   rh   rš   r›   r   r   r   r   Ú"test_enum_default_persistence_blueÊ  s     ÿÿþþz5EnumEArrayTestCase.test_enum_default_persistence_bluec                 C   sx   d}t j| j|| jdd}| jjdd|d|  ¡ d |  ¡  |  | jj	j
 ¡ | jd¡ |  | jj	j
jj| j| d	¡ d S )
Nr+   r   r   rd   re   r•   r–   rh   rš   r›   r   r   r   r   Ú#test_enum_default_persistence_blackÜ  s     ÿÿþþz6EnumEArrayTestCase.test_enum_default_persistence_blackc                 C   s\   | j jdd|  ¡ d|  ¡ d}d|_| j| jg}| |¡ | ¡  | 	¡ }|  
||d¡ dS )ú/Appending scalar elements of enumerated values.rd   re   r•   r–   ru   rx   N©rj   r˜   r”   rl   r   ry   rz   r|   r€   r‚   r   ©r   Úearrr…   r‚   r   r   r   Útest01_appendî  s    þ
z EnumEArrayTestCase.test01_appendc                 C   sh   | j jdd|  ¡ d|  ¡ d}d|_| j| jg| j| jgg}| |¡ | ¡  | 	¡ }|  
||d¡ dS )ú:Appending multi-dimensional elements of enumerated values.rd   re   r™   r–   ru   rx   Nr£   r¤   r   r   r   Útest02_appendMDý  s    þ

þ
z"EnumEArrayTestCase.test02_appendMDc                 C   sl   | j jdd|  ¡ d|  ¡ d}d|_| j| jf}| |¡ | j| jg}||dd…< | ¡ }|  	||d¡ dS )z:Changing enumerated values using ``earray.__setitem__()``.rd   re   r•   r–   ru   Nrx   )
rj   r˜   r”   rl   r   ry   r|   rz   r‚   r   )r   r¥   r…   r‰   r‚   r   r   r   rŠ     s    þ
z!EnumEArrayTestCase.test03_setitemN)r   )rP   rQ   rR   rS   r   r   r   r   ry   rz   r_   r”   rq   rr   rž   rŸ   r    r¡   r¦   r¨   rŠ   r   r   r   r   r‘   }  s   
r‘   c                   @   sd   e Zd ZdZe dddddœ¡ZejZdZ	dZ
dd
d„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚEnumVLArrayTestCasez1Test variable-length arrays of enumerated values.r!   r"   r#   r   rY   rZ   r[   r   c                 C   s   t j| jd| j|dS r’   r“   ra   r   r   r   r”   '  s    ÿzEnumVLArrayTestCase._atomc                 C   sN   | j jdd|  ¡ |  ¡ d d| j jj_|  ¡  |  | j jj 	¡ | j
d¡ dS )zKReopening a file with variable-length arrays using
        enumerated data.rd   re   rf   ru   rh   N©rj   Úcreate_vlarrayr”   rl   rn   re   r   rm   r   ro   r   rp   r   r   r   rq   +  s    
þþz"EnumVLArrayTestCase.test00a_reopenc                 C   sP   | j jdd|  d¡|  ¡ d d| j jj_|  ¡  |  | j jj 	¡ | j
d¡ dS )z]Reopening a file with variable-length arrays using enumerated
        multi-dimensional data.rd   re   r:   rf   ru   rh   Nrª   rp   r   r   r   rr   :  s    þþz$EnumVLArrayTestCase.test00b_reopenMDc                 C   s†   | j jdd|  ¡ |  ¡ d}d|_| jg| j| jgg}| |d ¡ | |d ¡ | ¡  | 	¡ }t
 d||f ¡ |  ||d¡ d	S )
r¢   rd   re   rf   ru   r   r#   rv   rx   N©rj   r«   r”   rl   r   ry   rz   r|   r€   r‚   r   rƒ   r   ©r   Úvlarrr…   r‚   r   r   r   r¦   I  s$    
þ
þþÿz!EnumVLArrayTestCase.test01_appendc                 C   sš   | j jdd|  d¡|  ¡ d}d|_| j| jgg| j| jg| j| jggg}| |d ¡ | |d ¡ | ¡  | 	¡ }t
 d||f ¡ |  ||d	¡ d
S )r§   rd   re   r:   rf   ru   r   r#   rv   rx   Nr¬   r­   r   r   r   r¨   _  s(    þ

ÿþþÿz#EnumVLArrayTestCase.test02_appendMDc                 C   s|   | j jdd|  ¡ |  ¡ d}d|_| j| jf}| |¡ | j| jg}||d< | ¡ }t	 
d||f ¡ |  ||d d¡ dS )	z;Changing enumerated values using ``vlarray.__setitem__()``.rd   re   rf   ru   r   rˆ   rx   N)rj   r«   r”   rl   r   ry   r|   rz   r‚   r   rƒ   r   )r   r®   r…   r‰   r‚   r   r   r   rŠ   v  s     
þ
þÿz"EnumVLArrayTestCase.test03_setitemN)r   )rP   rQ   rR   rS   r   r   r   r   ry   rz   r_   r”   rq   rr   r¦   r¨   rŠ   r   r   r   r   r©     s   
r©   c                  C   s’   ddl } ddlm} t ¡ }d}t|ƒD ]d}| |  |¡¡ | t t	¡¡ | t t
¡¡ | t t¡¡ | t t¡¡ | t t¡¡ q(|S )zCReturn a test suite consisting of all the test cases in the module.r   N)r   r#   )ÚdoctestZtables.miscr   r   Z	TestSuiter8   ZaddTestZDocTestSuiteZ	makeSuiter   rT   rX   r‘   r©   )r¯   r   ZtheSuiteZniterr3   r   r   r   Úsuite‹  s    r°   Ú__main__)ZdefaultTest)rS   r~   rA   r   Ztables.testsr   Ztables.tests.commonr   r   ZTestCaser   rT   ZTempFileMixinrX   r‘   r©   r°   rP   ÚsysZ
parse_argvÚargvZprint_versionsÚmainr   r   r   r   Ú<module>   s&   kQ * #l