o
    0h                    @   sD  U d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlZd dlZd dlmZ d dlm  mZ d dl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 m!Z! d d
l"m#Z#m$Z$ d dl%m&Z& d dl'm(Z( d dl)Zd dl*m+Z+m,Z,m-Z- d dl.m/Z/ ej0Z0dZ1dd Z2dd Z3e4dddddd ddej5de4dddddd d ddej5d!	e4d"d#d$ej5d%e4d"d&d'd(d)d$ej5d*e4d+d,d-d ej5d.e4d/d0d1d2d$d$ej5d3gZ6d4d5 Z7d6d7 Z8d8d9 Z9d:d; Z:d<d= Z;d>d? Z<d@dA Z=dBdC Z>dDdE Z?dFdG Z@dHdI ZAdJdK ZBdLdM ZCdNdO ZDdPdQ ZEdRdS ZFdTdU ZGdVdW ZHdXdY ZIdZd[ ZJd\d] ZKd^d_ ZLd`da ZMdbdc ZNddde ZOdfdg ZPdhdi ZQdjdk ZRdldm ZSdndo ZTdpdq ZUdrds ZVdtdu ZWdvdw ZXdxdy ZYdzd{ ZZd|d} Z[d~d Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd ZldddZm		dddZn		dddZo		dddZp		dddZq		dddZrdddZsdddZtdd ZudddZvdddZwdddZxdd ZydddZzdddZ{	$	dddƄZ|dddȄZ}dddʄZ~emeemddˍerenesetevewexeze{e|e}e~eqd̜Ze4de+f ed< g ZddЄ Zg dѢZg dҢZe
eeD ] \ZZe4e de edԜdddded$ej5d׍Zee q[eD ]Ze4de dd dd dd ed$ej5d܍Zee q~ddd dd fddd dd fddd dd fddd dd fddd dd fddd dd fddd dd fddd dd fddd dd fddd dd fg
Zddd$iiZe4ee4f ed< d$d$d$d$d$dZg dҢZe
eeD ]:\\ZZZZe4e de edԜddefddefddedeedd Zeei Zee ee qG dd deZG dd dZG dd deZG dd dZG d	d
 d
eeZG dd deeZdddZd ddZdd ZdS (!      )abstractmethodN)deepcopy)reducepartial)product)mul)
_reduction)TestCaseto_gpufreeze_rng_stateis_iterable	gradcheckgradgradcheckset_default_dtypeskipIfTorchDynamo)	TEST_CUDASM90OrLater)_get_numerical_jacobian_iter_tensors)Variable)_TensorOrTensors)CallableUnionAny)Sequenceh㈵>c                 C   s<   t | dd }|d u rtjt | dd ddd}|d usJ |S )N	reductionsizeAverageTF)emit_warning)getattr
_Reductionlegacy_get_stringmresult r%   U/var/www/vscode/kcb/lib/python3.10/site-packages/torch/testing/_internal/common_nn.pyget_reduction!   s
   r'   c                 C   s$   t | dd }|d ur|S t | dd S )Nweightweights)r   r"   r%   r%   r&   
get_weight)   s   r*   Linear)
      ztorch::nn::LinearOptions(10, 8))   r,   c                 C   s,   t | |d  |d dddd S )Nr      r.   r-   )torchmmtviewexpandip_r%   r%   r&   <lambda>l   s   , r:   T{Gzt?)module_nameconstructor_argscpp_constructor_args
input_sizereference_fn	with_tf32tf32_precisiondefault_dtype)r,   r-   Fz+torch::nn::LinearOptions(10, 8).bias(false)no_biasc                 C   s   t | |d  S )Nr   )r1   r2   r3   r6   r%   r%   r&   r:   w       )	r<   r=   r>   r?   descr@   rA   rB   rC   RReLU)r/      rH   F)r<   r?   	test_cudarC   皙?g?/torch::nn::RReLUOptions().lower(0.1).upper(0.9))r.   r.      with_up_downr<   r=   r>   r?   rF   rI   rC   FlattenrH      r.   rM   c                 G   s   t | dS Nr/   )r1   flattenr7   r9   r%   r%   r&   r:          )r<   r?   r@   rC   CrossMapLRN2d)rM   r;   MbP?rH   z>torch::nn::CrossMapLRN2dOptions(5).alpha(5e-3).beta(1e-3).k(2)rH   rR      rZ   )r<   r=   r>   r?   check_gradgradcheck_batched_gradrC   c                  G   s    t t| d}t|j|   S rS   )r   r   r1   randpermr4   double)sizetotalr%   r%   r&   _rand_tensor_non_equal   s   ra   c                    s   G  fdddt j}|S )Nc                       s   e Zd Z fddZdS )z)wrap_functional.<locals>.FunctionalModulec                    s    |i S Nr%   )selfargsfnkwargsr%   r&   forward   s   z1wrap_functional.<locals>.FunctionalModule.forwardN)__name__
__module____qualname__rh   r%   re   r%   r&   FunctionalModule   s    rl   )nnModule)rf   rg   rl   r%   re   r&   wrap_functional   s   ro   c                
      sD   t dd tdt fddddd d d fd	dd
t jdS )Nr,   PoissonNLLLoss_no_reducec                       t j|  | ddS Nnoner   )Fpoisson_nll_losstype_asr7   r3   r%   r&   r:          z/poissonnllloss_no_reduce_test.<locals>.<lambda>zaF::poisson_nll_loss(i, t.to(i.options()), F::PoissonNLLLossFuncOptions().reduction(torch::kNone))c                   S      t ddS Nr,   r1   randr%   r%   r%   r&   r:      rV   _get_input()r7   r3   c                    s   |    |  S rb   )expr   rU   ry   r%   r&   r:          Ffullnameconstructorcpp_function_callinput_fncpp_var_mapr@   picklerC   r1   randndictro   r^   r%   r%   ry   r&   poissonnllloss_no_reduce_test   s   

r   c                      sX   t tdddtj tdt fddddd d	 d
 fddddtjd	S )N   r,   r   BCELoss_no_reducec                    rq   rr   ru   binary_cross_entropyrw   rx   ry   r%   r&   r:      rz   z(bceloss_no_reduce_test.<locals>.<lambda>iF::binary_cross_entropy(i, t.to(i.options()), F::BinaryCrossEntropyFuncOptions().reduction(torch::kNone))c                   S      t ddddS Nr   r,   y&1?v?r1   r~   clamp_r%   r%   r%   r&   r:      rE   r   r   c                    "    |    d  d|       S rS   logrU   ry   r%   r&   r:         " FgǺF?	r   r   r   r   r   r@   r   	precisionrC   )r   r1   r   gttor^   r   ro   r%   r%   ry   r&   bceloss_no_reduce_test   s   

r   c                
      sP   t ddt j tdt fddddd d d	 fd
ddt jdS )Nr%   r   BCELoss_no_reduce_scalarc                    rq   rr   r   rx   ry   r%   r&   r:      rz   z/bceloss_no_reduce_scalar_test.<locals>.<lambda>r   c                   S      t dddS Nr%   r   r   r   r%   r%   r%   r&   r:      r   r   r   c                    r   rS   r   rU   ry   r%   r&   r:      r   Fr   )r1   r   r   r   r^   r   ro   r%   r%   ry   r&   bceloss_no_reduce_scalar_test   s   

r   c                      st   t tjddtjddtj tjdtjdtdt fdddd	d d
 d fddddtjd	S )Nr   r,   dtyper   BCELoss_weights_no_reducec                       t j|  | | ddS Nrs   r(   r   r   rx   r3   r)   r%   r&   r:          
z0bceloss_weights_no_reduce_test.<locals>.<lambda>zF::binary_cross_entropy(i, t.to(i.options()), F::BinaryCrossEntropyFuncOptions().weight(weights.to(i.options())).reduction(torch::kNone))c                   S   r   r   r   r%   r%   r%   r&   r:      rE   r   r7   r3   r)   c                    &    |    d  d|        S rS   r   )r7   r8   r#   r   r%   r&   r:         & Fa2U0*3?r   )	r   r1   r   r^   r   r   r~   r   ro   r%   r%   r   r&   bceloss_weights_no_reduce_test   s   $
r   c                
      sf   t ddt j t jdt jdtdt fdddd d	d
d  fdddt jdS )Nr%   r   r    BCELoss_weights_no_reduce_scalarc                    r   r   r   rx   r   r%   r&   r:      r   z7bceloss_weights_no_reduce_scalar_test.<locals>.<lambda>zF::binary_cross_entropy(
            i, t.to(i.options()),
            F::BinaryCrossEntropyFuncOptions().weight(weights.to(i.options())).reduction(torch::kNone))r   r   c                   S   r   r   r   r%   r%   r%   r&   r:      r   c                    r   rS   r   rU   r   r%   r&   r:      r   F)r   r   r   r   r   r@   r   rC   )r1   r   r   r   r^   r~   r   ro   r%   r%   r   r&   %bceloss_weights_no_reduce_scalar_test   s   
r   c                      b   t tdddtjt  tdt	fddddd d	d
 fddddtjd	S )Nr   r,   r   BCEWithLogitsLoss_legacy_enumc                    rq   )NF)r   ru    binary_cross_entropy_with_logitsrw   rx   ry   r%   r&   r:   	  rz   z4bce_with_logistic_legacy_enum_test.<locals>.<lambda>F::binary_cross_entropy_with_logits(
            i, t.to(i.options()), F::BinaryCrossEntropyWithLogitsFuncOptions().reduction(torch::kNone))c                   S   r   r   r   r%   r%   r%   r&   r:     rE   r   r   c                    *    |    d d |       S rS   r   rU   sigmoidr3   r%   r&   r:        * F	r   r   r   r   r   r@   r[   r   rC   
r   r1   r   r   r   r^   rm   Sigmoidr   ro   r%   r%   r   r&   "bce_with_logistic_legacy_enum_test     
r   c                      r   )Nr   r,   r   BCEWithLogitsLoss_no_reducec                    rq   rr   r   rx   ry   r%   r&   r:     rz   z2bce_with_logistic_no_reduce_test.<locals>.<lambda>r   c                   S   r   r   r   r%   r%   r%   r&   r:     rE   r   r   c                    r   rS   r   rU   r   r%   r&   r:      r   Fr   r   r%   r%   r   r&    bce_with_logistic_no_reduce_test  r   r   c                      s\   t ddt jt  tdtfddddd dd	 fd
dddt jd	S )Nr%   r   "BCEWithLogitsLoss_no_reduce_scalarc                    rq   rr   r   rx   ry   r%   r&   r:   -  rz   z9bce_with_logistic_no_reduce_scalar_test.<locals>.<lambda>r   c                   S   r   r   r   r%   r%   r%   r&   r:   0  r   r   r   c                    r   rS   r   rU   r   r%   r&   r:   2  r   Fr   )	r1   r   r   r   r^   rm   r   r   ro   r%   r%   r   r&   'bce_with_logistic_no_reduce_scalar_test'  s   
r   c                      L   t jddt jd tdt fddddd d d	 fd
dddt jd	S )Nr,   r   KLDivLoss_with_target_no_reducec                    rq   rr   ru   kl_divrw   rx   ry   r%   r&   r:   >  rz   z6kldivloss_with_target_no_reduce_test.<locals>.<lambda>NF::kl_div(i, t.to(i.options()), F::KLDivFuncOptions().reduction(torch::kNone))c                   S      t dd S r|   r1   r~   r   r%   r%   r%   r&   r:   @      r   r   c                       t d |  | ddS N	KLDivLossrs   rt   loss_reference_fnsrw   rU   ry   r%   r&   r:   B     TF	r   r   r   r   r   r@   supports_forward_adr   rC   r1   r~   r^   r   ro   r%   r%   ry   r&   $kldivloss_with_target_no_reduce_test9     

r   c                      r   )Nr,   r   KLDivLoss_no_reducec                    rq   rr   r   rx   ry   r%   r&   r:   N  rz   z*kldivloss_no_reduce_test.<locals>.<lambda>r   c                   S   r   r|   r   r%   r%   r%   r&   r:   P  r   r   r   c                    r   r   r   rU   ry   r%   r&   r:   R  r   TFr   r   r%   r%   ry   r&   kldivloss_no_reduce_testI  r   r   c                      J   t jdt jd tdt fddddd d d	 fd
dddt jd	S )Nr%   r   KLDivLoss_no_reduce_scalarc                    rq   rr   r   rx   ry   r%   r&   r:   _  rz   z1kldivloss_no_reduce_scalar_test.<locals>.<lambda>r   c                   S      t d S Nr%   r   r%   r%   r%   r&   r:   a      r   r   c                    r   r   r   rU   ry   r%   r&   r:   c  r   TFr   r   r%   r%   ry   r&   kldivloss_no_reduce_scalar_testZ  s   

r   c                      P   t jddt jd  tdt fddddd d d	 fd
dddt jd	S )Nr,   r   #KLDivLoss_with_log_target_no_reducec                       t j|  | dddS Nrs   T)r   
log_targetr   rx   ry   r%   r&   r:   o      z:kldivloss_with_log_target_no_reduce_test.<locals>.<lambda>_F::kl_div(i, t.to(i.options()), F::KLDivFuncOptions().reduction(torch::kNone).log_target(true))c                   S   r   r|   r   r%   r%   r%   r&   r:   q  r   r   r   c                    r   NKLDivLoss_log_targetrs   rt   r   rU   ry   r%   r&   r:   s  r   TFr   r1   r~   r^   r   r   ro   r%   r%   ry   r&   (kldivloss_with_log_target_no_reduce_testj     

r   c                      r   )Nr,   r   KLDivLoss_no_reduce_log_targetc                    r   r   r   rx   ry   r%   r&   r:     r   z5kldivloss_no_reduce_log_target_test.<locals>.<lambda>r   c                   S   r   r|   r   r%   r%   r%   r&   r:     r   r   r   c                    r   r   r   rU   ry   r%   r&   r:     r   TFr   r   r%   r%   ry   r&   #kldivloss_no_reduce_log_target_testz  r   r   c                      sN   t jdt jd  tdt fddddd d d	 fd
dddt jd	S )Nr%   r   %KLDivLoss_no_reduce_scalar_log_targetc                    r   r   r   rx   ry   r%   r&   r:     r   z<kldivloss_no_reduce_scalar_log_target_test.<locals>.<lambda>r   c                   S   r   r   r   r%   r%   r%   r&   r:     r   r   r   c                    r   r   r   rU   ry   r%   r&   r:     r   TFr   r   r%   r%   ry   r&   *kldivloss_no_reduce_scalar_log_target_test  s   

