a
    ==ic%ˆ  ã                   @   sÔ  d dl Z d dl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
  mZ d dlmZ d dlZd dlZd dlmZ d dlmZ d dlmZmZmZmZmZ d dlmZmZ G dd	„ d	ejƒZ G d
d„ dejƒZ!e "ej# d¡G dd„ dejƒƒZ$e "ej%j& d¡G dd„ dejƒƒZ'G dd„ dejƒZ(G dd„ dejƒZ)G dd„ dej*ƒZ+G dd„ dejƒZ,G dd„ dej*ƒZ-G dd„ dej.j/ƒZ0e "dej1vd¡G d d!„ d!ejƒƒZ2G d"d#„ d#e2ƒZ3e4d$krÐe 5¡  dS )%é    N)Ú
namedtuple)ÚList)ÚTensor)Ú
caffe2_pb2)ÚcoreÚ	test_utilÚ	workspaceÚmodel_helperÚbrew)ÚgivenÚsettingsc                   @   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d1S )2ÚTestWorkspacec                 C   s2   t  d¡| _| jjg dg d¢dd| _t ¡  d S ©Nútest-netÚtestblob©é   é   é   é   ç      ð?©ÚshapeÚvalue)r   ÚNetÚnetÚConstantFillÚtestblob_refr   ÚResetWorkspace©Úself© r!   úm/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/workspace_test.pyÚsetUp   s
    ÿzTestWorkspace.setUpc                 C   sF   |   t ¡ d¡ |   t ¡ d¡ |   t d¡d¡ |   t ¡ d¡ d S )NTÚ.z/tmp/caffe-workspace-test)ÚassertEqualr   r   Z
RootFolderr   r!   r!   r"   ÚtestRootFolder   s    zTestWorkspace.testRootFolderc                 C   s   |   t d¡d¡ d S )Núnon-existingF)r%   r   ÚHasBlobr   r!   r!   r"   Ú'testWorkspaceHasBlobWithNonexistingName!   s    z5TestWorkspace.testWorkspaceHasBlobWithNonexistingNamec                 C   s`   |   t | j ¡ jd  ¡ ¡d¡ |   t d¡d¡ t ¡ }|   t	|ƒd¡ |   |d d¡ d S )Nr   Tr   r   )
r%   r   ÚRunOperatorOncer   ÚProtoÚopÚSerializeToStringr(   ZBlobsÚlen)r    Úblobsr!   r!   r"   ÚtestRunOperatorOnce$   s    ÿz!TestWorkspace.testRunOperatorOncec                 C   s†   t jdddgdgdddddddd
}t d¡}t d	¡}t d|¡ t d|¡ t | ¡ ddg¡}|  |t	d
g d¢ƒdddƒ¡ d S )NZConv2DÚXÚWÚYr   r   )Zstride_hZstride_wZpad_tZpad_lZpad_bZpad_rÚkernel)r   é   r5   r5   )r   r   r   r   ZCost)ZflopsZbytes_writtenZ
bytes_readi€  é   iH  )
r   ÚCreateOperatorÚnpÚzerosr   ÚFeedBlobZGetOperatorCostr-   ZassertTupleEqualr   )r    r,   r1   r2   Zop_costr!   r!   r"   ÚtestGetOperatorCost-   s.    ö

ÿþz!TestWorkspace.testGetOperatorCostc                 C   s2   |   t | j ¡  ¡ ¡d¡ |   t d¡d¡ d S )NTr   )r%   r   Ú
RunNetOncer   r+   r-   r(   r   r!   r!   r"   ÚtestRunNetOnceF   s    ÿzTestWorkspace.testRunNetOncec                 C   sv   |   dtjjjj¡ |  t | j 	¡  
¡ ¡d¡ |  t d¡d¡ |  dtjjjj¡ t ¡  |   dtjjjj¡ d S )Nr   T)ÚassertNotInr   ÚCÚ	WorkspaceÚcurrentr/   r%   r<   r   r+   r-   r(   ÚassertInr   r   r!   r!   r"   ÚtestCurrentWorkspaceWrapperL   s    ÿz)TestWorkspace.testCurrentWorkspaceWrapperc                 C   sN   t  d¡}| t  d| j¡¡ |  t | ¡  	¡ ¡d¡ |  t 
d¡d¡ d S ©Nz	test-planz	test-stepTr   )r   ÚPlanÚAddStepÚExecutionStepr   r%   r   ÚRunPlanr+   r-   r(   )r    Úplanr!   r!   r"   ÚtestRunPlanV   s    
zTestWorkspace.testRunPlanc                 C   sX   t  d¡}| t  d| j¡¡ t |¡}| ¡ s2q(|  | 	¡ d¡ |  t 
d¡d¡ d S rD   )r   rE   rF   rG   r   r   ZRunPlanInBackgroundZis_doner%   Zis_succeededr(   )r    rI   Zbackground_planr!   r!   r"   ÚtestRunPlanInBackground\   s    

