U
    dJ                     @   s   d dl mZmZ d dlmZ d dlmZ d dlZ	d dl
Z
d dlZd dlm  mZ d dlZdZG dd dZdd ZG d	d
 d
ejZG dd dejZedkre  dS )    )givensettingsN)ProcessZGLOOc                   @   s   e Zd Zdd Zdd ZdS )TemporaryDirectoryc                 C   s   t  | _| jS N)tempfilemkdtemptmpdir)self r   B/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/lazy_dyndep_test.py	__enter__   s    
zTemporaryDirectory.__enter__c                 C   s   t | j d S r   )shutilrmtreer	   )r
   typevalue	tracebackr   r   r   __exit__   s    zTemporaryDirectory.__exit__N)__name__
__module____qualname__r   r   r   r   r   r   r      s   r   c                 C   s   ddl m}m}m}m} ddlm} ddlm}	 |	d |
|jdg dg| d td||td d	}
| }|
|_|d
| ||d
||	jd d S )Nr   )coredata_parallel_model	workspacelazy_dyndep)ModelHelper)
caffe2_pb22@/caffe2/caffe2/distributed:file_store_handler_opsZFileStoreHandlerCreateZstore_handler)path)Z
kv_handlerZshard_idZ
num_shardsZengineZ	exit_nets	test_data)caffe2.pythonr   r   r   r   Zcaffe2.python.model_helperr   Zcaffe2.protor   RegisterOpsLibraryZRunOperatorOnceZCreateOperatordict	op_engineZ_rendezvousZFeedBlobZ_RunComparisonZDeviceOptionZCPU)Zfilestore_dirZ
process_iddata	num_procsr   r   r   r   r   r   Z
rendezvousmodelr   r   r   allcompare_process   s6    
     r'   c                   @   sD   e Zd Zeeddeddedddeddd	d
 ZdS )TestLazyDynDepAllCompare               )dnr%   N)deadlinec              	   C   s   g }t |D ]}|tjjd|d qtjjt|dtj}t	 \}g }t |D ]*}	t
t||	||fd}
||
 |
  qVt|dkr| }
|
  qW 5 Q R X d S )Nr)   )high)size)targetargsr   )rangeappendnprandomrandintZranftupleZastypeZfloat32r   r   r'   startlenpopjoin)r
   r.   r/   r%   Zdims_r   tempdirZ	processesidxprocessr   r   r   test_allcompare<   s     


z(TestLazyDynDepAllCompare.test_allcompare)r   r   r   r   stZintegersr   rC   r   r   r   r   r(   ;   s   
 
 
r(   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestLazyDynDepErrorc              
   C   sp   ddl m}m} dd l}| F}||j dd }|| | jt	dd |
  W 5 Q R X W 5 Q R X d S )Nr   r   r   c                 S   s   t dd S Ntest
ValueErrorer   r   r   handler\   s    z6TestLazyDynDepError.test_errorhandler.<locals>.handlerrH   msgr    r   r   r   NamedTemporaryFiler!   nameSetErrorHandlerassertRaisesrJ   ZRefreshRegisteredOperators)r
   r   r   r   frM   r   r   r   test_errorhandlerU   s    

z%TestLazyDynDepError.test_errorhandlerc              
   C   s   ddl m}m} dd l}| f}||j dd }|| | t	 |
  W 5 Q R X dd }|| |d |
  W 5 Q R X d S )Nr   rF   c                 S   s   t dd S rG   rI   rK   r   r   r   rM   i   s    z:TestLazyDynDepError.test_importaftererror.<locals>.handlerc                  S   s    d S r   r   rK   r   r   r   handlernoopo   s    z>TestLazyDynDepError.test_importaftererror.<locals>.handlernoopr   rP   )r
   r   r   r   rU   rM   rW   r   r   r   test_importaftererrorb   s    



z)TestLazyDynDepError.test_importaftererrorc              
   C   sv   ddl m}m} dd l}| L}||j d}dd }|| | jt	dd |
d W 5 Q R X W 5 Q R X d S )	Nr   )r   r   Fc                 S   s   t dd S rG   rI   rK   r   r   r   rM   }   s    z<TestLazyDynDepError.test_workspacecreatenet.<locals>.handlerrH   rN   Zfake)r    r   r   r   rQ   r!   rR   rS   rT   rJ   Z	CreateNet)r
   r   r   r   rU   calledrM   r   r   r   test_workspacecreatenetu   s    

z+TestLazyDynDepError.test_workspacecreatenetN)r   r   r   rV   rX   rZ   r   r   r   r   rE   T   s   rE   __main__)Z
hypothesisr   r   Zhypothesis.strategiesZ
strategiesrD   multiprocessingr   Znumpyr7   r   r   Z"caffe2.python.hypothesis_test_utilpythonZhypothesis_test_utilhuZunittestr#   r   r'   ZHypothesisTestCaser(   ZTestCaserE   r   mainr   r   r   r   <module>   s   	0