r   c                      N   t jdddt jd tdt fdddd	d d
 d fddddt jd	S )NrH   rR   r.   r   L1Loss_no_reducec                    rq   rr   ru   l1_lossrw   rx   ry   r%   r&   r:     rz   z'l1loss_no_reduce_test.<locals>.<lambda>PF::l1_loss(i, t.to(i.options()), F::L1LossFuncOptions().reduction(torch::kNone))c                   S      t dddS NrH   rR   r.   r1   r   r%   r%   r%   r&   r:     r   r   r   c                       |   |   S rb   rw   absrU   ry   r%   r&   r:     r   TFr   r1   r   r^   r   ro   r%   r%   ry   r&   l1loss_no_reduce_test  s   

r   c                
      sJ   t jdddt jd tdt fdddd	d d
 d fdddddS )NrH   rR   r.   r   L1Loss_no_reduce_complexc                    rq   rr   r   rx   ry   r%   r&   r:     rz   z/l1loss_no_reduce_complex_test.<locals>.<lambda>r   c                   S   s   t jdddt jdS )NrH   rR   r.   r   )r1   r   cdoubler%   r%   r%   r&   r:     rE   r   r   c                    r   rb   r   rU   ry   r%   r&   r:     r   TF)r   r   r   r   r   r@   r   r   )r1   r   r   r   ro   r%   r%   ry   r&   l1loss_no_reduce_complex_test  s   

r  c                      r   )Nr%   r   L1Loss_no_reduce_scalarc                    rq   rr   r   rx   ry   r%   r&   r:     rz   z.l1loss_no_reduce_scalar_test.<locals>.<lambda>r   c                   S   
   t dS r   r   r%   r%   r%   r&   r:        
 r   r   c                    r   rb   r   rU   ry   r%   r&   r:     r   TFr   r   r%   r%   ry   r&   l1loss_no_reduce_scalar_test  s   

r  c                     sL   d} t j| dt ji tdt fddd| d d fd	dd
dt jd	S )NrQ   r   MSELoss_no_reducec                    rq   rr   ru   mse_lossrw   rx   targetr%   r&   r:     rz   z(mseloss_no_reduce_test.<locals>.<lambda>WF::mse_loss(i, target.to(i.options()), F::MSELossFuncOptions().reduction(torch::kNone))r   r7   r
  c                       |    dS NrH   powrU   r	  r%   r&   r:     r   TF	r   r   r   r?   r   r@   r   r   rC   r   r?   r%   r	  r&   mseloss_no_reduce_test  s   

r  c                     sJ   d} t j| t jd tdt fddd| d d fd	dd
dt jd	S )Nr%   r   MSELoss_no_reduce_scalarc                    rq   rr   r  rx   r	  r%   r&   r:     rz   z/mseloss_no_reduce_scalar_test.<locals>.<lambda>r  r   r  c                    r  r  r  rU   r	  r%   r&   r:     r   TFr  r   r  r%   r	  r&   mseloss_no_reduce_scalar_test  s   

r  c                
      sd   t td d  ddi tdt fdddd	d d
d fdddtj	dS )Nr   r,   r   rs   NLLLoss_no_reducec                       t j| |   d dS Nr   rt   ru   nll_lossrw   longrx   rg   r3   r%   r&   r:         z(nllloss_no_reduce_test.<locals>.<lambda>pF::nll_loss(
            i, t.to(i.options()).to(torch::kLong), F::NLLLossFuncOptions().reduction(torch::kNone))c                   S      t dd S Nr   r,   r   r%   r%   r%   r&   r:     r   r   r   c                        t d | |  fi  S NNLLLossr   rw   r  rU   r  r%   r&   r:         Fr   
r   r1   emptyuniform_r   floorr  r   ro   r^   r%   r%   r  r&   nllloss_no_reduce_test      r*  c                
      sf   t td d  ddd tdt fddd	d
d dd fdddtj	dS )Nr   r,   rH   rs   ignore_indexr   NLLLoss_no_reduce_ignore_indexc                    ,   t j| |  t d t d dS Nr-  r   r,  ru   r  rw   r  intstrrx   r  r%   r&   r:         
z5nllloss_no_reduce_ignore_index_test.<locals>.<lambda>zF::nll_loss(
            i, t.to(i.options()).to(torch::kLong), F::NLLLossFuncOptions().ignore_index(2).reduction(torch::kNone))c                   S   r  r   r   r%   r%   r%   r&   r:     r   r   r   c                    r!  r"  r$  rU   r  r%   r&   r:     r%  Fr   r&  r%   r%   r  r&   #nllloss_no_reduce_ignore_index_test      
r5  c                
      t   t td d  tdfdd tdt	 fdddd	d d
d fdddtj
dS )Nr   r,   c                         | ddS r   rw   rx   r(   r%   r&   rg        z.nllloss_no_reduce_weights_test.<locals>.kwargsNLLLoss_no_reduce_weightsc                    "   t j| |  fi  | S rb   r  rx   r  r%   r&   r:     r   z0nllloss_no_reduce_weights_test.<locals>.<lambda>F::nll_loss(
            i, t.to(i.options()).to(torch::kLong),
            F::NLLLossFuncOptions().weight(weight.to(i.options())).reduction(torch::kNone))c                   S      t ddd S Nr   r,   {Gz?r1   r~   addr   r%   r%   r%   r&   r:     rz   r   r7   r3   r(   c                    $   t d | |  fi  | S r"  r$  rU   r  r%   r&   r:        $Fr   r   r1   r'  r(  r   r)  r  r~   r   ro   r^   r%   r%   rg   r3   r(   r&   nllloss_no_reduce_weights_test
      

rI  c                
      r7  )Nr   r,   c                         | dddS )Nrs   rH   r(   r   r-  r9  rx   r:  r%   r&   rg   $     
z;nllloss_no_reduce_weights_ignore_index_test.<locals>.kwargs&NLLLoss_no_reduce_weights_ignore_indexc                    s$   t j| |  fi  | jS rb   )ru   r  rw   r  datarx   r  r%   r&   r:   +  s   $ z=nllloss_no_reduce_weights_ignore_index_test.<locals>.<lambda>zF::nll_loss(
            i, t.to(i.options()).to(torch::kLong),
            F::NLLLossFuncOptions().weight(weight.to(i.options())).reduction(torch::kNone).ignore_index(2))c                   S   r?  r@  rB  r%   r%   r%   r&   r:   /  rz   r   rD  c                    rE  r"  r$  rU   r  r%   r&   r:   1  rF  Fr   rG  r%   r%   rH  r&   +nllloss_no_reduce_weights_ignore_index_test   s    

rP  c                
      s   t td d  tdfdd tdt	 fdddtjddtj
d	d
 dd fdddtj
dS )Nr   r,   c                    rK  )Nrs   r0   rL  r9  rx   r:  r%   r&   rg   ;  rM  z?nllloss_no_reduce_weights_ignore_index_neg_test.<locals>.kwargs*NLLLoss_no_reduce_weights_ignore_index_negc                    r=  rb   r  rx   r  r%   r&   r:   B  r   zAnllloss_no_reduce_weights_ignore_index_neg_test.<locals>.<lambda>zF::nll_loss(
            i, t.to(i.options()).to(torch::kLong),
            F::NLLLossFuncOptions().weight(weight.to(i.options())).reduction(torch::kNone).ignore_index(-1))r   rA  r   rD  c                    rE  r"  r$  rU   r  r%   r&   r:   H  rF  F)r   r   r   inputr   r@   r   rC   )r   r1   r'  r(  r   r)  r  r~   r   ro   r^   rC  r   r%   r%   rH  r&   /nllloss_no_reduce_weights_ignore_index_neg_test7  s    

rS  c                
      sd   t tdddd  ddi tdt fddd	d
d dd fdddtjdS )NrH   rM   rR   r   rs   NLLLoss2d_no_reducec                    r  r  r  rx   r  r%   r&   r:   T  r  z*nllloss2d_no_reduce_test.<locals>.<lambda>r  c                   S      t dddd S NrH   rR   rM   r   r%   r%   r%   r&   r:   W  rE   r   r   c                    r!  N	NLLLossNdr$  rU   r  r%   r&   r:   Y  r%  Fr   	r   r1   r~   r   r)  r  r   ro   r^   r%   r%   r  r&   nllloss2d_no_reduce_testN  r+  rZ  c                
      sf   t tdddd  ddd tdt fdd	d
dd	 dd fdd	dtjdS )NrH   rM   rR   r/   rs   r,   NLLLoss2d_no_reduce_ignore_indexc                    r/  r0  r1  rx   r  r%   r&   r:   e  r4  z7nllloss2d_no_reduce_ignore_index_test.<locals>.<lambda>F::nll_loss(
            i, t.to(i.options()).to(torch::kLong), F::NLLLossFuncOptions().ignore_index(1).reduction(torch::kNone))c                   S   rU  rV  r   r%   r%   r%   r&   r:   i  rE   r   r   c                    r!  rW  r$  rU   r  r%   r&   r:   k  r%  Fr   rY  r%   r%   r  r&   %nllloss2d_no_reduce_ignore_index_test_  r6  r]  c                
      st   t tdddd  tdfdd tdt fddd	d
d dd fdddtjdS )NrH   rM   rR   c                    r8  r   r9  rx   r:  r%   r&   rg   u  r;  z0nllloss2d_no_reduce_weights_test.<locals>.kwargsNLLLoss2d_no_reduce_weightsc                    r=  rb   r  rx   r  r%   r&   r:   {  r   z2nllloss2d_no_reduce_weights_test.<locals>.<lambda>r>  c                   S   rU  rV  r   r%   r%   r%   r&   r:     rE   r   rD  c                    rE  rW  r$  rU   r  r%   r&   r:     rF  Fr   rY  r%   r%   rH  r&    nllloss2d_no_reduce_weights_testq  rJ  r_  c                
      sh   t tdddddd  ddi tdt fddd	d
d dd fdddtjdS )NrH   rM   rR   r   rs   NLLLossNd_no_reducec                    r  r  r  rx   r  r%   r&   r:     r  z*nlllossNd_no_reduce_test.<locals>.<lambda>r  c                   S      t dddddd S rV  r   r%   r%   r%   r&   r:     r   r   r   c                    r!  rW  r$  rU   r  r%   r&   r:     r%  Fr   rY  r%   r%   r  r&   nlllossNd_no_reduce_test  s   $rb  c                
      sj   t tdddddd  ddd tdt fdd	d
dd	 dd fdd	dtjdS )NrH   rM   rR   r/   rs   r,   NLLLossNd_no_reduce_ignore_indexc                    r/  r0  r1  rx   r  r%   r&   r:     r4  z7nlllossNd_no_reduce_ignore_index_test.<locals>.<lambda>r\  c                   S   ra  rV  r   r%   r%   r%   r&   r:     r   r   r   c                    r!  rW  r$  rU   r  r%   r&   r:     r%  Fr   rY  r%   r%   r  r&   %nlllossNd_no_reduce_ignore_index_test  s   $
rd  c                
      sx   t tdddddd  tdfdd tdt fddd	d
d dd fdddtjdS )NrH   rM   rR   c                    r8  r   r9  rx   r:  r%   r&   rg     r;  z0nlllossNd_no_reduce_weights_test.<locals>.kwargsNLLLossNd_no_reduce_weightsc                    r=  rb   r  rx   r  r%   r&   r:     r   z2nlllossNd_no_reduce_weights_test.<locals>.<lambda>r>  c                   S   ra  rV  r   r%   r%   r%   r&   r:     r   r   rD  c                    rE  rW  r$  rU   r  r%   r&   r:     rF  Fr   rY  r%   r%   rH  r&    nlllossNd_no_reduce_weights_test  s   $

rf  c                      r   )NrH   rR   r.   r   SmoothL1Loss_no_reducec                    rq   rr   ru   smooth_l1_lossrw   rx   ry   r%   r&   r:     rz   z-smoothl1loss_no_reduce_test.<locals>.<lambda>jF::smooth_l1_loss(
            i, t.to(i.options()), F::SmoothL1LossFuncOptions().reduction(torch::kNone))c                   S   r   r   r   r%   r%   r%   r&   r:     r   r   r   c                    r   NSmoothL1Lossrs   rt   r   rU   ry   r%   r&   r:     r   TFr   r   r%   r%   ry   r&   smoothl1loss_no_reduce_test     

rm  c                      r   )Nr%   r   SmoothL1Loss_no_reduce_scalarc                    rq   rr   rh  rx   ry   r%   r&   r:     rz   z4smoothl1loss_no_reduce_scalar_test.<locals>.<lambda>rj  c                   S   r  r   r   r%   r%   r%   r&   r:     r  r   r   c                    r   rk  r   rU   ry   r%   r&   r:     r   TFr   r   r%   r%   ry   r&   "smoothl1loss_no_reduce_scalar_test  s   

rp  c                      r   )NrH   rR   r.   r   SmoothL1Loss_betac                    r   )Nrs         ?r   betarh  rx   ry   r%   r&   r:     r   z(smoothl1loss_beta_test.<locals>.<lambda>zoF::smooth_l1_loss(
            i, t.to(i.options()), F::SmoothL1LossFuncOptions().reduction(torch::kNone), 0.5)c                   S   r   r   r   r%   r%   r%   r&   r:     r   r   r   c                       t d |  | dddS )Nrl  rs   rr  rs  r   rU   ry   r%   r&   r:        TFr   r   r%   r%   ry   r&   smoothl1loss_beta_test  rn  rw  c                      r   )NrH   rR   r.   r   SmoothL1Loss_zero_betac                    r   )Nrs   r   rs  rh  rx   ry   r%   r&   r:     r   z-smoothl1loss_zero_beta_test.<locals>.<lambda>zmF::smooth_l1_loss(
            i, t.to(i.options()), F::SmoothL1LossFuncOptions().reduction(torch::kNone), 0)c                   S   r   r   r   r%   r%   r%   r&   r:     r   r   r   c                    ru  )Nrl  rs   r   rs  r   rU   ry   r%   r&   r:     rv  TFr   r   r%   r%   ry   r&   smoothl1loss_zero_beta_test  rn  ry  c                      sH   t ddd tdt fddddd d	 d
 fddddt jd	S )NrH   rR   r.   HuberLoss_deltac                    r   )Nrs   rr  r   delta)ru   