z%TestWorkspace.testRunPlanInBackgroundc                 C   s6   t  d| j¡}|  t |¡d¡ |  t d¡d¡ d S )Nztest-step-as-planTr   )r   rG   r   r%   r   rH   r(   )r    Ústepr!   r!   r"   ÚtestConstructPlanFromStepse   s    z(TestWorkspace.testConstructPlanFromStepsc                 C   sT   |   t | j ¡  ¡ ¡d¡ |   t d¡d¡ |   t ¡ d¡ |   t d¡d¡ d S )NTr   F)r%   r   r<   r   r+   r-   r(   r   r   r!   r!   r"   ÚtestResetWorkspacej   s    ÿz TestWorkspace.testResetWorkspacec                 C   s  t j ¡ }| d¡ t g d¢¡¡ |jd  ¡ }d|j	d< t g d¢¡}tj
 |j	|¡ tj
 |jd  ¡ |¡ | ddgtjj¡ tdƒD ] }tdƒD ]}d|j	||f< qšqŽd|j	d	< tjddgtjd
}d|d	< tj
 |j	|¡ tj
 |jd  ¡ |¡ |  t¡$ | ddgtjj¡ W d   ƒ n1 s40    Y  tjddgddggtjd
}| |¡ |  |j	d d¡ tj
 |jd  ¡ |¡ t ddg¡}| |¡ d|d< |  |j	d d¡ t ddg¡}| |¡ | ¡ }d|j	d< | ¡ }tj
 ||¡ |  |d d¡ d S )NÚtensor)çš™™™™™ñ?ç333333ó?çÍÌÌÌÌÌô?çffffff
@r   )rS   rQ   rR   r   r   éd   )r   r   ©Údtyper   s   abcs   defs   ghis   jkl©r   r   rP   gffffff$@gÍÌÌÌÌÌ@rQ   )r   r?   r@   Úcreate_blobÚfeedr8   Úarrayr/   rO   ÚdataÚtestingÚassert_array_equalÚfetchÚinitr   ZDataTypeZINT32Úranger9   Úint32ÚassertRaisesÚRuntimeErrorÚSTRINGÚobjectÚassertEquals)r    ÚwsrO   ÚvalÚxÚyÚval2Úval3r!   r!   r"   ÚtestTensorAccessr   sB    


4



zTestWorkspace.testTensorAccessc                 C   sŒ   |   t | j ¡  ¡ ¡d¡ t d¡}|   |jd¡ tj	 
|d¡ d|d d …< |   t d|¡d¡ t d¡}|   |jd¡ tj	 
|d¡ d S ©NTr   r   r   ç       @©r%   r   r<   r   r+   r-   Ú	FetchBlobr   r8   r\   r]   r:   ©r    ÚfetchedÚfetched_againr!   r!   r"   ÚtestFetchFeedBlob    s    ÿ

zTestWorkspace.testFetchFeedBlobc                 C   s   |   t | j ¡  ¡ ¡d¡ t | j¡}|   |jd¡ t	j
 |d¡ d|d d …< |   t | j|¡d¡ t d¡}|   |jd¡ t	j
 |d¡ d S )NTr   r   ro   r   )r%   r   r<   r   r+   r-   rq   r   r   r8   r\   r]   r:   rr   r!   r!   r"   Ú!testFetchFeedBlobViaBlobReference®   s    ÿ
z/TestWorkspace.testFetchFeedBlobViaBlobReferencec              
   C   sÈ   t jt jt jt jt jt jt jt jt j	t j
