a
    ==ic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*g dR¢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 i 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   sh  t  | jjt¡}t  ¡ | j_| ¡ d }| ¡ d }t 	dgd ¡ 
tj¡}t 	g d¢¡ 
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   é   é
   )
r   é   é   é   é   é   é   é   é	   r   ç        ç      à?ç      ð?éÿÿÿÿ)Ú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   új/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/layers_test.pyÚ testSparseDropoutWithReplacement'   s6    ÿ





 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
v slJ ‚|  t tjtƒ f¡| jj
j¡ |  || jj
j¡ | j 	|d¡ d| jj
v s¼J ‚|  t tjtƒ f¡| jj
j¡ |  || jj
j¡ | j 	tjtjt d¡d	d¡ d
| jj
v s J ‚|  t tjtƒ f¡| jj
j¡ t d¡| jj
 ¡ v s\J ‚| j 	t dtjtjt d¡d	f¡d¡ d| jj
v s˜J ‚|  t dt tjtƒ f¡f¡| jj
j¡ t d¡| jj
 ¡ v sÞJ ‚tjtjt d¡d	}tjtjt d¡d	}tjdg||g¢R Ž }| j 	|d¡ d| jj
v s@J ‚|  t dt tjtƒ f¡fdt tjtƒ f¡f¡| jj
j¡ t d¡| jj
 ¡ v sšJ ‚t d¡| jj
 ¡ v s¶J ‚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_1Zloss_in_tupleÚaddLoss_auto_2Úloss_in_tuple_0Úloss_in_tuple_1)Ú
new_recordr   r'   r2   r*   Úfloat64Úfloat32r%   ÚBatchLRLossZadd_lossÚlossr0   ÚtuplerN   rO   r   ÚBlobReferencerQ   r)   rR   Ú
NamedTuplerS   )r<   Zinput_record_LRZloss_LRrT   rU   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 d   ƒ n1 s¬0    Y  d S )NÚstructZscalar)r%   Zadd_output_schemar   r'   r0   r(   r2   r*   rW   ÚassertRaisesÚAssertionError)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*   rX   r3   rj   r   Úoutputr)   r5   )r<   Úoutput_dimsZfc_without_biasrB   rC   Úinit_opsZmat_mul_specrE   rF   rF   rG   ÚtestFCWithoutBiasÔ   s2    
ÿþ
ÿþ
þú	zTestLayers.testFCWithoutBiasc                 C   s–  d}| j j| j jj|ddd}|| j _|  t|ƒd¡ t d¡|d  	¡ d ksTJ ‚t d¡|d  	¡ d ksrJ ‚t d	¡|d  	¡ d ksJ ‚t d
¡|d  	¡ d ks®J ‚|  
¡ \}}t | j ¡}| ¡ }| ¡ }|j}|j}	g d¢}
g d¢}t|ƒt|
ƒksJ ‚t|	ƒt|ƒksJ ‚|j|jks0J ‚|jtƒ ksBJ ‚t|
ƒD ]\}}|| j|ksJJ ‚qJt|ƒD ]\}}|	| j|ksrJ ‚qrd S )Nr   r   r"   )rq   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   )ÚShapeÚGivenTensorInt64FillÚGatherÚGivenTensorIntFillrx   ÚCastÚSubÚUniformIntFillrw   ÚFCr{   rw   r|   )ru   rv   rw   rx   rx   ry   rz   r{   r|   r{   r|   )r%   ZFCWithBootstraprn   ro   r(   r0   Úlenr   r\   r)   r3   r   Úgenerate_predict_netÚProtoÚopZexternal_inputZexternal_outputÚlistÚ	enumerateÚtype)r<   rq   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ö   sB    üÿÿÿÿ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©rV   r   r'   r2   r*   rX   r%   r|   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)rt   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 g d¢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/w)r   r   r   r   r   r   r   r   )r   r$   r%   r&   r'   ZListWithEvictedr2   r*   r.   ÚMetadatar•   r–   r9   Úgetr8   Z_evicted_valuesr+   r,   r-   r   r/   ÚSparseLookupr(   r0   rX   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_initÚ
new_valuesZembedding_after_trainingrF   rF   rG   Ú&testSparseLookupSumPoolingWithEviction†  sF    
ÿÿÿÿÿþ


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›   rm   rœ   ZSparseLengthsSumr   )r   r$   r%   r&   r'   r1   r2   r*   r.   rž   r    r•   r–   r(   r0   rX   r3   rj   r   rp   r8   r9   r5   ©	r<   r¢   r£   r¤   rB   rC   rr   Zsparse_lookup_op_specrE   rF   rF   rG   ÚtestSparseLookupSumPooling®  sH    
ÿÿÿÿÿþ