huber_lossrw   rx   ry   r%   r&   r:   	  r   z&huberloss_delta_test.<locals>.<lambda>znF::huber_loss(
            i, t.to(i.options()), F::HuberLossFuncOptions().reduction(torch::kNone).delta(0.5))c                   S   r   r   r   r%   r%   r%   r&   r:     r   r   r   c                    ru  )N	HuberLossrs   rr  r{  r   rU   ry   r%   r&   r:     rv  TFr   r   r%   r%   ry   r&   huberloss_delta_test  s   

r  c                      sF   t d  tdt fddddd d d fd	dd
ddd	S )Nr%   !MultiLabelMarginLoss_0d_no_reducec                       t j|  |  ddS rr   ru   multilabel_margin_lossrw   r  rx   ry   r%   r&   r:         z8multilabelmarginloss_0d_no_reduce_test.<locals>.<lambda>F::multilabel_margin_loss(
            i, t.to(i.options()).to(torch::kLong), F::MultilabelMarginLossFuncOptions().reduction(torch::kNone))c                   S   r  r   r   r%   r%   r%   r&   r:     r  r   r   c                       t d |  j|  ddS NMultiLabelMarginLossrs   rt   r   rO  rw   r  rU   ry   r%   r&   r:        TF)	r   r   r   r   r   r@   check_sum_reductionr[   r   )r1   zerosr  r   ro   r%   r%   ry   r&   &multilabelmarginloss_0d_no_reduce_test  s   

r  c                      sX   t tdd   tdt fddddd d d fd	dd
ddtjd
S )Nr,   !MultiLabelMarginLoss_1d_no_reducec                    r  rr   r  rx   ry   r%   r&   r:   +  r  z8multilabelmarginloss_1d_no_reduce_test.<locals>.<lambda>r  c                   S   r  r|   r   r%   r%   r%   r&   r:   .  r  r   r   c                    r  r  r  rU   ry   r%   r&   r:   0  r  TF
r   r   r   r   r   r@   r  r[   r   rC   rY  r%   r%   ry   r&   &multilabelmarginloss_1d_no_reduce_test&  s   

r  c                      sj   t tjtdddd  dd tdt	 fdd	d
dd	 d d fdd	dddtj
d
S )NrM   r,   g         r0   minMultiLabelMarginLoss_index_negc                    r  rr   r  rx   ry   r%   r&   r:   =  r  z5multilabelmarginloss_index_neg_test.<locals>.<lambda>r  c                   S      t ddS NrM   r,   r   r%   r%   r%   r&   r:   @  rV   r   r   c                    r  r  r  rU   ry   r%   r&   r:   B  r  TFr  )r   r1   clampr~   rC  r   r)  r  r   ro   r^   r%   r%   ry   r&   #multilabelmarginloss_index_neg_test8  s   .

r  c                      sZ   t tddd   tdt fddddd d d	 fd
ddddtjd
S )NrM   r,   MultiLabelMarginLoss_no_reducec                    r  rr   r  rx   ry   r%   r&   r:   O  r  z5multilabelmarginloss_no_reduce_test.<locals>.<lambda>r  c                   S   r  r  r   r%   r%   r%   r&   r:   R  rV   r   r   c                    r  r  r  rU   ry   r%   r&   r:   T  r  TFr  rY  r%   r%   ry   r&   #multilabelmarginloss_no_reduce_testJ  s   

r  c                      b   t tddtjdd tdt	 fdddd	d d
 d fddddtjd	S )Nr,   r   rH   r/   HingeEmbeddingLoss_no_reducec                    rq   rr   ru   hinge_embedding_lossrw   rx   ry   r%   r&   r:   a  rz   z3hingeembeddingloss_no_reduce_test.<locals>.<lambda>zvF::hinge_embedding_loss(
            i, t.to(i.options()), F::HingeEmbeddingLossFuncOptions().reduction(torch::kNone))c                   S   r  r|   r   r%   r%   r%   r&   r:   d  r  r   r   c                    r   )NHingeEmbeddingLossrs   rt   r   rU   ry   r%   r&   r:   f  r   TF	r   r   r   r   r   r@   r  r   rC   
r   r1   r   r   r   r^   mul_subr   ro   r%   r%   ry   r&   !hingeembeddingloss_no_reduce_test\     (

r  c                      r  )Nr,   r   rH   r/   #HingeEmbeddingLoss_margin_no_reducec                    r   Nrr  rs   marginr   r  rx   ry   r%   r&   r:   r  r   z:hingeembeddingloss_margin_no_reduce_test.<locals>.<lambda>zF::hinge_embedding_loss(
            i, t.to(i.options()), F::HingeEmbeddingLossFuncOptions().margin(0.5).reduction(torch::kNone))c                   S   r  r|   r   r%   r%   r%   r&   r:   u  r  r   r   c                    ru  )Nr  rr  rs   r  r   rU   ry   r%   r&   r:   w  rv  TFr  r  r%   r%   ry   r&   (hingeembeddingloss_margin_no_reduce_testm  r  r  c                      r   )NrM   r   SoftMarginLoss_no_reducec                    rq   rr   )ru   soft_margin_lossrw   rx   ry   r%   r&   r:     rz   z/softmarginloss_no_reduce_test.<locals>.<lambda>znF::soft_margin_loss(
            i, t.to(i.options()), F::SoftMarginLossFuncOptions().reduction(torch::kNone))c                   S   r{   )NrM   r   r%   r%   r%   r&   r:     rV   r   r   c                    r   )NSoftMarginLossrs   rt   r   rU   ry   r%   r&   r:     r   TFr   r   r%   r%   ry   r&   softmarginloss_no_reduce_test~  s   

r  c                      sP   t ddd  tdt fddddd d	 d
 fddddt jd	S )NrM   r,   rH   "MultiLabelSoftMarginLoss_no_reducec                    rq   rr   ru   multilabel_soft_margin_lossrw   rx   ry   r%   r&   r:     rz   z9multilabelsoftmarginloss_no_reduce_test.<locals>.<lambda>zF::multilabel_soft_margin_loss(
            i, t.to(i.options()), F::MultilabelSoftMarginLossFuncOptions().reduction(torch::kNone))c                   S   r  r  r   r%   r%   r%   r&   r:     rV   r   r   c                    s:    |     d  |        jdd| d S Nr/   dimr   r   sumr_   rU   ry   r%   r&   r:     s   :Fr   r1   r~   r   r)  r   ro   r^   r%   r%   ry   r&   'multilabelsoftmarginloss_no_reduce_test  s   

r  c                      sb   t ddd  t dtdt fddddd d	 d
 fdddddt jd
S )NrM   r,   rH   *MultiLabelSoftMarginLoss_weights_no_reducec                    r   r   r  rx   r   r%   r&   r:     r   zAmultilabelsoftmarginloss_weights_no_reduce_test.<locals>.<lambda>zF::multilabel_soft_margin_loss(
            i, t.to(i.options()),
            F::MultilabelSoftMarginLossFuncOptions().weight(weights.to(i.options())).reduction(torch::kNone))c                   S   r  r  r   r%   r%   r%   r&   r:     rV   r   r   c                    s>    |     d  |         jdd| d S r  r  rU   r   r%   r&   r:     s   >TFr  r  r%   r%   r   r&   /multilabelsoftmarginloss_weights_no_reduce_test  s    

r  c                      T   t dd   tdt fddddd d d	 fd
ddddt jd
S )NrM   r-   MultiMarginLoss_no_reducec                    r  rr   ru   multi_margin_lossrw   r  rx   ry   r%   r&   r:     r  z0multimarginloss_no_reduce_test.<locals>.<lambda>F::multi_margin_loss(
            i, t.to(i.options()).to(torch::kLong), F::MultiMarginLossFuncOptions().reduction(torch::kNone))c                   S   r  r  r   r%   r%   r%   r&   r:     rV   r   r   c                    r  NMultiMarginLossrs   rt   r  rU   ry   r%   r&   r:     r  TFr  r1   r~   r   r)  r  r   ro   r^   r%   r%   ry   r&   multimarginloss_no_reduce_test     

r  c                      r  )Nr/   r-   MultiMarginLoss_1d_no_reducec                    r  rr   r  rx   ry   r%   r&   r:     r  z3multimarginloss_1d_no_reduce_test.<locals>.<lambda>r  c                   S   r  r|   r   r%   r%   r%   r&   r:     r  r   r   c                    r  r  r  rU   ry   r%   r&   r:     r  TFr  r  r%   r%   ry   r&   !multimarginloss_1d_no_reduce_test  r  r  c                      r  )Nr%   r-   ,multimarginloss_1d_input_0d_target_no_reducec                    r  rr   r  rx   ry   r%   r&   r:     r  zCmultimarginloss_1d_input_0d_target_no_reduce_test.<locals>.<lambda>r  c                   S   r  r|   r   r%   r%   r%   r&   r:     r  r   r   c                    r  r  r  rU   ry   r%   r&   r:     r  TFr  r  r%   r%   ry   r&   1multimarginloss_1d_input_0d_target_no_reduce_test  r  r  c                      r  )NrM   r-   MultiMarginLoss_p_no_reducec                       t j|  |  dddS )NrH   rs   r8   r   r  rx   ry   r%   r&   r:         z2multimarginloss_p_no_reduce_test.<locals>.<lambda>zF::multi_margin_loss(
            i, t.to(i.options()).to(torch::kLong), F::MultiMarginLossFuncOptions().p(2).reduction(torch::kNone))c                   S   r   )NrM   r,   rA  gGz?)r1   r   r   r%   r%   r%   r&   r:     rE   r   r   c                        t d |  j|  dddS )Nr  rH   rs   r  r  rU   ry   r%   r&   r:     r%  TFr  r  r%   r%   ry   r&    multimarginloss_p_no_reduce_test  r  r  c                      r  )NrM   r-    MultiMarginLoss_margin_no_reducec                    r  r  r  rx   ry   r%   r&   r:     r  z7multimarginloss_margin_no_reduce_test.<locals>.<lambda>zF::multi_margin_loss(
            i, t.to(i.options()).to(torch::kLong),
            F::MultiMarginLossFuncOptions().margin(0.5).reduction(torch::kNone))c                   S   r  r  r   r%   r%   r%   r&   r:     rV   r   r   c                    r  )Nr  rr  rs   r  r  rU   ry   r%   r&   r:        TFr  r  r%   r%   ry   r&   %multimarginloss_margin_no_reduce_test  s   

r  c                      sj   t dd   t jdt jdtdt fdddd	d d
 d fdddddt jd
S )NrM   r-   r,   r   !MultiMarginLoss_weights_no_reducec                    s"   t j|  |  | ddS r   r  rx   r   r%   r&   r:     s    z8multimarginloss_weights_no_reduce_test.<locals>.<lambda>zF::multi_margin_loss(
            i, t.to(i.options()).to(torch::kLong),
            F::MultiMarginLossFuncOptions().weight(weights.to(i.options())).reduction(torch::kNone))c                   S   r  r  r   r%   r%   r%   r&   r:     rV   r   r   c                    s    t d |  j|  ddS )Nr  rs   r   r  rU   r   r%   r&   r:     r  TFr  )r1   r~   r   r)  r  r^   r   ro   r%   r%   r   r&   &multimarginloss_weights_no_reduce_test  s    
r  c                 C   s^   dd }|| }t |tjr|gn|}t  || dW  d   S 1 s(w   Y  dS )zReference function for modules supporting no batch dimensions.

    The module is passed the input and target in batched form with a single item.
    The output is squeezed to compare with the no-batch input.
    c                 S   &   t | ttfrdd | D S | dS )Nc                 S      g | ]}| d qS r   	unsqueeze.0r3   r%   r%   r&   
<listcomp>/  rz   zDsingle_batch_reference_fn.<locals>.unsqueeze_inp.<locals>.<listcomp>r   
isinstancelisttupler  inpr%   r%   r&   unsqueeze_inp-     
z0single_batch_reference_fn.<locals>.unsqueeze_inpr   N)r  r1   Tensorr   squeeze)rR  
parametersmoduler  single_batch_inputr%   r%   r&   single_batch_reference_fn'  s   $r  c                  C   s  g t  t t t t t t t t t	 t
 t t t t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t' t( t) t* t+ t, t- t. t/ t0 t1 t2dddddddt3j4dt2ddd	ddd