f
D ]–}zt  |¡jd }W n tyZ   d}Y n0 t j ddd¡d |  |¡}|  t d|¡d¡ t d¡}|  |jd¡ |  |j|¡ t j ||¡ q,d S )	Nr   iè  r   r   g      à?Útestblob_typesT©r   r   r   )r8   Úfloat16Úfloat32Úfloat64ÚboolÚint8Úint16ra   Úint64Úuint8Úuint16ZiinfoÚmaxÚ
ValueErrorÚrandomÚrandÚastyper%   r   r:   rq   r   rV   r\   r]   )r    rV   Úrngr[   Úfetched_backr!   r!   r"   ÚtestFetchFeedBlobTypes¼   s*    ö

z$TestWorkspace.testFetchFeedBlobTypesc                 C   sp   t  d¡ t j¡}d|jddd…< |  t d|¡d¡ t d¡}|  |j	d¡ |  |j
t j¡ t j ||¡ dS )z@Special case for bool to ensure coverage of both true and false.rx   TNr   rw   )r8   r9   r†   r|   Zflatr%   r   r:   rq   r   rV   r\   r]   ©r    r[   rˆ   r!   r!   r"   ÚtestFetchFeedBlobBoolÔ   s    
z#TestWorkspace.testFetchFeedBlobBoolc              
   C   s  t jt jt jt jt jt jt jt jt j	t j
f
D ]J}t j dd¡ |¡}|  t d|¡d¡ |  t d¡dt  |¡j ¡ q,t  ddg¡}t  dd	g¡}d
\}}|D ]}|t|ƒ7 }q |D ]}|t|ƒ7 }q¶|  t d|¡d¡ |  t d|¡d¡ |  t d¡t d¡ || ¡ d S )Nr   r   Ztestblob_sizeBytesTé   s   Hello World!s   abcds   element1s   element2rW   Ztestblob_str1Ztestblob_str2)r8   ry   rz   r{   r|   r}   r~   ra   r   r€   r   r„   Úrandnr†   Ú
assertTruer   r:   r%   ZGetBlobSizeBytesrV   ÚitemsizerZ   r.   )r    rV   r[   Zstrs1Ústrs2Z	strs1_lenZ	strs2_lenÚstrr!   r!   r"   ÚtestGetBlobSizeBytesÞ   s@    öþÿýz"TestWorkspace.testGetBlobSizeBytesc                 C   sP   t jdt jd}|  t d|¡d¡ t d¡}|  |jd¡ |  |jt j¡ d S )N)r   r   r   )r   rV   Ztestblob_emptyT)	r8   Úemptyrz   r%   r   r:   rq   r   rV   rŠ   r!   r!   r"   ÚtestFetchFeedBlobZeroDim  s
    
z&TestWorkspace.testFetchFeedBlobZeroDimc                 C   s~   t  d ddg ¡d ddg ¡ddg¡}t d|¡ t d¡}|  |j|j¡ td	|jd	 ƒD ]}|  || || ¡ q`d S )
Nó    é
   s   long stringé€   s   very long strings   small   stringó)   Hello, world! I have special   symbols !Zmy_str_tensorr   )	r8   rZ   Újoinr   r:   rq   r%   r   r`   ©r    Ústrsr   Úir!   r!   r"   ÚtestFetchFeedLongStringTensor	  s    üÿ
