U
    ‰dk ã                   @   sÄ   d dl mZ d dlZd dlmZ d dlm	Z	m
Z
 d dlm  mZ d dlmZmZmZmZ d dlmZmZmZmZmZmZmZmZ d dlmZ d dlm Z m!Z! d dl"Z"e" #e$¡Z%G dd„ de ƒZ&dS )	é    N)ÚgivenÚsettings)Úlayer_model_instantiatorÚcoreÚschemaÚ	workspace)ÚAccessedFeaturesÚalmost_equal_schemasÚget_keyÚIdListÚIdScoreListÚInstantiationContextÚis_request_only_scalarÚset_request_only)ÚTags)ÚLayersTestCaseÚOpSpecc                	   @   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ee ¡ ejddde ¡ ejdddddd „ ƒZee ¡ ejdddd!d"d#„ ƒZd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(ee)j*dLdMgdNdOdPdQ„ ƒZ+ee)j*dLdMdRgdNe ¡ dSdTdU„ ƒZ,ee)j*dMdLgdNejdVdddWdXdY„ ƒZ-ee)j*dMdLgdNejdZdZddWe.d[d\d]d^„ ƒƒZ/d_d`„ Z0dadb„ Z1dcdd„ Z2dedf„ Z3dgdh„ Z4didj„ Z5dkdl„ Z6dmdn„ Z7dodp„ Z8dqdr„ Z9dsdt„ Z:dudv„ Z;dwdx„ Z<dydz„ Z=d{d|„ Z>d}d~„ Z?ee)j*dMdMgdNe ¡ dd€d„ ƒZ@ee dVdZ¡e dMd¡d‚dƒd„„ ƒZAeejdLddejdMddejdMddejBd…dMdd†d‡dˆ„ ƒZCeejdLddejdMddejdMddejd‰dZdejBd…dMde ¡ dŠd‹dŒ„ ƒZDeejdLddejdMddejdMddejd‰dZdejBd…dMde ¡ e ¡ ddŽd„ ƒZEdd‘„ ZFef ejddde ¡ e ¡ e ¡ e ¡ d’œe)jG—Že.d[d\d“d”„ ƒƒZHef d•ejdddie)jG—Žd–d—„ ƒZIef e)jGŽe.d˜d\d™dš„ ƒƒZJd›dœ„ ZKef ejdLddejddddœe)jG—ŽdždŸ„ ƒZLef d ejdddie)jG—Žd¡d¢„ ƒZMeejdLddejdLddejdMdde dVd¡d£d¤d¥„ ƒZNd¦d§„ ZOd¨d©„ ZPdªd«„ ZQd¬d­„ ZRd®S )¯Ú
TestLayersc                 C   sx  t  | jjt¡}t  ¡ | j_| ¡ d }| ¡ d }t 	dgd ¡ 
tj¡}t 	ddddddd	d
ddg
¡ 
tj¡}t ||¡ t ||¡ | jj|dddddd}|  t  t  tj¡¡|¡ |  ¡ \}}|  ¡ }	|  ¡ }
t |¡ t |¡ t | ¡ ¡}t | ¡ ¡}|  ||¡ |  ||¡ t |	¡ t |
¡ t d¡}t d¡}|  |t 	dgd ¡ 
tj¡¡ |  ||¡ d S ©Nr   é   é
   é   é   é   é   é   é   é   é	   ç        ç      à?ç      ð?éÿÿÿÿ)Úoutput_names_or_numZvalues_auto_0Zlengths_auto_0)r   Ú	NewRecordÚmodelÚnetr   ÚStructÚoutput_schemaÚfield_blobsÚnpÚarrayÚastypeÚint32Úint64r   ÚFeedBlobZSparseDropoutWithReplacementÚassertEqualÚListÚScalarÚget_training_netsÚget_eval_netÚget_predict_netÚ
RunNetOnceÚ	FetchBlobÚitemsÚlengthsÚassertBlobsEqual©ÚselfÚinput_recordÚlengths_blobÚvalues_blobr9   ÚvaluesÚoutÚtrain_init_netÚ	train_netÚeval_netÚpredict_netZ
out_valuesZout_lengthsZpredict_valuesZpredict_lengths© rF   ú=/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/layers_test.pyÚ testSparseDropoutWithReplacement'   s@    &     ÿ





 z+TestLayers.testSparseDropoutWithReplacementc                 C   s¶  |   t dt tjdf¡fdt tjdf¡fdt tjdf¡f¡¡}| j |¡}| j 	|¡ d| jj
kslt‚|  t tjtƒ f¡| jj
j¡ |  || jj
j¡ | j 	|d¡ d| jj
ks¼t‚|  t tjtƒ f¡| jj
j¡ |  || jj
j¡ | j 	tjtjt d¡d	d¡ d
| jj
ks t‚|  t tjtƒ f¡| jj
j¡ t d¡| jj
 ¡ ks\t‚| j 	t dtjtjt d¡d	f¡d¡ d| jj
ks˜t‚|  t dt tjtƒ f¡f¡| jj
j¡ t d¡| jj
 ¡ ksÞt‚tjtjt d¡d	}tjtjt d¡d	}tjd||gžŽ }| j 	|d¡ d| jj
ks<t‚|  t dt tjtƒ f¡fdt tjtƒ f¡f¡| jj
j¡ t d¡| jj
 ¡ ks–t‚t d¡| jj
 ¡ ks²t‚d S )NÚlabel©r   Úlogit©r   ÚweightÚunnamedÚaddLossZloss_blob_1)ÚdtypeZblobÚaddLoss_auto_0Z
structNameZloss_blob_2ÚaddLoss_auto_1Zloss_blob_in_tuple_0Zloss_blob_in_tuple_1Úloss_in_tupleÚaddLoss_auto_2Úloss_in_tuple_0Úloss_in_tuple_1)rS   )Ú
new_recordr   r'   r2   r*   Úfloat64Úfloat32r%   ÚBatchLRLossZadd_lossÚlossÚAssertionErrorr0   ÚtuplerN   rO   r   ÚBlobReferencerQ   r)   rR   Ú
NamedTuplerT   )r<   Zinput_record_LRZloss_LRrU   rV   Z
loss_tuplerF   rF   rG   ÚtestAddLossI   s     ýÿ ÿ ÿ ÿý ÿ þÿÿø
þ ÿ ÿ ÿÿþü
ÿ

ÿzTestLayers.testAddLossc                 C   s¸   | j  dt ¡ ¡ | j  dt ¡ ¡ | j  dt ¡ ¡ |  | j jt dt dt ¡ fdt ¡ f¡fdt ¡ f¡¡ | j  ddh¡ |  | j jt dt dt ¡ f¡fdt ¡ f¡¡ d S )Nza:bza:cÚdÚaÚbÚc)r%   Zadd_metric_fieldr   r2   r0   Zmetrics_schemar'   Zfilter_metrics_schema©r<   rF   rF   rG   ÚtestFilterMetricSchema•   s.    

þ
ûþ

ÿ
üþz!TestLayers.testFilterMetricSchemac              	   C   s¦   | j  dt ¡ ¡ t dt ¡ f¡}|  | j j|¡ | j  dt tj¡¡ t dt ¡ fdt tj¡f¡}|  | j j|¡ |  	t
¡ | j  dt ¡ ¡ W 5 Q R X d S )NÚstructZscalar)r%   Zadd_output_schemar   r'   r0   r(   r2   r*   rX   ÚassertRaisesr\   )r<   Úexpected_output_schemarF   rF   rG   ÚtestAddOutputSchema®   s"    þ
þþzTestLayers.testAddOutputSchemac                 C   s   |   ||¡}t |¡ |S )a!  
        Helper function to assert the net contains some set of operations and
        then to run the net.

        Inputs:
            net -- the network to test and run
            ops_list -- the list of operation specifications to check for
                        in the net
        )ÚassertNetContainOpsr   r6   )r<   r&   Úops_listZ
ops_outputrF   rF   rG   Ú	_test_netÆ   s    

zTestLayers._test_netc                 C   sª   d}| j  | j jj|¡}|| j _|  t tj	|ff¡|¡ |  
¡ \}}|  |tdd d ƒg¡}td| j j ¡ |d jd g| ¡ ƒ}|  ||g¡ |  ¡ }|  ||g¡ d S )Nr   ÚUniformFillZMatMulr   )r%   ZFCWithoutBiasÚinput_feature_schemaÚfloat_featuresr(   r0   r   r2   r*   rY   r3   rk   r   Úoutputr)   r5   )r<   Úoutput_dimsZfc_without_biasrB   rC   Úinit_opsZmat_mul_specrE   rF   rF   rG   ÚtestFCWithoutBiasÔ   s4     ÿþ
ÿþ
þú	zTestLayers.testFCWithoutBiasc                 C   s¾  d}| j j| j jj|ddd}|| j _|  t|ƒd¡ t d¡|d  	¡ d ksTt
‚t d¡|d  	¡ d ksrt
‚t d	¡|d  	¡ d kst
‚t d
¡|d  	¡ d ks®t
‚|  ¡ \}}t | j ¡}| ¡ }| ¡ }|j}|j}	dddddddddddddg}
dddddddddddg}t|ƒt|
ƒks0t
‚t|	ƒt|ƒksFt
‚|j|jksXt
‚|jtƒ ksjt
‚t|
ƒD ]\}}|| j|ksrt
‚qrt|ƒD ]\}}|	| j|ksšt
‚qšd S )Nr   r   r"   )rr   Znum_bootstrapÚmax_fc_sizer   z/fc_with_bootstrap/bootstrap_iteration_0/indicesr   z-fc_with_bootstrap/bootstrap_iteration_0/predsz/fc_with_bootstrap/bootstrap_iteration_1/indicesz-fc_with_bootstrap/bootstrap_iteration_1/predsr   ZShapeZGivenTensorInt64FillÚGatherZGivenTensorIntFillZCastÚSubZUniformIntFillÚFC)r%   ZFCWithBootstrapro   rp   r(   r0   Úlenr   r^   r)   r\   r3   r   Úgenerate_predict_netÚProtoÚopZexternal_inputZexternal_outputÚlistÚ	enumerateÚtype)r<   rr   Zfc_with_bootstraprB   rC   rE   Ztrain_protoZ
eval_protoÚ	train_opsZeval_opsZmaster_train_opsZmaster_eval_opsÚidxr|   rF   rF   rG   ÚtestFCWithBootstrapö   sr    üÿÿÿÿóõzTestLayers.testFCWithBootstrapc              
   C   sx   d}d}d}|   t dt tj||ff¡f¡¡}| jj|j|dd}|| j_	|  