þþ

ýù	z%TestLayers.testSparseLookupSumPoolingéd   éÈ   )Ú	min_valueÚ	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u 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   r}   Ú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ž   rX   r´   r(   r0   r}   rµ   r¶   Úkeysrš   r˜   r3   )r<   r¯   r°   r¢   r(   rB   rC   rF   rF   rG   Ú testSparseFeatureHashIdScoreListø  s(    
ÿÿýÿýÿz+TestLayers.testSparseFeatureHashIdScoreListc                 C   s†   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 d  ƒ n1 sx0    Y  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ž   rf   rg   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œ   rm   ZLengthsRangeFillrw   ÚSparseLengthsWeightedSum)r   r$   r%   r&   r'   r1   r2   r*   r.   rž   r•   r–   r»   r¸   r
   Zposition_weightsr9   r    r(   r0   rX   r3   rj   r   r5   )	r<   r¢   Zsparse_segmentZpos_w_layerr£   r¤   rB   rC   rE   rF   rF   rG   Ú(testSparseLookupPositionWeightedOnIdList!  sX    
ÿÿÿÿ	ýÿþ


ýþ


ý


ý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»   rm   rœ   r¿   r   ©r   r$   r%   r&   r'   r¸   r2   r*   r.   rž   rX   r    r•   rÁ   r(   r0   r3   rj   r   rp   r@   r¹   r9   r5   r©   rF   rF   rG   Ú-testSparseLookupPositionWeightedOnIdScoreListT  sR    ÿþùÿÿÿþ

þþ


üø
z8TestLayers.testSparseLookupPositionWeightedOnIdScoreListc                 C   s†   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 d  ƒ n1 sx0    Y  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Ä   rm   rœ   r¿   r   rÂ   r©   rF   rF   rG   Ú,testSparseLookupRecencyWeightedOnIdScoreList–  sR    ÿþùÿÿÿþ

þþ


üø
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*   rX   ÚPairwiseSimilarityr0   r3   rj   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}g d¢}| 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Ð   r   Úindices_to_gatherrÈ   rÉ   ZBatchGather)r%   Zadd_global_constantÚstrr&   ZNextScopedBlobr*   r-   r   r2   r}   r$   r'   rX   rË   r0   r3   rj   r   )	r<   r£   Z
output_idxZoutput_idx_blobrÓ   r¢   rÍ   rB   rC   rF   rF   rG   Ú2testPairwiseSimilarityWithXandYEmbeddingsAndGatherö  sD    ýþÿÿù	ÿþ


ýz=TestLayers.testPairwiseSimilarityWithXandYEmbeddingsAndGatherc                 C   sÄ   d}t  | jjt  dt  tjd|ff¡f¡¡}|  t	¡ | j 
|d¡ W d   ƒ n1 s\0    Y  t  | jjt  dt  tj¡f¡¡}|  t	¡ | j 
|d¡ W d   ƒ n1 s¶0    Y  d S )Nr¨   rÏ   r   é   rÇ   )r   r$   r%   r&   r'   r2   r*   rX   rf   rg   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)rV   r   r'   r2   r*   rX   r%   ÚConcatr0   r}   Úfields)r<   r£   r=   rp   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_probr|   r   rm   r   rw   ÚLogrz   r   r   )rV   r   r2   r*   r-   rX   r%   ZSamplingTrainr'   rn   ro   r(   r0   r}   rµ   r3   rj   r   rp   Z_prediction_layerZtrain_param_blobsr)   rÞ   r5   )r<   rq   rß   rà   Z
sampled_fcrB   rC   rr   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   ©rV   r   r'   r2   r*   rW   rX   r%   rY   r0   r[   ©r<   r=   rZ   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g d¢tjd}tjg d¢tjd}tjg d¢tjd}t 	||||g¡ | j
 |¡}|  ¡  |  t tjtƒ f¡|¡ d S )NÚpos_predictionrJ   Úneg_prediction©çš™™™™™¹?çš™™™™™É?ç333333Ó?rÒ   ©r   r   r   )rê   rë   rì   gš™™™™™Ù?r    g333333ã?)rV   r   r'   r2   r*   rX   r1   r+   r-   Ú