z+TestWorkspace.testFetchFeedLongStringTensorc                 C   sb   t  g d¢¡}t d|¡ t d¡}|  |j|j¡ td|jd ƒD ]}|  || || ¡ qDd S )N)s   elem1s   elem 2s	   element 3Zmy_str_tensor_2r   )r8   rZ   r   r:   rq   r%   r   r`   rš   r!   r!   r"   ÚtestFetchFeedShortStringTensor  s    
z,TestWorkspace.testFetchFeedShortStringTensorc                 C   s*   d}t  d|¡ t  d¡}|  ||¡ d S )Nr˜   Zmy_plain_string)r   r:   rq   r%   )r    ÚsÚs2r!   r!   r"   ÚtestFetchFeedPlainString"  s    
z&TestWorkspace.testFetchFeedPlainStringc                 C   sN   d}d}t  d|¡ t  d|¡ t  ddg¡\}}|  ||¡ |  ||¡ d S )Ns   test1s   test2Ús1r    )r   r:   Z
FetchBlobsrf   )r    r¢   r    Zfetch1Zfetch2r!   r!   r"   ÚtestFetchBlobs)  s    zTestWorkspace.testFetchBlobsc                 C   sÌ   |   t | j ¡  ¡ ¡d¡ tjd }|   |jd¡ tj	 
|d¡ d|d d …< |tjd< tjd }|   |jd¡ tj	 
|d¡ |  dtjv ¡ |  dtjv ¡ |   ttjƒd¡ tjD ]}|   |d¡ q¶d S )NTr   r   r   ro   Znon_existantr   )r%   r   r<   r   r+   r-   r/   r   r8   r\   r]   rŽ   ÚassertFalser.   )r    rs   rt   Úkeyr!   r!   r"   ÚtestFetchFeedViaBlobDict2  s     ÿ



z&TestWorkspace.testFetchFeedViaBlobDictc              
   C   s  t  tjdg ddddd¡ t  d¡}| d¡ d |d	< |d< tj | 	¡ t 
g d
¢¡¡ tj t  d¡t 
g d
¢¡¡ tjdtjd}t  d|¡ t  tjddgddgdd¡ d|d< tj t  d¡t 
ddgddgg¡¡ tj |t 
ddgddgg¡¡ d S )Nr   Úfoo©r   r   r–   )r   r   rV   é   é	  r   ©r   r   rª   r   rª   rU   ÚbarÚReshapeÚ_©r   r   )r   é{   ©r   r   r   )r   r*   r   r7   Ú
FetchTorchÚresize_r8   r\   r]   ÚnumpyrZ   rq   ÚtorchÚonesr   r:   )r    ÚtÚzr!   r!   r"   ÚtestTorchInteropF  s,    ÿÿ

ÿÿÿzTestWorkspace.testTorchInteropN)Ú__name__Ú
__module__Ú__qualname__r#   r&   r)   r0   r;   r=   rC   rJ   rK   rM   rN   rm   ru   rv   r‰   r‹   r’   r”   r   rž   r¡   r£   r¦   r¹   r!   r!   r!   r"   r      s0   	
	.
$		r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestMultiWorkspacesc                 C   s   t  d¡ t  ¡  d S )NÚdefault)r   ÚSwitchWorkspacer   r   r!   r!   r"   r#   a  s    
zTestMultiWorkspaces.setUpc                 C   sò   t  d¡| _| jjg dg d¢dd |  t | j ¡  ¡ ¡d¡ |  t 	d¡d¡ |  t 
dd¡d ¡ |  t 	d¡d¡ |  t 
d	¡d ¡ |  t 	d¡d¡ zt 
d
¡ |  dd¡ W n tyÈ   Y n0 t ¡ }|  d	|v ¡ |  d|v ¡ d S )Nr   r   r   r   r   TÚtestFr¾   r'   )r   r   r   r   r%   r   r<   r+   r-   r(   r¿   rc   Z
WorkspacesrŽ   )r    Z
workspacesr!   r!   r"   ÚtestCreateWorkspacee  s$    ÿ
z'TestMultiWorkspaces.testCreateWorkspaceN)rº   r»   r¼   r#   rÁ   r!   r!   r!   r"   r½   `  s   r½   zNo gpu support.c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Ze ej	 d¡dd	„ ƒZ
d
S )ÚTestWorkspaceGPUc                 C   s:   t  ¡  t d¡| _| jjg dg d¢dd | j ¡  d S r   )r   r   r   r   r   r   ZRunAllOnGPUr   r!   r!   r"   r#   €  s    zTestWorkspaceGPU.setUpc                 C   sŒ   |   t | j ¡  ¡ ¡d¡ t d¡}|   |jd¡ tj	 
|d¡ d|d d …< |   t d|¡d¡ t d¡}|   |jd¡ tj	 
|d¡ d S rn   rp   rr   r!   r!   r"   ÚtestFetchBlobGPU†  s    ÿ

z!TestWorkspaceGPU.testFetchBlobGPUc                 C   sZ   t  ¡ }|  t|ƒtj¡ |  |jd¡ |  |jd |jd ¡ |  |jd t  ¡ ¡ d S )Nr   r   r   )	r   ZGetGpuPeerAccessPatternr%   Útyper8   ZndarrayÚndimr   ZNumGpuDevices)r    Úpatternr!   r!   r"   ÚtestGetGpuPeerAccessPattern”  s
    z,TestWorkspaceGPU.testGetGpuPeerAccessPatternz'Tensor interop doesn't yet work on ROCmc                 C   sj  t j ¡ }t tjdg ddddt tj¡d¡ t 	d¡}| 
d¡ |  |j¡ d |d	< |d< tj | ¡  ¡ t g d
¢¡¡ tj t d¡t g d
¢¡¡ t jdt jdd}t d|¡ t tjddgddgdt tj¡d¡ d|d< tj t d¡t ddgddgg¡¡ tj | ¡ t ddgddgg¡¡ |  t j ¡ |¡ ~~t ¡  |  t j ¡ |¡ d S )Nr   r§   r¨   r   r–   )r   r   rV   Údevice_optionr©   rª   r   r«   Úcuda)rV   Zdevicer¬   r­   r®   r¯   )r   rÈ   r°   r±   r   )rµ   rÉ   Zmemory_allocatedr   r*   r   r7   ÚDeviceOptionZGpuDeviceTyper²   r³   rŽ   Zis_cudar8   r\   r]   Úcpur´   rZ   rq   r¶   r   r:   ZassertGreaterr   r%   )r    Zinitial_memr·   r¸   r!   r!   r"   r¹   ›  sR    

ùÿ

 ÿ