t tj||ff¡|¡ |  ¡ \}}d S )Nr   é   é   Úhistory_sequencer   ©Úaxis©rW   r   r'   r2   r*   rY   r%   rx   r…   r(   r0   r3   )r<   Ú	input_dimÚ
output_dimÚ
max_lengthr=   Zfc_outrB   rC   rF   rF   rG   ÚtestFCwithAxis2F  s*    ÿÿÿ þþzTestLayers.testFCwithAxis2c              
   C   sz   d}d}d}|   t dt tj||ff¡f¡¡}| jj|j|ddd}|| j_	|  
t tj||ff¡|¡ |  ¡ \}}d S )Nr   rƒ   r„   r…   r   T)r‡   Ú
transposedrˆ   ©r<   r‰   rŠ   r‹   r=   Zfc_transposed_outrB   rC   rF   rF   rG   ÚtestFCTransposed[  s,    ÿÿÿ  þþzTestLayers.testFCTransposedc              
   C   s„   d}d}d}|   t dt tj||ff¡f¡¡}| jj|j||| d ddd}|| j_	|  
t tj||ff¡|¡ |  ¡ \}}d S )Nr   rƒ   r„   r…   r   T)ru   r‡   r   rˆ   rŽ   rF   rF   rG   ÚtestFCTransposedWithMaxFCSizep  s.    ÿÿÿ 
 ýþz(TestLayers.testFCTransposedWithMaxFCSizec                 C   s”  t  | jjt  dt  dt  t jtjt j	ddd¡f¡f¡¡}d}|j
jj ¡ }|j
jj ¡ }|j
jj ¡ }t dg¡ tj¡}t dg¡ tj¡}t dg¡ tj¡}t ||¡ t ||¡ t ||¡ | jj|j
j|gdd	d
difd}	t  ¡ | j_|  t  tj|ff¡|	¡ |  ¡ \}
}t |
¡ t d¡}t ddddddddgg¡ tj¡}t d|¡ t | ¡ ¡ t d¡}|  | ¡ | ¡ ¡ d S )NÚsparseÚsparse_feature_0r   ©Úcategorical_limit©Úmetadatar   r   ÚSumÚConstantFillÚvaluer!   )Zweight_initzsparse_lookup/wr   )r   r$   r%   r&   r'   ZListWithEvictedr2   r*   r.   ÚMetadatar‘   r’   r9   Úgetr8   Z_evicted_valuesr+   r,   r-   r   r/   ÚSparseLookupr(   r0   rY   r3   r6   r7   r{   ZassertEqualsÚall)r<   ÚrecordÚembedding_dimr>   r?   Zevicted_values_blobr9   r@   Zevicted_valuesÚembedding_after_poolingrB   rC   Zembedding_after_initZ
new_valuesZembedding_after_trainingrF   rF   rG   Ú&testSparseLookupSumPoolingWithEviction†  sL    
ÿÿÿÿ   
ÿþ

$
z1TestLayers.testSparseLookupSumPoolingWithEvictionc           	      C   s  t  | jjt  dt  dt  t jtjt j	ddd¡f¡f¡¡}d}| j 
|jj|gd¡}t  ¡ | j_|  t  tj|ff¡|¡ |  ¡ \}}|  |tdd d ƒtd	d d ƒg¡}td
|d jd |jj ¡ |jj ¡ g|ƒ gƒ}|  ||g¡ |  ¡ }|  ||g¡ d S )Nr‘   r’   éè  r“   r•   é@   r—   rn   r˜   ZSparseLengthsSumr   )r   r$   r%   r&   r'   r1   r2   r*   r.   rš   rœ   r‘   r’   r(   r0   rY   r3   rk   r   rq   r8   r9   r5   ©	r<   rž   rŸ   r    rB   rC   rs   Zsparse_lookup_op_specrE   rF   rF   rG   ÚtestSparseLookupSumPooling®  sL    
ÿÿÿÿ  ÿþ

þþ

ýù	z%TestLayers.testSparseLookupSumPoolingéd   éÈ   )Z	min_valueZ	max_valuer   r„   )Úuse_hashingÚmoduloÚuse_divide_modÚdivisorc           	   
   C   sÀ   t  | jjt  t jtjt jddd¡¡}|dkr6|nd}| jj	|||||d}|| j_