FeedRecordr%   ZMarginRankLossÚrun_train_net_forward_onlyr0   r[   )r<   r=   Ú	pos_itemsÚneg_lengthsÚ	neg_itemsrZ   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g d	¢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é   zbpr_loss/outputgI×L¾Ùæó?)rV   r   r'   r2   r*   rX   r1   r+   r-   rî   r%   ZBPRLossrï   r0   r[   r   r7   ÚtestingZassert_array_almost_equal)r<   r=   rð   rñ   rò   rZ   Ú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   )rV   r   r'   r2   r*   rW   rX   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ø   )
rV   r   r'   r2   r*   rX   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ù   )
rV   r   r'   r2   r*   rX   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ü   ÚsoftmaxrZ   )
rV   r   r'   r2   r*   rX   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ÿ   rZ   )rV   r   r'   r2   r*   rX   r[   rW   r%   r   r0   rä   rF   rF   rG   ÚtestBatchSoftmaxLossWeightþ  s    ýþýz%TestLayers.testBatchSoftmaxLossWeightr   r   )Ú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)rV   r   r2   r*   rX   rî   r%   ZBatchNormalizationr0   r'   r(   r3   rj   r   r)   rp   r4   r5   r   r6   )r<   r  r=   Z	bn_outputrB   rC   rr   Ú
input_blobÚoutput_blobZexpand_dims_specZtrain_bn_specZtest_bn_specZsqueeze_specrD   rE   rF   rF   rG   ÚtestBatchNormalization
  s|    



üþ
ýÿ 
ûÿ
ûýþþþ


z!TestLayers.testBatchNormalization)r   r   r   )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)ÚreshaperV   r   r2   r*   rX   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   )rV   r   r2   r*   rX   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   sv  t jg d¢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g d¢t jd}t |j|g¡ tj|	 ¡ jd	d
 t |j¡}
t d	g|
ƒ ¡ d S )N)r   r   r   r   r   rÒ   r¢   ÚdenseÚ	object_idr   )rÜ   Údatar   ©Znum_iterr   )r   r   r   r   r   )r*   r+   r.   rV   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  sL    
ÿüÿÿþÿÿÿ

z&TestLayers.testReservoirSamplingWithIDc                 C   sÎ   |   t tj¡¡}tjg d¢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 )N)r   r   é   é   rˆ   éc   rÒ   rˆ   r«   )rV   r   r2   r*   r-   r+   rî   r%   ÚUniformSamplingrZ   Úrun_train_netr   r7   Úsamplesrà   r0   r}   rõ   r  Úassert_almost_equalÚfloatrX   )r<   r=   Zinput_arrayÚnum_samplesÚnum_elementsZuniform_sampling_outputr*  rà   rF   rF   rG   ÚtestUniformSampling©  s,    ÿÿÿýzTestLayers.testUniformSamplingc                 C   sX   |   t tj¡¡}d}d}|  t¡  | j |||¡ W d   ƒ n1 sJ0    Y  d S )Nr¬   r«   )	rV   r   r2   r*   r-   rf   rg   r%   r(  )r<   r=   r-  r.  rF   rF   rG   Ú*testUniformSamplingWithIncorrectSampleSize¾  s
    z5TestLayers.testUniformSamplingWithIncorrectSampleSizec                    sÜ  t jg d¢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 }qhˆ |¡ qNt |jjj ¡ ¡}t j t  ‡‡‡fdd„|D ƒ¡|¡ d S )N)r   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>ã  ó    z/TestLayers.testGatherRecord.<locals>.<listcomp>c                    s   g | ]}ˆ ||d  … ‘qS rJ   rF   r2  )r9   rF   rG   r5  ç  r6  c                    s(   g | ] }ˆ ˆ| ˆ| ˆ|  … ‘qS rF   rF   r2  )r8   r9   ÚoffsetsrF   rG   r5  í  s   ÿc                    s(   g | ] }ˆ ˆ| ˆ| ˆ|  … ‘qS rF   rF   r2  )Úitems_lengthsr9   r7  rF   rG   r5  õ  s   ÿr   r   c                    s(   g | ] }ˆ ˆ| ˆ| ˆ|  … ‘qS rF   rF   r2  )Úitems_itemsÚnested_lengthsÚnested_offsetsrF   rG   r5    s   þÿ) r*   r+   r-   r   ÚrangerX   r  Úsumr.   rV   r   r'   r2   r1   rî   r%   ZGatherRecordÚ
