U
    ‰dŠ=  ã                   @   sX   d dl mZmZ d dlZd dlZd dlZd dlZG dd„ dejƒZ	G dd„ dejƒZ
dS )é    )ÚcoreÚschemaNc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	TestFieldc                 C   s   t  g ¡}|  |jd¡ d S )N©Nr   )r   ÚFieldZassertTupleEqualÚ_parent©ÚselfÚf© r   ú=/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/schema_test.pyÚtestInitShouldSetEmptyParent   s    
z&TestField.testInitShouldSetEmptyParentc                 C   s    t  t jtjdt  dt jtjdfdt  t jtd¡f¡t jtjdt  dt jtjdfdt  t jtd¡f¡t jtjdg¡}|  |j	dddd	d
dg¡ d S )N©ÚdtypeÚfield1Úfield2Úfield3Zfield4r   é   é   é   é   é	   )
r   r   ÚScalarÚnpÚint32ÚStructÚListÚstrÚassertListEqualÚ_field_offsetsr   r   r   r   ÚtestInitShouldSetFieldOffsets   s    þþõz'TestField.testInitShouldSetFieldOffsetsc                 C   s   t  g ¡}|  |jdg¡ d S r   )r   r   r   r   r   r   r   r   Ú)testInitShouldSetFieldOffsetsIfNoChildren"   s    
z3TestField.testInitShouldSetFieldOffsetsIfNoChildrenN)Ú__name__Ú
__module__Ú__qualname__r   r    r!   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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/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9S ):ÚTestDBc              	   C   sŒ   t  dt jtjdfdt  t jtd¡f¡}t t 	|¡¡}||fD ]B}|  
t|jt jƒ¡ |  
t|jt jƒ¡ |  
t|dd ƒd k¡ qDd S )Nr   r   r   Znon_existent)r   r   r   r   r   r   r   ÚpickleÚloadsÚdumpsÚ
assertTrueÚ
isinstancer   r   Úgetattr)r	   ÚsÚs2Úrr   r   r   ÚtestPicklable(   s    þzTestDB.testPicklablec                 C   sN   G dd„ dt jƒ}|t  ¡ ƒ}| ¡ }|  ||¡ |  ||¡ |  ||¡ d S )Nc                   @   s   e Zd ZdS )z.TestDB.testListSubclassClone.<locals>.SubclassN©r"   r#   r$   r   r   r   r   ÚSubclass4   s   r1   )r   r   r   ÚcloneÚassertIsInstanceÚassertEqualÚassertIsNot©r	   r1   r,   r2   r   r   r   ÚtestListSubclassClone3   s    zTestDB.testListSubclassClonec                 C   sN   G dd„ dt jƒ}|t  ¡ ƒ}| ¡ }|  ||¡ |  ||¡ |  ||¡ d S )Nc                   @   s   e Zd ZdS )z9TestDB.testListWithEvictedSubclassClone.<locals>.SubclassNr0   r   r   r   r   r1   >   s   r1   )r   ÚListWithEvictedr   r2   r3   r4   r5   r6   r   r   r   Ú testListWithEvictedSubclassClone=   s    z'TestDB.testListWithEvictedSubclassClonec                 C   sR   G dd„ dt jƒ}|dt  ¡ fƒ}| ¡ }|  ||¡ |  ||¡ |  ||¡ d S )Nc                   @   s   e Zd ZdS )z0TestDB.testStructSubclassClone.<locals>.SubclassNr0   r   r   r   r   r1   H   s   r1   Úa)r   r   r   r2   r3   r4   r5   r6   r   r   r   ÚtestStructSubclassCloneG   s    
ÿzTestDB.testStructSubclassClonec              
   C   sH   t  dtjfdtf¡}|  |t  dt jtjdfdt jtdf¡¡ d S )Nr   r   r   )r   r   r   r   r   ÚassertEqualsr   ©r	   r,   r   r   r   ÚtestNormalizeFieldS   s    þþzTestDB.testNormalizeFieldc              
   C   s$  t  tjttj¡}t  dt jtjdfdt jtjdfdt jtjdf¡}|  ||¡ |  |d t jtjd¡ |  |d t jtjd¡ |  |d t jtjd¡ |  |d t  dt jtjdfdt jtjdf¡¡ t	t