ddt3j4d	t2ddddddddt3j4d	t2ddddddddt3j4d	t2ddddddddt3j4d	t2ddddddddt3j4d	t2dddddddddt2ddd d dddt3j4d!t2d"d#d d$d%dddt3j4d&t2d'd(d d)ddddt3j4d&t2d*d+d d,ddddt3j4d&t2d-d.d d/ddddt3j4d&t2d0d1d d2ddddt3j4d&t2d3d4d d5dd6ddt3j4d7t2d3d8d9d:dd;ddt3j4d	t2d3d<d=d:dd>ddt3j4d	t2d?d@d dAddBddt3j4d7t2dCdDdEdFddddt3j4dG	t2dCdHdIdJddKdddt3j4dL
t2dCdMdNdJddOdddt3j4dL
t2dCdPdQdRdd>dddt3j4dL
t2dCdSdTdUdd;dddVt3j4dL
t2dCdDdEdWdddddXt2dYdZd d[d\ddddVt3j4d]	t2d^d_d d[d\dddVt3j4d`t2dadbd dcdddddt3j4d&t2dedfd dgdddddt3j4d&t2dhdid djdddddt3j4d&t2dkdldmddndddt3j4do	t2dkdpdqdrdd>dddt3j4dL
t2dkdsdtdrdd;dddt3j4dL
t2dudvd dwdxddddt3j4d]	t2dydzd d{d|ddt3j4d!t2d}d~d dd|ddt3j4d!t2ddd dd|ddt3j4d!t2ddd dd|ddt3j4d!t2ddd ddddt3j4d!t2ddddddddt3j4dG	t2dddddd;dddt3j4dL
t2dddddddddt3j4dL
t2dddddd
dddt3j4dL
t2dddddddddt3j4dL
t2dddddddddt2ddd ddddddt3j4d]	t2ddd ddddt3j4d!t2ddd ddddt3j4d!t2ddd dddddt3j4d&t2ddd dddddt3j4d&t2ddd dddddt3j4d&t2dddddddt3j4dt2dddddd>ddt3j4d	t2ddddt3j4dt2ddddt5dt3j4dt2ddddd dddt2ddddd dt3j4t6dǃdȍt2ddddd ddt3j4t6dǃdˍt2ddddd ddt3j4dЍt2ddddd ddt3j4dЍt2ddddd ddt3j4dЍt2ddddd ddt3j4dЍt2ddd ddd dt3j4dލt2ddd ddd dt3j4dލt2ddd ddd dt3j4dލt2ddd ddd dddt2dd ddd ddddt2ddddt3j4dt2ddddt3j4dt2t7t8j9dd ddddddt3j4dt2t7t8j9dd ddddd ddt2t7t8j9dd ddddddt3j4dt2t7t8j9d dddddddt3j4dt2t7t8j9dd ddd	d
dddt3j4dt2t7t8j9dd ddd	ddddt3j4dt2t7t8j9d dddd	ddddt3j4dt2t7t8j9dd ddd	d
ddddt2t7t8j9dd ddd	ddddt3j4dt2t7t8j9d dddd	ddddt3j4dt2t7t8j9dd ddddddt3j4dt2t7t8j9dd ddddddt3j4dt2t7t8j9dd ddddd dt3j4dt2t7t8j9d dddd!dd"dt3j4dt2t7t8j9dd dddd#d$ddt2t7t8j9dd d%dd	d&dd'dt3j4dt2t7t8j9dd d%dd	d&d#d(ddt2t7t8j9d)d d%dd	d*d+d,dt3j4dt2t7t8j9d dd%dd	d-dd.dt3j4dt2t7t8j9d d/d%dd	d0dd1dt3j4dt2t7t8j9d d2d%dd	d3dd4dt3j4dt2t7t8j9d)d d%dd	d5dd6dt3j4dt2t7t8j9d d2d%dd	d7dd8dt3j4dt2t7t8j9dd d9dd	d:dd;dt3j4dt2t7t8j9dd d9dd	d:d#d<ddt2t7t8j9d)d d9dd	d=d+d>dt3j4dt2t7t8j9d dd9dd	d?dd@dt3j4dt2t7t8j9d d/d9dd	dAddBdt3j4dt2t7t8j9d d2d9dd	dCddDdt3j4dt2t7t8j9d)d d9dd	dEddFdt3j4dt2t7t8j9d d2d9dd	dGddHdt3j4dt2t7t8j9dd dddIdJdKdt3j4dt2t7t8j9dd dddIdLdMddt2t7t8j9dNd dddOdPdQdt3j4dt2t7t8j9d ddddRdJdSdt3j4dt2t7t8j9dd dTdd	dUdJdVdt3j4dt2t7t8j9dd dTdd	dUdLdWddt2t7t8j9dXd dTdd	dYdZd[dt3j4dt2t7t8j9d d\dTdd	d]dd^d_dt3j4d`t2t7t8j9dXd dTdd	dadZdbdt3j4dt2t7t8j9d d\dTdd	dcdPddd_dt3j4d`t2t7t8j:dedfdgdhdidt3j4dt2t7t8j:djt3j;dkdldhdmddt3j4dnt2t7t8j:djdfdodpdqdt3j4dt2t7t8j:djdfdodrdsdt3j4dt2t7t8j:djt3j;dkdldrdtddt3j4dnt2t7t8j:dudfdvdwdxddt3j4dyt2t7t8j:dzdfd{dwd|ddt3j4dyt2t7t8j:dedfdgd}d~dddt2t7t8j<dedfddhddt3j4dt2t7t8j<djdfddpddt3j4dt2t7t8j<djdfddrddt3j4dt2t7t8j<dudfddwddt3j4dt2t7t8j<dzdfddwddt3j4dt2t7t8j<dudfdd}dddt2ddd ddddt3j4dt2ddd ddddt3j4dt2ddd dddt5dt3j4dt2ddd ddddt3j4dt2ddd ddddt3j4dt2ddd ddt5ddt3j4dt2dddd}ddt3j4dt2ddd t3j4dt2ddd dt3j4dt2ddd dt3j4dt2ddddd dt3j4dt2ddd t5dt3j4dt2dddddddddt3j4d
t2dddddt8j=fdddddt>
rBdndt3j4d	t2ddÐdĐdd ddddt3j4dƍ	t2dddddt8j=fdǐdd ddddt3j4dƍ	t2dɐddddddt8j?fdʐdd dddt>
rdndt3j4dƍ	t2dΐdϐdАdd dd dddt3j4dӍ	t2dԐdՐd֐dt5dt3j4d؍t2dِdڐdt3@ddgfdt5dt3j4d؍t2dg dݢddfdߐddddddd	} tAg dg dD ]\}}dD ]{}|dzkr&|dkr&qtBtCdj|dj }ddDtEtF| d }dd|  }dtBdd |D  }| Gt2d| dddzdzd|djdjd|f	d| d| d| d||d| dddt3j4d
 qqg d}i ddt3j4dddd2idddt3j4ddddt3j4dddt3j4ddd t3j4idd t3j4idd t3j4idd t3j4idd t3j4idd t3j4idd t3j4idd t3j4idd t3j4id	d t3j4id
d t3j4idd t3j4id t3j4id t3j4id t3j4id t3j4id t3j4id t3j4id t3j4id}	|D ]}
t2|
dt5ddd}|	H|
i }|I| | G| qS| S (  NConv1d)r.   rM   rR   z!torch::nn::Conv1dOptions(4, 5, 3))rH   r.   r,   Tr;   )r<   r=   r>   r?   cudnnrA   rB   rC   )r.   rM   rR   rH   z+torch::nn::Conv1dOptions(4, 5, 3).stride(2)stride)	r<   r=   r>   r?   r  rF   rA   rB   rC   )r.   rM   rR   r/   r/   z6torch::nn::Conv1dOptions(4, 5, 3).stride(1).padding(1)pad1rA  )r.   rM   rM   r/   rH   z6torch::nn::Conv1dOptions(4, 5, 5).stride(1).padding(2)pad2)r.   r.   rR   r/   r/   z6torch::nn::Conv1dOptions(4, 4, 3).stride(1).padding(1))r/   r.   r/   	pad1size1)r.   r.   rM   r/   rH   z6torch::nn::Conv1dOptions(4, 4, 5).stride(1).padding(2)	pad2size1)r   r.   r,   
zero_batch)r<   r=   r>   r?   r  rF   rA   rB   Conv1d_dilatedc                   S      t jdddddS )Nr.   rM   rR   rH   kernel_sizedilationrm   r  r%   r%   r%   r&   r:     r   z&get_new_module_tests.<locals>.<lambda>z-torch::nn::Conv1dOptions(4, 5, 3).dilation(2))r   r   r>   r?   rA   rB   rC   Conv1d_groupsc                   S   r  )Nr.   rZ   rR   rH   r  groupsr  r%   r%   r%   r&   r:     r   z+torch::nn::Conv1dOptions(4, 6, 3).groups(2))rH   r.   rZ   )r   r   r>   r?   r  rA   rB   rC   Conv1d_pad_validc                   S   r  )Nr.   rM   rR   validpaddingr  r%   r%   r%   r&   r:     r   z8torch::nn::Conv1dOptions(4, 5, 3).padding(torch::kValid)Conv1d_pad_samec                   S   r  )Nr.   rM   rR   samer  r  r%   r%   r%   r&   r:     r   z7torch::nn::Conv1dOptions(4, 5, 3).padding(torch::kSame)Conv1d_pad_same2c                   S   s   t jdddddS )Nr.   rM   r   r  r  r%   r%   r%   r&   r:     r   z7torch::nn::Conv1dOptions(4, 5, 4).padding(torch::kSame)Conv1d_pad_same_dilatedc                   S   s   t jddddddS )Nr.   rM   r   rH   r  r  r  r%   r%   r%   r&   r:     rE   zCtorch::nn::Conv1dOptions(4, 5, 3).padding(torch::kSame).dilation(2)ConvTranspose1dc                   S   s   t jdddddddS )NrR   r.   rR   r/   r/   )r  r  r  output_paddingrm   r  r%   r%   r%   r&   r:     rz   zQtorch::nn::ConvTranspose1dOptions(3, 4, 3).stride(3).padding(1).output_padding(1))r/   rR      )r   r   r>   r  r?   rA   rB   rC   )rR   r.   rR   rH   r/   r/   r/   Fztorch::nn::ConvTranspose1dOptions(3, 4, 3)
                                    .stride(2).padding(1).output_padding(1).groups(1).bias(false))r/   rR   rZ   rD   )	rR   r.   rR   rH   r/   r/   r/   TrH   ztorch::nn::ConvTranspose1dOptions(3, 4, 3)
                                    .stride(2).padding(1).output_padding(1).groups(1).bias(true).dilation(2)dilatedConvTranspose1d_groupsc                	   S   s   t jddddddddS )	Nr.   rZ   rR   r  r/   r  rH   )r  r  r  r  r  r%   r%   r%   r&   r:     r   ztorch::nn::ConvTranspose1dOptions(4, 6, 3)
                                    .stride(3).padding(1).output_padding(1).groups(2))rH   r.   r	  Conv2d)rR   r.   rR   rH   z&torch::nn::Conv2dOptions(3, 4, {3, 2}))rH   rR   r	  rM   )	r<   r=   r>   r?   r  check_with_long_tensorrA   rB   rC   )rR   r.   rR   rR   rH   rH   z5torch::nn::Conv2dOptions(3, 4, {3, 3}).stride({2, 2})rY   strided)
r<   r=   r>   r?   r  rF   r  rA   rB   rC   )rR   r.   r  r  r/   r/   zEtorch::nn::Conv2dOptions(3, 4, {3, 3}).stride({2, 2}).padding({1, 1})r  )rR   rH   r  r  r  r  zVtorch::nn::Conv2dOptions(3, 2, {3, 3}).stride({2, 2}).padding({1, 1}).dilation({2, 2}))rH   rR   r-   r-   )rR   r.   r  r/   r   r/   r/   Fztorch::nn::Conv2dOptions(3, 4, {3, 2})
                                    .stride(1).padding(0).dilation(1).groups(1).bias(false))rH   rR   rZ   rM   gQ?)r   rR   r	  rM   )r<   r=   r>   r?   r  rF   r  rA   Conv2d_groupsc                   S   r  Nr.   rZ   r  rH   r  rm   r  r%   r%   r%   r&   r:   g  r   z0torch::nn::Conv2dOptions(4, 6, {3, 2}).groups(2))rH   r.   rZ   rM   )	r   r   r>   r?   r  r  rA   rB   rC   Conv2d_groups_thnnc                   S   r  r  r  r%   r%   r%   r&   r:   r  r   )r   r   r>   r?   r  rA   rB   rC   Conv2d_pad_validc                   S   r  )NrH   r.   rR   r.   r  r  r  r%   r%   r%   r&   r:   |  r   z=torch::nn::Conv2dOptions(2, 4, {3, 4}).padding(torch::kValid))rH   rH   rZ   rM   Conv2d_pad_samec                   S   r  )NrH   r.   r  r   r  r  r%   r%   r%   r&   r:     r   z<torch::nn::Conv2dOptions(2, 4, {3, 4}).padding(torch::kSame)Conv2d_pad_same_dilatedc                   S   s   t jddddddS )NrH   r.   r  r   r  r  r%   r%   r%   r&   r:     rE   zHtorch::nn::Conv2dOptions(2, 4, {3, 4}).padding(torch::kSame).dilation(2)ConvTranspose2d)rR   r.   rR   r  r/   r  ztorch::nn::ConvTranspose2dOptions(3, 4, 3)
                                    .stride({3, 2}).padding(1).output_padding({1, 1}))r/   rR   r	  rZ   )	r<   r=   r>   r  r?   r  rA   rB   rC   )	rR   r.   rR   rH   rR   r/   r  r/   Fr  a`  torch::nn::ConvTranspose2dOptions(3, 4, 3)
                                    .stride({2, 3})
                                    .padding(1)
                                    .output_padding({1, 1})
                                    .groups(1)
                                    .bias(false)
                                    .dilation({2, 2}))r/   rR   rZ   r	  )rR   r.   rR   r  r/   r  r/   Fztorch::nn::ConvTranspose2dOptions(3, 4, 3)
                                    .stride({2, 3}).padding(1).output_padding({1, 1}).groups(1).bias(false)ConvTranspose2d_groupsc                   S      t jdddddS )NrH   r.   r  r  )rm   r  r%   r%   r%   r&   r:     r   z9torch::nn::ConvTranspose2dOptions(2, 4, {2, 3}).groups(2))r/   rH   r.   rM   Conv2d_depthwisec                   S   s   t jdddddS )Nr.   r  r  r  r%   r%   r%   r&   r:     r   z0torch::nn::Conv2dOptions(4, 4, {3, 3}).groups(4))rH   r.   rZ   rZ    Conv2d_depthwise_with_multiplierc                   S   r  )Nr.   r-   r  r  r  r%   r%   r%   r&   r:     r   z0torch::nn::Conv2dOptions(4, 8, {3, 3}).groups(4)Conv2d_depthwise_stridedc                   S      t jddddddS )Nr.   r  r  )r  r  r  r%   r%   r%   r&   r:     rE   z?torch::nn::Conv2dOptions(4, 4, {3, 3}).stride({2, 2}).groups(4)Conv2d_depthwise_paddedc                   S   r#  )Nr.   r  r  )r  r  r  r%   r%   r%   r&   r:     rE   z@torch::nn::Conv2dOptions(4, 4, {3, 3}).padding({1, 1}).groups(4)Conv2d_depthwise_dilatedc                   S   s   t jddddddS )Nr.   r  )r  r  r  r%   r%   r%   r&   r:     rE   zAtorch::nn::Conv2dOptions(4, 4, {2, 2}).dilation({2, 2}).groups(4))rH   r.   rM   rM   Conv3d)rH   rR   rH   rR   rH   z)torch::nn::Conv3dOptions(2, 3, {2, 3, 2}))r/   rH   r.   rM   r.   g?)rH   rR   rH   rR   r.   r/   r   r/   r/   Fztorch::nn::Conv3dOptions(2, 3, {2, 3, 4})
                                    .stride(1).padding(0).dilation(1).groups(1).bias(false))r/   rH   rR   r.   rM   )rH   rR   )r/   r/   r/   r/   r   r/   r/   F1x1x1_no_biasF)rR   r.   rH   rH   z+torch::nn::Conv3dOptions(3, 4, 2).stride(2))rH   rR   rM   rM   rM   )rR   r.   rH   rH   r/   z6torch::nn::Conv3dOptions(3, 4, 2).stride(2).padding(1)stride_padding)rR   r.   r(  z)torch::nn::Conv3dOptions(3, 4, {2, 3, 4}))r   rR   rR   r.   rM   )r<   r=   r>   r?   r  r  rF   rA   Conv3d_groupsc                   S   r  )NrH   r.   rR   r  rm   r&  r%   r%   r%   r&   r:   D  r   z+torch::nn::Conv3dOptions(2, 4, 3).groups(2)Conv3d_dilatedc                   S   s   t jdddddS )NrR   r.   rH   r  r,  r%   r%   r%   r&   r:   O  r   z-torch::nn::Conv3dOptions(3, 4, 2).dilation(2)Conv3d_dilated_stridedc                   S   s   t jddddddS )NrR   r.   rH   )r  r  r  r,  r%   r%   r%   r&   r:   X  rE   z7torch::nn::Conv3dOptions(3, 4, 2).dilation(2).stride(2)Conv3d_pad_validc                   S   r  )NrR   r.   r(  r  r  r,  r%   r%   r%   r&   r:   a  r   z@torch::nn::Conv3dOptions(3, 4, {2, 3, 4}).padding(torch::kValid))rH   rR   rZ   rM   r.   Conv3d_pad_samec                   S   r  )NrR   r.   r(  r   r  r,  r%   r%   r%   r&   r:   k  r   z?torch::nn::Conv3dOptions(3, 4, {2, 3, 4}).padding(torch::kSame)Conv3d_pad_same_dilatedc                   S   s   t jddddddS )NrR   r.   r(  r   rH   r  r,  r%   r%   r%   r&   r:   u  rE   zKtorch::nn::Conv3dOptions(3, 4, {2, 3, 4}).padding(torch::kSame).dilation(2)ConvTranspose3dz2torch::nn::ConvTranspose3dOptions(2, 3, {2, 3, 2}))r<   r=   r>   r  r?   rA   rB   rC   )	rH   rR   r'  r/   r   r   r/   T)rH   rH   rH   ztorch::nn::ConvTranspose3dOptions(2, 3, {2, 3, 2})
                                    .stride(1).padding(0).output_padding(0).groups(1).bias(true).dilation({2, 2, 2}))	r<   r=   r>   r  r?   rF   rA   rB   rC   ReplicationPad3d))r/   rH   rR   rR   rH   r/   z6torch::nn::ReplicationPad3dOptions({1, 2, 3, 3, 2, 1}))rH   rR   rH   rH   rH   )r<   r=   r>   r?   rC   )rR   rH   rH   rH   no_batch_dim)r<   r=   r>   r?   r@   rF   rC   c                	   S   s   t jdddddt jddS )NrH   rR   Tr   requires_grad)r1   r~   