ûÿ	ÿ$z!TestWorkspaceGPU.testTorchInteropN)rº   r»   r¼   r#   rÃ   rÇ   ÚunittestÚskipIfr   Zhas_cuda_supportr¹   r!   r!   r!   r"   rÂ   ~  s   ÿrÂ   zNo MKLDNN support.c                   @   s   e Zd Zdd„ ZdS )ÚTestWorkspaceIDEEPc                 C   sH   t j dd¡ t j¡}t d|t t	j
¡¡ t d¡}t j ||¡ d S )Nr   r   Ztestblob_ideep)r8   r„   r   r†   rz   r   r:   r   rÊ   r   ZIDEEPrq   r\   r]   )r    Zarrrs   r!   r!   r"   ÚtestFeedFetchBlobIDEEPÑ  s    
z)TestWorkspaceIDEEP.testFeedFetchBlobIDEEPN)rº   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S )ÚTestImmedibatec                 C   s4   t jdd |  t  ¡ ¡ t  ¡  |  t  ¡ ¡ d S )NT©Zi_know)r   ÚStartImmediaterŽ   ZIsImmediateÚStopImmediater¤   r   r!   r!   r"   ÚtestImmediateEnterExitÙ  s    z%TestImmedibate.testImmediateEnterExitc                 C   sü   t jdd t d¡}|jg dg d¢dd |  t  ¡ dg¡ t  d¡}|  t	¡ t  
d¡ W d   ƒ n1 sr0    Y  tj |d¡ d|d d …< |  t  d|¡¡ tj t  d¡d¡ t  ¡  |  t	¡ t  d¡}W d   ƒ n1 sî0    Y  d S )	NTrÑ   r   r   r   r   r   ro   )r   rÒ   r   r   r   r%   ZImmediateBlobsZFetchImmediaterb   rc   rq   r8   r\   r]   rŽ   ZFeedImmediaterÓ   )r    r   Úcontentr!   r!   r"   ÚtestImmediateRunsCorrectlyß  s    

(z)TestImmedibate.testImmediateRunsCorrectlyc                 C   sj   t jdd |  tt jƒdk¡ t j}|  tj |¡¡ t  ¡  |  tt jƒdk¡ |  	tj 
|¡¡ d S )NTrÑ   r   )r   rÒ   rŽ   r.   Z_immediate_root_folderÚosÚpathÚisdirrÓ   r¤   Úexists)r    Zroot_folderr!   r!   r"   ÚtestImmediateRootFolderñ  s    z&TestImmedibate.testImmediateRootFolderN)rº   r»   r¼   rÔ   rÖ   rÛ   r!   r!   r!   r"   rÐ   Ø  s   rÐ   c                   @   s   e Zd Zdd„ ZdS )ÚTestCppEnforceAsExceptionc                 C   sJ   t  ddgdg¡}|  t¡ t |¡ W d   ƒ n1 s<0    Y  d S )NÚRelur1   r3   )r   r7   rb   rc   r   r*   )r    r,   r!   r!   r"   ÚtestEnforce   s    z%TestCppEnforceAsException.testEnforceN)rº   r»   r¼   rÞ   r!   r!   r!   r"   rÜ   ÿ  s   rÜ   c                   @   sþ   e Zd Zdd„ Zee ¡ ejdddddd„ ƒZee ¡ e ¡ ejdddd	d
d„ ƒZ	ee ¡ e ¡ e ¡ ejdddddd„ ƒZ
ee ¡ e ¡ ejdddd	dd„ ƒZee ¡ e ¡ e ej¡ddd„ ƒZee ¡ e ¡ ddd„ ƒZdd„ ZdS )ÚTestCWorkspacec                 C   s  t j ¡ }|  |ji ¡ |  |ji ¡ t d¡}|jg dg d¢dd | 	|¡ |  
t¡ | 	|¡ W d   ƒ n1 sz0    Y  | 	|d¡ |j	|dd |  d|j¡ |  t|jƒd¡ | ¡ j}|  d|¡ |j|  ¡ }|jd }tj tjdtjd	| ¡ ¡ d S )
Nr   r   r   r   r   T)Ú	overwriter   rU   )r   r?   r@   r%   Únetsr/   r   r   r   Ú
create_netrb   rc   rB   r.   r+   ÚnameÚrunr8   r\   r]   r¶   rz   r^   )r    rg   r   Únet_nameÚblobr!   r!   r"   Útest_net_execution  s&    


(

ÿz!TestCWorkspace.test_net_executionéÿÿÿÿr   ©Ú	min_valueÚ	max_value)rã   r   c                 C   s^   t j ¡ }tjdg |gdg|d}| |¡ |  ||j¡ tj	j
|g|j|  ¡ ddd d S )Nr   r   r   ç-Cëâ6?©ZatolZrtol)r   r?   r@   r   r7   rä   rB   r/   r8   r\   Úassert_allcloser^   )r    rã   r   rg   r,   r!   r!   r"   Útest_operator_run  s    