assertTrueÚequal_schemasrï   r   r7   r  rõ   r  Zconcatenater•   r9   r8   Zcumsumr1  Ú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   r9  r8  r9   r:  r;  r7  rG   ÚtestGatherRecordÅ  sž     þ
úþÿþÿ
ÿþ
ÿþüÿþû
ÿýúzTestLayers.testGatherRecordc                 C   sô  |   t tj¡¡}| jj|ddj}t ¡ | j_	|  
¡ \}}t |tjg d¢tjdg¡ t |¡ t |¡ t |ƒ ¡}tj tjg d¢tjd|¡ t |tjg d¢tjdg¡ t |¡ t |ƒ ¡}tj tjg d¢tjd|¡ |  ¡ }t |tjg d¢tjdg¡ t |¡ t |ƒ ¡}tj tjg d	¢tjd|¡ t |tjg d
¢tjdg¡ t |¡ t |ƒ ¡}tj tjg d¢tjd|¡ |  ¡ }t |tjg d¢tjdg¡ t |¡ t |ƒ ¡}tj tjg d¢tjd|¡ d S )Nr«   )Z	max_index)r   r   rˆ   r'  r&  r%  r   r%  rÒ   )r   r   r   r   r   r   r   r   )r   r   é   é#   é<   r&  r   r&  )r   r   r   r   r   r   r   r   )r   r   rD  rE  rF  r&  r¬   )r   r   r   r   r   r   r   )r   r   rD  r&  ée   és   )r   r   r   r   r   r   )	r   r   rˆ   rD  é—   rE  rF  r&  r¬   )	r   r   r   r   r   r   r   r   r   )rV   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   sT  | j jj}tjddgtjd}t ||g¡ ttj	ƒ | j  
|d¡}W d   ƒ n1 sZ0    Y  | 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%   rn   ro   r*   r+   rX   r   rî   r   ZEXCLUDE_FROM_PREDICTIONrá   ZSelectRecordByContextr'   r   Z
PREDICTIONZTRAININGZEVALr(   r   r~   r   r6   r  r  r  r  Zgenerate_eval_netÚlogr  )r<   ro   Zfloat_arrayZlog_float_featuresrL  rE   Zpredict_outputrD   Zeval_outputÚ_rC   Ztrain_outputrF   rF   rG   ÚtestSelectRecordByContextX  sH    
,üÿ
ÿ

ÿ
ÿÿÿ
ÿ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sjJ ‚|d	 jd
ks|J ‚|d jdksŽJ ‚|d jdks J ‚t|d	 jƒdks¶J ‚|d	 jd	 | j j ¡ ksÔJ ‚t|d jƒdksêJ ‚|d jd	 |d jv sJ ‚d S )Nc                 S   s*   |   |ƒ d¡}| j|ƒ |g|ƒ dd d S )Nr   ©Ú	broadcast)ÚReduceFrontMeanrz   )r&   Z	in_recordZ
out_recordÚmeanrF   rF   rG   Ú	normalizeƒ  s    ýz1TestLayers.testFunctionalLayer.<locals>.normalizer   Z
normalizer©r!  rý   r   r   r   rR  rz   r|   )r%   Z
Functionalrn   ro   Úset_typer*   rX   r|   r(   r   r~   r   r€   r}   rƒ   rÞ   rp   )r<   rT  Ú
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|J ‚|d jdksŽJ ‚|d jdks J ‚|d jd	ks²J ‚t|d jƒdksÈJ ‚|d jd | j j ¡ ksæJ ‚t|d jƒdksüJ ‚|d jd |d jv sJ ‚d S )
Nr   rP  rü   r   r   r   rR  rz   r|   )r%   rR  rn   ro   rz   r   ÚTuplerV  r*   rX   r|   r(   r   r~   r   r€   r}   rƒ   rÞ   rp   )r<   rS  rW  rE   rX  rF   rF   rG   ÚtestFunctionalLayerHelperž  s2    
ÿ
ÿýÿ