complex128r%   r%   r%   r&   r:     r  complex)r<   r=   r>   r   	skip_halfrF   	Embedding)r.   rR   z!torch::nn::EmbeddingOptions(4, 3)c                   S      t jddt jddS NrH   rR   r   r.   r1   r'  r  random_r%   r%   r%   r&   r:     r   z0https://github.com/pytorch/pytorch/issues/117971)r<   r=   r>   r   r[   rC   	decoratorc                   S       t jddt jddddS Nr/   i   r   r.   r	  r1   r'  r  r>  r5   r%   r%   r%   r&   r:          discontiguous)r<   r=   r>   r   r[   rF   rC   r?  EmbeddingBagz$torch::nn::EmbeddingBagOptions(4, 3)c                   S   r;  r<  r=  r%   r%   r%   r&   r:     r   mean)r<   r=   r>   r   r[   rF   rC   c                   S   r@  rA  rB  r%   r%   r%   r&   r:     rC  )r.   rR   N       @Fr  ztorch::nn::EmbeddingBagOptions(4, 3)
                                    .max_norm(std::nullopt).norm_type(2.).scale_grad_by_freq(false).mode(torch::kSum)c                   S   r;  r<  r=  r%   r%   r%   r&   r:     r   r  )r.   rR   NrG  Fmaxztorch::nn::EmbeddingBagOptions(4, 3)
                                    .max_norm(std::nullopt).norm_type(2.).scale_grad_by_freq(false).mode(torch::kMax)c                   S   r;  r<  r=  r%   r%   r%   r&   r:     r   rH  EmbeddingBag_mean_padding_idxc                   S   s   t jddddS )Nr.   rR   r/   padding_idxrm   rE  r%   r%   r%   r&   r:     r   z3torch::nn::EmbeddingBagOptions(4, 3).padding_idx(1)c                   S      t t dt dgS NrR   r1   stackr]   r%   r%   r%   r&   r:     r  )r   r   r>   r   r[   rC   EmbeddingBag_sum_padding_idxc                	   S      t jddd dddddS )Nr.   rR   rG  Fr  r/   rJ  rL  r%   r%   r%   r&   r:     r   ztorch::nn::EmbeddingBagOptions(4, 3)
                                    .max_norm(std::nullopt).norm_type(2.).scale_grad_by_freq(false).mode(torch::kSum).padding_idx(1)c                   S   rM  rN  rO  r%   r%   r%   r&   r:     r  EmbeddingBag_max_padding_idxc                	   S   rR  )Nr.   rR   rG  FrH  r/   rJ  rL  r%   r%   r%   r&   r:     r   ztorch::nn::EmbeddingBagOptions(4, 3)
                                    .max_norm(std::nullopt).norm_type(2.).scale_grad_by_freq(false).mode(torch::kMax).padding_idx(1)c                   S   rM  rN  rO  r%   r%   r%   r&   r:     r  EmbeddingBag_sparsec                   S   s   t jdddtjdS )Nr.   rR   T)sparser   )rm   rE  r1   r^   r%   r%   r%   r&   r:      rE   ztorch::nn::EmbeddingBagOptions(4, 3)
                                    .sparse(true)._weight(torch::rand({4, 3}).to(torch::kFloat64))c                   S      t dddS NrH   r/   r1   r]   repeatr%   r%   r%   r&   r:     r   )r   r   r>   r   r[   has_sparse_gradientsc                   S   s   t jddtjddS )Nr.   rR   T)r   rU  )rm   r:  r1   r^   r%   r%   r%   r&   r:     rE   z_torch::nn::EmbeddingOptions(4, 3).sparse(true)._weight(torch::rand({4, 3}).to(torch::kFloat64))c                   S   rV  rW  rX  r%   r%   r%   r&   r:   
  r   Embedding_sparse)r   r>   r   r   r[   rZ  PixelShuffler  z!torch::nn::PixelShuffleOptions(3))r/   	   r.   r.   PixelUnshufflez#torch::nn::PixelUnshuffleOptions(3))r/   r/      r_  r_  nearest)r_   scale_factormodezF::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({12})).scale_factor(std::nullopt).mode(torch::kNearest))r/   rH   r.   interpolate_nearest_1d)r   cpp_options_argsr?   r   r   rC   )r   rH   r.   interpolate_nearest_1d_zero_dim)r   rd  r?   r   r   )r_  )r/   rH   rR   interpolate_nearest_tuple_1dg      @zF::InterpolateFuncOptions()
                                .size(std::nullopt).scale_factor(std::vector<double>({4.})).mode(torch::kNearest)interpolate_nearest_scale_1dlinear)r_   ra  rb  align_cornersa  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({12}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kLinear)
                                .align_corners(false)interpolate_linear_1d)r.   a  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({4}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kLinear)
                                .align_corners(false)interpolate_linear_tuple_1da  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({4.}))
                                .mode(torch::kLinear)
                                .align_corners(false)interpolate_linear_scale_1dinterpolate_linear_1d_zero_dima  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({12}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kLinear)
                                .align_corners(true)#interpolate_linear_1d_align_cornersa  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({4.}))
                                .mode(torch::kLinear)
                                .align_corners(true))interpolate_linear_scale_1d_align_cornersrH   zF::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({2, 2}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kNearest))r/      r/   r/   %interpolate_nearest_2d_launch_configszF::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({12, 12}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kNearest))r/   rH   r.   r.   interpolate_nearest_2d)r_     zF::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({12, 16}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kNearest))r/   rH   rR   r.   interpolate_nearest_tuple_2dzF::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({4., 4.}))
                                .mode(torch::kNearest)interpolate_nearest_scale_2d)r   rH   r.   r.   interpolate_nearest_2d_zero_dimbilineara  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({12, 12}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kBilinear)
                                .align_corners(false)interpolate_bilinear_2d interpolate_bilinear_2d_zero_dim)r.   rZ   a	  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({4, 6}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kBilinear)
                                .align_corners(false))r/   rH   rH   rR   interpolate_bilinear_tuple_2da
  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({4., 4.}))
                                .mode(torch::kBilinear)
                                .align_corners(false)interpolate_bilinear_scale_2d)rG  rG  a
  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({2., 2.}))
                                .mode(torch::kBilinear)
                                .align_corners(false)*interpolate_bilinear_scale_tuple_shared_2d)rG        ?a
  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({2., 1.}))
                                .mode(torch::kBilinear)
                                .align_corners(false)*interpolate_bilinear_scale_tuple_skewed_2da  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({4, 6}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kBilinear)
                                .align_corners(true)+interpolate_bilinear_tuple_2d_align_cornersa	  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({2., 1.}))
                                .mode(torch::kBilinear)
                                .align_corners(true)8interpolate_bilinear_scale_tuple_skewed_2d_align_cornersbicubica
  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({12, 12}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kBicubic)
                                .align_corners(false)interpolate_bicubic_2dinterpolate_bicubic_2d_zero_dima  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({4, 6}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kBicubic)
                                .align_corners(false)interpolate_bicubic_tuple_2da	  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({4., 4.}))
                                .mode(torch::kBicubic)
                                .align_corners(false)interpolate_bicubic_scale_2da	  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({2., 2.}))
                                .mode(torch::kBicubic)
                                .align_corners(false))interpolate_bicubic_scale_tuple_shared_2da	  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({2., 1.}))
                                .mode(torch::kBicubic)
                                .align_corners(false))interpolate_bicubic_scale_tuple_skewed_2da  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({4, 6}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kBicubic)
                                .align_corners(true)*interpolate_bicubic_tuple_2d_align_cornersa  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({2., 1.}))
                                .mode(torch::kBicubic)
                                .align_corners(true)7interpolate_bicubic_scale_tuple_skewed_2d_align_cornerszF::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({12, 12, 12}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kNearest))r/   rH   r.   r.   r.   interpolate_nearest_3d)r   rH   r.   r.   r.   interpolate_nearest_3d_zero_dim)r_  rs  rs  zF::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({12, 16, 16}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kNearest))r/   rH   rR   r.   r.   interpolate_nearest_tuple_3dzF::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({4., 4., 4.}))
                                .mode(torch::kNearest)interpolate_nearest_scale_3d	trilineara  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({12, 12, 12}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kTrilinear)
                                .align_corners(false)interpolate_trilinear_3d!interpolate_trilinear_3d_zero_dim)r.   rZ   rZ   a  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({4, 6, 6}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kTrilinear)
                                .align_corners(false))r/   rH   rH   rR   rR   interpolate_trilinear_tuple_3dg      @a  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({3., 3., 3.}))
                                .mode(torch::kTrilinear)
                                .align_corners(false)interpolate_trilinear_scale_3dr   )r   rd  r?   r   r   r   rC   a  F::InterpolateFuncOptions()
                                .size(std::vector<int64_t>({4, 6, 6}))
                                .scale_factor(std::nullopt)
                                .mode(torch::kTrilinear)
                                .align_corners(true),interpolate_trilinear_tuple_3d_align_cornersa  F::InterpolateFuncOptions()
                                .size(std::nullopt)
                                .scale_factor(std::vector<double>({3., 3., 3.}))
                                .mode(torch::kTrilinear)
                                .align_corners(true),interpolate_trilinear_scale_3d_align_cornersr0   r  zF::SoftmaxFuncOptions(-1))rH   rp  softmax_lastdimr/   )r  r   z/F::SoftmaxFuncOptions(1).dtype(torch::kFloat64)softmax_lastdim_dtype)r   rd  r?   r   r   rI   rC   zF::SoftmaxFuncOptions(1))rH   rp  rH   rH   softmax_spatial_special)rH   rH   r.   r.   softmax_spatialsoftmax_spatial_dtyper   zF::SoftmaxFuncOptions(0)rQ   softmax_functional_dim0)r   rd  r?   r   rI   r   rC   rR   zF::SoftmaxFuncOptions(3)softmax_functional_dim3r%   softmax_functional_scalar)r   rd  r?   r   rI   r   zF::LogSoftmaxFuncOptions(-1)log_softmax_lastdimzF::LogSoftmaxFuncOptions(1)log_softmax_spatial_speciallog_softmax_spatialzF::LogSoftmaxFuncOptions(0)log_softmax_dim0zF::LogSoftmaxFuncOptions(3)log_softmax_dim3log_softmax_scalarUnfoldc                   S      t ddddS )Nr  r  r   r   rm   r  r%   r%   r%   r&   r:   q	  r   zPtorch::nn::UnfoldOptions({2, 2}).dilation({1, 1}).padding({0, 0}).stride({1, 1}))rH   r.   rR   rR   )r   r   r>   r?   r[   rI   rC   Foldc                   S      t dddddS Nr  r  r  r  rm   r  r%   r%   r%   r&   r:   z	  r   zVtorch::nn::FoldOptions({3, 3}, {2, 2}).dilation({1, 1}).padding({0, 0}).stride({1, 1}))rH   rs  r.   Fold_no_batch_dim_inputc                   S   r  r  r  r%   r%   r%   r&   r:   	  r   )rs  r.   )r   r   r>   r?   r[   refrI   rC   Unfold_int_inputc                   S   r  )NrH   r/   r   r  r%   r%   r%   r&   r:   	  r   z<torch::nn::UnfoldOptions(2).dilation(1).padding(0).stride(1)Fold_int_inputc                   S   r  NrR   rH   r/   r   r  r%   r%   r%   r&   r:   	  r   z=torch::nn::FoldOptions(3, 2).dilation(1).padding(0).stride(1)Fold_no_batch_dim_int_inputc                   S   r  r  r  r%   r%   r%   r&   r:   	  r   )r   r   r>   r?   r  r[   rI   rC   rG   rJ   rL   with_up_down_scalarrO   PairwiseDistancec                   S      t ddt ddfS Nr,   r-   r   r%   r%   r%   r&   r:   	  r   )r<   r   rC   c                   S   s   t ddt ddfS )Nr,   r/   r-   r   r%   r%   r%   r&   r:   	  r   broadcast_lhs)r<   r   rF   rC   c                   S   s   t ddt ddfS )Nr,   r-   r/   r   r%   r%   r%   r&   r:   	  r   broadcast_rhs)g      ?r   TzDtorch::nn::PairwiseDistanceOptions().p(1.5).eps(1e-05).keepdim(true)c                   S   r  r  r   r%   r%   r%   r&   r:   	  r   with_non_default_args)r<   r=   r>   r   rF   rC   c                   S      t dt dfS )Nr-   r   r%   r%   r%   r&   r:   	  rE   )r<   r   r@   rF   rC   TransformerEncoderLayer)r.   rH   rs          ztorch::nn::TransformerEncoderLayerOptions(4, 2)
                                    .dim_feedforward(16)
                                    .dropout(0.0)r(  relu_activationrK   )