ÿz TestCWorkspace.test_operator_run)Ú	blob_namerå   r   c                 C   st   t j ¡ }t |¡}|jg |gdg|d | |¡ |  ||j¡ |  	||j
¡ tjj|g|j|  ¡ ddd d S ©Nr   r   rì   rí   )r   r?   r@   r   r   r   rä   rB   r/   r>   rá   r8   r\   rî   r^   ©r    rð   rå   r   rg   r   r!   r!   r"   Útest_net_run)  s    


ÿzTestCWorkspace.test_net_run)rð   rå   Ú	plan_namer   c                 C   sš   t j ¡ }t |¡}t |¡}|jg |gdg|d | tjd|gdd¡ | 	|¡ |  
||j¡ |  
| ¡ |j¡ tjj|g|j|  ¡ ddd d S )Nr   r   rL   )rá   Znum_iterrì   rí   )r   r?   r@   r   rE   r   r   rF   rG   rä   rB   r/   ÚNamerá   r8   r\   rî   r^   )r    rð   rô   rå   r   rg   rI   r   r!   r!   r"   Útest_plan_run9  s    



ÿzTestCWorkspace.test_plan_runc                 C   s|   t j ¡ }t |¡}|jg |gdg|d | |¡ ¡  |  ||j	¡ |  | 
¡ |j¡ tjj|g|j	|  ¡ ddd d S rñ   )r   r?   r@   r   r   r   râ   rä   rB   r/   rõ   rá   r8   r\   rî   r^   rò   r!   r!   r"   Útest_net_createN  s    

ÿzTestCWorkspace.test_net_create)rã   r   rÈ   c                 C   s„   t j ¡ }| |¡j||d |  ||j¡ |j| }tj 	||j|  
¡ ¡ | d |¡¡}| | |¡¡ tj 	|| 
¡ ¡ d S )N)rÈ   ú{}_serde)r   r?   r@   rX   rY   rB   r/   r8   r\   Zassert_equalr^   ÚformatÚdeserializeÚ	serialize)r    rã   r   rÈ   rg   ræ   Ú
serde_blobr!   r!   r"   Útest_array_serde^  s    

zTestCWorkspace.test_array_serdec                 C   sˆ   |  dd¡}tj ¡ }| |¡ |¡ |  ||j¡ |j| }|  ||j|  	¡ ¡ | d 
|¡¡}| | |¡¡ |  || 	¡ ¡ d S )NÚasciiÚignorerø   )Úencoder   r?   r@   rX   rY   rB   r/   r%   r^   rù   rú   rû   )r    rã   r   rg   ræ   rü   r!   r!   r"   Útest_string_serdem  s    

z TestCWorkspace.test_string_serdec                 C   sB   t j ¡ }|  t¡ | d¡ W d   ƒ n1 s40    Y  d S )Nz...)r   r?   r@   rb   Ú	TypeErrorrâ   )r    rg   r!   r!   r"   Útest_exceptiony  s    
zTestCWorkspace.test_exceptionN)rº   r»   r¼   rç   r   ÚstÚtextÚfloatsrï   ró   rö   r÷   ÚhturO   Zsampled_fromZdevice_optionsrý   r  r  r!   r!   r!   r"   rß     s>   
	ý
ü
ý

ý


rß   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestPredictorc                 C   sF   t  ¡ }tj|dddddtddfdtddfd	d
}|j |¡ |S )Nr[   rj   r   r   r   r   ©r   g        r   )Údim_inÚdim_outZweight_initZ	bias_initZaxis)r	   ÚModelHelperr
   ÚfcÚdictr   ZAddExternalOutput)r    Úmrj   r!   r!   r"   Ú_create_model  s    ø
zTestPredictor._create_modelc                 C   s   t  ¡  |  ¡ }t  dtjdgdd¡ t  t  |j 	¡ ¡t  |j
 	¡ ¡¡| _tjg d¢dd}| j |g¡}tj tjddggdd|¡ d S )Nr[   r   rz   rU   )r   r   r6   r6   i  )r   r   r  r:   r8   r9   Z	PredictorZStringifyProtoZparam_init_netr+   r   Z	predictorrZ   rä   r\   Zassert_array_almost_equal)r    r  ÚinputsÚoutputsr!   r!   r"   Útest_predictor_memory_model¢  s    þÿz)TestPredictor.test_predictor_memory_modelN)rº   r»   r¼   r  r  r!   r!   r!   r"   r  €  s   !r  c                   @   s¤   e Zd Zeejdddejdddejdddddd„ ƒZeejdddejdddejddddeddd	d