ÿz$TestLayers.testFunctionalLayerHelperc                 C   s  | j  t | j jj¡d¡}| ¡ jtj	ks.J ‚| ¡ j
dks@J ‚| j  |d¡| j _t | j ¡}| ¡ j}t|ƒdksxJ ‚|d jdksŠJ ‚|d jdksœJ ‚t|d jƒdks²J ‚|d jd | j j ¡ ksÐJ ‚t|d jƒdksæJ ‚|d jd |d jv sJ ‚d S )Nr   rü   r   r   ÚSoftsignr|   )r%   r\  r   rZ  rn   ro   Ú
field_typeÚbaser*   rX   Úshaper|   r(   r   r~   r   r€   r}   rƒ   rÞ   rp   )r<   ZsoftsignrE   rX  rF   rF   rG   Ú&testFunctionalLayerHelperAutoInference¶  s(    þÿ

ÿz1TestLayers.testFunctionalLayerHelperAutoInferencec                 C   s‚   |   t tjdf¡¡}| j |d¡}| ¡ jtj	ks8J ‚| ¡ j
dksJJ ‚| j |d¡}| ¡ jtjkslJ ‚| ¡ j
dks~J ‚d S )Nrü   r   )rV   r   r2   r*   rX   r%   ZFloatToHalfr]  r^  Úfloat16r_  ZHalfToFloat)r<   rÞ   rp   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%   ÚAveragedLossrn   r0   r}   Úfield_typesr*   rX   r^  r[   r_  ©r<   rZ   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   rK  )r%   Úglobal_constantsÚAddrZ   r)  r   r7   r)   r*   rõ   r  )r<   ÚoneÚ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TopKrn   r0   r}   rd  r*   rX   r^  r_  r-   r)   )r<   rl  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%   rc  rn   r*   rX   r0   r}   rd  r^  r_  re  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)rV   r   r'   r2   r*   rX   r   r%   rÛ   r0   r   )r<   r=   Zconcat_outputZinput_record2Zconcat_output2rF   rF   rG   ÚtestPropagateRequestOnly   s    ýÿþz#TestLayers.testPropagateRequestOnlyc              	   C   sr   t  tj¡}t  |t jddt jg d¢dd¡ t|ƒ |  |j	j
d¡ |  |j	jd¡ |  |j	jjg d¢¡ 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˜   rs  rt  rr  )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   )rw  r   ÚDropoutr    )r  Úratior   )rV   r   r2   r*   rX   rî   r%   rx  r0   r'   r(   r3   r)   r   rj   r4   r5   r   r6   )r<   r  rw  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´J ‚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ž   ©r3  rN  rF   rF   rG   r5  {  s   ýÿÿz4TestLayers.testMergeIdListsLayer.<locals>.<listcomp>F)Zcheck_field_names)r<  r*   ÚrandomÚrandintr,   r-   r=  r.   r@  r   rZ  r$   r%   r&   rî   ZMergeIdListsr?  r   )r<   r{  r|  ÚinputsrN  r9   r~  r@   Úinput_schemar=   r(   rF   rF   rG   ÚtestMergeIdListsLayern  s&    
ýÿþz TestLayers.testMergeIdListsLayerrê   )r|  Ú
input_dimsrq   Ú	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  ÚWra   Úscalerp   Ú
output_refrF   rF   rG   Ú_rff_hypothesis_test  s    
 zBTestLayers.testRandomFourierFeatures.<locals>._rff_hypothesis_testrK  r   ÚGaussianFillrm   r|   r   ZCosZScaler‘  )r*   r€  r,   rX   ÚsqrtrV   r   r2   rî   r)   r%   ZRandomFourierFeaturesr'   r(   r0   r3   r   rl   r   r7   rµ   Úwra   rp   r4   r5   )r<   r|  r…  rq   r†  r“  r  r‘  r=   r  r  rB   rC   Úinit_ops_listrr   r  ra   Úfc_specZcosine_specZ
scale_specrk   rD   rE   rF   rF   rG   ÚtestRandomFourierFeaturesˆ  sV    þþ