||ƒƒD ]8\}\}}|  ||¡ |  || |¡ |  || |¡ qæd S )	NÚfield_0r   Úfield_1Úfield_2r   r   é   )rB   r   )r   ÚTupler   r   r   Úfloat32r   r   r<   Ú	enumerateÚzip)r	   r,   r-   ÚiZv1Zv2r   r   r   Ú	testTuple]   s*    ýþþzTestDB.testTuplec              	   C   sZ   t  d¡}|  |t  dt  ¡ fdt  ¡ f¡¡ |  |d t  ¡ ¡ |  |d t  ¡ ¡ d S )NrB   r?   r@   r   r   )r   ZRawTupler<   r   r   r=   r   r   r   ÚtestRawTupleu   s    
 
 
ÿÿzTestDB.testRawTuplec                 C   s¶   t  dt jtjdfdt  t jtd¡fdt  ¡ f¡}|  |d |j¡ |  |d t  t jtd¡¡ |  |d t  ¡ ¡ |  |d t  dt  t jtd¡fdt jtjdf¡¡ d S )Nr   r   r   r   )r   r   )	r   r   r   r   r   r   r   r<   r   r=   r   r   r   ÚtestStructIndexing   s    
ýþþzTestDB.testStructIndexingc              	   C   s”   t  t jtd¡}t  dt jtjdfd|f¡}|  |d |j¡ |  |d |j	¡ |  
t¡ |d  W 5 Q R X |  
t¡ |d  W 5 Q R X d S )Nr   r   r   úfield2:lengthsúfield2:valuesúfields2:items:non_existentúfields2:non_existent)r   r   r   r   r   r   r   r<   ÚlengthsÚitemsÚassertRaisesÚKeyError©r	   r:   r,   r   r   r   ÚtestListInStructIndexing   s    þzTestDB.testListInStructIndexingc              	   C   s¦   t  t jtd¡}t  dt jtjdfd|f¡}|  |d |j¡ |  |d |j	¡ |  |d |j
¡ |  t¡ |d  W 5 Q R X |  t¡ |d  W 5 Q R X d S )	Nr   r   r   rK   rL   zfield2:_evicted_valuesrM   rN   )r   r8   r   r   r   r   r   r<   rO   rP   Z_evicted_valuesrQ   rR   rS   r   r   r   Ú#testListWithEvictedInStructIndexing   s    þz*TestDB.testListWithEvictedInStructIndexingc              	   C   s„   t  t jtjdt jtjd¡}t  dt jtjdfd|f¡}|  |d |j¡ |  |d |j	¡ |  
t¡ |d  W 5 Q R X d S )Nr   r   r   zfield2:values:keyszfield2:values:valueszfields2:keys:non_existent)r   ÚMapr   r   r   rD   r   r<   ÚkeysÚvaluesrQ   rR   rS   r   r   r   ÚtestMapInStructIndexing«   s    þþzTestDB.testMapInStructIndexingc                 C   sˆ  t  dt  tj¡fdt jtjt jdddfdt  t jtjt jddd¡f¡}|jj	 
t jdd¡ |  d |jj¡ |  d|jjj¡ |  d|jjjj¡ |  d|jj	jj¡ | ¡ }|  d |jj¡ |  d|jjj¡ |  d|jjjj¡ |  d|jj	jj¡ t  |t d	g¡t d
g¡t dg¡t dd
dg¡g¡}|  d |jj¡ |  d|jjj¡ |  d|jjjj¡ |  d|jj	jj¡ d S )Nr:   Úbr   )Úcategorical_limit)ÚmetadataÚcé   é   ç333333@rB   é   r   )r   r   r   r   rD   r   ZMetadatar   r]   rO   Zset_metadatar4   r:   r\   rZ   r[   Úvaluer2   Úfrom_blob_listÚarray©r	   r,   ZscÚsvr   r   r   ÚtestPreservesMetadata¹   sN     
þÿ 
þÿÿú
 
 
þÿzTestDB.testPreservesMetadatac              	   C   s6   |   t¡" t dt ¡ fdt ¡ f¡ W 5 Q R X d S ©Nr:   )rQ   Ú
ValueErrorr   r   r   )r	   r   r   r   ÚtestDupFieldà   s
    