„ ƒƒZeej	ddddedddd„ ƒƒZ
dS )ÚTestTransformr   r–   ré   )Ú	input_dimÚ
output_dimÚ
batch_sizec           	   
   C   sœ   t  ¡ }tj|dd||d}tj||d||d}tj||d||dddd	}| g |¡ g d
¡ dgdg¡ g d¡ t	 
d|j ¡ ¡}|  |jd jd¡ d S )Nr[   Úfc1©r
  r  Úfc2ÚconvTÚCUDNNr   )r
  r  Ú	use_cudnnÚenginer4   ÚpredÚlabelZxentÚlossÚConvToNNPackr   ZNNPACK)r	   r  r
   r  r  rÝ   ÚSoftmaxZLabelCrossEntropyÚAveragedLossr   ÚApplyTransformr   r+   r%   r,   r  )	r    r  r  r  r  r  r  r  Ztransformed_net_protor!   r!   r"   Útest_simple_transform³  s(    øÿþz#TestTransform.test_simple_transformi'  )Údeadlinec                 C   s\   t  ¡ }tj|dd||d |  t¡" t d|j 	¡ ¡ W d   ƒ n1 sN0    Y  d S )Nr[   r  r  Zdefinitely_not_a_real_transform)
r	   r  r
   r  rb   rc   r   r%  r   r+   )r    r  r  r  r  r!   r!   r"   Útest_registry_invalidÏ  s    z#TestTransform.test_registry_invalidrè   r	  c              
   C   s,  t  d¡}|jg dgg d¢|d |jg dgg d¢|d |jg dgdg|d |  t | ¡  ¡ ¡d	¡ t 	¡ }t
j|dd
dddd	dd}| g |¡ g d¡ g d¡ |  t |j ¡  ¡ ¡d	¡ t d|j ¡ | ¡ ¡}|  t | ¡ ¡d	¡ tjd|j ¡ | ¡ dddd}|  t | ¡ ¡d	¡ d S )NÚinit_netr[   )r©   r©   r©   r©   r   Zconv_w)r©   r©   r   r   Zconv_br©   Tr  r   r  )r
  r  r4   r  r  r  r!  r"  r–   rT   ro   )Zwarmup_runsZ	main_runsZimprovement_threshold)r   r   r   r%   r   r<   r+   r-   r	   r  r
   r  rÝ   r#  r$  r   ZApplyTransformIfFaster)r    r   r)  r  r  Úprotor!   r!   r"   Útest_apply_transform_if_fasterÛ  sB    
ÿøÿúz,TestTransform.test_apply_transform_if_fasterN)rº   r»   r¼   r   r  Zintegersr&  r   r(  r  r+  r!   r!   r!   r"   r  ²  s    ý
ýr  c                       s|   e Zd Z‡ fdd„Zejjdd„ ƒZejjdejeje	ejdœdd„ƒZ
ejjee ed	œd
d„ƒZejjdd„ ƒZ‡  ZS )ÚMyModulec                    s,   t t| ƒ ¡  tj t g d¢g¡¡| _d S )N)r   r   r   r   g      @)Úsuperr,  Ú__init__rµ   ÚnnÚ	ParameterrO   Úmultr   ©Ú	__class__r!   r"   r.    s    zMyModule.__init__c                 C   s   | j  |¡S ©N)r1  Úmm©r    ri   r!   r!   r"   Úforward  s    zMyModule.forwardr   )ri   rj   r¸   Úreturnc                 C   s   || | S r4  r!   )r    ri   rj   r¸   r!   r!   r"   Úmulti_input  s    zMyModule.multi_input)Útensor_listr8  c                 C   s   |d |d  |d  S )Nr   r   r   r!   )r    r:  r!   r!   r"   Úmulti_input_tensor_list  s    z MyModule.multi_input_tensor_listc                 C   s   ||d fS )Nr   r!   r6  r!   r!   r"   Úmulti_output  s    zMyModule.multi_output)r   )rº   r»   r¼   r.  rµ   ÚjitZscript_methodr7  r   Úintr9  r   r;  r<  Ú__classcell__r!   r!   r2  r"   r,    s   
r,  ÚScriptModulez2Script module integration in Caffe2 is not enabledc                   @   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 )ÚTestScriptModulec                 C   s   t  dtƒ ¡ d S )Nr  )r   r:   r,  r   r!   r!   r"   Ú_createFeedModule"  s    z"TestScriptModule._createFeedModulec                 C   s.   t ƒ }t d|¡ t d¡}|  |d u¡ d S )NÚmodule)r,  r   r:   rq   rŽ   )r    r  Úm2r!   r!   r"   ÚtestCreation%  s    
zTestScriptModule.testCreationc                 C   s€   |   ¡  tj dd¡ tj¡}t g d¢g¡ tj¡}t d|¡ t 	t
 dddgdg¡¡ tjjt d¡t ||¡dd d S )Nr©   ©r   r   r   r   r©   Úwr@  r  rj   ©Údecimal)rB  r8   r„   r…   r†   rz   rZ   r   r:   r*   r   r7   r\   Úassert_almost_equalrq   Úmatmul)r    rh   Úparamr!   r!   r"   ÚtestForward+  s    ÿÿzTestScriptModule.testForwardc                 C   sâ   |   ¡  tj dd¡ tj¡}t d|¡ tj dd¡ tj¡}t d|¡ t t	j