þÿÿÿýz$TestLayers.testRandomFourierFeaturesr   )r|  r…  rq   Ú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>ö  r6  zYTestLayers.testArcCosineFeatureMap.<locals>._arc_cosine_hypothesis_test.<locals>.<lambda>r‡  rˆ  N)
r   r7   r*   Úmatmulr  ÚpowerÚ	piecewiseÚmultiplyr  rŽ  )
Ú	ac_outputr  r  ra   rš  Ú
net_outputÚx_randÚx_powÚh_rand_featuresr’  rF   rF   rG   Ú_arc_cosine_hypothesis_testÞ  s    
þ
þzGTestLayers.testArcCosineFeatureMap.<locals>._arc_cosine_hypothesis_testr}  r   )rš  r‘  r›  Úinit_netrU  Z#arc_cosine_feature_map_fixed_rand_WZ#arc_cosine_feature_map_fixed_rand_br|   r\  ÚReluÚPowÚexponentr   ÚMul)r*   r€  Únormalr,   rX   rV   r   r2   rî   r)   r%   ZArcCosineFeatureMapr'   r(   r0   r3   r   r6   Úcreate_init_netr7   rg  rµ   Úrandom_wÚrandom_br   r,  rl   r4   r5   )r<   r|  r…  rq   rš  r‘  r›  r©  r  r=   r  r¤  rB   rC   r  ra   r˜  Úsoftsign_specÚ	relu_specZrelu_spec_outputÚpow_specÚmul_specrk   rD   rE   rF   rF   rG   ÚtestArcCosineFeatureMapÓ  sr    ûþ

ÿ
ÿ
ý
þüz"TestLayers.testArcCosineFeatureMap)r|  r…  rq   rš  r‘  r›  Úuse_struct_inputc              
      st  ‡ 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g d¢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  r6  zYTestLayers.testSemiRandomFeatures.<locals>._semi_random_hypothesis_test.<locals>.<lambda>r‡  rˆ  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’  rc   rF   rG   Ú_semi_random_hypothesis_testT  s"    
þ
þzGTestLayers.testSemiRandomFeatures.<locals>._semi_random_hypothesis_testr}  Úfullr€  )rš  Zscale_randomZscale_learnedr›  r”  rm   rª  rU  r   Z!semi_random_features_fixed_rand_WZ!semi_random_features_fixed_rand_br|   )NNNr   r   r   r\  r«  r¬  r­  r®  )r*   r€  r¯  r,   rX   rV   r   r'   r2   rî   r%   ZSemiRandomFeaturesr(   r0   r   r3   r   r6   r°  rl   r7   rg  rp   rµ   r±  r²  r)   r,  rÁ  r4   r5   )r<   r|  r…  rq   rš  r‘  r›  r¸  rÀ  r¼  r½  Ú
input_datar=   r»  r—  rB   rC   rr   r¾  r¿  Zfc_random_specZfc_learned_specr³  r´  Zrelu_output_specrµ  Zmul_interim_specr¶  rk   rD   rE   rF   rc   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äJ ‚|ƒ j||||fksüJ ‚|  ¡ \}}|  |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)rV   r   r2   r*   rX   r€  r,   rî   r%   rÍ  r0   rï   r  rd  r_  r3   rj   r   r)   rp   r5   r4   )r<   r|  ÚHr  ÚCrq   rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rË  rÌ  r=   r  Úconvr  rB   rC   rr   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J ‚t dd„ | jjD ƒ¡ ¡ }tj||
ddd nt| jjƒdksNJ ‚d S )Nc                 S   s   g | ]}t  |¡ t j¡‘qS rF   ©r*   r+   r,   rX   ©r3  rž  rF   rF   rG   r5  T  r6  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   r  ©rÒ  rF   rG   r5  g  r6  r    ç-Cëâ6?©rŠ  r‰  c                 S   s   g | ]}t  |¡‘qS rF   )r   r7   )r3  ra   rF   rF   rG   r5  m  r6  r   )rV   r   ÚRawTupler*   r€  rî   r%   ZAdaptiveWeightr3   r   r6   r7   r+   r<  r=  rM  r  rŽ  r}   Zad_hoc_plot_blobsÚflatten)r<   rÒ  rÓ  rÔ  rÕ  rÖ  ÚgcÚdcr=   r  rÙ  rö   rB   rC   ÚexpectedZreconst_weights_from_ad_hocrF   rÚ  rG   ÚtestAdaptiveWeightD  s<    ÿ