r<   r=   r>   r?   rF   rA   rB   r\   r[   rC   r.   r-   r  ztorch::nn::TransformerEncoderLayerOptions(4, 2)
                                    .dim_feedforward(8)
                                    .dropout(0.0)
                                    .activation(torch::kGELU)gelu_activationg{Gz?)	r<   r=   r>   r?   r[   rF   rA   rB   rC   TransformerDecoderLayer)r.   rH   r-   r  ztorch::nn::TransformerDecoderLayerOptions(4, 2)
                                    .dim_feedforward(8)
                                    .dropout(0.0)c                   S      t dddt dddfS NrR   r.   rH   r}   r%   r%   r%   r&   r:   	  r  )	r<   r=   r>   r   r[   rF   rA   rB   rC   ztorch::nn::TransformerDecoderLayerOptions(4, 2)
                                    .dim_feedforward(8)
                                    .dropout(0.0)
                                    .activation(torch::kGELU)c                   S   r  r  r}   r%   r%   r%   r&   r:   
  r  Transformera  torch::nn::TransformerOptions()
                                    .d_model(4)
                                    .nhead(2)
                                    .num_encoder_layers(2)
                                    .num_decoder_layers(2)
                                    .dim_feedforward(8)
                                    .dropout(0.0)
                                    .activation(torch::kReLU)c                   S   s&   t dddt dddt ddfS r  r}   r%   r%   r%   r&   r:   
  r   multilayer_codergQ?r+   )rR   rM   ztorch::nn::LinearOptions(3, 5)c                   S   r  rN  r}   r%   r%   r%   r&   r:    
  r  c                 S   s*   t | dd|d  d|d  S )Nr/   r0   r   )r1   r2   r4   r3   r6   r%   r%   r&   r:   !
  r   )	r<   r=   r>   r   r@   rF   rA   rB   rC   rP   z5torch::nn::FlattenOptions().start_dim(-3).end_dim(-1))r0   )rR   r.   rM   )r<   r>   r=   r?   r@   rF   rC   	Unflattenz'torch::nn::UnflattenOptions(-2, {2, 2})	LayerNorm)8   r  r  r   zMtorch::nn::LayerNormOptions({56, 56, 56}).eps(1e-5).elementwise_affine(false))r.   r  r  r  3d_no_affine_large_feature)	r<   r=   r>   r?   r  
check_evalgradcheck_fast_mode
check_halfrF   )reflectcircular	replicater  )ztorch::kReflectztorch::kCircularztorch::kReplicateztorch::kZerosr  {z, }r  r  c                 s   s    | ]}|d  V  qdS r/   Nr%   r  r8   r%   r%   r&   	<genexpr>V
      z'get_new_module_tests.<locals>.<genexpr>Convdztorch::nn::Convz~dOptions(2, 3, 3)
                                            .stride(2)
                                            .padding(z)
                                            .dilation(1)
                                            .groups(1)
                                            .bias(true)
                                            .padding_mode()_stride2_pad2)
r<   r=   r>   r?   output_sizer  rF   rA   rB   rC   )ELU
HardshrinkHardsigmoidHardtanh	Hardswish	LeakyReLU
LogSigmoidPReLUReLUReLU6rG   SELUCELUGELUGLUr   SiLUMishSoftplus
SoftshrinkSoftsignTanh
Tanhshrink	Thresholdr  )rG  )r=   rC   r  r=   r  )r[   	check_jitrC   r  )rI   rC   r  rC   r  r  r  r  r  r  r  r  r  r  r  )r  r   r  r  r  r  r  )r<   r?   r@   rF   test_cpp_api_parity)Jr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r*  r5  rI  rP  rS  rZ  r_  r]  rb  rf  rd  rm  rp  rw  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r1   r^   r  r   ro   ru   interpolatesoftmaxfloat64log_softmaxgelur   reluSizezipr  rangejoinmapr3  appendgetupdate)new_module_testspadding_modecpp_padding_moder  r  cpp_paddingr?   r  non_linear_activations_no_batch!non_linear_activations_extra_infonon_linear_activationactivation_test_info
extra_infor%   r%   r&   get_new_module_tests8  s  	
 !"#$%&'()*+,-./0123=HS^it~       &  0  :  D  P  \  g  r  ~           $    .    9    C    M    W    a    m                     !      *      3      <      E      P      ]      j      v                               !        *        4        >        H        R        ^        e        n        v                 
                              &          0          8          A          J          S          [          b          i          r          z                                               %            1            <            H            T            _            j            u                                                       "              /              <              I              V              b              o              {                                                                -                :                F                S                ^                h                s                ~                                   
                  #                  1                  >                  L                  T                  ]                  e                  m                  v                                     	                                                            !                    )                    1                    9                    @                    I                    R                    \                    e                    n                    x                                                                                                                                   "                      3                      A                      N                      \                      n                      y                                                                       
 

	









r  rF  c                 C   sr   |rt |||   }n|| |   }|dkr| S |dkr$| S |dkr7| dkr7| |d S |S )NrF  r  	batchmeanr   )r1   r   r   rF  r  r  r_   )rR  r
  r   r   r$   r%   r%   r&   kldivloss_reference
  s   r
  c                 C   s   |   dksJ | d}| d}|f|  dd   }t|| }|d u r1t|| }d}	tdd |D  D ]+}
||
 }||krHdn||  }t|
}|	d| | t
|  | ||
< |	|7 }	q<|dkrr| |	 S |d	krz| S |S )
NrR   r   r/   rH   c                 S   s   g | ]}t |qS r%   )r  )r  r_   r%   r%   r&   r  
  rE   z'nlllossNd_reference.<locals>.<listcomp>r  rF  r  )r  r_   r1   r  rw   onesr   itemr  insertr  r  )rR  r
  r(   r-  r   NCout_sizeoutputtotal_weighttupt_nxnorminput_indexr%   r%   r&   nlllossNd_reference
  s(   


r  r  c                 C   s   |   dksJ t| d} | d}|d u rt|| }|jd|gdd | jdd  D R  }|dkrG|dks=J |d|  ||  }| | | jdd }|dkrZ|	 S |d	krb| S |S )
NrH   r/   c                 s       | ]}d V  qdS r  r%   r  r9   r%   r%   r&   r  
      z;cross_entropy_loss_prob_target_reference.<locals>.<genexpr>r  r}  r  rF  r  )
r  r1   r  r_   r  rw   r4   shaper  rF  )rR  r
  r(   r   label_smoothingr  r  r%   r%   r&   (cross_entropy_loss_prob_target_reference
  s   
(r  c                 C   s4  t | d}tj|||||d}|dkr|S d|  k r!dks$J  J t | d} | d}|d urI| |jd|gdd | jdd  D R   } t | d }	||k}
|	|
d |dkr|d urwt |	|	d	|
|
    }nt |	
|
 }n|d
krt |	}n|	}d| | |||   S )Nr/   r,  r  r}  c                 s   r  r  r%   r  r%   r%   r&   r  
  r  z>cross_entropy_loss_indices_target_reference.<locals>.<genexpr>rH   rF  r   r  )r1   r  ru   r  r_   r4   r  r  masked_fill_gathermasked_selectlogical_notrT   rF  )rR  r
  r(   r-  r   r  log_softmax_inputnlllossr  smooth_lossignore_maskretr%   r%   r&   +cross_entropy_loss_indices_target_reference
  s4   
,*r(  c                 C   s2   | j |j krt| ||||dS t| |||||dS )N)r(   r   r  )r(   r   r-  r  )r  r  r(  )rR  r
  r(   r-  r   r  r%   r%   r&   cross_entropy_loss_reference  s   r)  c           	         sf   dd  fddt | |D }t | \}}| |}|dkr)t|t| S |dkr1t|S |S )Nc                 S   s6   ||krdS |d u rdn|| }| |  | }||fS )Nr  r/   r%   )rR  r
  r(   r-  r  r$   r%   r%   r&   nll_loss_helper  s
   z*nllloss_reference.<locals>.nll_loss_helperc                    s   g | ]\}}|| qS r%   r%   )r  r7   r3   r-  r*  r(   r%   r&   r    s    z%nllloss_reference.<locals>.<listcomp>rF  r  )r  
new_tensorr  )	rR  r
  r(   r-  r   losses_and_weightslossesr)   losses_tensorr%   r+  r&   nllloss_reference  s   
r0  r}  c                 C   s~   | |   }||k|}||k |}|dkr|}n||d|   |d |d  |  }|dkr5| S |dkr=| S |S )Nr   rr  rH   rF  r  )r   rw   rF  r  )rR  r
  r   rt  abs_diffge_beta_masklt_beta_maskr  r%   r%   r&   smoothl1loss_reference+  s   $r4  c                 C   sd   | |   }||k}||k }|| |d|   |d |d   }|dkr(| S |dkr0| S |S )Nrr  rH   rF  r  )r   rF  r  )rR  r
  r   r|  r1  ge_delta_masklt_delta_maskr  r%   r%   r&   huberloss_reference;  s   $r7  c                 C   sp   g }|D ]}|dk r n| | qd}|D ]}tdt| D ]}||vr4|tdd| |  | |  7 }qq|S )Nr   r/   )r  r  lenrH  )rR  r
  targetstarget_indexr  r7   r%   r%   r&   _multilabelmarginloss_referenceG  s   r;  c                 C   s   |   }|   dk r8|  dk sJ |   dkr| dn| dd} |  dkr0|dn|dd}| d}| d}| | }td|D ]}t| | || ||< qN|dkrf| | S |dkrp| | S |dk rz|	 | S || S NrH   r/   r   rF  r  )
r  r  r_   newzero_r  r;  rF  r  r  )rR  r
  r   	input_dimnr  r  r7   r%   r%   r&   multilabelmarginloss_referenceW  s"   &&

rA  c                 C   sL   ||  j dd| }t|dk| |}|dkr| S |dkr$| S |S )Nr   r  r/   rF  r  )r  rw   r1   whererF  r  )rR  r
  r  r   margin_clampr  r%   r%   r&   hingeembeddingloss_referenceq  s   rD  c                 C   s:   d|  |     }|dkr| S |dkr| S |S )Nr/   rF  r  )r   r   rF  r  )rR  r
  r   r  r%   r%   r&   softmarginloss_reference|  s   rE  c                 C   sj   |d u r|  t| d}d}tdt| D ]}||kr2||| td|| |  | |  |  7 }q|S )Nr/   r   )r=  r8  fill_r  rH  )rR  
target_idxr8   r  r(   r  r7   r%   r%   r&   _multimarginloss_reference  s   *rH  r/   c                 C   s   |   dk r|   dkr| dn| dd} |  }|  dkr(|d}| d}| d}| |}	td|D ]}
t| |
 ||
 ||||	|
< q<|dkrW|	 | S |dkra|	 | S |dkrl|	d| S |	| S r<  )	r  r  r_   r=  r  rH  rF  r  r  )rR  r
  r8   r  r(   r   
target_dimr@  r  r  xr%   r%   r&   multimarginloss_reference  s"   &



rK  c                 C   sZ   dd }t |dkd|| | || || jdd}|dkr#| S |dkr+| S |S )Nc                 S   sv   |  | d}td| dD ](}| | ||   | | | |   d || ||   d  d  ||< q|S )Nr   g-q=rr  )r=  r_   r  r  )abcosr7   r%   r%   r&   _cos  s   Nz+cosineembeddingloss_reference.<locals>._cosr/   r   r  rF  r  )r1   rB  r  rF  r  )input1input2r
  r  r   rO  r  r%   r%   r&   cosineembeddingloss_reference  s   .rR  rH   ư>c                 C   sz   t | |||}t | |||}	|r t ||||}
t |	|
}	t j|| |	 dd}|dkr3| S |dkr;| S |S )Nr  r  rF  r  )r1   pairwise_distancer  r  rF  r  )anchorpositivenegativer  r8   epsswapr   d_pd_nd_sr  r%   r%   r&   tripletmarginloss_reference  s   r]  c                 C   s>   | | |  | j dd}|dkr| S |dkr| S |S )Nr   r  rF  r  )r  rF  r  )rP  rQ  r
  r  r   r  r%   r%   r&   marginrankingloss_reference  s   r^  c                 C   s  t j|t jd}t j|t jd}| j}|  } | }|d}g }t| dD ]}	||	  }
||	  }||	  }|	d| d f|}|
 dkr\||	d |f |dd d< n||| | |dd d< | d |
|	f  }| |d d f}|d|f |d< |d|d f |d< |d d |dd  k}td|
D ]2}| }|dd   |d d 7  < |dd   t ||d d |d7  < |||f | }q||dd    d    q)t |d}|dkr||j|j|jd  }n	|d	kr| }||}|S )
Nr   r   r/   rH   r  r0   rF  r   devicer  )r1   	as_tensorr  r   r^   cumsumr  r_   r  new_fullr  r   	new_zerosclonerB  r  r  r   catr   r`  rF  )	log_probsr9  input_lengthstarget_lengthsblankr   dtcum_target_lengthsr.  r7   input_lengthtarget_lengthcum_target_lengthtargets_primeprobsalpha
mask_thirdr3   
alpha_nextr  r%   r%   r&   ctcloss_reference  sB   
,"

ru  )r   )r   r   r#  rX  rl  r~  r  r  r  r  CosineEmbeddingLossTripletMarginLossMarginRankingLossCTCLossCrossEntropyLossr3  r   c                     s`   | d }dd  fdd  fdd| dd D }|| }t |}|d	kr.|d
S |S )zReference function for criterion supporting no batch dimensions.

    The criterion is passed the input and target in batched form with a single item.
    The output is squeezed to compare with the no-batch input.
    r0   c                 S   r  )Nc                 S   r  r  r  r  r%   r%   r&   r    rz   zNsingle_batch_reference_criterion_fn.<locals>.unsqueeze_inp.<locals>.<listcomp>r   r  r  r%   r%   r&   r    r  z:single_batch_reference_criterion_fn.<locals>.unsqueeze_inpc                    s<   g }t | ttfr| D ]	}| | q|S ||  |S rb   )r  r  r  extendr  )xsr$   rJ  )rT   r%   r&   rT     s   