þzTestDB.testDupFieldc              	   C   s6   |   t¡" t dt ¡ f¡}t ¡ |_W 5 Q R X d S rh   )rQ   Ú	TypeErrorr   r   r   r:   r=   r   r   r   ÚtestAssignToFieldæ   s    zTestDB.testAssignToFieldc                 C   sŽ   t  dt  tj¡fdt  ¡ f¡}| ¡ }|  d|j¡ |  d|j¡ t  |t 	dg¡g¡}|  d|j¡ |  d|j¡ |  
dt|jjƒ¡ d S )Nr:   rZ   r`   r   )r   r   r   r   rD   r2   ÚassertInÚfieldsrc   rd   r4   ÚlenrZ   re   r   r   r   ÚtestPreservesEmptyFieldsë   s    
þzTestDB.testPreservesEmptyFieldsc              	   C   s¨   t  dt  ¡ fdt  ¡ fdt  ¡ f¡}t  dt  ¡ f¡}|| }|  ddg| ¡ ¡ t  dt  ¡ f¡}|| }|  ddg| ¡ ¡ |  t¡ |t  ¡   W 5 Q R X d S )Nr:   rZ   r]   ©r   r   r   r4   Úfield_namesrQ   rk   ©r	   Ús1r-   r,   Zs3r   r   r   ÚtestStructSubstractionø   s"    


ý
ÿ
ÿzTestDB.testStructSubstractionc                 C   sŒ   t  dt  ¡ fdt  dt  ¡ fdt  ¡ fdt  ¡ fdt  ¡ f¡f¡}t  dt  dt  ¡ fdt  ¡ f¡f¡}|| }|  dddg| ¡ ¡ d S )	Nr:   rZ   r]   ÚdÚer
   úb:czb:f)r   r   r   r4   rr   ©r	   rt   r-   r,   r   r   r   ÚtestStructNestedSubstraction  s"    




üþ	

þÿz#TestDB.testStructNestedSubstractionc              	   C   sŒ   t  dt  ¡ f¡}t  dt  ¡ f¡}|| }|  d|j¡ |  d|j¡ |  t¡ ||  W 5 Q R X |  t¡ |t  ¡   W 5 Q R X d S )Nr:   rZ   )r   r   r   rm   rn   rQ   rk   ry   r   r   r   ÚtestStructAddition   s    
ÿ
ÿzTestDB.testStructAdditionc              	   C   s”   t  dt  ¡ fdt  dt  ¡ f¡f¡}t  dt  dt  ¡ f¡f¡}|| }|  dddg| ¡ ¡ t  dt  ¡ f¡}|  t¡ || }W 5 Q R X d S )Nr:   rZ   r]   rv   rx   zb:drq   rs   r   r   r   ÚtestStructNestedAddition/  s$    

ÿþ
ÿÿ
ÿzTestDB.testStructNestedAdditionc                 C   s¾   t  dt  ¡ fdt  dt  dt  ¡ f¡f¡f¡}|  t|jd¡ |  t|jd¡ |  t|jd¡ |  t|jd¡ |d }|  t|t jƒ¡ |d	 }|  d|j	¡ |d
 }|  t|t jƒ¡ d S )Nr:   rZ   r]   rv   Ú Úxzx:yúb:c:xrx   úb:c:d)
r   r   r   rQ   rR   Ú__getitem__r)   r*   rm   rn   )r	   Ústr:   ZbcZbcdr   r   r   ÚtestGetFieldByNestedNameD  s$    

ÿÿþzTestDB.testGetFieldByNestedNamec              
   C   sŠ  t jt d¡d}t  dt  dt jt d¡df¡f¡}t  dt jt d¡df¡}|  t¡  t  d|fd	|fd
|f¡}W 5 Q R X |  t¡  t  d|fd	|fd|f¡}W 5 Q R X t  d|fd	|fd|f¡}|  dd
dg| ¡ ¡ |  dddg| 	¡ ¡ t  d|fd|fd	|f¡}|  ddd
g| ¡ ¡ |  dddg| 	¡ ¡ t  d|fd|fd|f¡}|  dddg| ¡ ¡ |  dddg| 	¡ ¡ d S )NZblob1)Úblobr]   rv   Zblob2r~   Zblob3r:   rZ   r€   zb:c:d:eze:fze:f:xzb:c:ezb:c:e:xza:a1zb:b1za:xzb:b1:c:d)
r   r   r   ÚBlobReferencer   rQ   rk   r4   rr   Úfield_blobs)r	   Zf_aZf_bZf_xr‚   r   r   r   ÚtestAddFieldByNestedNameX  sT    ÿÿÿýýýýýzTestDB.testAddFieldByNestedNamec                 C   s–   t  dt  ¡ fdt  dt  dt  ¡ f¡f¡f¡}|  d|k¡ |  d|k¡ |  d|k¡ |  d|k¡ |  d|k¡ |  d	|k¡ |  d
|k¡ d S )Nr:   rZ   r]   rv   rx   r€   r}   r~   r   zb:c:d:x)r   r   r   r)   ZassertFalse)r	   r‚   r   r   r   ÚtestContainsˆ  s    

ÿÿþzTestDB.testContainsc                 C   s0   t  ¡ }| ¡ }t j|d}|  |t  ¡ ¡ d S )N)Z	col_names)r   r   rr   Úfrom_column_listr4   )r	   r‚   ÚcolumnsÚrecr   r   r   ÚtestFromEmptyColumnList™  s    zTestDB.testFromEmptyColumnListc              
   C   sÊ   t  dt  ¡ fdt  t  ¡ ¡fdt  t  ¡ t  ¡ ¡f¡}| ¡ }tdƒD ]|}dd„ |D ƒ}t j||d}|  | 	¡ ¡ |  
t| ¡ ƒt| ¡ ƒ¡ |  
dd„ | ¡ D ƒd	d„ | ¡ D ƒ¡ t |¡ qHd S )
Nr:   rZ   r]   é
   c                 S   s   g | ]}t  d | ¡‘qS ©zblob:)r   r…   )Ú.0r~   r   r   r   Ú
<listcomp>¨  s     z-TestDB.testFromColumnList.<locals>.<listcomp>)Z	col_blobsc                 S   s   g | ]}t |ƒ‘qS r   ©r   )r   r„   r   r   r   r   ¬  s     c                 S   s   g | ]}t d | ƒ‘qS rŽ   r‘   )r   Únamer   r   r   r   ­  s     )r   r   r   r   rV   rr   Úranger‰   r)   Z	has_blobsr4   Úsortedr†   ÚrandomÚshuffle)r	   r‚   rŠ   Ú_Z
some_blobsr‹   r   r   r   ÚtestFromColumnListŸ  s    
ýÿzTestDB.testFromColumnListc                 C   s~   t  d¡}t |t tj¡¡}t |t tj¡¡}t ||¡}| dd ¡|ksRt	‚| dd ¡|ksft	‚| dd ¡d kszt	‚d S )NZtest_netr?   r@   rA   )
r   ZNetr   Z	NewRecordr   r   rD   rC   ÚgetÚAssertionError)r	   Únetrt   r-   Útr   r   r   ÚtestStructGet°  s    
zTestDB.testStructGetc              	   C   sV   t  d¡}|  t¡ t  tjdf¡}W 5 Q R X t  tj¡}t  d ¡}||ksRt‚d S )N)N©rB   rž   )r   r   rQ   rk   r   Úvoidrš   )r	   Zs0_goodZs0_badÚs1_goodZs2_goodr   r   r   ÚtestScalarForVoidType¹  s    

zTestDB.testScalarForVoidTypec              	   C   s®   t  tj¡}|  | ¡ jd¡ t  tjdf¡}|  | ¡ jd¡ |  t¡ t  tjdf¡}W 5 Q R X t  tjdf¡}|  | ¡ jd¡ t  tjdf¡}|  | ¡ jd¡ d S )Nr   r   )r   éÿÿÿÿr   )r   )rB   ra   )	r   r   r   r   r4   Z
field_typeÚshaperQ   ri   )r	   Ús0r    Zs1_badZs1_hardr-   r   r   r   ÚtestScalarShapeÂ  s    zTestDB.testScalarShapec              	   C   s@   t  tjj¡}|  |tj¡ |  t	¡ t  d¡ W 5 Q R X d S )Néd   )
r   Zdtype_for_core_typer   ZDataTypeZFLOAT16r4   r   Zfloat16rQ   rk   )r	   r   r   r   r   ÚtestDtypeForCoreTypeÒ  s    zTestDB.testDtypeForCoreTypeN)r"   r#   r$   r/   r7   r9   r;   r>   rH   rI   rJ   rT   rU   rY   rg   rj   rl   rp   ru   rz   r{   r|   rƒ   r‡   rˆ   rŒ   r˜   r   r¡   r¥   r§   r   r   r   r   r%   '   s8   



'0		r%   )Zcaffe2.pythonr   r   Znumpyr   Zunittestr&   r•   ZTestCaser   r%   r   r   r   r   Ú<module>   s   