dg d¢dgdd¡ t t	j
dd	dgd
dgdd¡ tjjt d¡|| d dd tjjt d
¡|dd tjjt d¡|d dd d S )Nr©   rG  Úw2r@  )r  rG  rN  rj   r9  )Úmethodr  Úy1Úy2r<  r   rH  r   ©rB  r8   r„   r…   r†   rz   r   r:   r*   r   r7   r\   rJ  rq   )r    rh   rk   r!   r!   r"   ÚtestMultiInputOutput7  s(    ÿÿÿÿÿz%TestScriptModule.testMultiInputOutputc              	   C   s²   |   ¡  tj dd¡ tj¡}t d|¡ tj dd¡ tj¡}t d|¡ tj dd¡ tj¡}t d|¡ t t	j
dg d¢dgdd	d
¡ tjjt d¡|| | dd d S )Nr©   rG  rN  Úw3r@  )r  rG  rN  rT  rj   r;  T)rO  Zpass_inputs_as_tensor_listrH  rR  )r    rh   rk   rl   r!   r!   r"   ÚtestMultiTensorListInputM  s&    ûÿ	ÿz)TestScriptModule.testMultiTensorListInputc                 C   s–  t  ¡ }z>|  ¡  t tjddgg dtj 	|d¡dd¡ t 
¡  |  t d¡¡ t tjdg g dtj 	|d¡ddd¡ |  t d¡¡ tj d	d	¡ tj¡}t g d
¢g¡ tj¡}t d|¡ t t dddgdg¡¡ tjjt d¡t ||¡d	d W zt |¡ W n6 tyF } z|jtjkr2‚ W Y d }~n
d }~0 0 nHzt |¡ W n6 tyŽ } z|jtjkrz‚ W Y d }~n
d }~0 0 0 d S )NZSaver  r   ÚdbZminidb)Úabsolute_pathrV  Údb_typeÚLoad)rW  rV  rX  Zload_allr©   rF  rG  r@  rj   rH  )ÚtempfileÚmkdtemprB  r   r*   r   r7   r×   rØ   r™   r   r¤   r(   rŽ   r8   r„   r…   r†   rz   rZ   r:   r\   rJ  rq   rK  ÚshutilÚrmtreeÚOSErrorÚerrnoÚENOENT)r    Ztmpdirrh   rL  Úer!   r!   r"   ÚtestSerializationc  s\    úÿ
ùÿÿÿüz"TestScriptModule.testSerializationN)	rº   r»   r¼   rB  rE  rM  rS  rU  rb  r!   r!   r!   r"   rA    s   rA  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestScriptModuleFromStringc              	   C   s&   t  tjdg dg|  tƒ ¡d¡ d S )NZScriptModuleLoadr  )Zserialized_binary)r   r*   r   r7   Ú_get_modules_bytesr,  r   r!   r!   r"   rB  ˜  s    
üÿz,TestScriptModuleFromString._createFeedModulec                 C   s&   dd l }| ¡ }tj ||¡ | ¡ S )Nr   )ÚioÚBytesIOrµ   r=  ÚsaveÚgetvalue)r    Z
the_modulere  Úbufferr!   r!   r"   rd  ¢  s    z-TestScriptModuleFromString._get_modules_bytesN)rº   r»   r¼   rB  rd  r!   r!   r!   r"   rc  —  s   
rc  Ú__main__)6r_  r×   r\  rZ  rÌ   Úcollectionsr   Útypingr   Z"caffe2.python.hypothesis_test_utilÚpythonZhypothesis_test_utilr  Zhypothesis.strategiesÚ
strategiesr  r´   r8   rµ   r   Zcaffe2.protor   Zcaffe2.pythonr   r   r   r	   r
   Z
hypothesisr   r   ZTestCaser   r½   rÍ   Zhas_gpu_supportrÂ   r?   Z
use_mkldnnrÎ   rÐ   rÜ   ZHypothesisTestCaserß   r  r  r=  r@  r,  Z_REGISTERED_OPERATORSrA  rc  rº   Úmainr!   r!   r!   r"   Ú<module>   sH     OP'z2Uþv