÷

 ÿÿ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   r5  z  r6  z1TestLayers.testConstantWeight.<locals>.<listcomp>©rÙ  TrÛ  rÜ  )rV   r   rÝ  r*   r€  rî   r%   ZConstantWeightr3   r   r6   r7   r=  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   r5  ‹  r6  z1TestLayers.testHomotopyWeight.<locals>.<listcomp>g      Y@r   g     @@gñhãˆµøä>)Ú
min_weightÚ
max_weightÚ	half_lifeÚ	quad_lifeTr  rK  r   r   g      @g{®Gáz„?rÜ  )rV   r   rÝ  r*   r€  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…  sF    ÿ
û

ÿÿ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   r}  r   Tc                    s$   g | ]}|d krˆ d nˆ d ‘qS )r   r   r   rF   rØ  ©Zsmooth_matrixrF   rG   r5  ½  s   ÿz/TestLayers._testLabelSmooth.<locals>.<listcomp>c                    s   g | ]}ˆ t |ƒ ‘qS rF   )ré  rØ  rî  rF   rG   r5  Ã  r6  rÛ  rÜ  )rV   r   r2   r*   rX   r€  r  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)r{  r|  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¦J ‚|  ¡ \}	}
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 |¡s2J 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   )r3  r…   )rÂ  rÙ  rF   rG   r5  ç  s   zQTestLayers.testBlobWeightedSum.<locals>.get_blob_weighted_sum.<locals>.<listcomp>r   rŠ   )r<  Úformatr   ZHasBlobr7   r@  r*   r=  )r4  Zw_blob_namer–  rö   )rÂ  r{  rã  rG   Úget_blob_weighted_sumÝ  s    
ÿ
ÿþz=TestLayers.testBlobWeightedSum.<locals>.get_blob_weighted_sumc                    s   g | ]}ˆ ‘qS rF   rF   r  )rh   rF   rG   r5  ï  r6  z2TestLayers.testBlobWeightedSum.<locals>.<listcomp>c                    s$   g | ]}t j ˆ ˆf¡ t j¡‘qS rF   )r*   r€  r,   rX   r  )r|  r   rF   rG   r5  ñ  s   ÿr   r   )Údecimal)r*   r€  rõ  r   r2   rX   rZ  r<  rV   rî   r%   ZBlobWeightedSumr0   r}   rµ   r?  r3   r   r6   r7   r  r+  rï   r4   r5   )r<   r{  r|  r   rõ  r÷  rƒ  r=   Z	ws_outputrB   rC   rp   rD   Zpred_netrF   )r|  rh   rÂ  r   r{  rG   ÚtestBlobWeightedSumÕ  s<    ÿþ




zTestLayers.testBlobWeightedSumc                 C   s8  d}d}g d¢}d}d}g d¢}d}d}g d	¢}	g d
¢}
|   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 )Nro   ÚFLOATrí   Zid_list_featuresZID_LIST)r   r   r   Zid_score_list_featuresZID_SCORE_LIST)r   r   r   )r`   ra   rb   )Zfeature_typerr  Úfeature_namesr   r   )rV   r   r'   r¸   r*   r-   rX   r1   r.   ru  r%   ZFeatureSparseToDenser   Úsetr0   r}   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ž   rX   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_weightsrm   rœ   r¿   r   )r   r$   r%   r&   r¸   r2   r*   r.   rž   rX   r    r'   r(   r0   r3   rj   r   rp   r@   r¹   r9   r5   r©   rF   rF   rG   Ú0testSparseLookupWithAttentionWeightOnIdScoreList‹	  sF    
þûþ

ÿÿþüø
z;TestLayers.testSparseLookupWithAttentionWeightOnIdScoreListc                 C   sh  t  | jjt¡}t  ¡ | j_| ¡ d }| ¡ d }t 	dgd ¡ 
tj¡}t 	g d¢¡ 
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´	  s6    ÿ





 z3TestLayers.testSparseItemwiseDropoutWithReplacementN)SÚ__name__Ú
__module__Ú__qualname__rH   r^   rd   ri   rl   rs   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/  r0  rC  rJ  rO  rY  r[  r`  rb  rf  rk  rm  rn  ro  rq  rv  rz  r„  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.strategiesÚ
strategiesr  Ú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   (