|  t| jjƒd¡ |  |jjj|¡ |  ¡ \}}|r¦|  t| ¡ jƒd¡ n|  t| ¡ jƒd¡ d S )	Né`ê  r“   r•   F)r©   r¨   rª   r«   r   r   r   )r   r$   r%   r&   r1   r2   r*   r.   rš   ÚSparseFeatureHashr(   r0   ry   ÚlayersÚ_itemsr–   r”   r3   r{   r|   )	r<   r¨   r©   rª   r«   rž   r(   rB   rC   rF   rF   rG   ÚtestSparseFeatureHashIdListÖ  s0    
þþûÿz&TestLayers.testSparseFeatureHashIdList)r¨   r©   c              
   C   s€   t  | jjt  t jtjt jdddtj	¡¡}| jj
|||d}|| j_|  t| jjƒd¡ |  |jjjj|¡ |  ¡ \}}d S )Nr¬   r“   r•   )r©   r¨   r   )r   r$   r%   r&   ÚMapr2   r*   r.   rš   rY   r­   r(   r0   ry   r®   r¯   Úkeysr–   r”   r3   )r<   r¨   r©   rž   r(   rB   rC   rF   rF   rG   Ú testSparseFeatureHashIdScoreListø  s(    
ÿÿýÿýÿz+TestLayers.testSparseFeatureHashIdScoreListc                 C   sr   t  | jjt  dt  dt  t jtjt j	ddd¡f¡f¡¡}d}|  
t¡ | j |jj|gd¡ W 5 Q R X dS )	z€
        Currently the implementation of SparseLookup assumed input is id_score_list
        when use PositionWeighted.
        r‘   r’   r¢   r“   r•   r£   ÚPositionWeightedN©r   r$   r%   r&   r'   r1   r2   r*   r.   rš   rh   r\   rœ   r‘   r’   ©r<   rž   rŸ   rF   rF   rG   Ú1testSparseLookupIncorrectPositionWeightedOnIdList  s     
ÿÿÿÿ  ÿz<TestLayers.testSparseLookupIncorrectPositionWeightedOnIdListc           	      C   s<  t  | jjt  dt  dt  t jtjt j	ddd¡f¡f¡¡}|j
j}| j |¡}t jt|ƒ|j|jd}d}| j ||gd¡}t  ¡ | j_|  t  tj|ff¡|¡ |  ¡ \}}|  |td	d d ƒtd
d d ƒtd	d d ƒg¡ |  |tdd d ƒtdd d ƒtdd d ƒg¡ |  ¡ }|  |tdd d ƒtdd d ƒtdd d ƒg¡ d S )Nr‘   r’   r¢   r“   r•   )r²   r@   r>   r£   r´   r˜   rn   ZLengthsRangeFillrv   ÚSparseLengthsWeightedSum)r   r$   r%   r&   r'   r1   r2   r*   r.   rš   r‘   r’   r´   r±   r
   Zposition_weightsr9   rœ   r(   r0   rY   r3   rk   r   r5   )	r<   rž   Zsparse_segmentZpos_w_layerrŸ   r    rB   rC   rE   rF   rF   rG   Ú(testSparseLookupPositionWeightedOnIdList!  s\    
ÿÿÿÿ	ý  ÿþ


ýþ


ý


ýz3TestLayers.testSparseLookupPositionWeightedOnIdListc           	      C   s  t  | jjt  dt  dt  t jtjt j	dddtj
¡f¡f¡¡}d}| j |jj|gd¡}t  ¡ | j_|  t  tj
|ff¡|¡ |  ¡ \}}|  |tdd d ƒtd	d d ƒg¡}td
|d jd |jj ¡ |jj ¡ |jj ¡ g|ƒ gƒ}|  ||g¡ |  ¡ }|  ||g¡ d S )Nr‘   Úid_score_list_0r¢   r“   r•   r£   r´   rn   r˜   r¸   r   ©r   r$   r%   r&   r'   r±   r2   r*   r.   rš   rY   rœ   r‘   rº   r(   r0   r3   rk   r   rq   r@   r²   r9   r5   r¤   rF   rF   rG   Ú-testSparseLookupPositionWeightedOnIdScoreListT  sV    ÿþùÿÿ  ÿþ

þþ


üø
z8TestLayers.testSparseLookupPositionWeightedOnIdScoreListc                 C   sr   t  | jjt  dt  dt  t jtjt j	ddd¡f¡f¡¡}d}|  
t¡ | j |jj|gd¡ W 5 Q R X dS )	z
        Currently the implementation of SparseLookup assumed input is id_score_list
        when use RecencyWeighted.
        r‘   r’   r¢   r“   r•   r£   ÚRecencyWeightedNrµ   r¶   rF   rF   rG   Ú0testSparseLookupIncorrectRecencyWeightedOnIdList„  s     
ÿÿÿÿ  ÿz;TestLayers.testSparseLookupIncorrectRecencyWeightedOnIdListc           	      C   s  t  | jjt  dt  dt  t jtjt j	dddtj
¡f¡f¡¡}d}| j |jj|gd¡}t  ¡ | j_|  t  tj
|ff¡|¡ |  ¡ \}}|  |tdd d ƒtd	d d ƒg¡}td
|d jd |jj ¡ |jj ¡ |jj ¡ g|ƒ gƒ}|  ||g¡ |  ¡ }|  ||g¡ d S )Nr‘   rº   r¢   r“   r•   r£   r½   rn   r˜   r¸   r   r»   r¤   rF   rF   rG   Ú,testSparseLookupRecencyWeightedOnIdScoreList–  sV    ÿþùÿÿ  ÿþ

þþ


üø
z7TestLayers.testSparseLookupRecencyWeightedOnIdScoreListc                 C   sž   d}d}t  | jjt  dt  tj||ff¡f¡¡}| j ||| ¡}|  	t  tj|| ff¡|¡ |  
¡ \}}|  |g ¡ |  |tdd d ƒtdd d ƒg¡ d S )Nr£   r   Úall_embeddingsÚBatchMatMulÚFlatten©r   r$   r%   r&   r'   r2   r*   rY   ÚPairwiseSimilarityr0   r3   rk   r   )r<   rŸ   ÚNrž   ÚcurrentrB   rC   rF   rF   rG   Ú'testPairwiseSimilarityWithAllEmbeddingsÆ  s*    ÿÿ ÿþ

þz2TestLayers.testPairwiseSimilarityWithAllEmbeddingsc                 C   s¦   d}t  | jjt  dt  tjd|ff¡fdt  tjd|ff¡f¡¡}| j |d¡}|  	t  tjdf¡|¡ |  
¡ \}}|  |g ¡ |  |tdd d ƒtd	d d ƒg¡ d S )
Nr£   Úx_embeddingsr   Úy_embeddingsr   rƒ   )rƒ   rÁ   rÂ   rÃ   )r<   rŸ   rž   rÆ   rB   rC   rF   rF   rG   Ú)testPairwiseSimilarityWithXandYEmbeddingsÝ  s.    ÿÿü ÿþ

þz4TestLayers.testPairwiseSimilarityWithXandYEmbeddingsc           	      C   s  d}dddg}| j jt| j j d¡ƒ|tjd}t tjt	|ƒf|¡}t 
| j jt dt tjd|ff¡fdt tjd	|ff¡fd
|f¡¡}| j  |t	|ƒ¡}|  t tjt	|ƒff¡|¡ |  ¡ \}}|  |g ¡ |  |tdd d ƒtdd d ƒtdd d ƒg¡ d S )Nr£   r   r   r   Zpairwise_dot_product_gather©rP   rÈ   rÉ   r   Úindices_to_gatherrÁ   rÂ   ZBatchGather)r%   Zadd_global_constantÚstrr&   ZNextScopedBlobr*   r-   r   r2   ry   r$   r'   rY   rÄ   r0   r3   rk   r   )	r<   rŸ   Z
output_idxZoutput_idx_blobrÌ   rž   rÆ   rB   rC   rF   rF   rG   Ú2testPairwiseSimilarityWithXandYEmbeddingsAndGatherö  sF    
ýþÿÿù	 ÿþ


ýz=TestLayers.testPairwiseSimilarityWithXandYEmbeddingsAndGatherc                 C   sœ   d}t  | jjt  dt  tjd|ff¡f¡¡}|  t	¡ | j 
|d¡ W 5 Q R X t  | jjt  dt  tj¡f¡¡}|  t	¡ | j 
|d¡ W 5 Q R X d S )Nr£   rÈ   r   é   rÀ   )r   r$   r%   r&   r'   r2   r*   rY   rh   r\   rÄ   r1   )r<   rŸ   rž   rF   rF   rG   Ú$testPairwiseSimilarityIncorrectInput  s&    ÿÿ ÿÿ ÿz/TestLayers.testPairwiseSimilarityIncorrectInputc                 C   s¶   d}|   t dt tj|ff¡fdt tj|ff¡fdt tj|ff¡f¡¡}| j |¡}|  t tjt	|j
ƒ| ff¡|¡ | jj|ddd}|  t tjt	|j
ƒ|ff¡|¡ d S )Nr£   Úinput1Úinput2Úinput3r   )r‡   Zadd_axis)rW   r   r'   r2   r*   rY   r%   ÚConcatr0   ry   Úfields)r<   rŸ   r=   rq   rF   rF   rG   Ú
testConcat1  s     ýþ	þzTestLayers.testConcatc              	   C   sä  d}|   t tjdf¡¡}|   t tjdf¡¡}| j t d| jj	j
fd|fd|f¡d|¡}|| j_|  dt| jjƒ¡ |  t tj|ff¡|¡ |  ¡ \}}|  |tdd d ƒtdd d ƒg¡}| jjd	 }td
|d	 jd	 |ƒ g|jjd	 gƒ}	td
|d jd	 |ƒ g|jjd gƒ}
td| jj	 
¡ g|jj | ¡ ƒ}td|ƒ gd gƒ}td| ¡ d	 d g| ¡ ƒ}|  ||	|
|||g¡}|  |d jd	 |d jd ¡ |  ¡ }|  |td| jj	 
¡ |d	 jd	 |d jd	 g| ¡ ƒg¡ d S )Nr¢   )r   ÚinputÚindicesÚsampling_probrx   r   rn   r   rv   ÚLogrw   r   r   )rW   r   r2   r*   r-   rY   r%   ZSamplingTrainr'   ro   rp   r(   r0   ry   r®   r3   rk   r   rq   Z_prediction_layerZtrain_param_blobsr)   r×   r5   )r<   rr   rØ   rÙ   Z
sampled_fcrB   rC   rs   Zsampled_fc_layerZgather_w_specZgather_b_specZtrain_fc_specZlog_specZsub_specr€   rE   rF   rF   rG   ÚtestSamplingTrainI  s”    ýù	þ

þþþ
ÿú
þ
ÿú

ÿþûýþ 
ýùÿþzTestLayers.testSamplingTrainc                 C   sn   |   t dt tjdf¡fdt tjdf¡fdt tjdf¡f¡¡}| j |¡}|  	t tjt
ƒ f¡|¡ d S )NrI   rJ   rK   rL   rM   ©rW   r   r'   r2   r*   rX   rY   r%   rZ   r0   r]   ©r<   r=   r[   rF   rF   rG   ÚtestBatchLRLoss¦  s    ýzTestLayers.testBatchLRLossc                 C   s€   |   t dt tjdf¡fdt tjdf¡fdt tjdf¡fdt tjdf¡f¡¡}| j |¡}|  	t tjt
ƒ f¡|¡ d S )NrI   rJ   rK   rL   rM   Zlog_variancerÜ   rÝ   rF   rF   rG   ÚtestBatchLRLossWithUncertainty¯  s    üz)TestLayers.testBatchLRLossWithUncertaintyc              	   C   sº   |   t dt tjdf¡fdt tj¡f¡¡}tjdddgtjd}tjdd	d
gtjd}tjddddddgtjd}t 	||||g¡ | j
 |¡}|  ¡  |  t tjtƒ f¡|¡ d S )NÚpos_predictionrJ   Úneg_predictionçš™™™™™¹?çš™™™™™É?ç333333Ó?rË   r   r   r   gš™™™™™Ù?r    g333333ã?)rW   r   r'   r2   r*   rY   r1   r+   r-   Ú
FeedRecordr%   ZMarginRankLossÚrun_train_net_forward_onlyr0   r]   )r<   r=   Ú	pos_itemsÚneg_lengthsÚ	neg_itemsr[   rF   rF   rG   ÚtestMarginRankLoss¹  s    þþzTestLayers.testMarginRankLossc              	   C   sÔ   |   t dt tjdf¡fdt tj¡f¡¡}tjddgtjd}tjddgtjd}tjd	d
dgtjd}t 	||||g¡ | j
 |¡}|  ¡  |  t tjtƒ f¡|¡ t d¡}tj tjdtjd|¡ d S )Nrà   rJ   rá   gš™™™™™é?çÍÌÌÌÌÌì?rË   r   r   râ   rã   rä   zbpr_loss/outputgI×L¾Ùæó?)rW   r   r'   r2   r*   rY   r1   r+   r-   rå   r%   ZBPRLossræ   r0   r]   r   r7   ÚtestingZassert_array_almost_equal)r<   r=   rç   rè   ré   r[   ÚresultrF   rF   rG   ÚtestBPRLossÉ  s     þþ
zTestLayers.testBPRLossc              
   C   s\   |   t dt tjdf¡fdt tjdf¡f¡¡}| j |¡}|  	t tjt
ƒ f¡|¡ d S ©NrI   rJ   Ú
predictionrL   )rW   r   r'   r2   r*   rX   rY   r%   ZBatchMSELossr0   r]   rÝ   rF   rF   rG   ÚtestBatchMSELossÛ  s    þzTestLayers.testBatchMSELossc              
   C   s\   |   t dt tjdf¡fdt tjdf¡f¡¡}| j |¡}|  t tjt	ƒ f¡|¡ d S rï   )
rW   r   r'   r2   r*   rY   r%   ZBatchHuberLossr0   r]   rÝ   rF   rF   rG   ÚtestBatchHuberLossã  s    þzTestLayers.testBatchHuberLossc              
   C   s\   |   t dt tjdf¡fdt tjdf¡f¡¡}| j |¡}|  t tjt	ƒ f¡|¡ d S )NrI   ©é    rð   )
rW   r   r'   r2   r*   rY   r%   ZBatchSigmoidCrossEntropyLossr0   r]   rÝ   rF   rF   rG   Ú testBatchSigmoidCrossEntropyLossë  s    þz+TestLayers.testBatchSigmoidCrossEntropyLossc              
   C   st   |   t dt tjtƒ f¡fdt tjdf¡f¡¡}| j |¡}|  	t dt tjdf¡fdt tj¡f¡|¡ d S )NrI   rð   ró   Úsoftmaxr[   )
rW   r   r'   r2   r*   rY   r]   r%   ÚBatchSoftmaxLossr0   rÝ   rF   rF   rG   ÚtestBatchSoftmaxLossó  s    þþýzTestLayers.testBatchSoftmaxLossc                 C   s†   |   t dt tjtƒ f¡fdt tjdf¡fdt tjdf¡f¡¡}| j 	|¡}|  
t dt tjdf¡fdt tj¡f¡|¡ d S )NrI   rð   ró   rM   rJ   rö   r[   )rW   r   r'   r2   r*   rY   r]   rX   r%   r÷   r0   rÝ   rF   rF   rG   ÚtestBatchSoftmaxLossWeightþ  s    ýþýz%TestLayers.testBatchSoftmaxLossWeightr   r   )Zdims)ÚXc              
   C   s  |   t tjdf¡¡}t ||g¡ | j |¡}|  t tjdf¡|¡ t 	¡ | j_
|  ¡ \}}|  |tdd d ƒtdd d ƒtdd d ƒtdd d ƒg¡}| ¡ d }| ¡ d }td|gd ƒ}	tdd |d jd |d jd |d jd |d jd g||d jd |d jd d d gdd	d
dœƒ}
tdd |d jd |d jd |d jd |d jd g|gdd	d
dœƒ}td|g|gƒ}|  ||	|
|g¡ |  ¡ }|  ||	||g¡ |  ¡ }|  ||	||g¡ t |¡ t |¡ t ||g¡ t |¡ t ||g¡ t |¡ d S )N)r   r˜   r   Z
ExpandDimsZ	SpatialBNr   r   r   ZNCHWrë   )Úis_testÚorderZmomentumZSqueeze)rW   r   r2   r*   rY   rå   r%   ZBatchNormalizationr0   r'   r(   r3   rk   r   r)   rq   r4   r5   r   r6   )r<   rú   r=   Z	bn_outputrB   rC   rs   Ú
input_blobÚoutput_blobZexpand_dims_specZtrain_bn_specZtest_bn_specZsqueeze_specrD   rE   rF   rF   rG   ÚtestBatchNormalization
  s€    



üþ
ý ÿ 
û ÿ
ûýþþþ


z!TestLayers.testBatchNormalizationr   )rú   Úuse_layer_norm_opc                 C   s˜   d}|s|  dd¡}d}|  t tj|f¡¡}t ||g¡ | jj||d}|  	t tj|f¡|¡ t 
¡ | j_| jdd\}}t |¡ t |¡ d S )N)r   r   r   r   )r   )r   T)Zadd_constants)ÚreshaperW   r   r2   r*   rY   rå   r%   ZLayerNormalizationr0   r'   r(   r3   r   r6   )r<   rú   r   Úexpectr=   Z	ln_outputrB   rC   rF   rF   rG   ÚtestLayerNormalization[  s     ÿ
z!TestLayers.testLayerNormalizationr   )rú   Únum_to_collectc                 C   s†   |   t tj¡¡}t ||g¡ | j ||¡}|  ¡  t 	|j
¡}tdd| ƒ}t ||d … |ƒ ¡ t 	|j¡}t dg|ƒ ¡ d S )Nr   r   )rW   r   r2   r*   rY   rå   r%   ZLastNWindowCollectorræ   ÚFetchRecordÚlast_nÚmaxÚnptÚassert_array_equalÚnum_visited)r<   rú   r  r=   r  Úoutput_recordÚstartr
  rF   rF   rG   ÚtestLastNWindowCollectorp  s    z#TestLayers.testLastNWindowCollectorr   r¢   )Údeadlinec              
   C   s„  t jdddddgt jd}|  t dt dt ¡ f¡fdt t j¡f¡¡}t |||g¡ | jj	|j
d|j
 ¡ d}t d	|fd|jf¡}| j ||¡}t ¡ | j_t | j¡\}}	t |¡ t |	¡ tj|	 ¡ jdd
 t |j¡}
t dg|
ƒ ¡ | jjD ]$}t t|ƒ¡}t t|ƒ|¡ q t jdddddgt jd}t |j|g¡ tj|	 ¡ jdd
 t |j¡}
t dg|
ƒ ¡ d S )Nr   r   r   rË   rž   ÚdenseÚ	object_id)rÕ   Údata©Znum_iterr   )r*   r+   r.   rW   r   r'   r2   rå   r%   ZPackRecordsrž   Úfield_namesr  ZReservoirSamplingr(   r   Ú#generate_training_nets_forward_onlyr   r6   Ú	CreateNetÚRunNetr{   Únamer  r
  r  r	  ÚparamsZSerializeBlobrÍ   ZDeserializeBlob)r<   rú   r  ZIDr=   Zpacked_recordZreservoir_inputZ	reservoirrB   rC   r
  ÚparamZ
serializedrF   rF   rG   ÚtestReservoirSamplingWithID  sR    
ÿüÿ  ÿþ ÿÿÿ

z&TestLayers.testReservoirSamplingWithIDc                 C   sÖ   |   t tj¡¡}tjddddddgtjd}t ||g¡ d}d}| j |||¡}|| j_	|  
¡  t | ¡ ¡}t | ¡ ¡}|  |t|ƒ¡ tj ||d t|ƒ… ¡ tj tjt|ƒ| g| tjd|¡ d S )	Nr   r   é   é   r„   éc   rË   r¦   )rW   r   r2   r*   r-   r+   rå   r%   ÚUniformSamplingr[   Úrun_train_netr   r7   ÚsamplesrÙ   r0   ry   rì   r	  Úassert_almost_equalÚfloatrY   )r<   r=   Zinput_arrayÚnum_samplesÚnum_elementsZuniform_sampling_outputr   rÙ   rF   rF   rG   ÚtestUniformSampling©  s0      ÿÿÿýzTestLayers.testUniformSamplingc              	   C   sD   |   t tj¡¡}d}d}|  t¡ | j |||¡ W 5 Q R X d S )Nr§   r¦   )	rW   r   r2   r*   r-   rh   r\   r%   r  )r<   r=   r#  r$  rF   rF   rG   Ú*testUniformSamplingWithIncorrectSampleSize¾  s
    z5TestLayers.testUniformSamplingWithIncorrectSampleSizec                    sÞ  t jdddgt jd}t jttdƒƒt jd dd¡‰ t jttdƒƒt jd‰t jttˆ ¡ ƒƒt jd‰t jttˆ ¡ ƒƒt jd‰t jttˆ ¡ ƒƒt jd‰|  	t
 dt
 t j¡fd	t
 d
t
 t j¡fdt
 t
 t j¡¡f¡fdt
 ¡ f¡¡}|  	t
 t j¡¡}t
 d|fd|f¡}t
 ||ˆ ˆˆˆˆˆg¡ | j |¡}|  t
 ||¡¡ |  ¡  t | ¡ ¡}t j t  ‡ fdd„|D ƒ¡|¡ t |jj ¡ ¡}t j t  ‡fdd„|D ƒ¡|¡ t |jj ¡ ¡}ˆ ¡ ˆ ‰t j t  ‡‡‡fdd„|D ƒ¡|¡ t |jjj ¡ ¡}	t j t  ‡‡‡fdd„|D ƒ¡|	¡ g ‰g ‰d}
d}ˆD ]N}ˆ |
¡ d}t|ƒD ]&}|
ˆ| 7 }
|ˆ| 7 }|d7 }qjˆ |¡ qPt |jjj ¡ ¡}t j t  ‡‡‡fdd„|D ƒ¡|¡ d S )Nr   r   r   rË   r„   r   r   r  r‘   r}   Úlist_of_listZempty_structrØ   rž   c                    s   g | ]}ˆ ||d  … ‘qS rJ   rF   ©Ú.0Úi)r  rF   rG   Ú
<listcomp>ã  s     z/TestLayers.testGatherRecord.<locals>.<listcomp>c                    s   g | ]}ˆ ||d  … ‘qS rJ   rF   r(  )r9   rF   rG   r+  ç  s     c                    s(   g | ] }ˆ ˆ| ˆ| ˆ|  … ‘qS rF   rF   r(  )r8   r9   ÚoffsetsrF   rG   r+  í  s   ÿc                    s(   g | ] }ˆ ˆ| ˆ| ˆ|  … ‘qS rF   rF   r(  )Úitems_lengthsr9   r,  rF   rG   r+  õ  s   ÿr   c                    s(   g | ] }ˆ ˆ| ˆ| ˆ|  … ‘qS rF   rF   r(  )Úitems_itemsÚnested_lengthsÚnested_offsetsrF   rG   r+    s   þÿ) r*   r+   r-   r}   ÚrangerY   r  Úsumr.   rW   r   r'   r2   r1   rå   r%   ZGatherRecordÚ
assertTrueÚequal_schemasræ   r   r7   r  rì   r	  Zconcatenater‘   r9   r8   Zcumsumr'  Úappend)r<   rØ   rž   Zindices_recordr=   Zgathered_recordZgathered_denseZgathered_lengthsZgathered_itemsZgathered_items_lengthsZnested_offsetÚjÚlZnested_lengthZ_iZgathered_items_itemsrF   )r  r8   r.  r-  r9   r/  r0  r,  rG   ÚtestGatherRecordÅ  s      þ
úþÿþ ÿ
ÿþ
ÿþüÿþû
ÿýúzTestLayers.testGatherRecordc                 C   sd  |   t tj¡¡}| jj|ddj}t ¡ | j_	|  
¡ \}}t |tjddddddddgtjd	g¡ t |¡ t |¡ t |ƒ ¡}tj tjd
dddddddgtjd	|¡ t |tjddddddddgtjd	g¡ t |¡ t |ƒ ¡}tj tjd
dddddd
dgtjd	|¡ |  ¡ }t |tjdddddddgtjd	g¡ t |¡ t |ƒ ¡}tj tjd
ddddddgtjd	|¡ t |tjddddddgtjd	g¡ t |¡ t |ƒ ¡}tj tjd
dddddgtjd	|¡ |  ¡ }t |tjdddddddddg	tjd	g¡ t |¡ t |ƒ ¡}tj tjdddddddddg	tjd	|¡ d S )Nr¦   )Z	max_indexr   r   r„   r  r  r  rË   r   r   r   r   r   é   é#   é<   r   r   r   r§   r   ée   és   é—   )rW   r   r2   r*   r-   r%   Z
MapToRangerØ   r'   r(   r3   rå   r+   r   r6   r7   rì   r	  r4   r5   )r<   r=   Zindices_blobrB   rC   rØ   rD   rE   rF   rF   rG   ÚtestMapToRange  sv    ÿ þ

þ þ
þþ
þþ
þ"þ
 þzTestLayers.testMapToRangec              	   C   s@  | j jj}tjddgtjd}t ||g¡ ttj	ƒ | j  
|d¡}W 5 Q R X | j  t tj|ftj|ftj|f¡¡}t d|f¡| j _t | j ¡}t |¡ t | ¡ ¡}t ||d ƒ ¡ t | j ¡}t |¡ t | ¡ ¡}t t |¡|d ƒ ¡ t | j ¡\}	}
t |
¡ t |
 ¡ ¡}t t |¡|d ƒ ¡ d S )Nr!   ç       @rË   r   Újoined)r%   ro   rp   r*   r+   rY   r   rå   r   ZEXCLUDE_FROM_PREDICTIONrÚ   ZSelectRecordByContextr'   r   Z
PREDICTIONZTRAININGZEVALr(   r   rz   r   r6   r  r  r  r	  Zgenerate_eval_netÚlogr  )r<   rp   Zfloat_arrayZlog_float_featuresrA  rE   Zpredict_outputrD   Zeval_outputÚ_rC   Ztrain_outputrF   rF   rG   ÚtestSelectRecordByContextX  sJ    
üÿ
 ÿ

ÿ
ÿÿÿ
ÿz$TestLayers.testSelectRecordByContextc                 C   s  dd„ }| j j| j jjd|dd}| tjdf¡ | j  |d¡| j _t	 
| j ¡}| ¡ j}t|ƒdksjt‚|d	 jd
ks|t‚|d jdksŽt‚|d jdks t‚t|d	 jƒdks¶t‚|d	 jd	 | j j ¡ ksÔt‚t|d jƒdksêt‚|d jd	 |d jkst‚d S )Nc                 S   s*   |   |ƒ d¡}| j|ƒ |g|ƒ dd d S )Nr   ©Ú	broadcast)ÚReduceFrontMeanrw   )r&   Z	in_recordZ
out_recordÚmeanrF   rF   rG   Ú	normalizeƒ  s    ýz1TestLayers.testFunctionalLayer.<locals>.normalizer   Z
normalizer©r  rô   r   r   r   rG  rw   rx   )r%   Z
Functionalro   rp   Úset_typer*   rY   rx   r(   r   rz   r{   r|   ry   r\   r   r×   rq   )r<   rI  Ú
normalizedrE   ÚopsrF   rF   rG   ÚtestFunctionalLayer‚  s.      þÿ

ÿzTestLayers.testFunctionalLayerc                 C   s  | j  | j jjd¡}| j jt | j jj|¡ddd}| tj	df¡ | j  
|d¡| j _t | j ¡}| ¡ j}t|ƒdks|t‚|d jdksŽt‚|d jdks t‚|d jd	ks²t‚t|d jƒdksÈt‚|d jd | j j ¡ ksæt‚t|d jƒdksüt‚|d jd |d jkst‚d S )
Nr   rE  ró   r   r   r   rG  rw   rx   )r%   rG  ro   rp   rw   r   ÚTuplerK  r*   rY   rx   r(   r   rz   r{   r|   ry   r\   r   r×   rq   )r<   rH  rL  rE   rM  rF   rF   rG   ÚtestFunctionalLayerHelperž  s8     ÿ ÿ ýÿ

ÿz$TestLayers.testFunctionalLayerHelperc                 C   s  | j  t | j jj¡d¡}| ¡ jtj	ks.t
‚| ¡ jdks@t
‚| j  |d¡| j _t | j ¡}| ¡ j}t|ƒdksxt
‚|d jdksŠt
‚|d jdksœt
‚t|d jƒdks²t
‚|d jd | j j ¡ ksÐt
‚t|d jƒdksæt
‚|d jd |d jkst
‚d S )Nr   ró   r   r   ÚSoftsignrx   )r%   rQ  r   rO  ro   rp   Ú
field_typeÚbaser*   rY   r\   Úshaperx   r(   r   rz   r{   r|   ry   r   r×   rq   )r<   ZsoftsignrE   rM  rF   rF   rG   Ú&testFunctionalLayerHelperAutoInference¶  s(    þÿ

ÿz1TestLayers.testFunctionalLayerHelperAutoInferencec                 C   s‚   |   t tjdf¡¡}| j |d¡}| ¡ jtj	ks8t
‚| ¡ jdksJt
‚| j |d¡}| ¡ jtjkslt
‚| ¡ jdks~t
‚d S )Nró   r   )rW   r   r2   r*   rY   r%   ZFloatToHalfrR  rS  Zfloat16r\   rT  ZHalfToFloat)r<   r×   rq   rF   rF   rG   ÚtestHalfToFloatTypeInferenceÊ  s    z'TestLayers.testHalfToFloatTypeInferencec                 C   sZ   | j  | j jd¡}|  dt| ¡ ƒ¡ |  tj| ¡ d j¡ |  t	ƒ | ¡ d j
¡ d S )Nr   r   )r%   ÚAveragedLossro   r0   ry   Úfield_typesr*   rY   rS  r]   rT  ©r<   r[   rF   rF   rG   Ú,testFunctionalLayerHelperAutoInferenceScalarÕ  s    z7TestLayers.testFunctionalLayerHelperAutoInferenceScalarc                 C   sT   | j jd }| j  ||gd¡}|| j _|  ¡  t | ¡ d ¡}tj	 
dg|¡ d S )NZONEr   r   r@  )r%   Úglobal_constantsZAddr[   r  r   r7   r)   r*   rì   r	  )r<   ZoneZtwor  rF   rF   rG   Ú testFunctionalLayerInputCoercionÛ  s    z+TestLayers.testFunctionalLayerInputCoercionc                 C   sª   d}| j j| j jddg|d}|  dt| ¡ ƒ¡ |  tj| ¡ d j¡ |  |f| ¡ d j	¡ |  tj
| ¡ d j¡ |  |f| ¡ d j	¡ |  dd	g| ¡ ¡ d S )
Nr   r@   rØ   )r#   Úkr   r   r   zTopK/valueszTopK/indices)r%   ZTopKro   r0   ry   rX  r*   rY   rS  rT  r-   r)   )r<   r]  ZtopkrF   rF   rG   Ú"testFunctionalLayerWithOutputNamesã  s    ýz-TestLayers.testFunctionalLayerWithOutputNamesc                 C   s<   | j jg ddd}| j jg ddd}|  t|ƒt|ƒ¡ d S )Nr   )r™   r   )r%   r˜   ZassertNotEqualrÍ   )r<   ZCon1ZCon2rF   rF   rG   Ú*testFunctionalLayerSameOperatorOutputNamesñ  s    z5TestLayers.testFunctionalLayerSameOperatorOutputNamesc                 C   sb   | j j| j jdtjdfd}|  dt| ¡ ƒ¡ |  tj| ¡ d j¡ |  d| ¡ d j	¡ d S )Nr   rJ   )Zoutput_dtypesr   )
r%   rW  ro   r*   rY   r0   ry   rX  rS  rT  rY  rF   rF   rG   Ú#testFunctionalLayerWithOutputDtypesö  s    ýz.TestLayers.testFunctionalLayerWithOutputDtypesc                 C   s¬   |   t dt tjdf¡fdt tjdf¡fdt tjdf¡f¡¡}t|ƒ | j |¡}|  	t
|ƒd¡ |   t dt tjd	f¡f¡¡| }| j |¡}|  	t
|ƒd
¡ d S )NrÑ   ró   rÒ   )r£   rÓ   )é   TZinput4)r¦   F)rW   r   r'   r2   r*   rY   r   r%   rÔ   r0   r   )r<   r=   Zconcat_outputZinput_record2Zconcat_output2rF   rF   rG   ÚtestPropagateRequestOnly   s    ýÿþz#TestLayers.testPropagateRequestOnlyc              
   C   sv   t  tj¡}t  |t jddt jdddgdd¡ t|ƒ |  |j	j
d¡ |  |j	jd¡ |  |j	jjdddg¡ d S )Ni áõr  r   r¦   ié  )Úfeature_ids)r”   Úexpected_valueÚfeature_specs)r   r2   r*   r.   Zattach_metadata_to_scalarsrš   ÚFeatureSpecr   r0   r–   r”   rd  re  rc  )r<   r=   rF   rF   rG   ÚtestSetRequestOnly  s$    ÿýþþzTestLayers.testSetRequestOnly)rú   Údropout_for_evalc                 C   sT  |   t tjdf¡¡}t ||g¡ | jj||d}|  t tjdf¡|¡ t 	¡ | j_
|  ¡ \}}| ¡ d }| ¡ d }td|g|d gdddœƒ}	td|g|d gdddœƒ}
|  ||	g¡ |  ¡ }|  ¡ }|rð|  ||	g¡ |  ||	g¡ n|  ||
g¡ |  ||
g¡ t |¡ t |¡ t ||g¡ t |¡ t ||g¡ t |¡ d S )NrJ   )rh  r   ÚDropoutr    )rû   Zratior   )rW   r   r2   r*   rY   rå   r%   ri  r0   r'   r(   r3   r)   r   rk   r4   r5   r   r6   )r<   rú   rh  r=   Zd_outputrB   rC   rý   rþ   Zwith_d_specZwithout_d_specrD   rE   rF   rF   rG   ÚtestDropout)  sh    þüüþþþþþ


zTestLayers.testDropout)Ú
num_inputsÚ
batch_sizec                 C   s¸   g }t |ƒD ]R}tjjd|d tj¡}| ¡ }tjjdd|d tj¡}| |¡ | |¡ qt	j
dd„ t |ƒD ƒŽ }t	 | jj|¡}	t	 |	|¡ | j |	¡}
t	j|
tdds´t‚d S )	Nr   ©Úsizer   r   c              	   S   s*   g | ]"}t  t jtjt jd dd¡‘qS )r„   r“   )rP   r–   )r   r1   r2   r*   r.   rš   ©r)  rC  rF   rF   rG   r+  {  s   ýÿÿz4TestLayers.testMergeIdListsLayer.<locals>.<listcomp>F)Zcheck_field_names)r1  r*   ÚrandomÚrandintr,   r-   r2  r.   r5  r   rO  r$   r%   r&   rå   ZMergeIdListsr4  r   r\   )r<   rk  rl  ÚinputsrC  r9   rn  r@   Úinput_schemar=   r(   rF   rF   rG   ÚtestMergeIdListsLayern  s(    
ýÿ þz TestLayers.testMergeIdListsLayerrâ   )rl  Ú
input_dimsrr   Ú	bandwidthc                 C   s®  dd„ }t j ||f¡ t j¡}t  d| ¡}|  t t j|ff¡¡}t ||g¡ | 	¡ d }	| j
 |||¡}
t ¡ | j
_|  t t j|ff¡|
¡ |  ¡ \}}tdd d ƒtdd d ƒg}|  ||¡}t | j
jd j¡}t | j
jd j¡}td|	|d jd |d jd gd ƒ}td	d d ƒ}td
d |
 	¡ d|iƒ}|||g}|  ||¡ ||
ƒ ||||ƒ |  ¡ }|  ||¡ ||
ƒ ||||ƒ |  ¡ }|  ||¡ ||
ƒ ||||ƒ d S )Nc              	   S   s@   t  | ¡}|t t |t |¡¡| ¡ }tj||ddd dS )a  
            Runs hypothesis test for Semi Random Features layer.

            Inputs:
                rff_output -- output of net after running random fourier features layer
                X -- input data
                W -- weight parameter from train_init_net
                b -- bias parameter from train_init_net
                scale -- value by which to scale the output vector
            çü©ñÒMbP?©ÚrtolÚatolN)r   r7   r*   ÚcosÚdotÚ	transposer  Úassert_allclose)Ú
rff_outputrú   ÚWrc   Úscalerq   Ú
output_refrF   rF   rG   Ú_rff_hypothesis_test  s    
 zBTestLayers.testRandomFourierFeatures.<locals>._rff_hypothesis_testr@  r   ÚGaussianFillrn   rx   r   ZCosZScaler  )r*   rp  r,   rY   ÚsqrtrW   r   r2   rå   r)   r%   ZRandomFourierFeaturesr'   r(   r0   r3   r   rm   r   r7   r®   Úwrc   rq   r4   r5   )r<   rl  ru  rr   rv  rƒ  rú   r  r=   rý   r  rB   rC   Úinit_ops_listrs   r€  rc   Úfc_specZcosine_specZ
scale_specrl   rD   rE   rF   rF   rG   ÚtestRandomFourierFeaturesˆ  sV    þþ

þÿÿÿýz$TestLayers.testRandomFourierFeaturesr   )rl  ru  rr   Úsr  Úset_weight_as_global_constantc                 C   s  dd„ }t jj||fd t j¡}|  t t j|ff¡¡}	t |	|g¡ |	 	¡ d }
| j
j|	||||d}t ¡ | j
_|  t t j|ff¡|¡ |  ¡ \}}t |¡ t | j
jdd¡ |rät | j
jd ¡}t | j
jd	 ¡}n(t | j
jd j¡}t | j
jd j¡}td
|
d d gd ƒ}tdd d ƒ}tdd d ƒ}tdd | 	¡ ƒ}tdd d dt|d ƒiƒ}tdd | 	¡ ƒ}|dkr†|||g}n |dkrš||g}n||||g}|  ||¡ ||ƒ ||||ƒ |  ¡ }|  ||¡ ||ƒ ||||ƒ |  ¡ }|  ||¡ ||ƒ ||||ƒ d S )Nc           
      S   s˜   t  | ¡}t |t |¡¡| }t ||¡}|dkrTt ||dk|dkgddg¡}n"t ||dk|dkgddd„ g¡}t ||¡}	tj	||	ddd dS )a[  
            Runs hypothesis test for Arc Cosine layer.

            Inputs:
                ac_output -- output of net after running arc cosine layer
                X -- input data
                W -- weight parameter from train_init_net
                b -- bias parameter from train_init_net
                s -- degree parameter
            r   r   c                 S   s   | d|   S ©Nr   rF   ©ÚxrF   rF   rG   Ú<lambda>ö  ó    zYTestLayers.testArcCosineFeatureMap.<locals>._arc_cosine_hypothesis_test.<locals>.<lambda>rw  rx  N)
r   r7   r*   Úmatmulr}  ÚpowerÚ	piecewiseÚmultiplyr  r~  )
Ú	ac_outputrú   r€  rc   rŠ  Ú
net_outputÚx_randÚx_powÚh_rand_featuresr‚  rF   rF   rG   Ú_arc_cosine_hypothesis_testÞ  s    
þ
þzGTestLayers.testArcCosineFeatureMap.<locals>._arc_cosine_hypothesis_testrm  r   )rŠ  r  r‹  Úinit_netrJ  Z#arc_cosine_feature_map_fixed_rand_WZ#arc_cosine_feature_map_fixed_rand_brx   rQ  ÚReluÚPowÚexponentr   ÚMul)r*   rp  Únormalr,   rY   rW   r   r2   rå   r)   r%   ZArcCosineFeatureMapr'   r(   r0   r3   r   r6   Úcreate_init_netr7   r[  r®   Úrandom_wÚrandom_br   r"  rm   r4   r5   )r<   rl  ru  rr   rŠ  r  r‹  rš  rú   r=   rý   r•  rB   rC   r€  rc   rˆ  Úsoftsign_specÚ	relu_specZrelu_spec_outputÚpow_specÚmul_specrl   rD   rE   rF   rF   rG   ÚtestArcCosineFeatureMapÓ  sr    ûþ

ÿ
ÿ
ý
þüz"TestLayers.testArcCosineFeatureMap)rl  ru  rr   rŠ  r  r‹  Úuse_struct_inputc              
      sv  ‡ fdd„}t jj||fd t j¡}	|r„t jj||fd t j¡}
|	|
g}ˆ  t dt t j|ff¡fdt t j|ff¡f¡¡}n"|	}
|	g}ˆ  t t j|ff¡¡}t 	||¡ ˆ j
j||||||d}t ¡ ˆ j
_ˆ  t dt t j|ff¡fdt t j|ff¡f¡|¡ tdd d ƒtdd d ƒtdd d ƒtdd d ƒg}ˆ  ¡ \}}t ˆ j
jd	d
¡ |rÒˆ  ||d d… ¡}t ˆ j
jd ¡}t ˆ j
jd ¡}tdd d d gd ƒ}tdd |d jd |d jd gd ƒ}n€ˆ  ||¡}t ˆ j
jd j¡}t ˆ j
jd j¡}tdd |d jd |d jd gd ƒ}tdd |d jd |d jd gd ƒ}tdd d ƒ}tdd d ƒ}tdd |j ¡ ƒ}tdd d dt|d ƒiƒ}tdd |j ¡ ƒ}tdd |j ¡ ƒ}|dkrÔ|||||g}n(|dkrì||||g}n||||||g}ˆ  ||¡ || ¡ |	|
|||ƒ ˆ  ¡ }ˆ  ||¡ || ¡ |	|
|||ƒ ˆ  ¡ }ˆ  ||¡ || ¡ |	|
|||ƒ d S )Nc                    sÞ   t  | ¡}t  ˆ jjd j¡}t  ˆ jjd j¡}t |t |¡¡| }	t |t |¡¡| }
t 	|	|¡}|dkr’t 
|	|	dk|	dkgddg¡}n"t 
|	|	dk|	dkgddd„ g¡}t t ||¡|
¡}tj||ddd dS )aà  
            Runs hypothesis test for Semi Random Features layer.

            Inputs:
                srf_output -- output of net after running semi random features layer
                X_full -- full input data
                X_random -- random-output input data
                rand_w -- random-initialized weight parameter from train_init_net
                rand_b -- random-initialized bias parameter from train_init_net
                s -- degree parameter

            r   r   c                 S   s   | d|   S rŒ  rF   r  rF   rF   rG   r  t  r  zYTestLayers.testSemiRandomFeatures.<locals>._semi_random_hypothesis_test.<locals>.<lambda>rw  rx  N)r   r7   r%   r®   Ú	learned_wÚ	learned_br*   r‘  r}  r’  r“  r”  r  r~  )Ú
srf_outputÚX_fullÚX_randomÚrand_wÚrand_brŠ  r–  rª  r«  r—  Zx_learnr˜  r™  r‚  re   rF   rG   Ú_semi_random_hypothesis_testT  s"    
þ
þzGTestLayers.testSemiRandomFeatures.<locals>._semi_random_hypothesis_testrm  Úfullrp  )rŠ  Zscale_randomZscale_learnedr‹  r„  rn   r›  rJ  r   Z!semi_random_features_fixed_rand_WZ!semi_random_features_fixed_rand_brx   r   r   r   rQ  rœ  r  rž  rŸ  )r*   rp  r   r,   rY   rW   r   r'   r2   rå   r%   ZSemiRandomFeaturesr(   r0   r   r3   r   r6   r¡  rm   r7   r[  rq   r®   r¢  r£  r)   r"  r²  r4   r5   )r<   rl  ru  rr   rŠ  r  r‹  r©  r±  r­  r®  Ú
input_datar=   r¬  r‡  rB   rC   rs   r¯  r°  Zfc_random_specZfc_learned_specr¤  r¥  Zrelu_output_specr¦  Zmul_interim_specr§  rl   rD   rE   rF   re   rG   ÚtestSemiRandomFeaturesH  sò    &ÿ
ÿ
ÿü	
ÿú	
ÿ
ÿü÷



ü
ÿ
ÿÿÿÿÿÿÿ
û
üú
  ÿ  ÿ  ÿz!TestLayers.testSemiRandomFeaturesc                 C   s˜  d}d}d}d}d}d}d}d}d}	d}
d}d }d }|   t tj|||ff¡¡}tj ||||f¡ tj¡}t ||g¡ | jj	||||||	|
|||dd}|  
t tj|ff¡|¡ |  ¡  t |¡}| ¡ d j|||fksät‚|ƒ j||||fksüt‚|  ¡ \}}|  |td	d d ƒtd
d d ƒg¡}td| ¡ d |d jd |d jd g| ¡ ƒ}|  ||g¡ |  ¡ }|  ||g¡ |  ¡ }|  ||g¡ d S )Né2   r   r   rô   r   r   ZNHWC)	Úkernel_hÚkernel_wÚstride_hÚstride_wÚpad_tÚpad_bÚpad_rÚpad_lrü   Z
XavierFillr˜   ÚConv)rW   r   r2   r*   rY   rp  r,   rå   r%   r¾  r0   ræ   r  rX  rT  r\   r3   rk   r   r)   rq   r5   r4   )r<   rl  ÚHr€  ÚCrr   r¶  r·  r¸  r¹  rº  r»  r¼  r½  r=   rú   Úconvr  rB   rC   rs   Z	conv_specrE   rD   rF   rF   rG   ÚtestConvû  sr    õþ


þþ
ýùzTestLayers.testConv)ÚnumÚfeed_weightÚuse_inv_var_parameterizationÚuse_log_barrierÚenable_diagnosec                    sR  |   t ˆ ¡¡}tj ˆ ¡}	t |dd„ |	D ƒ¡ |rBtj ˆ ¡nd }
| jj||
|rXdnd|rbdnd|d}|  d¡\}}t	 
|¡ t	 
|¡ t	 |ƒ ¡}|sºt ‡ fd	d„tˆ ƒD ƒ¡}
t |
|	 d
t d
|
 ¡  ¡}tj||ddd |r8t| jjƒˆ kst‚t dd„ | jjD ƒ¡ ¡ }tj||
ddd nt| jjƒdksNt‚d S )Nc                 S   s   g | ]}t  |¡ t j¡‘qS rF   ©r*   r+   r,   rY   ©r)  rŽ  rF   rF   rG   r+  T  s     z1TestLayers.testAdaptiveWeight.<locals>.<listcomp>Zinv_varZlog_stdZlog_barrierZpos_grad_proj)ÚweightsZestimation_methodZpos_optim_methodrÇ  Tc                    s   g | ]}d ˆ  ‘qS )r!   rF   ro  ©rÃ  rF   rG   r+  g  s     r    ç-Cëâ6?©rz  ry  c                 S   s   g | ]}t  |¡‘qS rF   )r   r7   )r)  rc   rF   rF   rG   r+  m  s     r   )rW   r   ÚRawTupler*   rp  rå   r%   ZAdaptiveWeightr3   r   r6   r7   r+   r1  r2  rB  r  r~  ry   Zad_hoc_plot_blobsr\   Úflatten)r<   rÃ  rÄ  rÅ  rÆ  rÇ  ÚgcÚdcr=   r  rÊ  rí   rB   rC   ÚexpectedZreconst_weights_from_ad_hocrF   rË  rG   ÚtestAdaptiveWeightD  sD     ÿ

÷

 ÿ   ÿzTestLayers.testAdaptiveWeightrÃ  c                 C   s    |   t |¡¡}tj |¡}t |dd„ |D ƒ¡ tj |¡}| jj||d}|  d¡\}}	t	 
|¡ t	 
|	¡ t	 |ƒ ¡}t || ¡}
tj|
|ddd d S )Nc                 S   s   g | ]}t  |¡ t j¡‘qS rF   rÈ  rÉ  rF   rF   rG   r+  z  s     z1TestLayers.testConstantWeight.<locals>.<listcomp>©rÊ  TrÌ  rÍ  )rW   r   rÎ  r*   rp  rå   r%   ZConstantWeightr3   r   r6   r7   r2  r  r~  )r<   rÃ  rÐ  rÑ  r=   r  rÊ  rí   rB   rC   rÒ  rF   rF   rG   ÚtestConstantWeightu  s     ÿ

zTestLayers.testConstantWeighti'  c                 C   sŠ  |   t d¡¡}tj d¡}t |dd„ |D ƒ¡ ttj ¡ d d ƒ}ttj ¡ d d|  d ƒ}tj ¡ }tj ¡ | d }| jj|||||d}	|  	d	¡\}
}t
 |
¡ t
 |¡ t
j| ¡ |d
 t
 |	ƒ ¡}t
j| ¡ || d
 t
 |	ƒ ¡}|| d }|| d }||d  ||d   }d| | d }|d|  d }||d  ||d   }tj||ddd tj||ddd d S )Nr   c                 S   s   g | ]}t  |¡ t j¡‘qS rF   rÈ  rÉ  rF   rF   rG   r+  ‹  s     z1TestLayers.testHomotopyWeight.<locals>.<listcomp>g      Y@r   g     @@gñhãˆµøä>)Ú
min_weightÚ
max_weightÚ	half_lifeÚ	quad_lifeTr  r@  r   r   g      @g{®Gáz„?rÍ  )rW   r   rÎ  r*   rp  rå   Úintr%   ZHomotopyWeightr3   r   r6   r  r  ÚNamer7   r  r~  )r<   rÐ  rÑ  r=   r  rØ  rÙ  rÖ  r×  rí   rB   rC   Zhalf_life_resultZquad_life_resultÚalphaÚbetaZexpected_half_life_resultZexpected_quad_life_resultrF   rF   rG   ÚtestHomotopyWeight…  sT     ÿ
û

   ÿ   ÿzTestLayers.testHomotopyWeightc                    sà   |   t tjdf¡¡}tjj||d tj¡}t ||g¡ |rDdn||f}tj |¡‰ | j	 
|ˆ ¡}|  d¡\}}	t |¡ t |	¡ t |ƒ ¡}
|r²t ‡ fdd„|D ƒ¡}nt ‡ fdd„|D ƒ¡}tj||
ddd	 d S )
NrJ   rm  r   Tc                    s$   g | ]}|d krˆ d nˆ d ‘qS )r   r   r   rF   rÉ  ©Zsmooth_matrixrF   rG   r+  ½  s   ÿz/TestLayers._testLabelSmooth.<locals>.<listcomp>c                    s   g | ]}ˆ t |ƒ ‘qS rF   )rÚ  rÉ  rß  rF   rG   r+  Ã  s     rÌ  rÍ  )rW   r   r2   r*   rY   rp  rq  r,   rå   r%   ZLabelSmoothr3   r   r6   r7   r+   r  r~  )r<   Ú
categoriesZbinary_prob_labelÚbszrI   Zlabel_npZsmooth_matrix_shapeZsmoothed_labelrB   rC   Zsmoothed_label_nprÒ  rF   rß  rG   Ú_testLabelSmooth®  s&    ÿ


þÿzTestLayers._testLabelSmooth)rà  rá  c                 C   s   |   |d|¡ d S )NF©râ  )r<   rà  rá  rÐ  rÑ  rF   rF   rG   Ú"testLabelSmoothForCategoricalLabelÆ  s    z-TestLayers.testLabelSmoothForCategoricalLabelrá  c                 C   s   |   dd|¡ d S )Nr   Trã  )r<   rá  rÐ  rÑ  rF   rF   rG   Ú!testLabelSmoothForBinaryProbLabelÎ  s    z,TestLayers.testLabelSmoothForBinaryProbLabel)rk  rl  r‰   Úseedc                    sn  ‡‡fdd„}t j |¡ t t jˆff¡‰tj‡fdd„tˆƒD ƒŽ }‡ ‡fdd„tˆƒD ƒ‰|  |¡}t 	|ˆ¡ | j
 |¡}|  t| j
jƒd¡ t |ˆ¡s¦t‚|  ¡ \}	}
t |	¡ t |
¡ t |ƒ ¡}tj|ƒ |dd |  ¡  t |ƒ ¡}tj|ƒ |dd |  ¡ }t |¡ t |ƒ ¡}tj|ƒ |dd |  ¡ }t |¡ t |ƒ ¡}tj|ƒ |dd d S )	Nc                     sn   g ‰ t ˆƒD ]:} d | ¡}t |¡s2td |¡ƒ‚t |¡}ˆ  |¡ qtj‡‡ fdd„t ˆƒD ƒdd}|S )Nzblob_weighted_sum/w_{0}zcannot fine blob {}c                    s   g | ]}ˆ | ˆ|  ‘qS rF   rF   )r)  r   )r³  rÊ  rF   rG   r+  ç  s    zQTestLayers.testBlobWeightedSum.<locals>.get_blob_weighted_sum.<locals>.<listcomp>r   r†   )	r1  Úformatr   ZHasBlobr\   r7   r5  r*   r2  )r*  Zw_blob_namer†  rí   )r³  rk  rÔ  rG   Úget_blob_weighted_sumÝ  s    
ÿ
ÿþz=TestLayers.testBlobWeightedSum.<locals>.get_blob_weighted_sumc                    s   g | ]}ˆ ‘qS rF   rF   ro  )ri   rF   rG   r+  ï  s     z2TestLayers.testBlobWeightedSum.<locals>.<listcomp>c                    s$   g | ]}t j ˆ ˆf¡ t j¡‘qS rF   )r*   rp  r,   rY   ro  )rl  r‰   rF   rG   r+  ñ  s   ÿr   r   )Údecimal)r*   rp  ræ  r   r2   rY   rO  r1  rW   rå   r%   ZBlobWeightedSumr0   ry   r®   r4  r\   r3   r   r6   r7   r  r!  ræ   r4   r5   )r<   rk  rl  r‰   ræ  rè  rs  r=   Z	ws_outputrB   rC   rq   rD   Zpred_netrF   )rl  ri   r³  r‰   rk  rG   ÚtestBlobWeightedSumÕ  s<    ÿþ




zTestLayers.testBlobWeightedSumc                 C   s@  d}d}dddg}d}d}dd	d
g}d}d}dddg}	dddg}
|   t |t tjtj¡f|t tjt tj¡¡f|t tjt tjtj¡¡f¡¡}|tj	|||
df|tj	|||
df|tj	||	|
dfg}| j
 ||¡ |t|t|ƒƒg|t|t|ƒƒg|t|t|	ƒƒgi}|  t| j
jƒd¡ |  | j
jd  ¡ |¡ d S )Nrp   ÚFLOATr   r   r   Zid_list_featuresZID_LISTr   r   r   Zid_score_list_featuresZID_SCORE_LISTr   r   r   rb   rc   rd   )Zfeature_typerc  Úfeature_namesr   )rW   r   r'   r±   r*   r-   rY   r1   r.   rf  r%   ZFeatureSparseToDenser   Úsetr0   ry   r®   Zget_accessed_features)r<   Zfloat_features_columnZfloat_features_typeZfloat_features_idsZid_list_features_columnZid_list_features_typeZid_list_features_idsZid_score_list_features_columnZid_score_list_features_typeZid_score_list_features_idsrì  r=   Zinput_specsZexpected_accessed_featuresrF   rF   rG   Ú+testFeatureSparseToDenseGetAccessedFeatures	  sr    



ÿÿü
ýþ	ýþ	ýþïÿÿÿû	þz6TestLayers.testFeatureSparseToDenseGetAccessedFeaturesc              
      s¦   dd„ ‰ dd„ ‰‡ ‡fdd„}t  | jjt  t jtjt jddd	tj	¡¡}|  
t|ƒƒ ||ƒ¡ t  | jjt  t jtjt jddd	¡¡}|  
t|ƒƒ ||ƒ¡ d S )
Nc                 S   s
   t | tƒS ©N)r	   r   ©r=   rF   rF   rG   Ú_is_id_listX	  s    z,TestLayers.test_get_key.<locals>._is_id_listc                 S   s   t | tddS )NF)Zcheck_field_types)r	   r   rð  rF   rF   rG   Ú_is_id_score_list\	  s    þz2TestLayers.test_get_key.<locals>._is_id_score_listc                    s.   ˆ | ƒr|   ¡ }nˆ| ƒr$|  ¡ }ntƒ ‚|S rï  )r8   r²   ÚNotImplementedError)r=   Z
sparse_key©rñ  rò  rF   rG   Úold_get_sparse_key_logica	  s    

z9TestLayers.test_get_key.<locals>.old_get_sparse_key_logicr¢   r“   r•   )r   r$   r%   r&   r±   r2   r*   r.   rš   rY   r0   r
   r1   )r<   rõ  Zid_score_list_recordZid_list_recordrF   rô  rG   Útest_get_keyW	  s@    	ÿþùþþ
þÿþ
þzTestLayers.test_get_keyc           	   
   C   sð   t  | jjt  t jtjt jdddtj	¡¡}d}| jj
||gddd}t  ¡ | j_|  t  tj	|ff¡|¡ |  ¡ \}}|  |tdd d ƒtd	d d ƒg¡}td
|d jd | ¡ | ¡ | ¡ g|ƒ gƒ}|  ||g¡ |  ¡ }|  ||g¡ d S )Nr¢   r“   r•   r£   r—   T)Zuse_external_weightsrn   r˜   r¸   r   )r   r$   r%   r&   r±   r2   r*   r.   rš   rY   rœ   r'   r(   r0   r3   rk   r   rq   r@   r²   r9   r5   r¤   rF   rF   rG   Ú0testSparseLookupWithAttentionWeightOnIdScoreList‹	  sN    
þûþ
   ÿ ÿþüø
z;TestLayers.testSparseLookupWithAttentionWeightOnIdScoreListc                 C   sx  t  | jjt¡}t  ¡ | j_| ¡ d }| ¡ d }t 	dgd ¡ 
tj¡}t 	ddddddd	d
ddg
¡ 
tj¡}t ||¡ t ||¡ | jj|dddddd}|  t  t  tj¡¡|¡ |  ¡ \}}|  ¡ }	|  ¡ }
t |¡ t |¡ t | ¡ ¡}t | ¡ ¡}|  ||¡ |  ||¡ t |	¡ t |
¡ t d¡}t d¡}|  |t 	dgd ¡ 
tj¡¡ |  ||¡ d S r   )r   r$   r%   r&   r   r'   r(   r)   r*   r+   r,   r-   r.   r   r/   Z$SparseItemwiseDropoutWithReplacementr0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   rF   rF   rG   Ú(testSparseItemwiseDropoutWithReplacement´	  s@    &     ÿ





 z3TestLayers.testSparseItemwiseDropoutWithReplacementN)SÚ__name__Ú
__module__Ú__qualname__rH   r`   rf   rj   rm   rt   r‚   rŒ   r   r   r¡   r¥   r   ÚstZbooleansZintegersr°   r³   r·   r¹   r¼   r¾   r¿   rÇ   rÊ   rÎ   rÐ   rÖ   rÛ   rÞ   rß   rê   rî   rñ   rò   rõ   rø   rù   ÚhuZarraysrÿ   r  r  r   r  r%  r&  r8  r?  rD  rN  rP  rU  rV  rZ  r\  r^  r_  r`  rb  rg  rj  rt  Zfloatsr‰  r¨  r´  rÂ  ZgcsrÓ  rÕ  rÞ  râ  rä  rå  rê  rî  rö  r÷  rø  rF   rF   rF   rG   r   &   s>  "L"P((ü
þ
300)]	
ÿ
Nþ
þ
þ%OD*
þ
A

þ
ü
Eú
mù	
 +Iûú(

'þý
ÿþ

ü
9C4)r   )'Zhypothesis.strategiesZ
strategiesrü  Znumpyr*   Znumpy.testingrì   r  Z
hypothesisr   r   Z"caffe2.python.hypothesis_test_utilÚpythonZhypothesis_test_utilrý  Zcaffe2.pythonr   r   r   r   Zcaffe2.python.layers.layersr   r	   r
   r   r   r   r   r   Zcaffe2.python.layers.tagsr   Zcaffe2.python.layer_test_utilr   r   ÚloggingÚ	getLoggerrù  Úloggerr   rF   rF   rF   rG   Ú<module>   s   (