z4single_batch_reference_criterion_fn.<locals>.flattenc                       g | ]} |qS r%   r%   )r  rR  )r  r%   r&   r  #  rE   z7single_batch_reference_criterion_fn.<locals>.<listcomp>Nrs   r   )r'   r  )rd   	criterionsingle_batch_input_argsr  r   r%   )rT   r  r&   #single_batch_reference_criterion_fn  s   	
r  )L1LossMSELossPoissonNLLLossr~  rl  )rs   rF  r  _no_batch_dim_)namec                 G      t t| tdS Nrt   r   rm   r   r  rd   r%   r%   r&   r:   6  r   r  )r   r   r?   target_sizer@   r  rC   KLDivLoss_no_batch_dim_c                   C   s   t jtdS r  )rm   r   r   r%   r%   r%   r&   r:   C  rV   c                   C   r   Nr  r   r%   r%   r%   r&   r:   D  r   c                   C   r  r  r}   r%   r%   r%   r&   r:   E  r  )r   r   r   	target_fnr@   r  rC   BCELossc                   C   s   t t jdt jdS Nr]  r   )r1   r   r   r^   r%   r%   r%   r&   r:   R  rz   c                   C   s   t jdt jddt jS )Nr]  r   r   )r1   r   r^   r   r   r%   r%   r%   r&   r:   S  r  BCEWithLogitsLossc                   C      t jdt jdS r  r1   r   r^   r%   r%   r%   r&   r:   U  r   r  c                   C   r  r  r  r%   r%   r%   r&   r:   V  r   c                   C      t g dd S N)r0   r/   r/   rR   r1   tensorr%   r%   r%   r&   r:   V  r   r  c                   C   r  )Nr.   r   r  r%   r%   r%   r&   r:   W  r   c                   C   s   t g dS )N)rR   r   r0   r/   r  r%   r%   r%   r&   r:   W  r   r  c                   C   r  r  r  r%   r%   r%   r&   r:   X  r   c                   C   r  r  r  r%   r%   r%   r&   r:   X  r   r#  c                   C   s   t jtjdtjdddS )NrR   r   r   r  )ru   r  r1   r   r^   r%   r%   r%   r&   r:   Y  r  c                   C   r  rS   r  r%   r%   r%   r&   r:   Y  r  rv  c                   C       t jdt jdt jdt jdfS r  r  r%   r%   r%   r&   r:   \  rC  c                   C   r  )Nr/   r   )r1   r  r^   r%   r%   r%   r&   r:   ]  r   rx  c                   C   r  r   r   r%   r%   r%   r&   r:   `  rE   c                   C   r   r   )r1   r   signr%   r%   r%   r&   r:   `  r   rw  c                   C   r  r  r  r%   r%   r%   r&   r:   d  rC  c                   C   r  r  r  r%   r%   r%   r&   r:   e  r   MultiLabelSoftMarginLossc                   C   r  r  r  r%   r%   r%   r&   r:   g  r   c                   C   r  )Nr]  r   r%   r%   r%   r&   r:   g  r  r[   ,classification_criterion_no_batch_extra_info)r  r  r  r#  r  c                 G   r  r  r  r  r%   r%   r&   r:   y  r   c                 C      |  S rb   r%   fr%   r%   r&   r:   z      c                 C   r  rb   r%   r  r%   r%   r&   r:   {  r  )r   r   r   r  r@   r  
has_parityc                   @   s   e Zd Zedd Zedejdeeej	 eej	 f fddZ
edejddfdd	Ze	
ddejdedejdeejeej f def
ddZdd Zdd Zdd ZddefddZddefddZd defddZdS )!
NNTestCasec                 O      t rb   NotImplementedErrorrc   rd   rg   r%   r%   r&   _forward     zNNTestCase._forwardr  returnc                 C   r  rb   r  rc   r  r%   r%   r&   _get_parameters  r  zNNTestCase._get_parametersNc                 C   r  rb   r  r  r%   r%   r&   _zero_grad_parameters  r  z NNTestCase._zero_grad_parametersFrR  r  grad_outputcreate_graphc                 C   r  rb   r  )rc   r  rR  r  r  r  r%   r%   r&   	_backward  s   zNNTestCase._backwardc                    sP   t |trt fdd|D S t |tr  fdd|D S t|  S )Nc                 3   s    | ]	} | V  qd S rb   	_jacobianr  elemnum_outrc   r%   r&   r        z'NNTestCase._jacobian.<locals>.<genexpr>c                    s   g | ]} | qS r%   r  r  r  r%   r&   r    r   z(NNTestCase._jacobian.<locals>.<listcomp>)r  r  r  r1   r  nelement)rc   rR  r  r%   r  r&   r    s
   

zNNTestCase._jacobianc                    s@   t |tjr|jr| dS |dS t fdd|D S )Nr0   c                 3       | ]}  |V  qd S rb   )_flatten_tensors)r  rL  rc   r%   r&   r        z.NNTestCase._flatten_tensors.<locals>.<genexpr>)r  r1   r  	is_sparseto_denser4   r  )rc   rJ  r%   r  r&   r    s
   
zNNTestCase._flatten_tensorsc                 C   sT   t |tjr|jr|jd ur|j  |j  d S d S d S |D ]}| | q d S rb   )r  r1   r  r6  gradr>  detach__zero_grad_input)rc   rR  r7   r%   r%   r&   r    s   
zNNTestCase._zero_grad_inputTc                 C   sP  |  ||}| }|r| ||}tt|}|r.tdd | |d D }	t|	|}
t	|D ]c}| |\}}dd t
||D }t|}|d}d||< |rZ| | |ra| | | ||||}|rt
|t|D ]\}}| d|d d |f< qr|rt| |d|
d d |f< q2d}|r||f7 }|r||
f7 }|S )	Nc                 s       | ]}|  V  qd S rb   )numelr  r%   r%   r&   r    r  z2NNTestCase._analytical_jacobian.<locals>.<genexpr>r   c                 S   s&   g | ]\}}|d u rt |n|qS rb   )r1   
zeros_like)r  r8   r  r%   r%   r&   r    r   z3NNTestCase._analytical_jacobian.<locals>.<listcomp>r0   r/   r%   )r  r  r  r  r   r  r  r1   r  r  r  r  r4   r  r  r  
contiguousrf  r  )rc   r  rR  jacobian_inputjacobian_parametersr  r  jacobian_inpflat_jacobian_input	num_paramjacobian_paramr7   paramd_paramd_out
flat_d_outd_input
jacobian_xd_xresr%   r%   r&   _analytical_jacobian  s>   





zNNTestCase._analytical_jacobianc                    s    fdd}d}|r|t ||ddf7 }|r? \}}g }	|D ]}
t |||
dd}|	|d d  q"|t|	df7 }|S )Nc                     s     |  S rb   )r  detach)rR  r  rc   r%   r&   fw  r;  z*NNTestCase._numerical_jacobian.<locals>.fwr%   rS  )rX  )r
  rX  r   )r   r  r  r1   rf  )rc   r  rR  r  r  r  r  r  r9   to_catr8   jacobianr%   r  r&   _numerical_jacobian  s   zNNTestCase._numerical_jacobianc                 C   s   t | |d }| ||||}| ||||}tt|}tt|}g }	t||D ]\}
}|
 dkrD|	|
j	|dd
   q,t|	dkrU| t|	t d S d S )Nr   r0   )rr  )boolr  r  r  r  r   r  r  r  rC  r   rH  r8  assertLessEqual	PRECISION)rc   r  rR  r  r  
analytical	numericalanalytical_tnumerical_tdifferencesrL  r@  r%   r%   r&   check_jacobian  s   zNNTestCase.check_jacobianF)TTT)ri   rj   rk   r   r  rm   rn   r  r  	Parameterr  r  r   r1   r  r   r   r  r  r  r  r  r  r  r  r%   r%   r%   r&   r    s0    
*
		*r  c                   @   s`   e Zd Zh dZdddZdd Zdd	 Zed
d Zedd Z	dd Z
dddZdd ZdS )TestBase>   rR  
extra_argsr=    Nc                 K   s~   || _ || _|| _|| _| jD ]'}||vr6|d |vr6|d |vr6|dv r*d||< qt|   d| dq|| _i | _d S )N_fn_size>   r  r=   r%   z
: Specify z5 by a value, a function to generate it, or it's size!)	rF   r   r   r@   _required_arg_names
ValueErrorget_name_extra_kwargs
_arg_cache)rc   r   rF   r@   r   rg   r  r%   r%   r&   __init__  s   
 

zTestBase.__init__c                 C   s8   | j d ur
d| j  S d| jj }| jr|d| j 7 }|S )Ntest_r9   )r   r   ri   rF   )rc   	test_namer%   r%   r&   r    s   

zTestBase.get_namec                    s6   t |tjr|S t|rt| fdd|D S |S )Nc                 3   r  rb   )_unpack)r  vr  r%   r&   r    r  z#TestBase._unpack.<locals>.<genexpr>)r  r1   r  r   type)rc   valuer%   r  r&   r    s
   zTestBase._unpackc                 C      |  ddS )Nr=   T_get_argr  r%   r%   r&   r=   #     zTestBase.constructor_argsc                 C   r  )Nr  Tr  r  r%   r%   r&   r  '  r  zTestBase.extra_argsc              
      s   || j v sJ || jvrX|d }|d }|| jv r"| j| | j|< n6|| jv r1| j|  | j|< n'|| jv sHJ d| d| d| d|    fdd  | j| | j|< |rb| | j| S | j| S )	Nr  r  z	Missing `z`, `z` or `z` for c                    s:   t | tr fdd| D S t | tjr|  S t| S )Nc                    r}  r%   r%   )r  smap_tensor_sizesr%   r&   r  <  rE   z?TestBase._get_arg.<locals>.map_tensor_sizes.<locals>.<listcomp>)r  r  r1   r  r^   r   )sizesr  r%   r&   r  :  s
   

z+TestBase._get_arg.<locals>.map_tensor_sizes)r  r  r  r  r  )rc   r  unpackfn_name	size_namer%   r  r&   r  +  s   


zTestBase._get_argTc                 C   s   |  d|S )NrR  r  )rc   r  r%   r%   r&   
_get_inputF     zTestBase._get_inputc                 C   r  rb   r  )rc   	test_caser%   r%   r&   __call__I  s   zTestBase.__call__)r  NNr  )ri   rj   rk   r  r  r  r  propertyr=   r  r  r   r  r%   r%   r%   r&   r     s    
	


r  c                	       s\   e Zd ZededejdedefddZ fddZd	d
 Z	dd Z
dd Zdd Z  ZS )
ModuleTestr  r  rR  r  c                 C   r  rb   r  )rc   r  r  rR  r%   r%   r&   _do_testO  r  zModuleTest._do_testc                    s   t  j|i | |dd| _|dd| _|dd| _|dd| _|dd| _|dd	| _|d
d| _	|dd | _
| j
d u rMt | _
d S d S )Nr  TrI   r   r[   !FIXME_no_cuda_gradgrad_comparisonFr   g-C6*?check_forward_onlyrC   )superr  r  r  should_test_cudashould_test_pickler[   r  r   r  rC   r1   get_default_dtyper  	__class__r%   r&   r  S  s   

zModuleTest.__init__c           
   	   C   s@  t | j | j| j }|  }| jd ur7|||}t|}t|}| |||d |}|j	||dd | j
rC	 W d    d S | ||| | jrt .}||| t|| |d tj|dd}	|	|||||	| W d    n1 sw   Y  | ||| W d    d S 1 sw   Y  d S )Nr   F)exact_dtype)weights_only)r   rC   r   r=   r   r@   r  r   r  assertEqualr  test_noncontigr  tempfileTemporaryFiler1   saveseekloadr  )
rc   r  r  rR  out	ref_input
ref_moduleexpected_outr  module_copyr%   r%   r&   r  a  s.   


"zModuleTest.__call__c                    s   t |tr fdd|D S t |trt fdd|D S |}| }|}t|D ]}||dkr9|d } nq*tt||g|	|d
 }| dks]| dks]| r]J |j|_|S )Nc                    s   g | ]}  |qS r%   noncontiguizer  or  r%   r&   r  ~  rz   z,ModuleTest.noncontiguize.<locals>.<listcomp>c                 3   r  rb   r  r  r  r%   r&   r    r  z+ModuleTest.noncontiguize.<locals>.<genexpr>r/   r   )r  r  r  r  r  r_   r1   rP  
empty_likeselectr  r  is_contiguousr6  )rc   objr  ndimr  r  	noncontigr%   r  r&   r  |  s    

"$zModuleTest.noncontiguizec              	   C   s  t |tjr| dkrd S tdd |D rd S || || t 7 |||}t	|ddr7|d }|
|j }| }t|||||}t||d }W d    n1 s`w   Y  | |}| |}	tddd	D ]a\}
}|
r}|n|}t|r|n|	}|| || t : |||}t	|ddr|d }|||||}||| |j||d
dd |||d | W d    n1 sw   Y  qud S )Nr   c                 s   s(    | ]}t |tjr| d kV  qdS )r   N)r  r1   r  r  )r  r7   r%   r%   r&   r    s   & z,ModuleTest.test_noncontig.<locals>.<genexpr>return_indicesFr/   TFrH   )rY  g-C6?atolrtol)r  r1   r  r  anyr  r  r   r  r   r=  r  normal_re  r   r  r  r  r   r  )rc   r  r  rR  r  r  r  r  nc_inputnc_grad_outputcontig_icontig_gr7   gor  r  r%   r%   r&   r    sB   


	


zModuleTest.test_noncontigc              	   C   s  t r| js
tdt| j |  }tjtj	i}t
|tr"|n|f}tdd |D }t||d}| j| j }| j| j 	  }||}	||}
t|	d |
d D ]
\}}|j| qW|| || || || |||}|||}t|ddr|d }|d }|j||| jddd td	D ]@}|  }||}|||||}|||||}|j||| jddd t|	d
 |
d
 D ]\}}|j||| jdd qq| j r| j!s|| }|| }t|ddr|d }|d }tj"|dd}||# }d|_$tj%j&||t|'  |dd}tj%j&||t|'  |dd}t||D ]\}}|j||| jddd q4|rg|( ) t(dd |D  }|( ) t(dd |D  }n|( t(dd |D  }|( t(dd |D  }tj%j&|||f t|'  dd}tj%j&|||f t|'  dd}|j||| jddd t||D ]\}}|j||| jddd q| *||| W d    d S 1 sw   Y  d S )NExcluded from CUDA testsc                 s   s$    | ]}t |tjo|jjV  qd S rb   )r  r1   r  r   
is_complexr  r%   r%   r&   r    s   " z'ModuleTest.test_cuda.<locals>.<genexpr>)type_mapr   r'  Fr*  r+  r  rM   r/   r)  T)r6  )r  c                 s       | ]	}|   V  qd S rb   r  r   r  rJ  r%   r%   r&   r    r  c                 s   r7  rb   r8  r9  r%   r%   r&   r     r  c                 s   r  rb   r  r9  r%   r%   r&   r    r  c                 s   r  rb   r:  r9  r%   r%   r&   r    r  )retain_graph)+r   r
  unittestSkipTestr   rC   r   r1   r^   floatr  r  r,  r
   r   r=   cudar  r  rO  copy_r  r  r  r   r  r   r  re  r-  rw   r  r[   r  
randn_liker  r6  autogradr  r  r  r   r  )rc   r  	cpu_inputr5  cpu_input_tupleis_any_input_complexgpu_input_tuple
cpu_module
gpu_module	cpu_param	gpu_paramcpu_pgpu_p
cpu_output
gpu_outputr9   cpu_gradOutputgpu_gradOutputcpu_gradInputgpu_gradInputcpu_d_pgpu_d_pcpu_gradInputsgpu_gradInputscpu_d_igpu_d_ioutputs_cpuoutputs_gpucpu_gggpu_ggr%   r%   r&   rI     s   








 $zModuleTest.test_cuda)ri   rj   rk   r   r   rm   rn   r  r  r  r  r  rI   __classcell__r%   r%   r  r&   r  M  s    %r  c                   @   s   e Zd Zdd ZdS )InputVariableMixinc                    s    t | d} fdd  |S )NFc                    s@   t | tjr|  s|  rd| _| S t|  fdd| D S )NTc                 3       | ]} |V  qd S rb   r%   r  map_variablesr%   r&   r    r  zGInputVariableMixin._get_input.<locals>.map_variables.<locals>.<genexpr>)r  r1   r  is_floating_pointr4  r6  r  rx   r`  r%   r&   ra    s
   z4InputVariableMixin._get_input.<locals>.map_variables)r  r   )rc   rR  r%   r`  r&   r     s   zInputVariableMixin._get_inputN)ri   rj   rk   r   r%   r%   r%   r&   r^    s    r^  c                       s@   e Zd Z fddZdd Zdd Zdd Zed	d
 Z  Z	S )NewModuleTestc                    s   t  j|i | |dd| _|dd| _|dd| _|dd| _|dd| _|dd| _|d	d
| _	|dd| _
|dd| _|dd| _|dd | _|dd| _|dd| _d S )Nr  Fcheck_inplacer[   Tskip_doubler9  rA   rB   rX   test_cpurZ  r\   r  r   supports_fwgrad_bwgrad)r	  r  r  r  rd  r[   re  r9  rA   rB   rf  rZ  r\   r  r   rg  r  r  r%   r&   r  $  s   zNewModuleTest.__init__c              	      s   t dd   D }t| fdd}| jr1dks J t|d } |d | nt||| | j	| j
| jd | jrXt||| | j	| j
| jd d S d S )	Nc                 s       | ]}|V  qd S rb   r%   r9  r%   r%   r&   r  5  r  z1NewModuleTest._check_gradients.<locals>.<genexpr>c                     s   |rJ   | d  S rb   )r  )inputs_and_paramsrg   r  
num_inputsr  r%   r&   fn_to_gradcheck8  s   z7NewModuleTest._check_gradients.<locals>.fn_to_gradcheckr/   r   )r\   	fast_modecheck_forward_ad)r\   rm  check_fwd_over_rev)r  r  r8  rZ  r1   rb  r  
assertTruer   r\   r  r   r[   r   rg  )rc   r  r  input_tupleparamsrl  test_input_jacobianr%   rj  r&   _check_gradients4  s&   zNewModuleTest._check_gradientsc                    s  t  }t d t|tr|n|f}|  |    | jrt|dks)J |d }| j	| j
ddi}|j}t   |}W d    n1 sKw   Y  |j| t|}	|	 }
t  ||
}W d    n1 sqw   Y  |
j| || |j  }|jd urt   |j  W d    n1 sw   Y  |	jd urt   |	j  W d    n1 sw   Y  || || |j|	j d fdd	}tdd |D rAtrAtd	d |D }     |  |t jjd t j dkr?td
d |D } d t jd  |  W d    n	1 s3w   Y  |t jjd n7dd fddfddfddtfdd|D }    |  |t j tfdd|D }    |  |t j trx| j rxtfdd|D }     |  |t jjd tdd |D } !   |  |t j tdd |D }    |  |t jjd | j"r t j#j"j$dd  |  |t jjd W d    n	1 sw   Y  t j dkr8tdd |D } d t jd  |  W d    n	1 s,w   Y  |t jjd | j%sXtfdd|D }     |  |t jjd | j&sxtfdd|D } '    |  |t jj(d t | d S )Nr/   r   inplaceTc                    s6      D ]}||  |d ur| | qd S rb   )r  assertIsInstancer  
get_device)tensor_type	device_idr8   )r  r  r%   r&   assert_module_parameters_are{  s   z<NewModuleTest._do_test.<locals>.assert_module_parameters_arec                 s   s    | ]	}t |tjV  qd S rb   )r  r1   
LongTensorr  r%   r%   r&   r    r  z)NewModuleTest._do_test.<locals>.<genexpr>c                 s   r  rb   r?  r  r%   r%   r&   r    r  c                 s       | ]}| d V  qdS r  r|  r  r%   r%   r&   r    r  c                 S   s(   |   r	| |S |  r| |S | S rb   )r4  r   rb  )r  realr8  r%   r%   r&   to_type  s
   

z'NewModuleTest._do_test.<locals>.to_typec                    s    | t jd S rb   )r1   float16rJ  r  r%   r&   to_half  s   z'NewModuleTest._do_test.<locals>.to_halfc                        | t jt jS rb   )r1   float32	complex64r  r  r%   r&   	to_single  r;  z)NewModuleTest._do_test.<locals>.to_singlec                    r  rb   )r1   r  r7  r  r  r%   r&   	to_double  r;  z)NewModuleTest._do_test.<locals>.to_doublec                 3   r_  rb   r%   r  r  r%   r&   r    r  c                 3   r_  rb   r%   r  r  r%   r&   r    r  c                 3       | ]	} |  V  qd S rb   r|  r  r  r%   r&   r    r  c                 s   r  rb   )cpur  r%   r%   r&   r    r  c                 s   r  rb   r|  r  r%   r%   r&   r    r  F)enabledrH   c                 s   r}  r  r|  r  r%   r%   r&   r    r  c                 3   r  rb   r|  r  r  r%   r&   r    r  c                 3   r  rb   r|  r  )r  r%   r&   r    r  rb   ))r1   get_num_threadsset_num_threadsr  r  rt  __repr__rd  r8  r   r=   _versionr   r  r   re  assertNotEqualrO  r-  r  no_gradr>  backwardallr   r>  r?  FloatTensordevice_countr`  r^   DoubleTensorr
  r  r  backendsflagsre  r9  half
HalfTensor)rc   r  r  rR  num_threadsrq  	module_ipinput_versionr  input_ipinput_ip_clone	output_ipr  rz  r%   )r  r  r  r  r  r  r&   r  P  s   















zNewModuleTest._do_testc                 C   r  Nr
  Fr  r  r%   r%   r&   _get_target  r  zNewModuleTest._get_targetc                 C   r  Nr=   Fr  r  r%   r%   r&   r=     r  zNewModuleTest.constructor_args)
ri   rj   rk   r  rt  r  r  r  r=   r]  r%   r%   r  r&   rc  #  s     rc  c                       s\   e Zd ZejdhZ fddZdd ZdddZd	d
 Z	e
dd Ze
dd Z  ZS )CriterionTestr
  c                    s   t  j|i | |dd| _|dd| _|dd| _|dd| _|dd| _|dd| _|d	d| _	|d
d| _
|dd| _|dd| _|dd | _| jd u rbt | _d S d S )NrI   Tr  Fr[   r  check_bfloat16check_complexrf  rA   rB   rX   r\   rC   )r	  r  r  r
  r  r[   r  r  r  rf  rA   rB   r\   rC   r1   r  r  r  r%   r&   r    s   
zCriterionTest.__init__c           
         sR  t | j | j| j  |  }   t  |  }| jd urD|j	 ||| j
d}t|t|f| j
  f }| j| }||| | jrP	 W d    d S tdd   D }t|tso|f| |f } fdd}	n|| |f } fdd}	t|	|| jd | jrt|	|| jd W d    d S W d    d S 1 sw   Y  d S )Nr  c                 s   rh  rb   r%   r9  r%   r%   r&   r    r  z)CriterionTest.__call__.<locals>.<genexpr>c                    s
    | |S rb   r%   )rR  r
  rr  r  r%   r&   apply_fn  s   
z(CriterionTest.__call__.<locals>.apply_fnc                    s    | ||S rb   r%   )rP  rQ  r
  rr  r  r%   r&   r    r  )r\   )r   rC   r   r=   r   r  r3  r  r@   _forward_criterionr  r   r  r  r  r  r  r   r\   r[   r   )
rc   r  rR  r
  r  ref_argsr  rr  inputsr  r%   r  r&   r     s4   


!"zCriterionTest.__call__Nc                    s  d fdd	 t r| jstdt| j |  }|  }| j| j	 }| j| j	 } ||d}|
 s9| r> ||}|| || t|}t|}	|  |tjtjhv rj|  }|  }| j| j	 }|j||||d}
|j|||	|d}|j|
||tjtjhv rdndd	dd
 |j|||
||d}|j||||	|d}|j|||tjtjhv rdndd	dd
 W d    d S 1 sw   Y  d S )NFc                    sJ   t | tjr|  j dS t | tr#t fdd| D S | S )Nr   c                 3   s    | ]	} |V  qd S rb   r%   r  )convert_dtyper   r6  r%   r&   r  *  r  zACriterionTest.test_cuda.<locals>.convert_dtype.<locals>.<genexpr>)r  r1   r  r  r   requires_grad_r  )r$  r   r6  r  r5  r&   r  &  s
   
z.CriterionTest.test_cuda.<locals>.convert_dtyper3  Tr  rK   g-C6:?r   r6  r  )r   r
  r<  r=  r   rC   r   r  r   r=   rb  r4  r  r
   r?  r1   r  bfloat16r  r  _backward_criterion)rc   r  r   r  rC  
cpu_targetrG  rH  	gpu_input
gpu_targetrM  rN  rQ  rR  r%   r  r&   rI   %  sF   






"zCriterionTest.test_cudac                 C   r  r  r  r  r%   r%   r&   r  X  r  zCriterionTest._get_targetc                 C   r  r  r  r  r%   r%   r&   r=   [  r  zCriterionTest.constructor_argsc                 C   r  )Nr  Fr  r  r%   r%   r&   r  _  r  zCriterionTest.extra_argsrb   )ri   rj   rk   r  r  unionr  r  rI   r  r  r=   r  r]  r%   r%   r  r&   r    s    
%3
r  r%   rA  c                 C   s   t j|t j|dd}|d urt j|t j|d|   }||}t j||d}|| | }	|	   }
| }|	|
}|| | j
||||dd | j
|jj|
jj||dd d S )NT)r   r`  r6  r_  )r`  Fr6  )r1   r   r  r~   r  r>  r  rA  r  r  r  r  rO  )r  opr`  inp_dimsprecra  rP  out1grad_input1op_bfp16rQ  grad_input2out2r%   r%   r&   _test_bfloat16_opsd  s   

 r  c                 C   s   |s| d ||}|st|}|| |r#| | |  |sF| D ]}|jr9| |jt	|j q)| |jt	| d S d S )NT)
r  r1   	rand_liker  r  r_   r  r6  r  r  )r  r  r  
check_size	inferencer  gOr8   r%   r%   r&   _test_module_empty_inputw  s   


r  c                     sJ   G dd dt j G  fdddt j}   }|  }t ||}|||fS )Nc                       s   e Zd Zd fddZ  ZS )z _create_basic_net.<locals>.Layerr  Nc                    s:   t    ttdd| _ttdddd| _	d S )NrR   rM   r/   r	  )
r	  r  rm   r  r1   r'  layer_dummy_paramBufferr  layer_dummy_bufr  r  r%   r&   r    s   
z)_create_basic_net.<locals>.Layer.__init__r  Nri   rj   rk   r  r]  r%   r%   r  r&   Layer  s    r  c                       s    e Zd Zd fddZ  ZS )z_create_basic_net.<locals>.Netr  Nc                    sB   t      | _ttdd| _tt	dddd| _
d S )NrR   rM   r	  r/   )r	  r  l1rm   r  r1   r'  dummy_paramr  r  	dummy_bufr  )r  r  r%   r&   r    s   
z'_create_basic_net.<locals>.Net.__init__r  r  r%   r  r  r&   Net  s    r  )rm   rn   
Sequential)r  lr@  r  r%   r  r&   _create_basic_net  s   
r  )rF  F)Nr  rF  )NrF  r  )Nr  rF  r  )rF  r}  )rF  )r}  rF  )r/   r/   NrF  )r   rF  )r}  rH   rS  FrF  )r%   rA  Nr(  )abcr   r  r<  copyr   	functoolsr   r   	itertoolsr   operatorr   r1   
torch.cudatorch.nnrm   torch.nn.functional
functionalru   r   r    $torch.testing._internal.common_utilsr	   r
   r   r   r   r   r   r   #torch.testing._internal.common_cudar   r   torch.autograd.gradcheckr   r   torch.autogradr   torch.typesr   torch.backends.cudnntypingr   r   r   collections.abcr   r  r  r'   r*   r   r^   module_testsra   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r*  r5  rI  rP  rS  rZ  r]  r_  rb  rd  rf  rm  rp  rw  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r(  r)  r0  r4  r7  r;  rA  rD  rE  rH  rK  rR  r]  r^  ru  r   __annotations__criterion_testsr  regression_criterion_no_batch
reductionsr  r   regression_test_infor  !classification_criterion_no_batchr  r3  classification_cpp_parityr   r  r  classification_test_infor  r  r  r  r  r^  rc  r  r  r  r  r%   r%   r%   r&   <module>   s  (>
	<            s(

&
"		


	
{M H Iy