U
    <cn                   @   sG  U d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dl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  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+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ej3Z3dZ4dd Z5dd Z6e7dddddd ddde7dddddd d ddd!e7d"d#d$d%dd&d'e7d"d(d)d%d*d+e7d,d%dd-e7d.d%dd-e7d/d0d1d2e7d/d3d4d5d6d1d7e7d8d9d:d d;e7d<d%d=e7d>d%d=e7d?d%d@d d;e7dAdBdCdDdEd dFe7dGdHdId d;e7dJdBdKdDdLd dFe7dJdBdKdHdMd dNdOe7dPdQdRd9dSd dFe7dTdQdUdVdWe7dXd9dd-e7dXdYdZd9dd[d'e7dXd\d]d^d dd_d`e7dadbdcd d;e7dddDded d;e7dddfdgdDdhd didOe7dddjdkdDdld dmdOe7dnd9d=e7dndBdod9dpd+e7dqdrdsdtd1d1due7dvdbdwd dxdye7dvdzd{dbd|d}d d~e7dvd%ddd de7dvdzd{d%ddd d~e7dvddd ddye7dvdzd{dddd d~e7dd9dd d;e7ddBddDdWe7ddBdddd+e7dd%d=g&Z8dd Z9dd Z:dd Z;dd Z<dd Z=dd Z>dd Z?dd Z@dd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQddÄ ZRddń ZSddǄ ZTddɄ ZUdd˄ ZVdd̈́ ZWddτ ZXddф ZYddӄ ZZddՄ Z[ddׄ Z\ddل Z]ddۄ Z^dd݄ Z_dd߄ Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd ZldqddZmdd ZndrddZodd Zpd d Zqe; e< e> e@ eA e= e? eB eC eD eE eF eG eH eI eJ eK eL eM eN eO eP eQ eR eS eU eT eV eX eW eY eZ e[ e\ e] e^ e_ e` ea eb ec ed ee ef eg eh ei ej ek el emdemdenddendd1enddendd1emdddeodeodeodeodddepddepdd1epddepdd1e7ddddddd	d
e7dddddddd
e7dddddddd
e7dddddddd
e7dddddddd
e7dddddddd
e7dddddddd
e7ddzddtddde7dd d!dtddd"d
e7dd#d$dtddd%d
e7dd&d'dtdddd
e7dd(d)dtdddd
e7ddd*d+dddd
e7d,dzd-d.ddde7d,d d/d.ddd0d
e7d,d1d2d.ddd%d
e7d,d3d4d.dddd
e7d,d5d6d.dddd
e7d,dd7d8dddd
e7d9d:d;d<ddde7d9d=d>d<ddd?d
e7d9d=d>d@ddeqdAdBe7d9d:d;d@ddeqdCdBe7dDd:dEdtddde7dDd=dFdtddd?d
e7dDd:dEdGddeqdCdBe7dDd=dFdGddeqdAdBe7dHd:dId.ddde7dHd=dJd.ddd?d
e7dHd:dIdKddeqdCdBe7dHd=dJd.ddeqdAdBe7dLdMgdNfdOdPddddQdRe7dLdMgdNd1fdSdPddddTdRe7dLdUdUdMgdNfdVdWddddXdRe7dLdUdUdMgdNd1fdYdWddddZdRe7dLd[d[d[gdd1fd\d]ddddd^d_	e7dLdMgdNfdOd`ddddadRe7dbdcdddeddddfdge7dbdhdidjddddkdge7dbdldmdndddodd1dp	e7dbdqdrdPddddsdge7dbdtdudddddvdge7dbdcdddwddddxdge7dbdcdddyddddzd1d{	e7dbd|d}d~ddddd1d{	e7dbddddddddge7dbddddddddge7dddddddde7ddddddddde7ddddddddde7ddddddddde7ddddddddde7ddddddddde7ddddddddde7ddd ddddde7ddd dddddde7ddd dddddde7ddd dddddde7ddd dddddde7ddd dddddde7ddd dddddde7ddddddddde7ddddddddde7ddd dddddde7ddÐdĐddWe7ddƐdǐdŐdd+e7ddȐdd dd1dʍe7dːd̐d͐ddddddύe7dːdАddtddddddӍ	e7dːdԐddtddddddӍ	e7dːdאdؐdddddddӍ	e7dːdڐdېddddddݍe7dːd̐d͐ddddddݍe7dߐdd ddddddde7ddd dddddde7ddd dddddde7ddd dddddde7ddd dddddde7ddddddddde7ddddddddddӍ	e7ddddddddddӍ	e7ddd ddddddde7dd d ddddde7ddd ddddde7ddd ddddde7d	d
d ddddde7ddd ddddde7dddddd+e7ddddddde7dddd ddd1de7ddfdddWe7dddddd+e7ddd dd!d+e7ddfdd"eqdCdOe7d#d$d%dtdWe7d#d$d%dGeqdCdOe7d#d&d'dtdd+e7d#d(d)dtd!d+e7d*d+d d,dtdd-e7d.d/d d0dtdd-e7d1d2d d3dtdd-e7d4d5d6ddWe7d4d7d8d9d d:d;e7d<d7d=d>d d:d;e7d<d?d@ddWe7d<d?d@dAeqdCdOe7dBdzdCdDdxd+e7dBdfdEdFdGd+e7dBdHdIdJdKd+e7dLdMdNdOdWe7dLdMdNdPeqdQdOe7dLdMdNdRd ddSdTe7dUdVdWddWe7dUdVdWdXeqdCdOe7dUdVdWdYd ddSdTe7dZd[d\d]dWe7dZd[d\d^eqdCdOe7dZd[d\d_d ddSdTe7d`dMdadbdWe7d`dMdadbeqdQdOe7d`dMdadcd ddSdTe7dddVdedfdWe7dddVdedgeqdCdOe7dddVdedhd ddSdTe7didVdjdfdWe7didVdjdgeqdCdOe7didVdjdkd ddSdTe7didldmdfdnd+e7dodpdqdbdWe7dodpdqdbeqdQdOe7dodpdqdrd ddSdTe7dsdtdudfdWe7dsdtdudgeqdCdOe7dsdtdudvd ddSdTe7dwdxdydzdWe7dwdxdyd{eqdCdOe7dwdxdyd|d ddSdTe7d}d~dddddddύe7d}dddddddddӍ	e7d}dddddd1dddӍ	e7d}dddddddddӍ	e7d}dddddddddӍ	e7d}dddddddde7ddd ddddddde7ddd ddddde7ddd ddddde7ddd dddddde7ddd dddddde7ddd dddddde7dd~dddddde7ddddddddde7dddddWe7dddddd+e7dddddd+e7dddd dd1dʍe7dddd.dWe7ddddKdCd+e7dddddd+e7ddddd!d+e7dddddd+e7dddddd+e7dddd.dd+e7dddd.dd+e7ddd dĐd.dd-e7dŐdd dǐddd-e7dȐdd dʐddd-e7dːdd d͐ddd-e7dΐdd dАddd-e7dѐdd dӐd.dd-e7dԐdd dʐd.dd-e7d֐dאdؐddWe7d֐dאdؐdeqdCdOe7d֐dאdؐdd ddSdTe7dܐdݐdސdd d1de7dܐdݐdސdd d1dde7ddݐddd d1dde7ddݐddd d1dde7ddddd d1dde7ddddd d1dde7ddd ddd d1de7ddd ddd d1de7ddd ddd d1de7ddd d dd d1dde7dd ddd dd1dde7ddzd	d
dWe7ddzdddWe7e:ejrdddddddd1de7e:ejrdddddddd1de7e:ejrdddddddd1de7e:ejrdddddddd1de7e:ejrdddd1dddd d1de7e:ejrdddd1dd!dd"d1de7e:ejrdddd1dd#dd$d1de7e:ejrdddd1dddd%d1de7e:ejrdddddd&dd'd1de7e:ejrdddddd(dd)d1de7e:ejrdUdddd*d+d,d1de7e:ejrddddd-d.d/d1de7e:ejrd0dddd1d2d3d1de7e:ejrddddd4d.d5d1de7e:ejrddddd-d6d7d1de7e:ejrddd8d1dd9d.d:d1de7e:ejrddd8d1dd9d6d;d1de7e:ejrd<dd8d1dd=d>d?d1de7e:ejrddd8d1dd@d.dAd1de7e:ejrddBd8d1ddCd.dDd1de7e:ejrdd#d8d1ddEd.dFd1de7e:ejrd<dd8dddGd.dHd1de7e:ejrdd#d8dddId.dJd1de7e:ejrdddKd1ddLd.dMd1de7e:ejrdddKd1ddLd6dNd1de7e:ejrd<ddKd1ddOd>dPd1de7e:ejrdddKd1ddQd.dRd1de7e:ejrddBdKd1ddSd.dTd1de7e:ejrdd#dKd1ddUd.dVd1de7e:ejrd<ddKdddWd.dXd1de7e:ejrdd#dKdddYd.dZd1de7e:ejrddddd[d\d]d1de7e:ejrddddd[d^d_d1de7e:ejrd`ddddadbdcd1de7e:ejrddddddd\ded1de7e:ejrdddfd1ddgd\dhd1de7e:ejrdddfd1ddgd^did1de7e:ejrdjddfd1ddkdldmd1de7e:ejrddndfd1ddoddpdqd1dre7e:ejrdjddfdddsdldtd1de7e:ejrddndfdddudbdvdqd1dre7dwdzdxdyd dze7dwdzdxd{d dCd;e7d|dzd}d~d dd;e7d|dddd dd;e7d|dzd}dd eqdCde7d|dddd dd;e7ddzddd dd;e7ddzddd eqdCde7ddddd dd;e7ddddd dd;e7ddzddd dd;e7ddddd dd;e7ddzddd dze7ddzddd eqdCde7ddBddd dd;e7ddzddd dd;e7ddzddd eqdCde7ddBddd dd;e7ddddd dd;e7ddddd dd;e7ddzddd dd;e7ddzddd eqdCde7ddddd dd;e7ddddd dd;e7ddddd dd;e7dd9dd-e7ddddde7dd9dQdddd de7dddQdddd dde7ddd=e7ddBdÐdĐdd+e7dƐdǐdȐdddd d~e7dƐdǐdd9dd dFe7dːdddd de7dːdĐdd d;e7dΐdddd de7dΐdĐdd d;e7e:ejsdѐdҍdӐdԐdd1de7e:ejsdejtd׍dؐdԐdd1d1dڍe7e:ejsd֐dҍdېdܐdd1de7e:ejsd֐dҍdېdސdd1de7e:ejsdejtd׍dؐdސdd1d1dڍe7e:ejsd dҍdd%dd1d1de7e:ejsddҍdd%dd1d1de7e:ejsdѐdҍdӐddd1d1de7e:ejudѐdҍddԐdd1de7e:ejud֐dҍddܐdd1de7e:ejud֐dҍddސdd1de7e:ejud dҍdd%dd1de7e:ejuddҍdd%dd1de7e:ejud dҍdddd1de7dGdeqdCdye7dAdddeqdCdOe7dJddKdeqdCdOe7ddd ddd1dde7ddd ddd1dde7dd d ddd1eqdde7ddd ddd1dde7ddd ddd1dde7d	d
d ddeqd1dde7d"d#d$dddd'e7d,dddde7d.dddde7d/d3d4ddd1d7e7d8ddd ddye7d<ddde7d>ddde7dAddddd ddOe7dJddddd ddOe7dPdQdRddd+e7dTdQdUddd+e7dXdYdZdddd'e7daddd ddye7dddjdkddd ddOe7dndBdoddd+e7dvddd ddye7dddd ddye7dddddd+e7ddddeqdCdOe7dddde7d e:ejvd!d"d#d$d%d d&d ed1d'e7d(e:ejvd)d"d#d*d+d d,d ed1d'e7d-e:ejvd.d"d#d/d0d d1d ed1d'e7d2e:ejvd3d"d#d4d5d d6d ed1d'e7d7e:ejvd8d"d#d9d:d d;d ed1d'e7d<e:ejvd=d"d#d>d?d d@d ed1d'e7dAe:ejvdBd"d#dCdDd dEd ed1d'e7dFe:ejvdGd"d#dHdId dJd ed1d'e7dKe:ejvdLd"d#dMdNd dOd ed1d'e7dPdQd dRe7dPdSd dTdUe7dPdVd dWdUe7dPdXdYdZd d[d;e7dPd\d eqdCd]e7d^d_d`dbdaddbd1dce7d^dddUdedfejwfdgdbd1dhdddie7djdkdldmd d1dadddne7djdddUdedfejwfdodpd d1dhdddne7dqdddUdUdUdedfejxfdrdsd d1dtddudne7ddvdwdxd dyd dCdddze7d?d{d|deqdCd}e7d~ddeydUdUgfdeqdCd}gZze{dd"ddgddddgD ]\Z|Z}dD ]Z~e~dk2r2e|dk2r22qeede~d Zddeee d Zdde~  Zdedd eD  Zeze7de~dUdddUed֐dde|f	de~ee}eedde|ddd	 2q2qdPdTdd8ddXdadvd,d.d/dddƐdd<dːddddndd>dd"gZddQidd#id1d1dd1d1ddd1idZe,ee7f ed< eD ]>Ze7edeqdCd1dZeei Zee eze 3qdsddZdtddZduddZdvddZdwddZdxddZdyddZdzddZd{ddZdd Zd|ddZd}ddZd~ddZdd ZdddZdddZdddZdddZdddÄZdĐdń ZdƐdǄ ZdȐdɄ ZeeeeeeeeeeeeeeedʜZe,de-f ed< e7ddbdd dd ddЍe7dѐdd dd dd dddՍe7dѐd֐dאdd dd dd ddd܍e7dѐdd dސdd dd dd ddde7dѐdd ddd dd dd ddde7dѐdd ddd dd dd ddde7ddd dd dd dde7de
eje	ejddddd dd dd ddde7dd%dd dd dde7d dd dd dd dde7d dd ddd dd d	d ddde7d
ddd de7d
dd dddd dde7dddd dd dde7ddYdddd dd ddde7dddd dd dxdd1dde7dddd d d dd1dd!e7d"dd#d d$d d1d%e7d&dd'd d(d dd1d)e7d&dd*d d+d dxdd1d,e7d&dfd-d.d d/d d0d d1dd1d2	e7d&d3d4d5dd6d d7d ddd1d8
e7d&d֐ded9 fd:ded9 fdd;d d<d ddd1d8
e7d=dd>d ddd?dd@e7dAddBd ddddCd dDe7dEdFdGd dHd dde7dIdJd dKd dLd dde7dIdMdNdOd dPd dQd dddRe7dSdTd dUd dVd dde7dSdYdWdXd dYd dZd dddRe7d[d\d d]d d^e7d[ed9fd_d`d dad ddbe7d[edfdcddd ded dfdbe7dѐdgdhd did ddddje7dѐdkd dldgedUdMdMd  dmd dnddoe7dѐdpdqdgdrd dsd dtddue7dѐdvdwd dxd ddyddje7dѐdzd{d d|d dd}ddje7d
dgd~d dd ddd1dje7d
dd ddgedUdMdMd  dd dnd1doe7d
dpddgdd dd dtd1due7d
dvdd dd ddyd1dje7d
dzdd dd dd}d1dje7d
ddd dd ddd1dje7d
ddd dd ddd1dje7d
ddd dd ddd1dje7ddd dddd dd d1de7ddd dddd dd d1de7ddd dd dddd dd d1de7ddd dddd dd d1de7ddd dddd dd d1de7ddd ddzdd dd d1de7ddd ddzdd dd d1de7ddd ddzdd dd d1de7ddd ddzdd dd d1de7ddd dddd dd d1de7dƐdd dddd dd d1de7dʐdd d̐ddd dd d1de7dϐdd dd dҐddd dd d1de7d
dd dddd dd ddd1dٍ	e7d
dd dddd dd ddd1dٍ	e7d
dd dddd dd ddd1dٍ	e7dd%dd dd dde7ddddd dd dd dde7dddd%dd dd dde7ddddd dd dd dde7d͐ddd dd ddde7ddd dd dd ddd e7de
eje	ejddddd dd dd ddde7dddd dd ddddje7ddd dd d	d dd
dde7d dd ddd dd dd dfdde7ddYdddd ddde7d=ddd dddddde7d"ed9fddd dd dd ddd1d2	e7dddddgddd gfd!d d"d d#d d$ddd1d1d1d1d%e7ddd&edddgeddd gfd'd d(d d)d d*ddd1d1d+e7dd,ddddgddd gfd-d d.d d/d ddd1d1d1d1d0e7dd1dd2edddgeddd gfd3d d4d d5d ddd1d1d6e7dd7dd2edddgeddd gfd8d d9d d:d ddd1d1d6gPZd;d< Zd͐dddAd=gZd=ddgZeeeD ]B\ZZe7d>eeed?d@ddzdzed1dAZee DqeD ]@Ze7dBe dCd dDd dEd ed1dFZee Dqd dGd dHd fd[dId dId fddJd dKd fddLd dMd fdEdNd dOd fdѐdPd dQd fdIdRd dSd fdSdTd dUd fdVdWd dXd fd"dYd dYd fg
ZddZd1iiZe,ee7f ed[< d1d1d1d1d1d\Zd=ddgZeeeD ]|\\ZZZZe7d>eeed?d]defd^defd_dedeedd`Zeei Zee ee FqjG dadb dbeZG dcdd ddeZG dedf dfeZG dgdh dheZG didj djeeZG dkdl dleeZddmdnZÐddodpZdS (      )abstractmethodN)deepcopy)reducepartialwraps)product)mul)pi)
_reduction)TestCaseto_gpufreeze_rng_stateis_iterableTEST_WITH_ROCM	gradcheckgradgradcheck)	TEST_CUDA)_get_numerical_jacobian_iter_tensors)Variable)_TensorOrTensors)DictCallableTupleListSequenceUnionAnyh㈵>c                 C   s<   t | dd }|d kr,tjt | dd ddd}|d k	s8t|S )N	reductionZsizeAverageTF)Zemit_warning)getattr
_ReductionZlegacy_get_stringAssertionErrormresult r&   E/tmp/pip-unpacked-wheel-gikjz4vx/torch/testing/_internal/common_nn.pyget_reduction    s
    r(   c                 C   s$   t | dd }|d k	r|S t | dd S )Nweightweights)r    r#   r&   r&   r'   
get_weight(   s    r+   Z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>k       r:   T{Gzt?)module_nameconstructor_argscpp_constructor_args
input_sizereference_fn	with_tf32tf32_precision)r,   r-   Fz+torch::nn::LinearOptions(10, 8).bias(false)Zno_biasc                 C   s   t | |d  S )Nr   )r1   r2   r3   r6   r&   r&   r'   r:   u   r;   )r=   r>   r?   r@   descrA   rB   rC   	Threshold)       @      ?z#torch::nn::ThresholdOptions(2., 1.)      r.      Zthreshold_value)r=   r>   r?   r@   check_inplacerD   )rF   g      $@z$torch::nn::ThresholdOptions(2., 10.)Zlarge_value)r=   r>   r?   r@   rD   ZReLU)r=   r@   rL   ZReLU6RReLU)r/   rI   rI   F)r=   r@   	test_cuda)皙?g?z/torch::nn::RReLUOptions().lower(0.1).upper(0.9))r.   r.   rK   Zwith_up_down)r=   r>   r?   r@   rD   rN   ZHardtanh)rJ   rI   rK   c                 G   s   |  ddS Nr0   r/   clampr7   r9   r&   r&   r'   r:      r;   )r=   r@   rA   Sigmoid)r=   r@   ZTanhZFlattenc                 G   s   t | dS Nr/   )r1   flattenrS   r&   r&   r'   r:      r;   ZSoftmaxr/   ztorch::nn::SoftmaxOptions(1))r,      c                 G   s&   t | t | ddddS Nr/   Tr,   rX   )r1   expdivsumr5   rS   r&   r&   r'   r:      r;   )r=   r>   r?   r@   rA   Z	Softmax2d)r/   rJ   r,   rX   c                 G   s   t | t | ddS Nr/   Fr1   rZ   r[   r\   rS   r&   r&   r'   r:      r;   Z
LogSoftmaxztorch::nn::LogSoftmaxOptions(1)c                 G   s*   t | t | dddd S rY   )r1   rZ   div_r\   r5   log_rS   r&   r&   r'   r:      r;   c                 G   s"   t | t | dd S r]   r1   rZ   r_   r\   r`   rS   r&   r&   r'   r:      r;   Z
multiparam)r=   r>   r?   r@   rA   rD   ZELU)rF   z!torch::nn::ELUOptions().alpha(2.)c                 G   s   t | dk| d|  d  S )Nr   rI   r/   r1   whererZ   xr9   r&   r&   r'   r:      r;   Z
Hardshrinkz torch::nn::HardshrinkOptions(2.))r.   rJ   rI   r.   )r=   r>   r?   r@   Z	LeakyReLU)      ?z1torch::nn::LeakyReLUOptions().negative_slope(0.5)Zwith_negval)        z1torch::nn::LeakyReLUOptions().negative_slope(0.0)c                   C   s   t ddS Nr,   r1   randnr&   r&   r&   r'   r:      r;   Zwith_zero_negval)r=   r>   r?   input_fnrL   rD   Z
LogSigmoidrI   rJ   r.   c                 G   s   |    S NsigmoidlogrS   r&   r&   r'   r:      r;   ZSoftplusc                 G   s   t dt |  S rU   r1   rp   rZ   rS   r&   r&   r'   r:      r;   rI   z$torch::nn::SoftplusOptions().beta(2)c                 G   s   dt dt d|    S )Nrf   r/   rI   rq   rS   r&   r&   r'   r:      r;   beta)rI   z4torch::nn::SoftplusOptions().beta(2).threshold(-100)c              	   G   sH   | d dk | |  | d dk | d d tdtd|     S NrI   rt   rG   rF   r/   type_asr1   rp   rZ   rS   r&   r&   r'   r:     s   0Zbeta_thresholdZ
Softshrinkztorch::nn::SoftshrinkOptions(1)lambdaZCrossMapLRN2d)rK   r<   MbP?rI   z>torch::nn::CrossMapLRN2dOptions(5).alpha(5e-3).beta(1e-3).k(2))rI   rJ      rz   )r=   r>   r?   r@   check_gradgradcheck_batched_gradZPReLUc                 C   s(   t j| ddt j| dd|d d   S Nr   min)maxr1   rR   r6   r&   r&   r'   r:   #  r;   Z1d)r=   r@   rA   rD   rJ   z+torch::nn::PReLUOptions().num_parameters(3)Z1d_multiparamc                 C   s(   t j| ddt j| dd|d d   S r}   r   r6   r&   r&   r'   r:   ,  r;   )r=   r>   r?   r@   rD   rA   Z2dc                 C   s(   t j| ddt j| dd|d d   S r}   r   r6   r&   r&   r'   r:   2  r;   )r=   r@   rD   rA   Z2d_multiparamc                 C   s(   t j| ddt j| dd|d d   S r}   r   r6   r&   r&   r'   r:   :  r;   )rI   rJ   r.   rK   rz   c                 C   s(   t j| ddt j| dd|d d   S r}   r   r6   r&   r&   r'   r:   ?  r;   Z3dZ3d_multiparamc                 C   s(   t j| ddt j| dd|d d   S r}   r   r6   r&   r&   r'   r:   H  r;   ZSoftsignc                 G   s   |  dt|  S rU   r[   r1   absrS   r&   r&   r'   r:   M  r;   ZSoftminztorch::nn::SoftminOptions(1))rI   rJ   rK   r,   ZmultidimZ
Tanhshrinkc                  G   s    t t| d}t|j|   S rU   )r   r   r1   randpermr4   double)sizetotalr&   r&   r'   _rand_tensor_non_equalf  s    r   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
    |S rm   r&   )selfargsfnkwargsr&   r'   forwardm  s    z1wrap_functional.<locals>.FunctionalModule.forwardN)__name__
__module____qualname__r   r&   r   r&   r'   FunctionalModulel  s   r   )nnModule)r   r   r   r&   r   r'   wrap_functionalk  s    r   c                	      s@   t dd tdt fddddd d d fd	dd
dS )Nr,   ZPoissonNLLLoss_no_reducec                    s   t j|  | ddS Nnoner   )FZpoisson_nll_lossrw   r7   r3   r&   r'   r:   w  r;   z/poissonnllloss_no_reduce_test.<locals>.<lambda>zaF::poisson_nll_loss(i, t.to(i.options()), F::PoissonNLLLossFuncOptions().reduction(torch::kNone))c                   S   s   t ddS rh   r1   randr&   r&   r&   r'   r:   z  r;   _get_input()r7   r3   c                    s   |    |  S rm   )rZ   r   rS   r   r&   r'   r:   |  r;   Ffullnameconstructorcpp_function_callrk   cpp_var_maprA   pickler1   rj   dictr   r&   r&   r   r'   poissonnllloss_no_reduce_testr  s    

r   c                
      sP   t tddd  tdt fddddd d	 d
 fdddddS )N   r,   r   ZBCELoss_no_reducec                    s   t j|  | ddS r   r   Zbinary_cross_entropyrw   r   r   r&   r'   r:     r;   z(bceloss_no_reduce_test.<locals>.<lambda>iF::binary_cross_entropy(i, t.to(i.options()), F::BinaryCrossEntropyFuncOptions().reduction(torch::kNone))c                   S   s   t ddddS Nr   r,   y&1?v?r1   r   clamp_r&   r&   r&   r'   r:     r;   r   r   c                    s"    |    d  d|       S rU   rp   rS   r   r&   r'   r:     r;   FgǺF?r   r   r   rk   r   rA   r   	precision)r   r1   rj   gtr   r   r   r&   r&   r   r'   bceloss_no_reduce_test  s    

r   c                	      sH   t dd  tdt fddddd d d	 fd
dddS )Nr&   r   ZBCELoss_no_reduce_scalarc                    s   t j|  | ddS r   r   r   r   r&   r'   r:     r;   z/bceloss_no_reduce_scalar_test.<locals>.<lambda>r   c                   S   s   t dddS Nr&   r   r   r   r&   r&   r&   r'   r:     r;   r   r   c                    s"    |    d  d|       S rU   r   rS   r   r&   r'   r:     r;   Fr   )r1   rj   r   r   r   r   r&   r&   r   r'   bceloss_no_reduce_scalar_test  s    

r   c                
      s`   t tddd  tdtdt fddddd d	 d
 fdddddS )Nr   r,   r   ZBCELoss_weights_no_reducec                    s   t j|  | | ddS Nr   r)   r   r   r   r3   r*   r&   r'   r:     s    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   s   t ddddS r   r   r&   r&   r&   r'   r:     r;   r   r7   r3   r*   c                    s&    |    d  d|        S rU   r   )r7   r8   r$   r   r&   r'   r:     r;   Fa2U0*3?r   )r   r1   rj   r   r   r   r   r   r&   r&   r   r'   bceloss_weights_no_reduce_test  s    

r   c                	      sR   t d  t dtdt fdddd ddd  fd	dd
dS )Nr&   Z BCELoss_weights_no_reduce_scalarc                    s   t j|  | | ddS r   r   r   r   r&   r'   r:     s    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   s   t dddS r   r   r&   r&   r&   r'   r:     r;   c                    s&    |    d  d|        S rU   r   rS   r   r&   r'   r:     r;   F)r   r   r   r   rk   rA   r   )r1   rj   r   r   r   r   r&   r&   r   r'   %bceloss_weights_no_reduce_scalar_test  s    

r   c                
      sZ   t tddd t  tdtfddddd d	d
 fdddddS )Nr   r,   r   ZBCEWithLogitsLoss_legacy_enumc                    s   t j|  | ddS )NF)r   r   Z binary_cross_entropy_with_logitsrw   r   r   r&   r'   r:     r;   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   s   t ddddS r   r   r&   r&   r&   r'   r:     r;   r   r   c                    s*    |    d d |       S rU   r   rS   ro   r3   r&   r'   r:     r;   Fr   r   r   rk   r   rA   r{   r   	r   r1   rj   r   r   r   rT   r   r   r&   r&   r   r'   "bce_with_logistic_legacy_enum_test  s    
r   c                
      sZ   t tddd t  tdtfddddd d	d
 fdddddS )Nr   r,   r   ZBCEWithLogitsLoss_no_reducec                    s   t j|  | ddS r   r   r   r   r&   r'   r:     r;   z2bce_with_logistic_no_reduce_test.<locals>.<lambda>r   c                   S   s   t ddddS r   r   r&   r&   r&   r'   r:     r;   r   r   c                    s*    |    d d |       S rU   r   rS   r   r&   r'   r:     r;   Fr   r   r&   r&   r   r'    bce_with_logistic_no_reduce_test  s    
r   c                
      sT   t dd t  tdtfddddd dd	 fd
ddddS )Nr&   r   Z"BCEWithLogitsLoss_no_reduce_scalarc                    s   t j|  | ddS r   r   r   r   r&   r'   r:     r;   z9bce_with_logistic_no_reduce_scalar_test.<locals>.<lambda>r   c                   S   s   t dddS r   r   r&   r&   r&   r'   r:     r;   r   r   c                    s*    |    d d |       S rU   r   rS   r   r&   r'   r:     r;   Fr   )r1   rj   r   r   r   rT   r   r   r&   r&   r   r'   'bce_with_logistic_no_reduce_scalar_test  s    
r   c                
      sB   t dd tdt fddddd d d fd	dd
ddS )Nr,   ZKLDivLoss_with_target_no_reducec                    s   t j|  | ddS r   r   Zkl_divrw   r   r   r&   r'   r:     r;   z6kldivloss_with_target_no_reduce_test.<locals>.<lambda>NF::kl_div(i, t.to(i.options()), F::KLDivFuncOptions().reduction(torch::kNone))c                   S   s   t dd S rh   r1   r   rp   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  | ddS N	KLDivLossr   r   loss_reference_fnsrw   rS   r   r&   r'   r:     s    TFr   r   r   rk   r   rA   supports_forward_adr   r1   r   r   r   r&   r&   r   r'   $kldivloss_with_target_no_reduce_test  s    

r   c                
      sB   t dd tdt fddddd d d fd	dd
ddS )Nr,   ZKLDivLoss_no_reducec                    s   t j|  | ddS r   r   r   r   r&   r'   r:   	  r;   z*kldivloss_no_reduce_test.<locals>.<lambda>r   c                   S   s   t dd S rh   r   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  | ddS r   r   rS   r   r&   r'   r:     s    TFr   r   r&   r&   r   r'   kldivloss_no_reduce_test  s    

r   c                
      s@   t d tdt fddddd d d fd	dd
ddS )Nr&   ZKLDivLoss_no_reduce_scalarc                    s   t j|  | ddS r   r   r   r   r&   r'   r:     r;   z1kldivloss_no_reduce_scalar_test.<locals>.<lambda>r   c                   S   s   t d S Nr&   r   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  | ddS r   r   rS   r   r&   r'   r:     s    TFr   r   r&   r&   r   r'   kldivloss_no_reduce_scalar_test  s    


r   c                
      sF   t dd  tdt fddddd d d fd	dd
ddS )Nr,   Z#KLDivLoss_with_log_target_no_reducec                    s   t j|  | dddS Nr   T)r   
log_targetr   r   r   r&   r'   r:   (  r;   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   s   t dd S rh   r   r&   r&   r&   r'   r:   *  r;   r   r   c                    s   t d |  | ddS NKLDivLoss_log_targetr   r   r   rS   r   r&   r'   r:   ,  s    TFr   r1   r   rp   r   r   r&   r&   r   r'   (kldivloss_with_log_target_no_reduce_test#  s    

r   c                
      sF   t dd  tdt fddddd d d fd	dd
ddS )Nr,   ZKLDivLoss_no_reduce_log_targetc                    s   t j|  | dddS r   r   r   r   r&   r'   r:   7  r;   z5kldivloss_no_reduce_log_target_test.<locals>.<lambda>r   c                   S   s   t dd S rh   r   r&   r&   r&   r'   r:   9  r;   r   r   c                    s   t d |  | ddS r   r   rS   r   r&   r'   r:   ;  s    TFr   r   r&   r&   r   r'   #kldivloss_no_reduce_log_target_test2  s    

r   c                
      sD   t d  tdt fddddd d d fd	dd
ddS )Nr&   Z%KLDivLoss_no_reduce_scalar_log_targetc                    s   t j|  | dddS r   r   r   r   r&   r'   r:   G  r;   z<kldivloss_no_reduce_scalar_log_target_test.<locals>.<lambda>r   c                   S   s   t d S r   r   r&   r&   r&   r'   r:   I  r;   r   r   c                    s   t d |  | ddS r   r   rS   r   r&   r'   r:   K  s    TFr   r   r&   r&   r   r'   *kldivloss_no_reduce_scalar_log_target_testB  s    

r   c                
      sD   t ddd tdt fddddd d	 d
 fdddddS )NrI   rJ   r.   ZL1Loss_no_reducec                    s   t j|  | ddS r   r   Zl1_lossrw   r   r   r&   r'   r:   V  r;   z'l1loss_no_reduce_test.<locals>.<lambda>PF::l1_loss(i, t.to(i.options()), F::L1LossFuncOptions().reduction(torch::kNone))c                   S   s   t dddS NrI   rJ   r.   ri   r&   r&   r&   r'   r:   X  r;   r   r   c                    s   |   |   S rm   rw   r   rS   r   r&   r'   r:   Z  r;   TFr   r   r&   r&   r   r'   l1loss_no_reduce_testQ  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 )NrI   rJ   r.   dtypeZL1Loss_no_reduce_complexc                    s   t j|  | ddS r   r   r   r   r&   r'   r:   d  r;   z/l1loss_no_reduce_complex_test.<locals>.<lambda>r   c                   S   s   t jdddt jdS )NrI   rJ   r.   r   )r1   rj   cdoubler&   r&   r&   r'   r:   f  r;   r   r   c                    s   |   |   S rm   r   rS   r   r&   r'   r:   h  r;   TFr   )r1   rj   r   r   r   r&   r&   r   r'   l1loss_no_reduce_complex_test_  s    

r   c                
      s@   t d tdt fddddd d d fd	dd
ddS )Nr&   ZL1Loss_no_reduce_scalarc                    s   t j|  | ddS r   r   r   r   r&   r'   r:   r  r;   z.l1loss_no_reduce_scalar_test.<locals>.<lambda>r   c                   S   s
   t dS r   ri   r&   r&   r&   r'   r:   t  r;   r   r   c                    s   |   |   S rm   r   rS   r   r&   r'   r:   v  r;   TFr   r   r&   r&   r   r'   l1loss_no_reduce_scalar_testm  s    


r   c               
      s@   d} t j|   tdt fddd| d d fddd	d
dS )NrH   ZMSELoss_no_reducec                    s   t j|  | ddS r   r   Zmse_lossrw   r   targetr&   r'   r:     r;   z(mseloss_no_reduce_test.<locals>.<lambda>WF::mse_loss(i, target.to(i.options()), F::MSELossFuncOptions().reduction(torch::kNone))r   r7   r   c                    s   |    dS NrI   powrS   r   r&   r'   r:     r;   TFr   r   r   r@   r   rA   r   r   r   r@   r&   r   r'   mseloss_no_reduce_test{  s    


r   c               
      s@   d} t |  tdt fddd| d d fddd	d
dS )Nr&   ZMSELoss_no_reduce_scalarc                    s   t j|  | ddS r   r   r   r   r&   r'   r:     r;   z/mseloss_no_reduce_scalar_test.<locals>.<lambda>r   r   r   c                    s   |    dS r   r   rS   r   r&   r'   r:     r;   TFr   r   r   r&   r   r'   mseloss_no_reduce_scalar_test  s    


r   c                	      s`   t td d  ddi tdt fdddd	d d
d fddddS )Nr   r,   r   r   ZNLLLoss_no_reducec                    s   t j| |   d dS Nr   r   r   nll_lossrw   longr   r   r3   r&   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   s   t dd S Nr   r,   r   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d | |  f S NNLLLossr   rw   r   rS   r   r&   r'   r:     s    Fr   	r   r1   emptyuniform_r   floorr   r   r   r&   r&   r   r'   nllloss_no_reduce_test  s     r  c                	      sb   t td d  ddd tdt fddd	d
d dd fddddS )Nr   r,   rI   r   ignore_indexr   ZNLLLoss_no_reduce_ignore_indexc                    s,   t j| |  t d t d dS Nr  r   r  r   r   rw   r   intstrr   r   r&   r'   r:     s   
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   s   t dd S r   r   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d | |  f S r   r   rS   r   r&   r'   r:     s    Fr   r   r&   r&   r   r'   #nllloss_no_reduce_ignore_index_test  s     
r
  c                	      sp   t td d  tdfdd tdt	 fdddd	d d
d fddddS )Nr   r,   c                    s     | ddS r   rw   r   r)   r&   r'   r     s    z.nllloss_no_reduce_weights_test.<locals>.kwargsZNLLLoss_no_reduce_weightsc                    s   t j| |  f | S rm   r   r   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   s   t ddd S Nr   r,   {Gz?r1   r   addrp   r&   r&   r&   r'   r:     r;   r   r7   r3   r)   c                    s    t d | |  f | S r   r   rS   r   r&   r'   r:     s    Fr   
r   r1   r   r  r   r  r   r   r   r   r&   r&   r   r3   r)   r'   nllloss_no_reduce_weights_test  s     

r  c                	      sp   t td d  tdfdd tdt	 fdddd	d d
d fddddS )Nr   r,   c                    s     | dddS )Nr   rI   r)   r   r  r  r   r  r&   r'   r     s    
z;nllloss_no_reduce_weights_ignore_index_test.<locals>.kwargsZ&NLLLoss_no_reduce_weights_ignore_indexc                    s    t j| |  f | jS rm   )r   r   rw   r   datar   r   r&   r'   r:     r;   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   s   t ddd S r  r  r&   r&   r&   r'   r:     r;   r   r  c                    s    t d | |  f | S r   r   rS   r   r&   r'   r:     s    Fr   r  r&   r&   r  r'   +nllloss_no_reduce_weights_ignore_index_test  s     

r  c                	      s~   t td d  tdfdd tdt	 fdddtdd
d	 d
d fddddS )Nr   r,   c                    s     | dddS )Nr   r0   r  r  r   r  r&   r'   r     s    
z?nllloss_no_reduce_weights_ignore_index_neg_test.<locals>.kwargsZ*NLLLoss_no_reduce_weights_ignore_index_negc                    s   t j| |  f | S rm   r   r   r   r&   r'   r:     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  r   r  c                    s    t d | |  f | S r   r   rS   r   r&   r'   r:     s    F)r   r   r   inputr   rA   r   )r   r1   r   r  r   r  r   r   r   r   r  rp   r&   r&   r  r'   /nllloss_no_reduce_weights_ignore_index_neg_test  s     

r  c                	      s`   t tdddd  ddi tdt fddd	d
d dd fddddS )NrI   rK   rJ   r   r   ZNLLLoss2d_no_reducec                    s   t j| |   d dS r   r   r   r   r&   r'   r:     r;   z*nllloss2d_no_reduce_test.<locals>.<lambda>r   c                   S   s   t dddd S NrI   rJ   rK   r   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d | |  f S N	NLLLossNdr   rS   r   r&   r'   r:     s    Fr   r   r1   r   r   r  r   r   r   r&   r&   r   r'   nllloss2d_no_reduce_test  s     r  c                	      sb   t tdddd  ddd tdt fdd	d
dd	 dd fdd	ddS )NrI   rK   rJ   r/   r   r  Z NLLLoss2d_no_reduce_ignore_indexc                    s,   t j| |  t d t d dS r  r  r   r   r&   r'   r:     s   
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   s   t dddd S r  r   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d | |  f S r  r   rS   r   r&   r'   r:     s    Fr   r  r&   r&   r   r'   %nllloss2d_no_reduce_ignore_index_test  s     
r!  c                	      sp   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dS )NrI   rK   rJ   c                    s     | ddS r   r  r   r  r&   r'   r      s    z0nllloss2d_no_reduce_weights_test.<locals>.kwargsZNLLLoss2d_no_reduce_weightsc                    s   t j| |  f | S rm   r   r   r   r&   r'   r:   &  r;   z2nllloss2d_no_reduce_weights_test.<locals>.<lambda>r  c                   S   s   t dddd S r  r   r&   r&   r&   r'   r:   *  r;   r   r  c                    s    t d | |  f | S r  r   rS   r   r&   r'   r:   ,  s    Fr   r  r&   r&   r  r'    nllloss2d_no_reduce_weights_test  s     

r"  c                	      sd   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dS )NrI   rK   rJ   r   r   ZNLLLossNd_no_reducec                    s   t j| |   d dS r   r   r   r   r&   r'   r:   7  r;   z*nlllossNd_no_reduce_test.<locals>.<lambda>r   c                   S   s   t dddddd S r  r   r&   r&   r&   r'   r:   :  r;   r   r   c                    s   t d | |  f S r  r   rS   r   r&   r'   r:   <  s    Fr   r  r&   r&   r   r'   nlllossNd_no_reduce_test1  s    $r#  c                	      sf   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dS )NrI   rK   rJ   r/   r   r  Z NLLLossNd_no_reduce_ignore_indexc                    s,   t j| |  t d t d dS r  r  r   r   r&   r'   r:   G  s   
z7nlllossNd_no_reduce_ignore_index_test.<locals>.<lambda>r   c                   S   s   t dddddd S r  r   r&   r&   r&   r'   r:   K  r;   r   r   c                    s   t d | |  f S r  r   rS   r   r&   r'   r:   M  s    Fr   r  r&   r&   r   r'   %nlllossNd_no_reduce_ignore_index_testA  s    $
r$  c                	      st   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dS )NrI   rK   rJ   c                    s     | ddS r   r  r   r  r&   r'   r   V  s    z0nlllossNd_no_reduce_weights_test.<locals>.kwargsZNLLLossNd_no_reduce_weightsc                    s   t j| |  f | S rm   r   r   r   r&   r'   r:   \  r;   z2nlllossNd_no_reduce_weights_test.<locals>.<lambda>r  c                   S   s   t dddddd S r  r   r&   r&   r&   r'   r:   `  r;   r   r  c                    s    t d | |  f | S r  r   rS   r   r&   r'   r:   b  s    Fr   r  r&   r&   r  r'    nlllossNd_no_reduce_weights_testR  s    $

r%  c                
      sD   t ddd tdt fddddd d	 d
 fdddddS )NrI   rJ   r.   ZSmoothL1Loss_no_reducec                    s   t j|  | ddS r   r   Zsmooth_l1_lossrw   r   r   r&   r'   r:   l  r;   z-smoothl1loss_no_reduce_test.<locals>.<lambda>jF::smooth_l1_loss(
            i, t.to(i.options()), F::SmoothL1LossFuncOptions().reduction(torch::kNone))c                   S   s   t dddS r   ri   r&   r&   r&   r'   r:   o  r;   r   r   c                    s   t d |  | ddS NSmoothL1Lossr   r   r   rS   r   r&   r'   r:   q  s    TFr   r   r&   r&   r   r'   smoothl1loss_no_reduce_testg  s    

r*  c                
      s@   t d tdt fddddd d d fd	dd
ddS )Nr&   ZSmoothL1Loss_no_reduce_scalarc                    s   t j|  | ddS r   r&  r   r   r&   r'   r:   |  r;   z4smoothl1loss_no_reduce_scalar_test.<locals>.<lambda>r'  c                   S   s
   t dS r   ri   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  | ddS r(  r   rS   r   r&   r'   r:     s    TFr   r   r&   r&   r   r'   "smoothl1loss_no_reduce_scalar_testw  s    


r+  c                
      sD   t ddd tdt fddddd d	 d
 fdddddS )NrI   rJ   r.   ZSmoothL1Loss_betac                    s   t j|  | dddS )Nr   rf   r   rs   r&  r   r   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   s   t dddS r   ri   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  | dddS )Nr)  r   rf   r,  r   rS   r   r&   r'   r:     s    TFr   r   r&   r&   r   r'   smoothl1loss_beta_test  s    

r-  c                
      sD   t ddd tdt fddddd d	 d
 fdddddS )NrI   rJ   r.   ZSmoothL1Loss_zero_betac                    s   t j|  | dddS )Nr   r   r,  r&  r   r   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   s   t dddS r   ri   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  | dddS )Nr)  r   r   r,  r   rS   r   r&   r'   r:     s    TFr   r   r&   r&   r   r'   smoothl1loss_zero_beta_test  s    

r.  c                
      sD   t ddd tdt fddddd d	 d
 fdddddS )NrI   rJ   r.   ZHuberLoss_deltac                    s   t j|  | dddS )Nr   rf   r   delta)r   Z
huber_lossrw   r   r   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   s   t dddS r   ri   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  | dddS )N	HuberLossr   rf   r/  r   rS   r   r&   r'   r:     s    TFr   r   r&   r&   r   r'   huberloss_delta_test  s    

r2  c                      sF   t d  tdt fddddd d d fd	dd
ddd	S )Nr&   Z!MultiLabelMarginLoss_0d_no_reducec                    s   t j|  |  ddS r   r   Zmultilabel_margin_lossrw   r   r   r   r&   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   s
   t dS r   ri   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  j|  ddS NMultiLabelMarginLossr   r   r   r  rw   r   rS   r   r&   r'   r:     s    TF	r   r   r   rk   r   rA   check_sum_reductionr{   r   )r1   zerosr   r   r   r&   r&   r   r'   &multilabelmarginloss_0d_no_reduce_test  s    

r;  c                      sT   t tdd   tdt fddddd d d fd	dd
ddd	S )Nr,   Z!MultiLabelMarginLoss_1d_no_reducec                    s   t j|  |  ddS r   r3  r   r   r&   r'   r:     r;   z8multilabelmarginloss_1d_no_reduce_test.<locals>.<lambda>r4  c                   S   s
   t dS rh   ri   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  j|  ddS r5  r7  rS   r   r&   r'   r:     s    TFr8  r  r&   r&   r   r'   &multilabelmarginloss_1d_no_reduce_test  s    

r<  c                      sf   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d	S )NrK   r,   g      rX   r0   r~   ZMultiLabelMarginLoss_index_negc                    s   t j|  |  ddS r   r3  r   r   r&   r'   r:     r;   z5multilabelmarginloss_index_neg_test.<locals>.<lambda>r4  c                   S   s   t ddS NrK   r,   ri   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  j|  ddS r5  r7  rS   r   r&   r'   r:     s    TFr8  )
r   r1   rR   r   r  r   r  r   r   r   r&   r&   r   r'   #multilabelmarginloss_index_neg_test  s    .

r>  c                      sV   t tddd   tdt fddddd d d	 fd
ddddd	S )NrK   r,   ZMultiLabelMarginLoss_no_reducec                    s   t j|  |  ddS r   r3  r   r   r&   r'   r:     r;   z5multilabelmarginloss_no_reduce_test.<locals>.<lambda>r4  c                   S   s   t ddS r=  ri   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  j|  ddS r5  r7  rS   r   r&   r'   r:     s    TFr8  r  r&   r&   r   r'   #multilabelmarginloss_no_reduce_test  s    

r?  c                
      sZ   t tdd dd tdt fdddd	d d
 d fdddddS )Nr,   r   rI   r/   ZHingeEmbeddingLoss_no_reducec                    s   t j|  | ddS r   r   Zhinge_embedding_lossrw   r   r   r&   r'   r:      r;   z3hingeembeddingloss_no_reduce_test.<locals>.<lambda>zvF::hinge_embedding_loss(
            i, t.to(i.options()), F::HingeEmbeddingLossFuncOptions().reduction(torch::kNone))c                   S   s
   t dS rh   ri   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  | ddS )NHingeEmbeddingLossr   r   r   rS   r   r&   r'   r:     s    TFr   r   r   rk   r   rA   r9  r   	r   r1   rj   r   r   mul_subr   r   r&   r&   r   r'   !hingeembeddingloss_no_reduce_test  s    $

rF  c                
      sZ   t tdd dd tdt fdddd	d d
 d fdddddS )Nr,   r   rI   r/   Z#HingeEmbeddingLoss_margin_no_reducec                    s   t j|  | dddS Nrf   r   marginr   r@  r   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   s
   t dS rh   ri   r&   r&   r&   r'   r:     r;   r   r   c                    s   t d |  | dddS )NrA  rf   r   rH  r   rS   r   r&   r'   r:     s    TFrB  rC  r&   r&   r   r'   (hingeembeddingloss_margin_no_reduce_test  s    $

rJ  c                
      sB   t dd tdt fddddd d d fd	dd
ddS )NrK   ZSoftMarginLoss_no_reducec                    s   t j|  | ddS r   )r   Zsoft_margin_lossrw   r   r   r&   r'   r:      r;   z/softmarginloss_no_reduce_test.<locals>.<lambda>znF::soft_margin_loss(
            i, t.to(i.options()), F::SoftMarginLossFuncOptions().reduction(torch::kNone))c                   S   s   t ddS NrK   ri   r&   r&   r&   r'   r:   #  r;   r   r   c                    s   t d |  | ddS )NSoftMarginLossr   r   r   rS   r   r&   r'   r:   %  s    TFr   r   r&   r&   r   r'   softmarginloss_no_reduce_test  s    

rM  c                
      sL   t ddd  tdt fddddd d	 d
 fdddddS )NrK   r,   rI   Z"MultiLabelSoftMarginLoss_no_reducec                    s   t j|  | ddS r   r   Zmultilabel_soft_margin_lossrw   r   r   r&   r'   r:   0  r;   z9multilabelsoftmarginloss_no_reduce_test.<locals>.<lambda>zF::multilabel_soft_margin_loss(
            i, t.to(i.options()), F::MultilabelSoftMarginLossFuncOptions().reduction(torch::kNone))c                   S   s   t ddS r=  ri   r&   r&   r&   r'   r:   3  r;   r   r   c                    s:    |     d  |        jdd| d S Nr/   dimro   rp   r\   r   rS   r   r&   r'   r:   5  s    Fr   r1   r   r   r  r   r   r&   r&   r   r'   'multilabelsoftmarginloss_no_reduce_test+  s    

rT  c                      s^   t ddd  t dtdt fddddd d	 d
 fdddddd	S )NrK   r,   rI   Z*MultiLabelSoftMarginLoss_weights_no_reducec                    s   t j|  | | ddS r   rN  r   r   r&   r'   r:   A  s    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   s   t ddS r=  ri   r&   r&   r&   r'   r:   F  r;   r   r   c                    s>    |     d  |         jdd| d S rO  rR  rS   r   r&   r'   r:   H  s    TFr8  rS  r&   r&   r   r'   /multilabelsoftmarginloss_weights_no_reduce_test;  s    

rU  c                      sP   t dd   tdt fddddd d d	 fd
ddddd	S )NrK   r-   ZMultiMarginLoss_no_reducec                    s   t j|  |  ddS r   r   Zmulti_margin_lossrw   r   r   r   r&   r'   r:   T  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   s   t ddS r=  ri   r&   r&   r&   r'   r:   W  r;   r   r   c                    s   t d |  j|  ddS NMultiMarginLossr   r   r7  rS   r   r&   r'   r:   Y  s    TFr8  r1   r   r   r  r   r   r   r&   r&   r   r'   multimarginloss_no_reduce_testO  s    

r[  c                      sP   t dd   tdt fddddd d d	 fd
ddddd	S )Nr/   r-   ZMultiMarginLoss_1d_no_reducec                    s   t j|  |  ddS r   rV  r   r   r&   r'   r:   e  r;   z3multimarginloss_1d_no_reduce_test.<locals>.<lambda>rW  c                   S   s
   t dS rh   ri   r&   r&   r&   r'   r:   h  r;   r   r   c                    s   t d |  j|  ddS rX  r7  rS   r   r&   r'   r:   j  s    TFr8  rZ  r&   r&   r   r'   !multimarginloss_1d_no_reduce_test`  s    

r\  c                      sP   t dd   tdt fddddd d d	 fd
ddddd	S )Nr&   r-   Z,multimarginloss_1d_input_0d_target_no_reducec                    s   t j|  |  ddS r   rV  r   r   r&   r'   r:   v  r;   zCmultimarginloss_1d_input_0d_target_no_reduce_test.<locals>.<lambda>rW  c                   S   s
   t dS rh   ri   r&   r&   r&   r'   r:   y  r;   r   r   c                    s   t d |  j|  ddS rX  r7  rS   r   r&   r'   r:   {  s    TFr8  rZ  r&   r&   r   r'   1multimarginloss_1d_input_0d_target_no_reduce_testq  s    

r]  c                      sP   t dd   tdt fddddd d d	 fd
ddddd	S )NrK   r-   ZMultiMarginLoss_p_no_reducec                    s   t j|  |  dddS )NrI   r   r8   r   rV  r   r   r&   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   s   t ddddS NrK   r,   r  Gz?)r1   rj   r   r&   r&   r&   r'   r:     r;   r   r   c                    s    t d |  j|  dddS )NrY  rI   r   r^  r7  rS   r   r&   r'   r:     s    TFr8  rZ  r&   r&   r   r'    multimarginloss_p_no_reduce_test  s    

ra  c                      sP   t dd   tdt fddddd d d	 fd
ddddd	S )NrK   r-   Z MultiMarginLoss_margin_no_reducec                    s   t j|  |  dddS rG  rV  r   r   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   s   t ddS r=  ri   r&   r&   r&   r'   r:     r;   r   r   c                    s    t d |  j|  dddS )NrY  rf   r   rH  r7  rS   r   r&   r'   r:     s     TFr8  rZ  r&   r&   r   r'   %multimarginloss_margin_no_reduce_test  s    

rb  c                      s`   t dd   t dtdt fddddd d	 d
 fdddddd	S )NrK   r-   r,   Z!MultiMarginLoss_weights_no_reducec                    s"   t j|  |  | ddS r   rV  r   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   s   t ddS r=  ri   r&   r&   r&   r'   r:     r;   r   r   c                    s    t d |  j|  ddS )NrY  r   r   r7  rS   r   r&   r'   r:     s     TFr8  rZ  r&   r&   r   r'   &multimarginloss_weights_no_reduce_test  s    

rc  c                    s   t jdt jd  | dkr>t fddddd id	d
}n(| dkrft fddddd idd
}rd|d< d|d  |d< |S )Nr/   rJ   rI   r   ratioc                      s   t jdd dS NrI   rf   )output_ratio_random_samplesreturn_indicesr   ZFractionalMaxPool2dr&   random_samplesri  r&   r'   r:     s
      z,fractional_max_pool2d_test.<locals>.<lambda>ztorch::nn::FractionalMaxPool2dOptions(2)
                                    .output_ratio(0.5)
                                    ._random_samples(random_samples))r/   rJ   rK      rl  ZFractionalMaxPool2d_ratior   r?   r@   r   r   r   c                      s   t jdd dS )NrI   rJ   r.   rJ   output_sizerh  ri  rj  r&   rk  r&   r'   r:     s    ztorch::nn::FractionalMaxPool2dOptions({2, 3})
                                    .output_size(std::vector<int64_t>({4, 3}))
                                    ._random_samples(random_samples)r/   rJ   rm  rz   ZFractionalMaxPool2d_sizeFtest_cpp_api_parity%s_return_indicesr   r1   r   r   r  r   	test_caseri  outr&   rk  r'   fractional_max_pool2d_test  s*    		rz  c                    s   |rjt jdt jd  | dkr@t fddddd itd	d
S | dkrt fddddd itdd
S n@| dkrtdd ddtdddS | dkrtdd ddtdddS d S )Nrd  r   re  c                      s   t jdd dS NrI   rf   )rg  rh  rj  r&   rl  r&   r'   r:     s     z9fractional_max_pool2d_no_batch_dim_test.<locals>.<lambda>ztorch::nn::FractionalMaxPool2dOptions(2)
                                        .output_ratio(0.5)
                                        ._random_samples(random_samples))rJ   rK   rm  rl  Z&FractionalMaxPool2d_ratio_no_batch_dimr   r?   r@   r   rA   r   r   c                      s   t jdd dS )Nro  rp  rr  rh  rj  r&   r|  r&   r'   r:     s   ztorch::nn::FractionalMaxPool2dOptions({2, 3})
                                        .output_size(std::vector<int64_t>({4, 3}))
                                        ._random_samples(random_samples))rJ   rm  rz   Z%FractionalMaxPool2d_size_no_batch_dimc                   S   s   t jdddS NrI   rf   )rg  rj  r&   r&   r&   r'   r:     s    zctorch::nn::FractionalMaxPool2dOptions(2)
                                        .output_ratio(0.5)FZ8FractionalMaxPool2d_ratio_no_batch_dim_no_random_samplesr   r?   r@   rA   rN   r   c                   S   s   t jdddS )Nro  rp  rr  rj  r&   r&   r&   r'   r:     r;   ztorch::nn::FractionalMaxPool2dOptions({2, 3})
                                        .output_size(std::vector<int64_t>({4, 3}))Z7FractionalMaxPool2d_size_no_batch_dim_no_random_samplesr1   r   r   r  r   single_batch_reference_fnrx  Zuse_random_samplesr&   r|  r'   'fractional_max_pool2d_no_batch_dim_test  sL    


	r  c                    s   t jdt jd  | dkr>t fddddd id	d
}nR| dkrht fddddd idd
}n(| dkrt fddddd idd
}rd|d< d|d  |d< |S )NrI   r.   rJ   r   re  c                      s   t jdd dS rf  r   ZFractionalMaxPool3dr&   rk  r&   r'   r:     s
      z,fractional_max_pool3d_test.<locals>.<lambda>ztorch::nn::FractionalMaxPool3dOptions(2)
                                    .output_ratio(0.5)
                                    ._random_samples(random_samples))rI   r.   rK   rK   rK   rl  ZFractionalMaxPool3d_ratiorn  r   c                      s   t jdd dS )NrI   rI   rI   r.   r.   r.   rq  r  r&   rk  r&   r'   r:     s    ztorch::nn::FractionalMaxPool3dOptions({2, 2, 2})
                                    .output_size(std::vector<int64_t>({4, 4, 4}))
                                    ._random_samples(random_samples))rI   r.   rm  rm  rm  ZFractionalMaxPool3d_sizeasymsizec                      s   t jdd dS )N)r.   rI   rJ   )r,   rJ   rI   rq  r  r&   rk  r&   r'   r:   #  s    ztorch::nn::FractionalMaxPool3dOptions({4, 2, 3})
                                    .output_size(std::vector<int64_t>({10, 3, 2}))
                                    ._random_samples(random_samples))rI   r.      rm  rK   ZFractionalMaxPool3d_asymsizeFrt  ru  r   rv  rw  r&   rk  r'   fractional_max_pool3d_test  s:    			r  c                    s   |rjt jdt jd  | dkr@t fddddd itd	d
S | dkrt fddddd itdd
S n@| dkrtdd ddtdddS | dkrtdd ddtdddS d S )Nr  r   re  c                      s   t jdd dS r{  r  r&   r|  r&   r'   r:   :  s     z9fractional_max_pool3d_no_batch_dim_test.<locals>.<lambda>ztorch::nn::FractionalMaxPool3dOptions(2)
                                        .output_ratio(0.5)
                                        ._random_samples(random_samples))r.   rK   rK   rK   rl  Z&FractionalMaxPool3d_ratio_no_batch_dimr}  r   c                      s   t jdd dS )Nr  r  r~  r  r&   r|  r&   r'   r:   E  s   ztorch::nn::FractionalMaxPool3dOptions({2, 2, 2})
                                        .output_size(std::vector<int64_t>({4, 4, 4}))
                                        ._random_samples(random_samples))r.   rm  rm  rm  Z%FractionalMaxPool3d_size_no_batch_dimc                   S   s   t jdddS r  r  r&   r&   r&   r'   r:   R  s    zctorch::nn::FractionalMaxPool3dOptions(2)
                                        .output_ratio(0.5)FZ8FractionalMaxPool3d_ratio_no_batch_dim_no_random_samplesr  c                   S   s   t jdddS )Nr  r  r  r  r&   r&   r&   r'   r:   \  r;   ztorch::nn::FractionalMaxPool3dOptions({2, 2, 2})
                                        .output_size(std::vector<int64_t>({4, 4, 4}))Z7FractionalMaxPool3d_size_no_batch_dim_no_random_samplesr  r  r&   r|  r'   'fractional_max_pool3d_no_batch_dim_test4  sL    


	r  c              
   C   sR   dd }|| }t |tjr"|gn|}t  || dW  5 Q R  S Q R X 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   s&   t | ttfrdd | D S | dS )Nc                 S   s   g | ]}| d qS r   	unsqueeze.0r3   r&   r&   r'   
<listcomp>n  s     zDsingle_batch_reference_fn.<locals>.unsqueeze_inp.<locals>.<listcomp>r   
isinstancelisttupler  inpr&   r&   r'   unsqueeze_inpl  s    z0single_batch_reference_fn.<locals>.unsqueeze_inpr   N)r  r1   Tensorr   squeeze)r  
parametersmoduler  Zsingle_batch_inputr&   r&   r'   r  f  s
    r  re  r   ri  r  ZBatchNorm1d)r,   z!torch::nn::BatchNorm1dOptions(10)Zaffine)r=   r>   r?   r@   cudnn
check_evalrD   )rK   z torch::nn::BatchNorm1dOptions(5))r.   rK   rJ   Z3d_input)r,   ry   NzBtorch::nn::BatchNorm1dOptions(10).eps(1e-3).momentum(c10::nullopt)Zaffine_simple_average)r,   ry   333333?FzGtorch::nn::BatchNorm1dOptions(10).eps(1e-3).momentum(0.3).affine(false)Z
not_affine)r,   ry   r  TFztorch::nn::BatchNorm1dOptions(10)
                                .eps(1e-3).momentum(0.3).affine(true).track_running_stats(false)Znot_tracking_stats)rK   ry   r  FzFtorch::nn::BatchNorm1dOptions(5).eps(1e-3).momentum(0.3).affine(false)Z3d_input_not_affine)r   rK   	   Z
zero_batchZBatchNorm2dz torch::nn::BatchNorm2dOptions(3))r=   r>   r?   r@   r  r  )rJ   ry   NzAtorch::nn::BatchNorm2dOptions(3).eps(1e-3).momentum(c10::nullopt)Z2d_simple_average)rJ   ry   皙?z8torch::nn::BatchNorm2dOptions(3).eps(1e-3).momentum(0.8)Zmomentum)rJ   ry   r  FzFtorch::nn::BatchNorm2dOptions(3).eps(1e-3).momentum(0.8).affine(false))rJ   ry   r  TFztorch::nn::BatchNorm2dOptions(3)
                                .eps(1e-3).momentum(0.8).affine(true).track_running_stats(false)zFtorch::nn::BatchNorm2dOptions(5).eps(1e-3).momentum(0.3).affine(false))r   rK   rI   rI   ZBatchNorm3dz torch::nn::BatchNorm3dOptions(3))rI   rJ   r.   r.   r.   zAtorch::nn::BatchNorm3dOptions(3).eps(1e-3).momentum(c10::nullopt)Z3d_simple_average)rJ   ry   ffffff?z8torch::nn::BatchNorm3dOptions(3).eps(1e-3).momentum(0.7))rJ   ry   r  FzFtorch::nn::BatchNorm3dOptions(3).eps(1e-3).momentum(0.7).affine(false))rJ   ry   r  TFztorch::nn::BatchNorm3dOptions(3)
                                .eps(1e-3).momentum(0.7).affine(true).track_running_stats(false)zFtorch::nn::BatchNorm3dOptions(5).eps(1e-3).momentum(0.3).affine(false))r   rK   rI   rI   rI   ZInstanceNorm1d)rJ   ry   r  z;torch::nn::InstanceNorm1dOptions(3).eps(1e-3).momentum(0.3))r.   rJ   r   )rJ   ry   r  FTztorch::nn::InstanceNorm1dOptions(3)
                                .eps(1e-3).momentum(0.3).affine(false).track_running_stats(true)Ztracking_stats)rJ   r   Ztracking_stats_no_batch_dim)r=   r>   r?   r@   r  r  refrD   Zno_batch_dimZInstanceNorm2dz;torch::nn::InstanceNorm2dOptions(3).eps(1e-3).momentum(0.3)ztorch::nn::InstanceNorm2dOptions(3)
                                .eps(1e-3).momentum(0.3).affine(false).track_running_stats(true))rJ   rz   rz   ZInstanceNorm3dz;torch::nn::InstanceNorm3dOptions(3).eps(1e-3).momentum(0.3)ztorch::nn::InstanceNorm3dOptions(3)
                                .eps(1e-3).momentum(0.3).affine(false).track_running_stats(true))rJ   r.   r.   r.   Z	LayerNormrK   ry   z*torch::nn::LayerNormOptions({5}).eps(1e-3))r.   rK   rK   Z1d_elementwise_affine)r=   r>   r?   r@   r  r  
check_halfrD   zDtorch::nn::LayerNormOptions({5}).eps(1e-3).elementwise_affine(false)Z1d_no_elementwise_affinerI   z0torch::nn::LayerNormOptions({2, 2, 5}).eps(1e-3))r.   rI   rI   rK   Z3d_elementwise_affinezJtorch::nn::LayerNormOptions({2, 2, 5}).eps(1e-3).elementwise_affine(false)Z3d_no_elementwise_affine8   zMtorch::nn::LayerNormOptions({56, 56, 56}).eps(1e-5).elementwise_affine(false))r.   r  r  r  Z3d_no_affine_large_feature)	r=   r>   r?   r@   r  r  gradcheck_fast_moder  rD   )r   rK   Z1d_empty_elementwise_affineZ	GroupNorm)rJ   rz   ry   z+torch::nn::GroupNormOptions(3, 6).eps(1e-3))r.   rz   rK   Z	1d_affine)r=   r>   r?   r@   r  r  check_bfloat16rD   )rJ      ry   z,torch::nn::GroupNormOptions(3, 12).eps(1e-3))r.   r  Z1d_affine_GN)r/   rz   ry   z+torch::nn::GroupNormOptions(1, 6).eps(1e-3))   rz   Z1d_affine_large_batch)	r=   r>   r?   r@   r  r  rD   r  test_cpu)rK   rK   ry   Fz9torch::nn::GroupNormOptions(5, 5).eps(1e-3).affine(false)Z1d_no_affine_IN)r/   r,   ry   Fz:torch::nn::GroupNormOptions(1, 10).eps(1e-3).affine(false)Z1d_no_affine_LN)r.   rz   rI   rJ   Z	2d_affine)r.   rz      r  Z2d_affine_large_feature)	r=   r>   r?   r@   r  r  r  rD   r  )rJ   3   r   Fz:torch::nn::GroupNormOptions(3, 51).eps(1e-5).affine(false))rI   r  r  r  Z2d_no_affine_large_feature)rJ   rJ   ry   Fz9torch::nn::GroupNormOptions(3, 3).eps(1e-3).affine(false))r.   rJ   rI   rJ   Z2d_no_affine_IN)r/   rJ   ry   Fz9torch::nn::GroupNormOptions(1, 3).eps(1e-3).affine(false)Z2d_no_affine_LNConv1dz!torch::nn::Conv1dOptions(4, 5, 3))rI   r.   r,   )r=   r>   r?   r@   r  rB   rC   )r.   rK   rJ   rI   z+torch::nn::Conv1dOptions(4, 5, 3).stride(2)stride)r=   r>   r?   r@   r  rD   rB   rC   )r.   rK   rJ   r/   r/   z6torch::nn::Conv1dOptions(4, 5, 3).stride(1).padding(1)Zpad1r  )r.   rK   rK   r/   rI   z6torch::nn::Conv1dOptions(4, 5, 5).stride(1).padding(2)Zpad2)r.   r.   rJ   r/   r/   z6torch::nn::Conv1dOptions(4, 4, 3).stride(1).padding(1))r/   r.   r/   Z	pad1size1)r.   r.   rK   r/   rI   z6torch::nn::Conv1dOptions(4, 4, 5).stride(1).padding(2)Z	pad2size1)r   r.   r,   ZConv1d_dilatedc                   C   s   t jdddddS )Nr.   rK   rJ   rI   kernel_sizedilationr   r  r&   r&   r&   r'   r:     r;   z-torch::nn::Conv1dOptions(4, 5, 3).dilation(2))r   r   r?   r@   rB   rC   ZConv1d_groupsc                   C   s   t jdddddS )Nr.   rz   rJ   rI   r  groupsr  r&   r&   r&   r'   r:     r;   z+torch::nn::Conv1dOptions(4, 6, 3).groups(2))rI   r.   rz   )r   r   r?   r@   r  rB   rC   ZConv1d_pad_validc                   C   s   t jdddddS )Nr.   rK   rJ   validpaddingr  r&   r&   r&   r'   r:     r;   z8torch::nn::Conv1dOptions(4, 5, 3).padding(torch::kValid)ZConv1d_pad_samec                   C   s   t jdddddS )Nr.   rK   rJ   samer  r  r&   r&   r&   r'   r:     r;   z7torch::nn::Conv1dOptions(4, 5, 3).padding(torch::kSame)ZConv1d_pad_same2c                   C   s   t jdddddS )Nr.   rK   r  r  r  r&   r&   r&   r'   r:     r;   z7torch::nn::Conv1dOptions(4, 5, 4).padding(torch::kSame)ZConv1d_pad_same_dilatedc                   C   s   t jddddddS )Nr.   rK   r  rI   r  r  r  r&   r&   r&   r'   r:     r;   zCtorch::nn::Conv1dOptions(4, 5, 3).padding(torch::kSame).dilation(2)ConvTranspose1dc                   C   s   t jdddddddS )NrJ   r.   r   r/   rW   )r  r  r  output_paddingr   r  r&   r&   r&   r'   r:     r;   zQtorch::nn::ConvTranspose1dOptions(3, 4, 3).stride(3).padding(1).output_padding(1))r/   rJ   rm  )r   r   r?   r  r@   rB   rC   )rJ   r.   rJ   rI   r/   r/   r/   Fztorch::nn::ConvTranspose1dOptions(3, 4, 3)
                                .stride(2).padding(1).output_padding(1).groups(1).bias(false))r/   rJ   rz   )	rJ   r.   rJ   rI   r/   r/   r/   TrI   ztorch::nn::ConvTranspose1dOptions(3, 4, 3)
                                .stride(2).padding(1).output_padding(1).groups(1).bias(true).dilation(2)ZdilatedZConvTranspose1d_groupsc                	   C   s   t jddddddddS )	Nr.   rz   rJ   r   r/   rW   rI   )r  r  r  r  r  r&   r&   r&   r'   r:     r;   z|torch::nn::ConvTranspose1dOptions(4, 6, 3)
                                .stride(3).padding(1).output_padding(1).groups(2))rI   r.   rm  	MaxPool1d)r.   ztorch::nn::MaxPool1dOptions(4))rI   r,   r.   )r.   r.   z(torch::nn::MaxPool1dOptions(4).stride(4)ZMaxPool1d_return_indicesc                   C   s   t jdddS )Nr.   Tr  )r   r  r&   r&   r&   r'   r:   1  r;   )r=   r   r   r@   rt  Conv2d)rJ   r.   rJ   rI   z&torch::nn::Conv2dOptions(3, 4, {3, 2}))rI   rJ   rm  rK   )r=   r>   r?   r@   r  check_with_long_tensorrB   rC   )rJ   r.   rJ   rJ   rI   rI   z5torch::nn::Conv2dOptions(3, 4, {3, 3}).stride({2, 2})Zstrided)	r=   r>   r?   r@   r  rD   r  rB   rC   )rJ   r.   r  r  r/   r/   zEtorch::nn::Conv2dOptions(3, 4, {3, 3}).stride({2, 2}).padding({1, 1})r  )rJ   rI   r  r  r  r  zVtorch::nn::Conv2dOptions(3, 2, {3, 3}).stride({2, 2}).padding({1, 1}).dilation({2, 2}))rI   rJ   r-   r-   )rJ   r.   r  r/   r   r/   r/   Fz~torch::nn::Conv2dOptions(3, 4, {3, 2})
                                .stride(1).padding(0).dilation(1).groups(1).bias(false))rI   rJ   rz   rK   )r=   r>   r?   r@   r  rD   r  rB   )r   rJ   rm  rK   ZConv2d_groupsc                   C   s   t jdddddS Nr.   rz   r  rI   r  r   r  r&   r&   r&   r'   r:   w  r;   z0torch::nn::Conv2dOptions(4, 6, {3, 2}).groups(2))rI   r.   rz   rK   )r   r   r?   r@   r  r  rB   rC   ZConv2d_groups_thnnc                   C   s   t jdddddS r  r  r&   r&   r&   r'   r:     r;   )r   r   r?   r@   r  rB   rC   ZConv2d_pad_validc                   C   s   t jdddddS )NrI   r.   rJ   r.   r  r  r  r&   r&   r&   r'   r:     r;   z=torch::nn::Conv2dOptions(2, 4, {3, 4}).padding(torch::kValid))rI   rI   rz   rK   ZConv2d_pad_samec                   C   s   t jdddddS )NrI   r.   r  r  r  r  r&   r&   r&   r'   r:     r;   z<torch::nn::Conv2dOptions(2, 4, {3, 4}).padding(torch::kSame)ZConv2d_pad_same_dilatedc                   C   s   t jddddddS )NrI   r.   r  r  r  r  r&   r&   r&   r'   r:     r;   zHtorch::nn::Conv2dOptions(2, 4, {3, 4}).padding(torch::kSame).dilation(2)ConvTranspose2d)rJ   r.   rJ   r  r/   r  z|torch::nn::ConvTranspose2dOptions(3, 4, 3)
                                .stride({3, 2}).padding(1).output_padding({1, 1})rs  )r=   r>   r?   r  r@   r  rB   rC   )	rJ   r.   rJ   ro  r/   r  r/   Fr  aH  torch::nn::ConvTranspose2dOptions(3, 4, 3)
                                .stride({2, 3})
                                .padding(1)
                                .output_padding({1, 1})
                                .groups(1)
                                .bias(false)
                                .dilation({2, 2}))r/   rJ   rz   rm  )rJ   r.   rJ   ro  r/   r  r/   Fztorch::nn::ConvTranspose2dOptions(3, 4, 3)
                                .stride({2, 3}).padding(1).output_padding({1, 1}).groups(1).bias(false)ZConvTranspose2d_groupsc                   C   s   t jdddddS )NrI   r.   ro  r  )r   r  r&   r&   r&   r'   r:     r;   z9torch::nn::ConvTranspose2dOptions(2, 4, {2, 3}).groups(2))r/   rI   r.   rK   ZConv2d_depthwisec                   C   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))rI   r.   rz   rz   Z Conv2d_depthwise_with_multiplierc                   C   s   t jdddddS )Nr.   r-   r  r  r  r&   r&   r&   r'   r:     r;   z0torch::nn::Conv2dOptions(4, 8, {3, 3}).groups(4)ZConv2d_depthwise_stridedc                   C   s   t jddddddS )Nr.   r  r  )r  r  r  r&   r&   r&   r'   r:     r;   z?torch::nn::Conv2dOptions(4, 4, {3, 3}).stride({2, 2}).groups(4)ZConv2d_depthwise_paddedc                   C   s   t jddddddS )Nr.   r  r  )r  r  r  r&   r&   r&   r'   r:     r;   z@torch::nn::Conv2dOptions(4, 4, {3, 3}).padding({1, 1}).groups(4)ZConv2d_depthwise_dilatedc                   C   s   t jddddddS )Nr.   r  )r  r  r  r&   r&   r&   r'   r:     r;   zAtorch::nn::Conv2dOptions(4, 4, {2, 2}).dilation({2, 2}).groups(4))rI   r.   rK   rK   	MaxPool2d)r  r  r  zBtorch::nn::MaxPool2dOptions({3, 3}).stride({2, 2}).padding({1, 1}))rJ   rm  rm  )r/   rJ   rm  rm  Z4d_input)r=   r>   r?   r@   check_with_channels_lastrD   ZMaxPool2d_return_indicesc                   C   s   t jdddddS )Nr  r  r  Tr  )r   r  r&   r&   r&   r'   r:   	  r;   )r=   r   r   r@   r  rt  Z	AvgPool1dztorch::nn::AvgPool1dOptions(2))rI   rJ   rz   )rr   rr   z(torch::nn::AvgPool1dOptions(2).stride(2))rI   rI   r/   z3torch::nn::AvgPool1dOptions(2).stride(2).padding(1)Z
stride_pad)rJ   rz   	AvgPool2d)r  z#torch::nn::AvgPool2dOptions({2, 2}))r  r  z2torch::nn::AvgPool2dOptions({2, 2}).stride({2, 2}))r  r  r  zBtorch::nn::AvgPool2dOptions({2, 2}).stride({2, 2}).padding({1, 1})ZAvgPool2d_divisorc                   C   s   t jdddS Nr  r/   Zdivisor_overrider   r  r&   r&   r&   r'   r:   N	  r;   z7torch::nn::AvgPool2dOptions({2, 2}).divisor_override(1))r   r   r?   r@   r  ZAvgPool2d_divisor_stridec                   C   s   t jddddS r  r  r&   r&   r&   r'   r:   U	  r;   zFtorch::nn::AvgPool2dOptions({2, 2}).stride({2, 2}).divisor_override(1)ZAvgPool2d_divisor_stride_padc                   C   s   t jdddddS )Nr  r  r/   r  r  r&   r&   r&   r'   r:   \	  r;   zVtorch::nn::AvgPool2dOptions({2, 2}).stride({2, 2}).padding({1, 1}).divisor_override(1)ZLPPool2dr  z*torch::nn::LPPool2dOptions(2, 2).stride(2))      ?rI   z"torch::nn::LPPool2dOptions(1.5, 2)c                   C   s   t ddddS Nr/   rJ   rm  r   r&   r&   r&   r'   r:   k	  r;   norm)r=   r>   r?   rk   rD   ZLPPool1dz"torch::nn::LPPool1dOptions(1.5, 2)c                   C   s   t dddS r  r   r&   r&   r&   r'   r:   r	  r;   )rI   rI   rJ   z*torch::nn::LPPool1dOptions(2, 2).stride(3))rJ   rm  ZLocalResponseNormz&torch::nn::LocalResponseNormOptions(3))r/   rK   rm  z&torch::nn::LocalResponseNormOptions(2))r/   rK   rm  rm  Z2d_uneven_pad)r/   rG   rf   rF   z@torch::nn::LocalResponseNormOptions(1).alpha(1.).beta(0.5).k(2.))r/   rK   rm  rm  rm  Z3d_custom_paramsZReflectionPad1d)r/   rI   z)torch::nn::ReflectionPad1dOptions({1, 2}))rI   rJ   r-   )rJ   r-   batchc                   C   s   t jdddt jddS NrI   rJ   r-   Tr   requires_gradr1   r   
complex128r&   r&   r&   r'   r:   	  r;   complex)r=   r>   r?   rk   	skip_halfrD   ZReflectionPad2d)r/   rI   rJ   r.   z/torch::nn::ReflectionPad2dOptions({1, 2, 3, 4}))rJ   r-   r-   c                   C   s   t jddddt jddS r  r  r&   r&   r&   r'   r:   	  r;   ZReflectionPad3d))r/   rI   r   rI   r/   rI   z5torch::nn::ReflectionPad3dOptions({1, 2, 0, 2, 1, 2}))rI   rJ   r-   r-   r-   )rJ   r-   r-   r-   c                	   C   s   t jdddddt jddS r  r  r&   r&   r&   r'   r:   	  r;   ZReplicationPad1dz*torch::nn::ReplicationPad1dOptions({1, 2})r  c                   C   s   t jdddt jddS NrI   rJ   r.   Tr  r  r&   r&   r&   r'   r:   	  r;   ZReplicationPad2dz0torch::nn::ReplicationPad2dOptions({1, 2, 3, 4}))rI   rJ   r.   r.   )rJ   r.   r.   c                   C   s   t jddddt jddS r  r  r&   r&   r&   r'   r:   
  r;   Z	ZeroPad2dz)torch::nn::ZeroPad2dOptions({1, 2, 3, 4})c                   C   s   t jddddt jddS r  r  r&   r&   r&   r'   r:   
  r;   ))r0   r0   r0   z-torch::nn::ZeroPad2dOptions({-1, -1, -1, -2})Znegative_dimsZConstantPad1d)r  rF   z+torch::nn::ConstantPad1dOptions({1, 2}, 2.)c                   C   s   t jdddt jddS r  r  r&   r&   r&   r'   r:   5
  r;   ZConstantPad2d)r  rF   z1torch::nn::ConstantPad2dOptions({1, 2, 3, 4}, 2.)c                   C   s   t jddddt jddS r  r  r&   r&   r&   r'   r:   K
  r;   ZConstantPad3d))r/   rI   rJ   r.   r/   r   rF   z7torch::nn::ConstantPad3dOptions({1, 2, 3, 4, 1, 0}, 2.))rI   rJ   r.   r.   rK   )rJ   r.   r.   rK   c                	   C   s   t jdddddt jddS )NrI   rJ   r.   rK   Tr  r  r&   r&   r&   r'   r:   a
  r;   Conv3d)rI   rJ   rI   rJ   rI   z)torch::nn::Conv3dOptions(2, 3, {2, 3, 2}))r/   rI   r.   rK   r.   g?)rI   rJ   rl   r/   r   r/   r/   Fztorch::nn::Conv3dOptions(2, 3, {2, 3, 4})
                                .stride(1).padding(0).dilation(1).groups(1).bias(false))r/   rI   rJ   r.   rK   )rI   rJ   r/   r/   r/   r/   r   r/   r/   FZ1x1x1_no_bias)rJ   r.   rI   rI   z+torch::nn::Conv3dOptions(3, 4, 2).stride(2))rI   rJ   rK   rK   rK   )rJ   r.   rI   rI   r/   z6torch::nn::Conv3dOptions(3, 4, 2).stride(2).padding(1)Zstride_padding)rJ   r.   rl   z)torch::nn::Conv3dOptions(3, 4, {2, 3, 4}))r   rJ   rJ   r.   rK   )r=   r>   r?   r@   r  r  rD   rB   ZConv3d_groupsc                   C   s   t jdddddS )NrI   r.   rJ   r  r   r  r&   r&   r&   r'   r:   
  r;   z+torch::nn::Conv3dOptions(2, 4, 3).groups(2)ZConv3d_dilatedc                   C   s   t jdddddS )NrJ   r.   rI   r  r  r&   r&   r&   r'   r:   
  r;   z-torch::nn::Conv3dOptions(3, 4, 2).dilation(2)ZConv3d_dilated_stridedc                   C   s   t jddddddS )NrJ   r.   rI   )r  r  r  r  r&   r&   r&   r'   r:   
  r;   z7torch::nn::Conv3dOptions(3, 4, 2).dilation(2).stride(2)ZConv3d_pad_validc                   C   s   t jdddddS )NrJ   r.   rl   r  r  r  r&   r&   r&   r'   r:   
  r;   z@torch::nn::Conv3dOptions(3, 4, {2, 3, 4}).padding(torch::kValid))rI   rJ   rz   rK   r.   ZConv3d_pad_samec                   C   s   t jdddddS )NrJ   r.   rl   r  r  r  r&   r&   r&   r'   r:   
  r;   z?torch::nn::Conv3dOptions(3, 4, {2, 3, 4}).padding(torch::kSame)ZConv3d_pad_same_dilatedc                   C   s   t jddddddS )NrJ   r.   rl   r  rI   r  r  r&   r&   r&   r'   r:   
  r;   zKtorch::nn::Conv3dOptions(3, 4, {2, 3, 4}).padding(torch::kSame).dilation(2)ZConvTranspose3dz2torch::nn::ConvTranspose3dOptions(2, 3, {2, 3, 2}))r=   r>   r?   r  r@   rB   rC   )	rI   rJ   r  r/   r   r   r/   Tr  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@   rD   rB   rC   	MaxPool3d)r  z&torch::nn::MaxPool3dOptions({2, 2, 2}))rI   r  z0torch::nn::MaxPool3dOptions(2).stride({2, 2, 2}))rI   rI   r  z;torch::nn::MaxPool3dOptions(2).stride(2).padding({1, 1, 1})ZMaxPool3d_return_indicesc                   C   s   t jdddddS )NrI   r  Tr  )r   r  r&   r&   r&   r'   r:     r;   	AvgPool3dz&torch::nn::AvgPool3dOptions({2, 2, 2})z0torch::nn::AvgPool3dOptions(2).stride({2, 2, 2})z;torch::nn::AvgPool3dOptions(2).stride(2).padding({1, 1, 1}))r.   rI   r/   rI   r/   z;torch::nn::AvgPool3dOptions(4).stride(2).padding({1, 2, 1})Zstride_pad_gpu_fixedkw_output)rI   r.   r-   r/   r/   r/   rI   zCtorch::nn::AvgPool3dOptions({2, 4, 8}).stride(1).padding({1, 1, 2}))rI   rJ   rI   r.   r-   Zstride_pad_gpu_general_output)rJ   r/   r   z3torch::nn::AvgPool3dOptions(3).stride(1).padding(0)Zstride1_pad0_gpu_inputZstride_pad_gpu_input_nooverlapZAvgPool3d_divisorc                   C   s   t jdddS )Nr  r/   r  r   r  r&   r&   r&   r'   r:   D  r;   z:torch::nn::AvgPool3dOptions({2, 2, 2}).divisor_override(1)ZAvgPool3d_divisor_stridec                   C   s   t jddddS )NrI   r  r/   r  r  r&   r&   r&   r'   r:   K  r;   zDtorch::nn::AvgPool3dOptions(2).stride({2, 2, 2}).divisor_override(1)ZAvgPool3d_divisor_stride_padc                   C   s   t jdddddS NrI   r  r/   r  r  r&   r&   r&   r'   r:   R  r;   zOtorch::nn::AvgPool3dOptions(2).stride(2).padding({1, 1, 1}).divisor_override(1)Z/AvgPool3d_divisor_stride_pad_gpu_fixedkw_outputc                   C   s   t jdddddS )Nr.   rI   r  r/   r  r  r&   r&   r&   r'   r:   Y  r;   zOtorch::nn::AvgPool3dOptions(4).stride(2).padding({1, 2, 1}).divisor_override(1)Z/AvgPool3d_divisor_stride_pad_gpu_general_outputc                   C   s   t jdddddS )Nr  r/   r  r  r  r&   r&   r&   r'   r:   `  r;   zWtorch::nn::AvgPool3dOptions({2, 4, 8}).stride(1).padding({1, 1, 2}).divisor_override(1)Z(AvgPool3d_divisor_stride1_pad0_gpu_inputc                   C   s   t jdddddS )NrJ   r/   r   r  r  r&   r&   r&   r'   r:   g  r;   zGtorch::nn::AvgPool3dOptions(3).stride(1).padding(0).divisor_override(1)Z0AvgPool3d_divisor_stride_pad_gpu_input_nooverlapc                   C   s   t jdddddS r  r  r&   r&   r&   r'   r:   n  r;   ZReplicationPad3d))r/   rI   rJ   rJ   rI   r/   z6torch::nn::ReplicationPad3dOptions({1, 2, 3, 3, 2, 1}))rI   rJ   rI   rI   rI   )rJ   rI   rI   rI   c                	   C   s   t jdddddt jddS )NrI   rJ   Tr  r  r&   r&   r&   r'   r:     r;   	Embeddingrp  z!torch::nn::EmbeddingOptions(4, 3)c                   C   s   t jddt jddS NrI   rJ   r   r.   r1   r   r   random_r&   r&   r&   r'   r:     r;   )r=   r>   r?   rk   r{   c                   C   s    t jddt jddddS Nr/   i   r   r.   rm  r1   r   r   r  r5   r&   r&   r&   r'   r:     r;   Zdiscontiguous)r=   r>   r?   rk   r{   rD   EmbeddingBagz$torch::nn::EmbeddingBagOptions(4, 3)c                   C   s   t jddt jddS r  r  r&   r&   r&   r'   r:     r;   meanc                   C   s    t jddt jddddS r  r  r&   r&   r&   r'   r:     r;   )r.   rJ   NrF   Fr\   ztorch::nn::EmbeddingBagOptions(4, 3)
                                .max_norm(c10::nullopt).norm_type(2.).scale_grad_by_freq(false).mode(torch::kSum)c                   C   s   t jddt jddS r  r  r&   r&   r&   r'   r:     r;   r\   )r.   rJ   NrF   Fr   ztorch::nn::EmbeddingBagOptions(4, 3)
                                .max_norm(c10::nullopt).norm_type(2.).scale_grad_by_freq(false).mode(torch::kMax)c                   C   s   t jddt jddS r  r  r&   r&   r&   r'   r:     r;   r   ZEmbeddingBag_mean_padding_idxc                   C   s   t jddddS )Nr.   rJ   r/   Zpadding_idxr   r  r&   r&   r&   r'   r:     r;   z3torch::nn::EmbeddingBagOptions(4, 3).padding_idx(1)c                   C   s   t t dt dgS NrJ   r1   stackr   r&   r&   r&   r'   r:     r;   )r   r   r?   rk   r{   ZEmbeddingBag_sum_padding_idxc                	   C   s   t jddd dddddS )Nr.   rJ   rF   Fr\   r/   r  r  r&   r&   r&   r'   r:     r;   ztorch::nn::EmbeddingBagOptions(4, 3)
                                .max_norm(c10::nullopt).norm_type(2.).scale_grad_by_freq(false).mode(torch::kSum).padding_idx(1)c                   C   s   t t dt dgS r  r  r&   r&   r&   r'   r:     r;   ZEmbeddingBag_max_padding_idxc                	   C   s   t jddd dddddS )Nr.   rJ   rF   Fr   r/   r  r  r&   r&   r&   r'   r:     r;   ztorch::nn::EmbeddingBagOptions(4, 3)
                                .max_norm(c10::nullopt).norm_type(2.).scale_grad_by_freq(false).mode(torch::kMax).padding_idx(1)c                   C   s   t t dt dgS r  r  r&   r&   r&   r'   r:     r;   ZEmbeddingBag_sparsec                   C   s   t jddddS Nr.   rJ   T)sparser  r&   r&   r&   r'   r:     r;   z1torch::nn::EmbeddingBagOptions(4, 3).sparse(true)c                   C   s   t dddS NrI   r/   r1   r   repeatr&   r&   r&   r'   r:     r;   )r   r   r?   rk   r{   has_sparse_gradientsc                   C   s   t jddddS r  )r   r  r&   r&   r&   r'   r:     r;   z.torch::nn::EmbeddingOptions(4, 3).sparse(true)c                   C   s   t dddS r  r  r&   r&   r&   r'   r:     r;   ZEmbedding_sparse)r   r?   rk   r   r{   r  ZPixelShufflez!torch::nn::PixelShuffleOptions(3))r/   r  r.   r.   ZPixelUnshufflez#torch::nn::PixelUnshuffleOptions(3))r/   r/   r  r  r  Znearest)r   scale_factormodezF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({12})).scale_factor(c10::nullopt).mode(torch::kNearest))r/   rI   r.   Zinterpolate_nearest_1d)r   cpp_options_argsr@   r   r   )r   rI   r.   Zinterpolate_nearest_1d_zero_dim)r  )r/   rI   rJ   Zinterpolate_nearest_tuple_1dg      @zF::InterpolateFuncOptions()
                            .size(c10::nullopt).scale_factor(std::vector<double>({4.})).mode(torch::kNearest)Zinterpolate_nearest_scale_1dZlinear)r   r  r   Zalign_cornerszF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({12}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kLinear)
                            .align_corners(false)Zinterpolate_linear_1dzF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({4}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kLinear)
                            .align_corners(false)Zinterpolate_linear_tuple_1dzF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({4.}))
                            .mode(torch::kLinear)
                            .align_corners(false)Zinterpolate_linear_scale_1dZinterpolate_linear_1d_zero_dimzF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({12}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kLinear)
                            .align_corners(true)Z#interpolate_linear_1d_align_cornerszF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({4.}))
                            .mode(torch::kLinear)
                            .align_corners(true)Z)interpolate_linear_scale_1d_align_cornerszF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({2, 2}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kNearest))r/      r/   r/   Z%interpolate_nearest_2d_launch_configszF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({12, 12}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kNearest))r/   rI   r.   r.   Zinterpolate_nearest_2d)r  r  zF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({12, 16}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kNearest)r  Zinterpolate_nearest_tuple_2dzF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({4., 4.}))
                            .mode(torch::kNearest)Zinterpolate_nearest_scale_2d)r   rI   r.   r.   Zinterpolate_nearest_2d_zero_dimZbilinearzF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({12, 12}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kBilinear)
                            .align_corners(false)Zinterpolate_bilinear_2dZ interpolate_bilinear_2d_zero_dim)r.   rz   zF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({4, 6}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kBilinear)
                            .align_corners(false))r/   rI   rI   rJ   Zinterpolate_bilinear_tuple_2dzF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({4., 4.}))
                            .mode(torch::kBilinear)
                            .align_corners(false)Zinterpolate_bilinear_scale_2d)rF   rF   zF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({2., 2.}))
                            .mode(torch::kBilinear)
                            .align_corners(false)Z*interpolate_bilinear_scale_tuple_shared_2dzF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({2., 1.}))
                            .mode(torch::kBilinear)
                            .align_corners(false)Z*interpolate_bilinear_scale_tuple_skewed_2dzF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({4, 6}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kBilinear)
                            .align_corners(true)Z+interpolate_bilinear_tuple_2d_align_cornerszF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({2., 1.}))
                            .mode(torch::kBilinear)
                            .align_corners(true)Z8interpolate_bilinear_scale_tuple_skewed_2d_align_cornersZbicubiczF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({12, 12}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kBicubic)
                            .align_corners(false)Zinterpolate_bicubic_2dZinterpolate_bicubic_2d_zero_dimzF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({4, 6}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kBicubic)
                            .align_corners(false)Zinterpolate_bicubic_tuple_2dzF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({4., 4.}))
                            .mode(torch::kBicubic)
                            .align_corners(false)Zinterpolate_bicubic_scale_2dzF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({2., 2.}))
                            .mode(torch::kBicubic)
                            .align_corners(false)Z)interpolate_bicubic_scale_tuple_shared_2dzF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({2., 1.}))
                            .mode(torch::kBicubic)
                            .align_corners(false)Z)interpolate_bicubic_scale_tuple_skewed_2dzF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({4, 6}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kBicubic)
                            .align_corners(true)Z*interpolate_bicubic_tuple_2d_align_cornerszF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({2., 1.}))
                            .mode(torch::kBicubic)
                            .align_corners(true)Z7interpolate_bicubic_scale_tuple_skewed_2d_align_cornerszF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({12, 12, 12}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kNearest))r/   rI   r.   r.   r.   Zinterpolate_nearest_3d)r   rI   r.   r.   r.   Zinterpolate_nearest_3d_zero_dim)r  r  r  zF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({12, 16, 16}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kNearest))r/   rI   rJ   r.   r.   Zinterpolate_nearest_tuple_3dzF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({4., 4., 4.}))
                            .mode(torch::kNearest)Zinterpolate_nearest_scale_3dZ	trilineara   F::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({12, 12, 12}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kTrilinear)
                            .align_corners(false)Zinterpolate_trilinear_3dZ!interpolate_trilinear_3d_zero_dim)r.   rz   rz   zF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({4, 6, 6}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kTrilinear)
                            .align_corners(false))r/   rI   rI   rJ   rJ   Zinterpolate_trilinear_tuple_3dg      @zF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({3., 3., 3.}))
                            .mode(torch::kTrilinear)
                            .align_corners(false)Zinterpolate_trilinear_scale_3dr   )r   r  r@   r   r   r   zF::InterpolateFuncOptions()
                            .size(std::vector<int64_t>({4, 6, 6}))
                            .scale_factor(c10::nullopt)
                            .mode(torch::kTrilinear)
                            .align_corners(true)Z,interpolate_trilinear_tuple_3d_align_cornerszF::InterpolateFuncOptions()
                            .size(c10::nullopt)
                            .scale_factor(std::vector<double>({3., 3., 3.}))
                            .mode(torch::kTrilinear)
                            .align_corners(true)Z,interpolate_trilinear_scale_3d_align_cornersZAdaptiveMaxPool1dz&torch::nn::AdaptiveMaxPool1dOptions(3)c                   C   s   t dddS Nr/   rJ   rK   r   r&   r&   r&   r'   r:     r;   )r=   r>   r?   rk   c                   C   s
   t ddS NrJ   rK   r  r&   r&   r&   r'   r:     r;   ZAdaptiveMaxPool2dz&torch::nn::AdaptiveMaxPool2dOptions(3)c                   C   s   t ddddS Nr/   rJ   rK   rz   r  r&   r&   r&   r'   r:     r;   Zsingle)r  z+torch::nn::AdaptiveMaxPool2dOptions({3, 4})c                   C   s   t ddddS r  r  r&   r&   r&   r'   r:     r;   r  c                   C   s   t dddS NrJ   rK   rz   r  r&   r&   r&   r'   r:     r;   )r=   r>   r?   rk   rA   rD   ))rJ   Nz6torch::nn::AdaptiveMaxPool2dOptions({3, c10::nullopt})c                   C   s   t ddddS r  r  r&   r&   r&   r'   r:     r;   Z
tuple_noneZAdaptiveMaxPool3dz&torch::nn::AdaptiveMaxPool3dOptions(3)c                   C   s   t dddddS NrI   rJ   rK   rz   rm  r  r&   r&   r&   r'   r:     r;   c                   C   s   t ddddS )NrJ   rK   rz   rm  r  r&   r&   r&   r'   r:     r;   )rJ   r.   rK   z.torch::nn::AdaptiveMaxPool3dOptions({3, 4, 5})c                   C   s   t dddddS r  r  r&   r&   r&   r'   r:     r;   ))rJ   NrK   z9torch::nn::AdaptiveMaxPool3dOptions({3, c10::nullopt, 5})c                   C   s   t dddddS r  r  r&   r&   r&   r'   r:     r;   c                   C   s   t dddddS )NrI   rJ   r  r  r  r&   r&   r&   r'   r:     r;   Zsingle_nonatomicc                   C   s   t dddddS )NrI   rJ   rz   r.   r,   r  r&   r&   r&   r'   r:     r;   Ztuple_nonatomicZAdaptiveAvgPool1dz&torch::nn::AdaptiveAvgPool1dOptions(3)c                   C   s   t dddS r  r   r&   r&   r&   r'   r:     r;   c                   C   s   t ddS r  r   r&   r&   r&   r'   r:     r;   z&torch::nn::AdaptiveAvgPool1dOptions(1)c                   C   s   t dddS r  r   r&   r&   r&   r'   r:     r;   Z
one_outputZAdaptiveAvgPool2dz&torch::nn::AdaptiveAvgPool2dOptions(3)c                   C   s   t ddddS r  r   r&   r&   r&   r'   r:     r;   c                   C   s   t dddS r  r   r&   r&   r&   r'   r:   !  r;   z&torch::nn::AdaptiveAvgPool2dOptions(1)c                   C   s   t ddddS r  r   r&   r&   r&   r'   r:   )  r;   Zsingle_1x1outputz+torch::nn::AdaptiveAvgPool2dOptions({3, 4})c                   C   s   t ddddS r  r   r&   r&   r&   r'   r:   0  r;   z6torch::nn::AdaptiveAvgPool2dOptions({3, c10::nullopt})c                   C   s   t ddddS r  r   r&   r&   r&   r'   r:   7  r;   ZAdaptiveAvgPool3dz&torch::nn::AdaptiveAvgPool3dOptions(3)c                   C   s   t dddddS NrI   rJ   rK   rm  r   r&   r&   r&   r'   r:   >  r;   c                   C   s   t ddddS )NrJ   rK   rI   rm  r   r&   r&   r&   r'   r:   E  r;   z.torch::nn::AdaptiveAvgPool3dOptions({3, 4, 5})c                   C   s   t dddddS r
  r   r&   r&   r&   r'   r:   M  r;   ))Nr.   rK   z9torch::nn::AdaptiveAvgPool3dOptions({c10::nullopt, 4, 5})c                   C   s   t dddddS r
  r   r&   r&   r&   r'   r:   T  r;   ))rJ   rI   rI   z.torch::nn::AdaptiveAvgPool3dOptions({3, 2, 2})c                   C   s   t dddddS )Nr/   rJ   rI   rz   r   r&   r&   r&   r'   r:   [  r;   Zlast_dimZSELUr&   Zscalar)r=   r@   rL   rD   CELUz"torch::nn::CELUOptions().alpha(2.)c                 G   s"   t | dk| dd|   d  S Nr   rF   rf   r/   rb   rd   r&   r&   r'   r:   o  r;   )r=   r@   r>   r?   rL   rA   c                 G   s"   t | dk| dd|   d  S r  rb   rd   r&   r&   r'   r:   w  r;   )r=   r@   r>   r?   rL   rA   rD   ZGLU)rK   rz   ztorch::nn::GLUOptions(1))rK   rz   rm  rQ  ZGELU)r   z,torch::nn::GELUOptions().approximate("none")c                 G   s    | d dt | td   S Nrf   rG   rF   r1   erfmathsqrtrd   r&   r&   r'   r:     r;   c                 G   s    | d dt | td   S r  r  rd   r&   r&   r'   r:     r;   ZSiLUc                 G   s   | t |  S rm   r1   ro   rd   r&   r&   r'   r:     r;   c                 G   s   | t |  S rm   r  rd   r&   r&   r'   r:     r;   ZMishc                 G   s   | t t|  S rm   r1   tanhr   Zsoftplusrd   r&   r&   r'   r:     r;   c                 G   s   | t t|  S rm   r  rd   r&   r&   r'   r:     r;   r0   rP  zF::SoftmaxFuncOptions(-1))rI   r  Zsoftmax_lastdimr/   )rQ  r   z/F::SoftmaxFuncOptions(1).dtype(torch::kFloat64)Zsoftmax_lastdim_dtype)r   r  r@   r   r   rN   zF::SoftmaxFuncOptions(1))rI   r  rI   rI   Zsoftmax_spatial_special)rI   rI   r.   r.   Zsoftmax_spatialZsoftmax_spatial_dtypezF::SoftmaxFuncOptions(0)Zsoftmax_functional_dim0)r   r  r@   r   rN   r   rJ   zF::SoftmaxFuncOptions(3)Zsoftmax_functional_dim3Zsoftmax_functional_scalarzF::LogSoftmaxFuncOptions(-1)Zlog_softmax_lastdimzF::LogSoftmaxFuncOptions(1)Zlog_softmax_spatial_specialZlog_softmax_spatialzF::LogSoftmaxFuncOptions(0)Zlog_softmax_dim0zF::LogSoftmaxFuncOptions(3)Zlog_softmax_dim3Zlog_softmax_scalarr	  )r0   ztorch::nn::SoftmaxOptions(-1))r.   rK   Unfoldc                   C   s   t ddddS )Nr  r  r   r   r   r  r&   r&   r&   r'   r:   +  r;   zPtorch::nn::UnfoldOptions({2, 2}).dilation({1, 1}).padding({0, 0}).stride({1, 1}))rI   r.   rJ   rJ   )r   r   r?   r@   r{   rN   Foldc                   C   s   t dddddS Nr  r  r  r  r   r  r&   r&   r&   r'   r:   3  r;   zVtorch::nn::FoldOptions({3, 3}, {2, 2}).dilation({1, 1}).padding({0, 0}).stride({1, 1}))rI   r  r.   ZFold_no_batch_dim_inputc                   C   s   t dddddS r  r  r&   r&   r&   r'   r:   ;  r;   )r  r.   )r   r   r?   r@   r{   r  rN   ZUnfold_int_inputc                   C   s   t ddddS )NrI   r/   r   r  r&   r&   r&   r'   r:   D  r;   z<torch::nn::UnfoldOptions(2).dilation(1).padding(0).stride(1)ZFold_int_inputc                   C   s   t dddddS NrJ   rI   r/   r   r  r&   r&   r&   r'   r:   L  r;   z=torch::nn::FoldOptions(3, 2).dilation(1).padding(0).stride(1)ZFold_no_batch_dim_int_inputc                   C   s   t dddddS r  r  r&   r&   r&   r'   r:   T  r;   )r   r   r?   r@   r  r{   rN   Zthreshold_value_scalarZwith_up_down_scalarc                 G   s   |  ddS rP   rQ   rS   r&   r&   r'   r:   {  r;   )r=   r@   rD   r  ztorch::nn::SoftmaxOptions(0)c                 G   s   t | t | ddS )Nr   Tr^   rS   r&   r&   r'   r:     r;   ztorch::nn::LogSoftmaxOptions(0)c                 G   s"   t | t | dd S )Nr   Fra   rS   r&   r&   r'   r:     r;   Zmultiparam_scalarZwith_negval_scalarc                 G   s   |    S rm   rn   rS   r&   r&   r'   r:     r;   c              	   G   sH   | d dk | |  | d dk | d d tdtd|     S ru   rv   rS   r&   r&   r'   r:     s   0Zbeta_threshold_scalarZlambda_scalarc                 C   s(   t j| ddt j| dd|d d   S r}   r   r6   r&   r&   r'   r:     r;   c                 G   s   |  dt|  S rU   r   rS   r&   r&   r'   r:     r;   ztorch::nn::SoftminOptions(0)ztorch::nn::SoftminOptions(-1))rJ   r.   r,   ZPadding12_1dcircularr  Zcircular)padr   z0F::PadFuncOptions({1, 2}).mode(torch::kCircular)c                   C   s   t jdt  ddddgS Nrz   ry  r/   rI   rJ   r1   ZarangeDoubleTensorZreshaper&   r&   r&   r'   r:     r;   c                 G   s
   t | dS )Nr  padding1d_circularrS   r&   r&   r'   r:     r;   )r   r   r  rk   rA   skip_doubler   ZPadding31_1dcircularrJ   r/   z0F::PadFuncOptions({3, 1}).mode(torch::kCircular)c                   C   s   t jdt  ddddgS r  r  r&   r&   r&   r'   r:     r;   c                 G   s
   t | dS )Nr$  r!  rS   r&   r&   r'   r:     r;   ZPadding33_1dcircularr  z0F::PadFuncOptions({3, 3}).mode(torch::kCircular)c                   C   s   t jdt  ddddgS r  r  r&   r&   r&   r'   r:     r;   c                 G   s
   t | dS )Nr  r!  rS   r&   r&   r'   r:     r;   ZPadding1221_2dcircularr/   rI   rI   r/   z6F::PadFuncOptions({1, 2, 2, 1}).mode(torch::kCircular)c                   C   s    t jdt  dddddgS r  r  r&   r&   r&   r'   r:     r;   c                 G   s
   t | dS )Nr%  padding2d_circularrS   r&   r&   r'   r:     r;   ZPadding2322_2dcircularrI   rJ   rI   rI   z6F::PadFuncOptions({2, 3, 2, 2}).mode(torch::kCircular)c                   C   s    t jdt  dddddgS r  r  r&   r&   r&   r'   r:     r;   c                 G   s
   t | dS )Nr(  r&  rS   r&   r&   r'   r:     r;   ZPadding3331_2dcircularrJ   rJ   rJ   r/   z6F::PadFuncOptions({3, 3, 3, 1}).mode(torch::kCircular)c                   C   s    t jdt  dddddgS )Nr  r  r/   rJ   r  r&   r&   r&   r'   r:     r;   c                 G   s
   t | dS )Nr)  r&  rS   r&   r&   r'   r:     r;   ZPadding122112_3dcircularr/   rI   rI   r/   r/   rI   z<F::PadFuncOptions({1, 2, 2, 1, 1, 2}).mode(torch::kCircular)c                   C   s"   t jdt  ddddddgS Nr  r  r/   rI   rJ   r  r&   r&   r&   r'   r:      r;   c                 G   s
   t | dS )Nr*  padding3d_circularrS   r&   r&   r'   r:   !  r;   ZPadding322112_3dcircularrJ   rI   rI   r/   r/   rI   z<F::PadFuncOptions({3, 2, 2, 1, 1, 2}).mode(torch::kCircular)c                   C   s"   t jdt  ddddddgS r+  r  r&   r&   r&   r'   r:   )  r;   c                 G   s
   t | dS )Nr.  r,  rS   r&   r&   r'   r:   *  r;   ZPadding332122_3dcircularrJ   rJ   rI   r/   rI   rI   z<F::PadFuncOptions({3, 3, 2, 1, 2, 2}).mode(torch::kCircular)c                   C   s"   t jdt  ddddddgS r+  r  r&   r&   r&   r'   r:   2  r;   c                 G   s
   t | dS )Nr/  r,  rS   r&   r&   r'   r:   3  r;   ZPairwiseDistancec                   C   s   t ddt ddfS Nr,   r-   ri   r&   r&   r&   r'   r:   9  r;   )r=   rk   c                   C   s   t ddt ddfS )Nr,   r/   r-   ri   r&   r&   r&   r'   r:   =  r;   Zbroadcast_lhs)r=   rk   rD   c                   C   s   t ddt ddfS )Nr,   r-   r/   ri   r&   r&   r&   r'   r:   B  r;   Zbroadcast_rhs)r  r   TzDtorch::nn::PairwiseDistanceOptions().p(1.5).eps(1e-05).keepdim(true)c                   C   s   t ddt ddfS r0  ri   r&   r&   r&   r'   r:   I  r;   Zwith_non_default_argsc                   C   s   t dt dfS )Nr-   ri   r&   r&   r&   r'   r:   N  r;   )r=   rk   rA   rD   ZTransformerEncoderLayer)r.   rI   r  rg   ztorch::nn::TransformerEncoderLayerOptions(4, 2)
                                .dim_feedforward(16)
                                .dropout(0.0)Zrelu_activationrO   )r=   r>   r?   r@   rD   rB   rC   r|   r.   r-   rg   ztorch::nn::TransformerEncoderLayerOptions(4, 2)
                                .dim_feedforward(8)
                                .dropout(0.0)
                                .activation(torch::kGELU)Zgelu_activation)r=   r>   r?   r@   r{   rD   rB   rC   ZTransformerDecoderLayer)r.   rI   r-   rg   ztorch::nn::TransformerDecoderLayerOptions(4, 2)
                                .dim_feedforward(8)
                                .dropout(0.0)c                   C   s   t dddt dddfS NrJ   r.   rI   r   r&   r&   r&   r'   r:   t  r;   )r=   r>   r?   rk   r{   rD   rB   rC   ztorch::nn::TransformerDecoderLayerOptions(4, 2)
                                .dim_feedforward(8)
                                .dropout(0.0)
                                .activation(torch::kGELU)c                   C   s   t dddt dddfS r1  r   r&   r&   r&   r'   r:     r;   Z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                   C   s&   t dddt dddt ddfS r1  r   r&   r&   r&   r'   r:     r;   Zmultilayer_coderg{Gz?)rJ   rK   ztorch::nn::LinearOptions(3, 5)c                   C   s
   t dS r  r   r&   r&   r&   r'   r:     r;   c                 C   s*   t | dd|d  d|d  S )Nr/   r0   r   )r1   r2   r4   r3   r6   r&   r&   r'   r:     r;   )r=   r>   r?   rk   rA   rD   rB   rC   z5torch::nn::FlattenOptions().start_dim(-3).end_dim(-1))r0   )r=   r?   r>   r@   rA   rD   Z	Unflattenz'torch::nn::UnflattenOptions(-2, {2, 2})r  ZreflectZ	replicater:  ztorch::kReflectztorch::kCircularztorch::kReplicateztorch::kZeros{z, }r  ro  c                 c   s   | ]}|d  V  qdS r/   Nr&   r  r8   r&   r&   r'   	<genexpr>  s     r7  zConv{}da`  torch::nn::Conv{}dOptions(2, 3, 3)
                                        .stride(2)
                                        .padding({})
                                        .dilation(1)
                                        .groups(1)
                                        .bias(true)
                                        .padding_mode({})z{}_stride2_pad2)	r=   r>   r?   r@   rr  r  rD   rB   rC   Hardsigmoid	Hardswishr>   )r{   	check_jitrN   )r  rE   r8  r9  rM   !non_linear_activations_extra_info)r=   r@   rA   rD   rt  c                 C   sZ   ||  |   }|dkr | S |dkr0| S |dkrV| dkrV| |d S |S Nr  r\   Z	batchmeanr   )rp   r  r\   rQ  r   r  r   r   r%   r&   r&   r'   kldivloss_reference  s    r>  c                 C   s\   t |||   }|dkr"| S |dkr2| S |dkrX| dkrX| |d S |S r<  )r1   rZ   r  r\   rQ  r   r=  r&   r&   r'   kldivloss_log_target_reference  s    r?  rt   c                 C   s   |   dkst| d}| d}|f|  dd   }t|| }|d krbt|| }d}	tdd |D  D ]V}
||
 }||krdn
||  }t	|
}|
d| | t|  | ||
< |	|7 }	qx|dkr| |	 S |d	kr| S |S )
NrJ   r   r/   rI   c                 S   s   g | ]}t |qS r&   )range)r  r   r&   r&   r'   r    s     z'nlllossNd_reference.<locals>.<listcomp>rg   r  r\   )rQ  r"   r   r1   r:  rw   onesr   itemr  insertr  r\   )r  r   r)   r  r   NCZout_sizeoutputZtotal_weighttupZt_nxr  Zinput_indexr&   r&   r'   nlllossNd_reference  s(    


rH  c                 C   s   |   dkstt| d} | d}|d kr>t|| }|jd|fdd | jdd  D  }|dkr|dksxt|d|  ||  }| | | j	dd }|dkr|
 S |d	kr|	 S |S )
NrI   r/   c                 s   s   | ]
}d V  qdS r5  r&   r  r9   r&   r&   r'   r7  .  s     z;cross_entropy_loss_prob_target_reference.<locals>.<genexpr>rg   rG   rP  r  r\   )rQ  r"   r1   log_softmaxr   rA  rw   r4   shaper\   r  )r  r   r)   r   label_smoothingrE  rF  r&   r&   r'   (cross_entropy_loss_prob_target_reference&  s    
&rM  c                 C   s4  t | d}tj|||||d}|dkr,|S d|  k r@dksFn tt | d} | d}|d k	r| |jd|fdd | jdd  D   } t | d }	||k}
|		|
d |dkr|d k	rt |	|
d	||
    }nt |	|
 }n|d
krt |	}n|	}d| | |||   S )Nr/   r  rg   rG   c                 s   s   | ]
}d V  qdS r5  r&   rI  r&   r&   r'   r7  N  s     z>cross_entropy_loss_indices_target_reference.<locals>.<genexpr>rI   r  r   r\   )r1   rJ  r   r   r"   r   r4   rK  r\   Zmasked_fill_ZgatherZmasked_selectZlogical_notrV   r  )r  r   r)   r  r   rL  Zlog_softmax_inputZnlllossrE  Zsmooth_lossZignore_maskretr&   r&   r'   +cross_entropy_loss_indices_target_reference<  s4    
*
*
rO  c                 C   s6   | j |j krt| ||||dS t| |||||dS d S )N)r)   r   rL  )r)   r   r  rL  )rK  rM  rO  )r  r   r)   r  r   rL  r&   r&   r'   cross_entropy_loss_referenced  s         rP  c           	         sj   dd  fddt | |D }t | \}}| |}|dkrRt|t| S |dkrbt|S |S d S )Nc                 S   s6   ||krdS |d krdn|| }| |  | }||fS )Nr  r/   r&   )r  r   r)   r  r  r%   r&   r&   r'   nll_loss_helperw  s
    z*nllloss_reference.<locals>.nll_loss_helperc                    s   g | ]\}}|| qS r&   r&   )r  r7   r3   r  rQ  r)   r&   r'   r  ~  s   z%nllloss_reference.<locals>.<listcomp>r  r\   )zipZ
new_tensorr\   )	r  r   r)   r  r   Zlosses_and_weightslossesr*   Zlosses_tensorr&   rR  r'   nllloss_referencet  s    
rU  rG   c                 C   s~   | |   }||k|}||k |}|dkr6|}n$||d|   |d |d  |  }|dkrj| S |dkrz| S |S )Nr   rf   rI   r  r\   )r   rw   r  r\   )r  r   r   rs   abs_diffZge_beta_maskZlt_beta_maskrF  r&   r&   r'   smoothl1loss_reference  s    $rW  c                 C   sd   | |   }||k}||k }|| |d|   |d |d   }|dkrP| S |dkr`| S |S )Nrf   rI   r  r\   )r   r  r\   )r  r   r   r0  rV  Zge_delta_maskZlt_delta_maskrF  r&   r&   r'   huberloss_reference  s    $rX  c                 C   sp   g }|D ]}|dk r q$| | qd}|D ]>}tdt| D ]*}||kr>|tdd| |  | |  7 }q>q,|S )Nr   r/   )appendr@  lenr   )r  r   targetsZtarget_indexr\   r7   r&   r&   r'   _multilabelmarginloss_reference  s    "r\  c                 C   s   |   }|   dk rp|  dk s$t|   dkr:| dn| dd} |  dkr`|dn|dd}| d}| d}| | }td|D ]}t| | || ||< q|dkr| | S |dkr|	 | S |dk r|
 | S || S d S NrI   r/   r   r  r\   )rQ  r"   r  r   newzero_r@  r\  r  r\   r  )r  r   r   Z	input_dimnrQ  rF  r7   r&   r&   r'   multilabelmarginloss_reference  s"    &&

ra  c                 C   sL   ||  j dd| }t|dk| |}|dkr8| S |dkrH| S |S )Nr   r~   r/   r  r\   )rR   rw   r1   rc   r  r\   )r  r   rI  r   Zmargin_clamprF  r&   r&   r'   hingeembeddingloss_reference  s    rb  c                 C   s:   d|  |     }|dkr&| S |dkr6| S |S Nr/   r  r\   )rZ   rp   r  r\   )r  r   r   rF  r&   r&   r'   softmarginloss_reference  s    rd  c                 C   sj   |d kr|  t| d}d}tdt| D ]6}||kr.|td|| || |  | |  |  7 }q.|S )Nr/   r   )r^  rZ  Zfill_r@  r   )r  Z
target_idxr8   rI  r)   rF  r7   r&   r&   r'   _multimarginloss_reference  s    ,re  c                 C   s   |   dk r2|   dkr"| dn| dd} |  }|  dkrP|d}| d}| d}| |}	td|D ] }
t| |
 ||
 ||||	|
< qx|dkr|	 | S |dkr|	 | S |dkr|	d| S |	| S r]  )	rQ  r  r   r^  r@  re  r  r\   r  )r  r   r8   rI  r)   r   Z
target_dimr`  rQ  rF  re   r&   r&   r'   multimarginloss_reference  s"    &



rf  c                 C   sZ   dd }t |dkd|| | || || jdd}|dkrF| S |dkrV| S |S )Nc                 S   sv   |  | d}td| dD ]P}| | ||   | | | |   d || ||   d  d  ||< q |S )Nr   g-q=rf   )r^  r   r@  r\   )abcosr7   r&   r&   r'   _cos  s    Nz+cosineembeddingloss_reference.<locals>._cosr/   r   r~   r  r\   )r1   rc   rR   r  r\   )input1input2r   rI  r   rj  rF  r&   r&   r'   cosineembeddingloss_reference  s    .rm  ư>c                 C   sz   t | |||}t | |||}	|r@t ||||}
t |	|
}	t j|| |	 dd}|dkrf| S |dkrv| S |S )Nrg   r~   r  r\   )r1   Zpairwise_distancer   rR   r  r\   )anchorZpositivenegativerI  r8   epsZswapr   Zd_pZd_nZd_srF  r&   r&   r'   tripletmarginloss_reference  s    rr  c                 C   s>   | | |  | j dd}|dkr*| S |dkr:| S |S )Nr   r~   r  r\   )rR   r  r\   )rk  rl  r   rI  r   rF  r&   r&   r'   marginrankingloss_reference'  s    rs  c                 C   s  t j|t jd}t j|t jd}| j}|  } | }|d}g }t| dD ]v}	||	  }
||	  }||	  }|	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 ]f}| }|dd   |d d 7  < |dd   t ||d d |d7  < |||f | }qB||dd    d    qRt |d}|dkr||j|j|jd  S |d	kr| S ||}|S )
Nr   r   r/   rI   r  r0   r  r   devicer\   )r1   Z	as_tensorr   r   r   Zcumsumr@  r   rB  Znew_fullrQ  rZ   Z	new_zerosclonerc   rY  r\   rp   cattoru  r  )Z	log_probsr[  Zinput_lengthsZtarget_lengthsblankr   dtZcum_target_lengthsrT  r7   Zinput_lengthZtarget_lengthZcum_target_lengthZtargets_primeZprobsalphaZ
mask_thirdr3   Z
alpha_nextrF  r&   r&   r'   ctcloss_reference1  sB    
,"


r|  c              	   C   sJ   t j| dddd|d  df | | ddddd|d f gddS )z input:
            [[[0., 1., 2.],
              [3., 4., 5.]]]
          pad: (1, 2)
          output:
            [[[2., 0., 1., 2., 0., 1.],
              [5., 3., 4., 5., 3., 4.]]]
    Nr   r/   rI   rP  r1   rw  r  r  r&   r&   r'   r"  V  s
    	$r"  c              
   C   s   t j| dddd|d  df | | ddddd|d f gdd} t j| dddddd|d  df | | ddddddd|d f gddS )a-  input:
             [[[[0., 1., 2],
                [3., 4., 5.]]]]
            pad: (1, 2, 2, 1)
    output:
        [[[[2., 0., 1., 2., 0., 1.],
           [5., 3., 4., 5., 3., 4.],
           [2., 0., 1., 2., 0., 1.],
           [5., 3., 4., 5., 3., 4.],
           [2., 0., 1., 2., 0., 1.]]]]
    NrI   r   rJ   rP  r/   r}  r~  r&   r&   r'   r'  c  s    Jr'  c                 C   s  t j| dddd|d  df | | ddddd|d f gdd} t j| dddddd|d  df | | ddddddd|d f gdd} t j| dddddddd|d  df | | ddddddddd|d f gddS )	aZ  input:
            [[[[[ 0.,  1.,  2.],
                [ 3.,  4.,  5.]],
               [[ 6.,  7.,  8.],
                [ 9., 10., 11.]]]]]
        pad: (1, 2, 2, 1, 1, 2)
        output: [[[[[ 8.,  6.,  7.,  8.,  6.,  7.],
               [11.,  9., 10., 11.,  9., 10.],
               [ 8.,  6.,  7.,  8.,  6.,  7.],
               [11.,  9., 10., 11.,  9., 10.],
               [ 8.,  6.,  7.,  8.,  6.,  7.]],

              [[ 2.,  0.,  1.,  2.,  0.,  1.],
               [ 5.,  3.,  4.,  5.,  3.,  4.],
               [ 2.,  0.,  1.,  2.,  0.,  1.],
               [ 5.,  3.,  4.,  5.,  3.,  4.],
               [ 2.,  0.,  1.,  2.,  0.,  1.]],

              [[ 8.,  6.,  7.,  8.,  6.,  7.],
               [11.,  9., 10., 11.,  9., 10.],
               [ 8.,  6.,  7.,  8.,  6.,  7.],
               [11.,  9., 10., 11.,  9., 10.],
               [ 8.,  6.,  7.,  8.,  6.,  7.]],

              [[ 2.,  0.,  1.,  2.,  0.,  1.],
               [ 5.,  3.,  4.,  5.,  3.,  4.],
               [ 2.,  0.,  1.,  2.,  0.,  1.],
               [ 5.,  3.,  4.,  5.,  3.,  4.],
               [ 2.,  0.,  1.,  2.,  0.,  1.]],

              [[ 8.,  6.,  7.,  8.,  6.,  7.],
               [11.,  9., 10., 11.,  9., 10.],
               [ 8.,  6.,  7.,  8.,  6.,  7.],
               [11.,  9., 10., 11.,  9., 10.],
               [ 8.,  6.,  7.,  8.,  6.,  7.]]]]]
    Nr.   r   rK   rI   rP  rJ   r/   r}  r~  r&   r&   r'   r-  s  s    %JVr-  )r   r   r   r  r)  r1  r6  rA  rL  rY  CosineEmbeddingLossTripletMarginLossMarginRankingLossCTCLossCrossEntropyLossr	  r   ZL1Lossc                   C   s   t jdddS )Nrl   Tr  ri   r&   r&   r&   r'   r:     r;   c                 C   s$   d|    tdd t| |D  S )NrG   c                 s   s"   | ]\}}||    V  qd S rm   )r   r\   )r  rg  rh  r&   r&   r'   r7    s     z<lambda>.<locals>.<genexpr>)numelr\   rS  r7   r3   r9   r&   r&   r'   r:     s   
)r=   r@   	target_fnrA   check_complexr   c                   C   s   t dd S r   r   r&   r&   r&   r'   r:     r;   c                   C   s   t d d  S r   r1   r   r  r   r  r   r&   r&   r&   r'   r:     r;   c                 C   s   t | |t|dS Nr   )rU  r(   r7   r3   r$   r&   r&   r'   r:     s    )r=   rk   r  rA   r9  r  )NNrI   z6torch::nn::NLLLossOptions().weight({}).ignore_index(2)c                   C   s   t dd S r   r   r&   r&   r&   r'   r:     r;   c                   C   s   t d d  S r   r  r&   r&   r&   r'   r:     r;   c                 C   s   t | |ddS )NrI   r  )rU  r  r&   r&   r'   r:     r;   r  )r=   r>   r?   rk   r  rA   rD   r  c                   C   s   t dfS rh   r   r&   r&   r&   r'   r:     r;   z3torch::nn::NLLLossOptions().weight(torch::rand(10))c                   C   s   t ddd S r  r  r&   r&   r&   r'   r:     r;   c                   C   s   t d d  S r   r  r&   r&   r&   r'   r:     r;   c                 C   s   t | |t|dS )Nr  rU  r+   r  r&   r&   r'   r:     s    r*   )r=   constructor_args_fnr?   rk   r  rA   rD   r  c                   C   s   t dd dfS )Nr,   rI   r   r&   r&   r&   r'   r:     r;   zCtorch::nn::NLLLossOptions().weight(torch::rand(10)).ignore_index(2)c                   C   s   t ddd S r  r  r&   r&   r&   r'   r:     r;   c                   C   s   t d d  S r   r  r&   r&   r&   r'   r:     r;   c                 C   s   t | |t|ddS )NrI   r)   r  r  r  r&   r&   r'   r:     s    Zweights_ignore_indexc                   C   s   t dd dfS )Nr,   r0   r   r&   r&   r&   r'   r:     r;   zDtorch::nn::NLLLossOptions().weight(torch::rand(10)).ignore_index(-1)c                   C   s   t ddd S r  r  r&   r&   r&   r'   r:     r;   c                   C   s    t d d  d S )Nr      r/   r  r&   r&   r&   r'   r:     r;   c                 C   s   t | |t|ddS )Nr0   r  r  r  r&   r&   r'   r:     s    Zweights_ignore_index_negr   c                   C   s   t dd S rh   r   r&   r&   r&   r'   r:     r;   c                   C   s   t ddS rh   r   r&   r&   r&   r'   r:     r;   c                 C   s   t | |t|S rm   r>  r(   r  r&   r&   r'   r:     s    )r=   rk   r  rA   r9  )r   z.torch::nn::KLDivLossOptions().log_target(true)c                   C   s   t dd S rh   r   r&   r&   r&   r'   r:     r;   c                   C   s   t dd S rh   r   r&   r&   r&   r'   r:     r;   c                 C   s   t | |t|S rm   r?  r(   r  r&   r&   r'   r:     s    r   )r=   r   r?   rk   r  rA   r9  rD   ZMSELossc                   C   s   t jdddS )NrH   Tr  ri   r&   r&   r&   r'   r:     r;   c                 C   s.   | |   d t|dkr(|  nd S NrI   r  r/   r   r   r\   r(   r  r  r&   r&   r'   r:     s   

)r=   r@   r  rA   r9  BCELossc                   C   s   t ddddS Nr   r,   r  r`  r   r&   r&   r&   r'   r:   
  r;   c                   C   s   t ddd S Nr   r,   r   r1   rj   r   r   r&   r&   r&   r'   r:     r;   c                 C   s:   ||    d| d|        t|r4|  nd S rU   )rp   r\   r(   r  r  r&   r&   r'   r:     s   $)r=   rk   r  rA   r  c                   C   s   t dfS rh   r   r&   r&   r&   r'   r:     r;   z3torch::nn::BCELossOptions().weight(torch::rand(10))c                   C   s   t ddddS r  r   r&   r&   r&   r'   r:     r;   c                   C   s   t ddd S r  r  r&   r&   r&   r'   r:     r;   c                 C   sB   ||    d| d|      t|   t|r<|  nd S rU   rp   r+   r\   r(   r  r  r&   r&   r'   r:     s   ,r  )r   r,   c                   C   s   t d d  S r   r  r&   r&   r&   r'   r:     r;   )r=   r@   r  c                   C   s   t dfS rh   r   r&   r&   r&   r'   r:   "  r;   z<torch::nn::CrossEntropyLossOptions().weight(torch::rand(10))c                   C   s   t d d  S r   r  r&   r&   r&   r'   r:   %  r;   )r=   r  r?   r@   r  rD   rA  c                   C   s    t dd ddS Nr,   r   rI   r/   r1   rj   r   r   rD  rE  r&   r&   r&   r'   r:   +  r;   c                 C   s   t | |t|dS r  rb  r(   r  r&   r&   r'   r:   ,  s    z2torch::nn::HingeEmbeddingLossOptions().margin(0.5)c                   C   s    t dd ddS r  r  r&   r&   r&   r'   r:   5  r;   c                 C   s   t | |dt|dS Nrf   rH  r  r  r&   r&   r'   r:   6  s    rI  )r=   r>   r?   r@   r  rA   rD   r9  r6  c                   C   s   t dd  S rh   r1   r   r   r  r   r&   r&   r&   r'   r:   >  r;   c                 C   s   t | |t|dS r  ra  r(   r  r&   r&   r'   r:   ?  s    )r=   r@   r  rA   rD   r9  r{   r  rK   r,   c                   C   s   t ddd  S r=  r  r&   r&   r&   r'   r:   I  r;   c                 C   s   t | |t|dS r  r  r  r&   r&   r'   r:   J  s    )r=   r@   r  rA   r9  r{   r  ZMultiLabelSoftMarginLossc                   C   s   t ddd S NrK   r,   rI   r1   r   r   r  r&   r&   r&   r'   r:   S  r;   c                 C   s4   ||     d| |         |   S rU   )ro   rp   r\   r  r  r&   r&   r'   r:   T  r;   )r=   r@   r  rA   r{   rY  c                   C   s   t dd  S NrK   r-   r  r&   r&   r&   r'   r:   Z  r;   c                 C   s   t | |t|dS r  rf  r(   r  r&   r&   r'   r:   [  s    )r=   r@   r  rA   r9  r{   c                   C   s   t dd  S )Nr/   r-   r  r&   r&   r&   r'   r:   c  r;   c                 C   s   t | |t|dS r  r  r  r&   r&   r'   r:   d  s    )r=   r@   r  rA   rD   r9  r{   z(torch::nn::MultiMarginLossOptions().p(2)c                   C   s   t ddddS r_  r   r&   r&   r&   r'   r:   n  r;   c                   C   s   t dd  S r  r  r&   r&   r&   r'   r:   o  r;   c                 C   s   t | |dt|dS )NrI   r^  r  r  r&   r&   r'   r:   p  s    r8   )	r=   r>   r?   rk   r  rA   rD   r9  r{   )r/   rf   z4torch::nn::MultiMarginLossOptions().p(1).margin(0.5))r/   Nrf   c                   C   s   t dd  S r  r  r&   r&   r&   r'   r:   |  r;   c                 C   s   t | |dt|dS r  r  r  r&   r&   r'   r:   }  s    )
r=   r>   r?   Zlegacy_constructor_argsr@   r  rA   rD   r9  r{   r,   zKtorch::nn::MultiMarginLossOptions().p(1).margin(1.).weight(torch::rand(10))c                   C   s   t dd  S r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t | |t|t|dS )Nr   )rf  r+   r(   r  r&   r&   r'   r:     s    r)  c                   C   s   t jdddS Nr  Tr  ri   r&   r&   r&   r'   r:     r;   c                 C   s   t | |t||dS Nr,  rW  r(   r7   r3   r$   rh  r&   r&   r'   r:     s    )r=   r@   r  r9  rA   r1  c                   C   s   t jdddS r  ri   r&   r&   r&   r'   r:     r;   c                 C   s   t | |t|dS r  )rX  r(   r  r&   r&   r'   r:     s    )r=   r@   r  r9  r  r  rA   rL  )rK   rK   c                   C   s   t dd S rK  r1   rj   signr&   r&   r&   r'   r:     r;   c                 C   s   t | |t|dS r  )rd  r(   r  r&   r&   r'   r:     s    r  c                   C   s   t ddt ddfS r   r   r&   r&   r&   r'   r:     r;   c                   C   s   t d S Nr   r  r&   r&   r&   r'   r:     r;   c                 C   s   t | d | d |t|dS Nr   r/   r   rm  r(   r  r&   r&   r'   r:     s    )r  z3torch::nn::CosineEmbeddingLossOptions().margin(0.7)c                   C   s   t ddt ddfS r   r   r&   r&   r&   r'   r:     r;   c                   C   s   t d S r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t | d | d |dt|dS )Nr   r/   r  rH  r  r  r&   r&   r'   r:     s    )r=   r>   r?   rk   r  rA   rD   r9  r  c                   C   s    t ddt ddfS N2   r,   r1   rj   r   r&   r&   r&   r'   r:     r;   c                   C   s   t d S Nr  r  r&   r&   r&   r'   r:     r;   c                 C   s   t | d | d |t|dS r  rs  r(   r  r&   r&   r'   r:     s    z1torch::nn::MarginRankingLossOptions().margin(0.5)c                   C   s    t ddt ddfS r  r  r&   r&   r&   r'   r:     r;   c                   C   s   t d S r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t | d | d |dt|dS )Nr   r/   rf   rH  r  r  r&   r&   r'   r:     s    BCEWithLogitsLossc                   C   s   t ddddS r  r   r&   r&   r&   r'   r:     r;   c                   C   s   t ddd S r  r  r&   r&   r&   r'   r:     r;   )r=   rk   r  z=torch::nn::BCEWithLogitsLossOptions().weight(torch::rand(10))c                   C   s   t ddddS r  r   r&   r&   r&   r'   r:     r;   c                   C   s   t ddd S r  r  r&   r&   r&   r'   r:     r;   )r=   r>   r?   rk   r  rD   z=torch::nn::BCEWithLogitsLossOptions().weight(torch::rand({}))c                   C   s   t dddS Nr&   r  r`  r   r&   r&   r&   r'   r:     r;   c                   C   s   t dd S Nr&   r   r  r&   r&   r&   r'   r:     r;   Zscalar_weights)rI   rJ   rK   rK   c                   C   s   t dddd  S NrI   rK   rJ   r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|dS Nr  r   r   r(   r  r&   r&   r'   r:     s    )r=   r@   r  rA   r9  rD   r  c                   C   s   t dfS r  r   r&   r&   r&   r'   r:     r;   z2torch::nn::NLLLossOptions().weight(torch::rand(3))c                 C   s   t d | |t|dS )Nr  r  r   r+   r  r&   r&   r'   r:     s    Z
2d_weights)r=   r  r?   r@   r   rA   rD   r  )NNr/   z6torch::nn::NLLLossOptions().weight({}).ignore_index(1)c                   C   s   t dddd  S r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |ddS )Nr  r/   r  r   r  r&   r&   r'   r:      s    Z2d_ignore_index)r=   r>   r?   r@   r  rA   rD   r  )rI   rJ   rK   rK   rI   rI   c                   C   s    t dddddd  S r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|dS r  r  r  r&   r&   r'   r:   	  s    Z
higher_dim)rI   rJ   rK   c                   C   s   t ddd  S r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|dS r  r  r  r&   r&   r'   r:     s    Zdim_is_3c                   C   s   t dddd  S r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|dS Nr  r   r  r  r&   r&   r'   r:     s    c                   C   s   t dfS r  r   r&   r&   r&   r'   r:   %  r;   z;torch::nn::CrossEntropyLossOptions().weight(torch::rand(3))c                 C   s   t d | |t|dS )Nr  r  r  r  r&   r&   r'   r:   )  s    z?torch::nn::CrossEntropyLossOptions().weight({}).ignore_index(1)c                   C   s   t dddd  S r  r  r&   r&   r&   r'   r:   3  r;   c                 C   s   t d | |ddS )Nr  r/   r  r  r  r&   r&   r'   r:   4  s    c                   C   s    t dddddd  S r  r  r&   r&   r&   r'   r:   <  r;   c                 C   s   t d | |t|dS r  r  r  r&   r&   r'   r:   =  s    c                   C   s   t ddd  S r  r  r&   r&   r&   r'   r:   F  r;   c                 C   s   t d | |t|dS r  r  r  r&   r&   r'   r:   G  s    )rK   rJ   c                   C   s   t ddjddS NrK   rJ   r/   rP  r1   r   softmaxr&   r&   r&   r'   r:   P  r;   c                 C   s   t d | |t|dS r  r  r  r&   r&   r'   r:   Q  s    Z2d_prob_target)rK   rJ   r.   c                   C   s   t dddjddS NrK   rJ   r.   r/   rP  r  r&   r&   r&   r'   r:   Z  r;   c                 C   s   t d | |t|dS r  r  r  r&   r&   r'   r:   [  s    Z3d_prob_target)rK   rJ   r.   rI   c                   C   s   t ddddjddS NrK   rJ   r.   rI   r/   rP  r  r&   r&   r&   r'   r:   d  r;   c                 C   s   t d | |t|dS r  r  r  r&   r&   r'   r:   e  s    Z4d_prob_targetZ7CrossEntropyLoss_2d_prob_target_smoothing_sum_reductionc                  O   s   t jdddS Nr\   333333?r   rL  r   r  )r   r   r&   r&   r'   r:   m  s   zQtorch::nn::CrossEntropyLossOptions().label_smoothing(0.15).reduction(torch::kSum)c                   C   s   t ddjddS r  r  r&   r&   r&   r'   r:   q  r;   c                 C   s   t d | |t|ddS Nr  r  r  r  r  r&   r&   r'   r:   r  s    )r   r   r?   r@   r  rA   r  Z)CrossEntropyLoss_2d_prob_target_smoothingc                  G   s   t jddS Nr  )rL  r  r   r&   r&   r'   r:   x  r;   z:torch::nn::CrossEntropyLossOptions().label_smoothing(0.15)c                   C   s   t ddjddS r  r  r&   r&   r&   r'   r:   {  r;   c                 C   s   t d | |t|ddS r  r  r  r&   r&   r'   r:   |  s    Z0CrossEntropyLoss_2d_prob_target_smoothing_weightc                   C   s   t d fS r  r1   r   r   r&   r&   r&   r'   r:     r;   c                 C   s   t j| ddS r  r  r  r&   r&   r'   r:     r;   zWtorch::nn::CrossEntropyLossOptions().label_smoothing(0.15).weight(torch::rand(3).abs())c                   C   s   t ddjddS r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|t|ddS Nr  r  )r   r)   rL  r   r(   r+   r  r&   r&   r'   r:     s    )r   r  r   r?   r@   r  rA   r  Z7CrossEntropyLoss_3d_prob_target_smoothing_sum_reductionc                  G   s   t jdddS r  r  r  r&   r&   r'   r:     s   c                   C   s   t dddjddS r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|ddS r  r  r  r&   r&   r'   r:     s    Z)CrossEntropyLoss_3d_prob_target_smoothingc                  G   s   t jddS r  r  r  r&   r&   r'   r:     r;   c                   C   s   t dddjddS r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|ddS r  r  r  r&   r&   r'   r:     s    Z,CrossEntropyLoss_3d_indices_target_smoothingc                  G   s   t jddS r  r  r  r&   r&   r'   r:     r;   c                   C   s   t ddd  S r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|ddS r  r  r  r&   r&   r'   r:     s    Z9CrossEntropyLoss_3d_indices_target_smoothing_ignore_indexc                  G   s   t jdddS )Nr  r/   rL  r  r  r  r&   r&   r'   r:     r;   zJtorch::nn::CrossEntropyLossOptions().label_smoothing(0.15).ignore_index(1)c                   C   s   t ddd  S r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|dddS Nr  r  r/   r   rL  r  r  r  r&   r&   r'   r:     s    Z:CrossEntropyLoss_3d_indices_target_smoothing_sum_reductionc                  G   s   t jdddS r  r  r  r&   r&   r'   r:     r;   c                   C   s   t ddd  S r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|ddS r  r  r  r&   r&   r'   r:     s    ZGCrossEntropyLoss_3d_indices_target_smoothing_sum_reduction_ignore_indexc                  G   s   t jddddS )Nr\   r  r/   r  r  r  r&   r&   r'   r:     s   zatorch::nn::CrossEntropyLossOptions().label_smoothing(0.15).reduction(torch::kSum).ignore_index(1)c                   C   s   t ddd  S r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|dddS r  r  r  r&   r&   r'   r:     s    Z,CrossEntropyLoss_2d_indices_target_smoothingc                  G   s   t jddS r  r  r  r&   r&   r'   r:     r;   c                   C   s   t d d  S r   r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|ddS r  r  r  r&   r&   r'   r:     s    Z:CrossEntropyLoss_2d_indices_target_smoothing_sum_reductionc                  G   s   t jdddS r  r  r  r&   r&   r'   r:     r;   c                   C   s   t d d  S r   r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|ddS r  r  r  r&   r&   r'   r:     s    Z9CrossEntropyLoss_2d_indices_target_smoothing_ignore_indexc                  G   s   t jdddS )Nr  rJ   r  r  r  r&   r&   r'   r:     r;   zJtorch::nn::CrossEntropyLossOptions().label_smoothing(0.15).ignore_index(3)c                   C   s   t d d  S r   r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|dddS )Nr  r  rJ   r  r  r  r&   r&   r'   r:     s    Z3CrossEntropyLoss_2d_indices_target_smoothing_weightc                   C   s   t d fS rh   r  r&   r&   r&   r'   r:     r;   c                 C   s   t j| ddS r  r  r  r&   r&   r'   r:     r;   zXtorch::nn::CrossEntropyLossOptions().label_smoothing(0.15).weight(torch::rand(10).abs())c                   C   s   t d d  S r   r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|t|ddS r  r  r  r&   r&   r'   r:     s    c                   C   s   t dfS r  r   r&   r&   r&   r'   r:     r;   c                   C   s   t ddjddS r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|t|dS Nr  )r   r)   r  r  r&   r&   r'   r:     s    Z2d_prob_target_weights)	r=   r  r?   r@   r  rA   r9  rD   r  c                   C   s   t dfS r  r   r&   r&   r&   r'   r:      r;   c                   C   s   t dddjddS r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|t|dS r  r  r  r&   r&   r'   r:     s    Z3d_prob_target_weightsc                   C   s   t dfS r  r   r&   r&   r&   r'   r:     r;   c                   C   s   t ddddjddS r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t d | |t|t|dS r  r  r  r&   r&   r'   r:     s    Z4d_prob_target_weightsZPoissonNLLLossc                   C   s   t dddd  S NrI   rJ   r.   rK   r1   rj   Zfloor_abs_r&   r&   r&   r'   r:     r;   c                 C   s   |   ||   S rm   )rZ   r   r  r  r&   r&   r'   r:     r;   Zno_full_loss)r=   r@   r  rA   rD   )FFz?torch::nn::PoissonNLLLossOptions().log_input(false).full(false)c                   C   s   t dddd dS NrI   rJ   r.   rK   ry   r1   rj   r  Zadd_r&   r&   r&   r'   r:   !  r;   c                   C   s   t dddd  S r  r  r&   r&   r&   r'   r:   "  r;   c                 C   s   | | | d    S )N:0yE>)r   rp   r  r  r&   r&   r'   r:   #  r;   Zno_full_loss_no_log_input)r=   r>   r?   rk   r  rA   rD   )TTz=torch::nn::PoissonNLLLossOptions().log_input(true).full(true)c                   C   s   t dddd  S r  r  r&   r&   r&   r'   r:   +  r;   c                 C   sH   |   ||  || | ddt |    |dkd  S )Nrf   rF   r/   r   )rZ   r   rp   r	   masked_fillr  r  r&   r&   r'   r:   ,  s    Z	full_loss)r=   r>   r?   r@   r  rA   rD   )FTz>torch::nn::PoissonNLLLossOptions().log_input(false).full(true)c                   C   s   t dddd dS r  r  r&   r&   r&   r'   r:   4  r;   c                   C   s   t dddd  S r  r  r&   r&   r&   r'   r:   5  r;   c                 C   sL   | | | d   | | | ddt |    |dkd  S )Nr  rf   rF   r/   r   )r   rp   r	   r  r  r  r&   r&   r'   r:   6  s    FZfull_loss_no_log_inputc                   C   s   t jdddS Nr&   Tr  ri   r&   r&   r&   r'   r:   >  r;   c                 C   s   d|    | |    S )NrG   )r  r   r\   r  r&   r&   r'   r:   ?  r;   )r=   r@   r  rA   rD   r  c                   C   s   t d S r   r   r&   r&   r&   r'   r:   E  r;   c                   C   s
   t dS r   r   r&   r&   r&   r'   r:   F  r;   c                 C   s   t | |t|S rm   r  r  r&   r&   r'   r:   G  s    )r=   rk   r  rA   r9  rD   c                   C   s   t d S r   r   r&   r&   r&   r'   r:   P  r;   c                   C   s   t d S r   r   r&   r&   r&   r'   r:   Q  r;   c                 C   s   t | |t|S rm   r  r  r&   r&   r'   r:   R  s    Zscalar_log_targetc                   C   s   t jdddS r  ri   r&   r&   r&   r'   r:   Z  r;   c                 C   s.   | |   d t|dkr(|  nd S r  r  r  r&   r&   r'   r:   [  s   c                   C   s   t jddddt jdd S )NrK   D   @   r   r,   )r1   rA  floatr&   r&   r&   r'   r:   c  r;   c                   C   s   t jddddt jdS )NrK   r  r  r   )r1   r:  r  r&   r&   r&   r'   r:   d  r;   c                 C   s.   | |   d t|dkr(|  nd S r  r  r  r&   r&   r'   r:   e  s   prec)r=   rk   r  rA   check_forward_onlyrD   r  c                   C   s   t dfS r   r   r&   r&   r&   r'   r:   m  r;   z3torch::nn::BCELossOptions().weight(torch::rand({}))c                   C   s   t dddS r  r   r&   r&   r&   r'   r:   o  r;   c                   C   s   t dd S r  )r1   r   r   r   r&   r&   r&   r'   r:   p  r;   c                 C   sF   ||    d| d|      t|   t|dkr@|  nd S )Nr/   r  r  r  r&   r&   r'   r:   q  s   ,c                   C   s    t dd ddS )Nr&   r   rI   r/   r  r&   r&   r&   r'   r:   {  r;   Zscalar_margin)r=   r>   r?   r@   r  rD   r9  c                   C   s   t jdddS r  ri   r&   r&   r&   r'   r:     r;   c                 C   s   t | |t||dS r  r  r  r&   r&   r'   r:     s    )r=   r@   r  r9  rA   rD   zDtorch::nn::MultiLabelSoftMarginLossOptions().weight(torch::rand(10))c                   C   s   t ddS r=  ri   r&   r&   r&   r'   r:     r;   c                   C   s   t ddd S r  r  r&   r&   r&   r'   r:     r;   c                 C   sb   ||     d| |       t|   t|dkrF|  nt|dkr\| dnd S rc  )ro   rp   r+   r\   r(   r  r   r  r&   r&   r'   r:     s   2,r  )   r        rX   c                   C   s   t ddddS Nr  rJ   r   rI   r1   rj   rJ  r&   r&   r&   r'   r:     r;   c                   C   s   t jdddt jdS Nr   r  rJ   r  r   r1   randintr   r&   r&   r&   r'   r:     r;   c                 C   s   t | |||dt|dS Nr  ry  r   r|  r(   r7   r3   Ziltlr$   r&   r&   r'   r:     s    Zlengths_intlists)r=   r>   
extra_argsrk   r  rA   rD   r  r9  r{   r  rt  r:  z%torch::nn::CTCLossOptions().blank(14)c                   C   s   t ddddS r  r  r&   r&   r&   r'   r:     r;   c                   C   s   t jdddt jdS r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t | |||dt|dS r  r  r  r&   r&   r'   r:     s    Zlengths_tensors)r=   r>   r?   r  rk   r  rA   rD   r  r9  r{   r  Z2d_int_target_lengths_intlistsc                   C   s   t ddddS r  r  r&   r&   r&   r'   r:     r;   c                   C   s   t jdddt jdS Nr/   r   r  r   r1   r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t | |||dt|dS Nr   r  r  r  r&   r&   r'   r:     s    )r=   rD   r>   r  rk   r  rA   r  r9  r{   r  rt  r:  Z2d_int_target_lengths_tensorsz$torch::nn::CTCLossOptions().blank(0)c                   C   s   t ddddS r  r  r&   r&   r&   r'   r:     r;   c                   C   s   t jdddt jdS r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t | |||dt|dS r  r  r  r&   r&   r'   r:     s    )r=   rD   r>   r?   r  rk   r  rA   r  r9  r{   r  Z2d_lengths_tensorsc                   C   s   t ddddS r  r  r&   r&   r&   r'   r:     r;   c                   C   s   t jdddt jdS r  r  r&   r&   r&   r'   r:     r;   c                 C   s   t | |||dt|dS r  r  r  r&   r&   r'   r:     s    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   s&   t | ttfrdd | D S | dS )Nc                 S   s   g | ]}| d qS r  r  r  r&   r&   r'   r    s     zNsingle_batch_reference_criterion_fn.<locals>.unsqueeze_inp.<locals>.<listcomp>r   r  r  r&   r&   r'   r    s    z:single_batch_reference_criterion_fn.<locals>.unsqueeze_inpc                    s:   g }t | ttfr,| D ]}| | qn
||  |S rm   )r  r  r  extendrY  )xsr%   re   )rV   r&   r'   rV     s    
z4single_batch_reference_criterion_fn.<locals>.flattenc                    s   g | ]} |qS r&   r&   )r  r  )r  r&   r'   r    s     z7single_batch_reference_criterion_fn.<locals>.<listcomp>Nr   r   )r(   r  )r   Z	criterionZsingle_batch_input_argsrF  r   r&   )rV   r  r'   #single_batch_reference_criterion_fn  s    	
r  r   z{}_no_batch_dim_{})namec                 G   s   t t| tdS r  r    r   r   r  r   r&   r&   r'   r:     r;   )r   r   r@   Ztarget_sizerA   rt  ZKLDivLoss_no_batch_dim_c                   C   s   t jtdS r  )r   r   r   r&   r&   r&   r'   r:   *  r;   c                   C   s   t d S Nr   r   r&   r&   r&   r'   r:   +  r;   c                   C   s
   t dS r  r   r&   r&   r&   r'   r:   ,  r;   )r   r   rk   r  rA   rt  c                   C   s   t t dS Nr  )r1   ro   rj   r&   r&   r&   r'   r:   6  r;   c                   C   s
   t dS r  ri   r&   r&   r&   r'   r:   6  r;   c                   C   s
   t dS r  ri   r&   r&   r&   r'   r:   7  r;   c                   C   s
   t dS r  ri   r&   r&   r&   r'   r:   8  r;   c                   C   s   t dddgd S Nr0   r/   rJ   r1   tensorr&   r&   r&   r'   r:   8  r;   c                   C   s
   t dS )Nr.   ri   r&   r&   r&   r'   r:   9  r;   c                   C   s   t ddddgS )NrJ   r   r0   r/   r  r&   r&   r&   r'   r:   9  r;   c                   C   s
   t dS r  ri   r&   r&   r&   r'   r:   :  r;   c                   C   s   t dddgd S r  r  r&   r&   r&   r'   r:   :  r;   c                   C   s   t jtdddS )NrJ   r   rP  )r   rJ  r1   rj   r&   r&   r&   r'   r:   ;  r;   c                   C   s
   t dS rU   r  r&   r&   r&   r'   r:   ;  r;   c                   C   s   t dt dfS r  ri   r&   r&   r&   r'   r:   <  r;   c                   C   s
   t dS rU   r  r&   r&   r&   r'   r:   <  r;   c                   C   s   t dt dfS r   ri   r&   r&   r&   r'   r:   >  r;   c                   C   s   t d S r   r  r&   r&   r&   r'   r:   >  r;   r  c                   C   s   t dt dfS r  ri   r&   r&   r&   r'   r:   @  r;   c                   C   s
   t dS r  ri   r&   r&   r&   r'   r:   @  r;   c                   C   s
   t dS r  ri   r&   r&   r&   r'   r:   A  r;   r{   ,classification_criterion_no_batch_extra_info)r  r  rA  r   rL  c                 G   s   t t| tdS r  r  r  r&   r&   r'   r:   S  r;   c                 C   s   |  S rm   r&   fr&   r&   r'   r:   T  r;   c                 C   s   |  S rm   r&   r  r&   r&   r'   r:   U  r;   )r   r   rk   r  rA   rt  Z
has_parityc                	   @   s   e Zd Zedd Zeejeeej	 eej	 f dddZ
eejddddZedejeejeejeej f ed
ddZdd Zdd Zdd ZdedddZdedddZdedddZdS )
NNTestCasec                 O   s   t d S rm   NotImplementedErrorr   r   r   r&   r&   r'   _forwardb  s    zNNTestCase._forward)r  returnc                 C   s   t d S rm   r  r   r  r&   r&   r'   _get_parametersf  s    zNNTestCase._get_parametersNc                 C   s   t d S rm   r  r  r&   r&   r'   _zero_grad_parametersj  s    z NNTestCase._zero_grad_parametersF)r  r  rF  grad_outputcreate_graphc                 C   s   t d S rm   r  )r   r  r  rF  r  r  r&   r&   r'   	_backwardn  s    zNNTestCase._backwardc                    sT   t |tr"t fdd|D S t |tr@ fdd|D S t|  S d S )Nc                 3   s   | ]} | V  qd S rm   	_jacobianr  elemnum_outr   r&   r'   r7  w  s     z'NNTestCase._jacobian.<locals>.<genexpr>c                    s   g | ]} | qS r&   r  r
  r  r&   r'   r  y  s     z(NNTestCase._jacobian.<locals>.<listcomp>)r  r  r  r1   r:  nelement)r   r  r  r&   r  r'   r	  u  s
    

zNNTestCase._jacobianc                    sF   t |tjr,|jr | dS |dS nt fdd|D S d S )Nr0   c                 3   s   | ]}  |V  qd S rm   )_flatten_tensors)r  rg  r   r&   r'   r7    s     z.NNTestCase._flatten_tensors.<locals>.<genexpr>)r  r1   r  Z	is_sparseZto_denser4   r  )r   re   r&   r  r'   r  }  s
    zNNTestCase._flatten_tensorsc                 C   sJ   t |tjr2|jrF|jd k	rF|j  |j  n|D ]}| | q6d S rm   )r  r1   r  r  gradr_  Zdetach__zero_grad_input)r   r  r7   r&   r&   r'   r    s    
zNNTestCase._zero_grad_inputTr  c                 C   sX  |  ||}| }|r0| ||}tt|}|r\tdd | |d D }	t|	|}
t	|D ]}| |\}}dd t
||D }t|}|d}d||< |r| | |r| | | ||||}|r
t
|t|D ]"\}}| d|d d |f< q|rdt| |d|
d d |f< qdt }|rD||f7 }|rT||
f7 }|S )Nc                 s   s   | ]}|  V  qd S rm   )r  r6  r&   r&   r'   r7    s     z2NNTestCase._analytical_jacobian.<locals>.<genexpr>r   c                 S   s&   g | ]\}}|d krt |n|qS rm   )r1   
zeros_like)r  r8   dr&   r&   r'   r    s     z3NNTestCase._analytical_jacobian.<locals>.<listcomp>r0   r/   )r   r  r	  r  r   r\   r  r1   r:  r@  rS  r  r4   r  r  r  
contiguousrw  r  r  )r   r  r  jacobian_inputjacobian_parametersrF  rr  Zjacobian_inpZflat_jacobian_inputZ	num_paramZjacobian_paramr7   paramd_paramZd_outZ
flat_d_outd_inputZ
jacobian_xZd_xresr&   r&   r'   _analytical_jacobian  s<    



 

zNNTestCase._analytical_jacobianc                    s    fdd}t  }|r,|t||ddf7 }|r \}}g }	|D ]&}
t|||
dd}|	|d d  qF|t|	df7 }|S )Nc                     s     |  S rm   )r   detachr  r  r   r&   r'   fw  s    z*NNTestCase._numerical_jacobian.<locals>.fwrn  )rq  )r   rq  r   )r  r   r  rY  r1   rw  )r   r  r  r  r  r   r  r  r9   Zto_catr8   Zjacobianr&   r  r'   _numerical_jacobian  s    zNNTestCase._numerical_jacobianc                 C   s   t | |d }| ||||}| ||||}tt|}tt|}g }	t||D ]0\}
}|
 dkrX|	|
j	|dd
   qXt|	dkr| t|	t d S )Nr   r0   )r{  )boolr  r  r!  r  r   rS  r  rY  r  r   r   rZ  ZassertLessEqual	PRECISION)r   r  r  r  r  Z
analyticalZ	numericalZanalytical_tZnumerical_tZdifferencesrg  r`  r&   r&   r'   check_jacobian  s    zNNTestCase.check_jacobian)F)TT)TT)T)r   r   r   r   r   r   r   r   r   	Parameterr  r  r   r1   r  r   r   r"  r  r	  r  r  r  r!  r$  r&   r&   r&   r'   r  _  s(   
(  		*r  c                   @   sb   e Zd Zdddh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 )TestBaser>   r  r   Nc                 K   s|   || _ || _|| _|| _| jD ]L}||kr|d |kr|d |kr|dkrVt ||< qtd|  |q|| _	i | _
d S )N_fn_size>   r  r>   zC{}: Specify {} by a value, a function to generate it, or it's size!)rD   r   r   rA   _required_arg_namesr  
ValueErrorformatget_name_extra_kwargs
_arg_cache)r   r   rD   rA   r   r   r  r&   r&   r'   __init__  s    
  zTestBase.__init__c                 C   s8   | j d k	rd| j  S d| jj }| jr4|d| j 7 }|S )NZtest_r9   )r   r   r   rD   )r   Z	test_namer&   r&   r'   r-    s    

zTestBase.get_namec                    s:   t |tjr|S t|r2t| fdd|D S |S d S )Nc                 3   s   | ]}  |V  qd S rm   )_unpack)r  vr  r&   r'   r7    s     z#TestBase._unpack.<locals>.<genexpr>)r  r1   r  r   type)r   valuer&   r  r'   r1    s
    zTestBase._unpackc                 C   s   |  ddS )Nr>   T_get_argr  r&   r&   r'   r>     s    zTestBase.constructor_argsc                 C   s   |  ddS )Nr  Tr5  r  r&   r&   r'   r    s    zTestBase.extra_argsc                    s   || j kst|| jkr|d }|d }|| jkrD| j| | j|< n`|| jkrb| j|  | j|< nB|| jkstd||||   fdd  | j| | j|< |r| | j| S | j| S )Nr(  r)  z!Missing `{}`, `{}` or `{}` for {}c                    s>   t | tr fdd| D S t | tjr0|  S t| S d S )Nc                    s   g | ]} |qS r&   r&   )r  smap_tensor_sizesr&   r'   r    s     z?TestBase._get_arg.<locals>.map_tensor_sizes.<locals>.<listcomp>)r  r  r1   r  r   rj   )Zsizesr8  r&   r'   r9    s
    
z+TestBase._get_arg.<locals>.map_tensor_sizes)r*  r"   r/  r.  r,  r-  r1  )r   r  unpackfn_nameZ	size_namer&   r8  r'   r6    s    


zTestBase._get_argTc                 C   s   |  d|S )Nr  r5  )r   r:  r&   r&   r'   
_get_input!  s    zTestBase._get_inputc                 C   s   t d S rm   r  )r   rx  r&   r&   r'   __call__$  s    zTestBase.__call__)r'  NN)T)r   r   r   r*  r0  r-  r1  propertyr>   r  r6  r<  r=  r&   r&   r&   r'   r&    s   

	


r&  c                       sV   e Zd ZeeejeedddZ fddZdd Z	dd	 Z
d
d Zdd Z  ZS )
ModuleTest)rx  r  r  r  c                 C   s   t d S rm   r  )r   rx  r  r  r&   r&   r'   _do_test*  s    zModuleTest._do_testc                    st   t  j|| |dd| _|dd| _|dd| _|dd| _|dd| _|dd	| _|d
d| _	d S )Nr  TrN   r   r{   !FIXME_no_cuda_gradgrad_comparisonFr   g-C6*?r  )
superr0  getr  should_test_cudashould_test_pickler{   rA  r   r  r  	__class__r&   r'   r0  .  s    
zModuleTest.__init__c           
   	   C   s   | j | j }|  }| jd k	rb|||}t|}t|}| |||d |}|j||dd | jrld S | 	||| | j
rt N}||| t|| |d t|}	||||||	| W 5 Q R X | ||| d S )Nr   F)exact_dtype)r   r>   r<  rA   r   r   r  assertEqualr  test_noncontigrE  tempfileTemporaryFiler1   saveseekloadr@  )
r   rx  r  r  ry  Z	ref_inputZ
ref_moduleexpected_outr  Zmodule_copyr&   r&   r'   r=  9  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rT|d } qtqTtt||g|	|d
 }| dks| dks| rt|j|_|S )Nc                    s   g | ]}  |qS r&   noncontiguizer  or  r&   r'   r  T  s     z,ModuleTest.noncontiguize.<locals>.<listcomp>c                 3   s   | ]}  |V  qd S rm   rQ  rS  r  r&   r'   r7  V  s     z+ModuleTest.noncontiguize.<locals>.<genexpr>r/   r   )r  r  r  rQ  r@  r   r1   r  Z
empty_likeselectr  r  Zis_contiguousr"   r  )r   objr  ndimrQ  r  Z	noncontigr&   r  r'   rR  R  s    

"$zModuleTest.noncontiguizec              
   C   s  t |tjr| dkrd S tdd |D r2d S || || t d |||}t	|ddrn|d }|
|j }| }t|||||}t||d }W 5 Q R X | |}| |}	tddd	D ]\}
}|
r|n|}t|r|n|	}|| || t l |||}t	|ddr8|d }|||||}||| |j||d
dd |||d | W 5 Q R X qd S )Nr   c                 s   s&   | ]}t |tjr| d kV  qdS )r   N)r  r1   r  rQ  )r  r7   r&   r&   r'   r7  k  s      z,ModuleTest.test_noncontig.<locals>.<genexpr>ri  Fr/   )TFrI   )r  g-C6?atolrtol)r  r1   r  rQ  anyr  r  r   r   r    r^  rK  normal_rv  r   r  r  rR  r   rI  )r   rx  r  r  rF  r  r  r  Znc_inputZnc_grad_outputZcontig_iZcontig_gr7   Zgory  r  r&   r&   r'   rJ  g  s:    





zModuleTest.test_noncontigc                 C   s:  t r
| jstd|  }tjtji}t|t	r6|n|f}t
||d}| j| j }| j| j   }||}||}	t|d |	d D ]\}
}|j|
 q|| || || || |||}|||}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	 qq | 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 qPtj"j#|% t%dd |D  ||f t	|$  d
d}tj"j#|% t%dd |D  ||f t	|$  d
d}|j||| jddd t||D ] \}}|j||| jddd q| &||| d S )NExcluded from CUDA tests)type_mapr   ri  FrY  rZ  rH  rK   r/   rX  Tr  )r  c                 s   s   | ]}|  V  qd S rm   r\   r  re   r&   r&   r'   r7    s     z'ModuleTest.test_cuda.<locals>.<genexpr>)Zretain_graphc                 s   s   | ]}|  V  qd S rm   r`  ra  r&   r&   r'   r7    s     )'r   rD  unittestSkipTestr<  r1   r   r  r  r  r   r   r>   cudar  rS  r  Zcopy_r  r  r   r    rI  r   r@  rv  r\  rw   r  r{   rA  
randn_liker  r  Zautogradr  r  r\   rJ  )r   rx  	cpu_inputr^  Zcpu_input_tupleZgpu_input_tuple
cpu_module
gpu_moduleZ	cpu_paramZ	gpu_paramZcpu_pZgpu_p
cpu_output
gpu_outputr9   Zcpu_gradOutputZgpu_gradOutputcpu_gradInputgpu_gradInputZcpu_d_pZgpu_d_pZcpu_gradInputsZgpu_gradInputsZcpu_d_iZgpu_d_iZcpu_ggZgpu_ggr&   r&   r'   rN     s    








zModuleTest.test_cuda)r   r   r   r   r   r   r   r@  r0  r=  rR  rJ  rN   __classcell__r&   r&   rF  r'   r?  (  s   %r?  c                   @   s   e Zd Zdd ZdS )InputVariableMixinc                    s    t | d} fdd  |S )NFc                    sD   t | tjr&|  s|  r"d| _| S t|  fdd| D S d S )NTc                 3   s   | ]} |V  qd S rm   r&   r
  map_variablesr&   r'   r7    s     zGInputVariableMixin._get_input.<locals>.map_variables.<locals>.<genexpr>)r  r1   r  is_floating_point
is_complexr  r3  r   ro  r&   r'   rp    s
    z4InputVariableMixin._get_input.<locals>.map_variables)r&  r<  )r   r  r&   ro  r'   r<    s    zInputVariableMixin._get_inputN)r   r   r   r<  r&   r&   r&   r'   rn    s   rn  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|| |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  FrL   r{   Tr#  r  rB   rC   ry   r  r  r|   r  r   supports_fwgrad_bwgrad)rB  r0  rC  r  rL   r{   r#  r  rB   rC   r  r  r|   r  r   rt  r  rF  r&   r'   r0    s    zNewModuleTest.__init__c              	      s   t dd   D }t| fdd}| jrbdks@tt|d } |d | n"t	||| | j
| j| jd | jrt||| | j
| j| jd d S )	Nc                 s   s   | ]
}|V  qd S rm   r&   ra  r&   r&   r'   r7    s     z1NewModuleTest._check_gradients.<locals>.<genexpr>c                     s   |rt  | d  S rm   )r"   r   )Zinputs_and_paramsr   r  Z
num_inputsrx  r&   r'   fn_to_gradcheck  s    z7NewModuleTest._check_gradients.<locals>.fn_to_gradcheckr/   r   )r|   	fast_modeZcheck_forward_ad)r|   rw  Zcheck_fwd_over_rev)r  r  rZ  r  r"   r1   rq  r$  
assertTruer   r|   r  r   r{   r   rt  )r   rx  r  input_tupleparamsrv  Ztest_input_jacobianr&   ru  r'   _check_gradients  s$    zNewModuleTest._check_gradientsc              	      sr  t  }t d t|tr |n|f}|  |    | jrft|dksTt	|d }| j
| jddi}|j}t   |}W 5 Q R X |j| t|}	|	 }
t  ||
}W 5 Q R X |
j| || |j  }|jd k	rt   |j  W 5 Q R X |	jd k	rBt   |	j  W 5 Q R X || || |j|	j d fdd	}tdd |D r"tr"td	d |D }     |  |t jjd t j dkrdtd
d |D } d t jd  |  W 5 Q R X |t jjd nBd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rd| j!rdtfdd|D }     |  |t jjd tdd |D } "   |  |t j tdd |D }    |  |t jjd | j#rt j$j#j%dd  |  |t jjd W 5 Q R X t j dkrtdd |D } d t jd  |  W 5 Q R X |t jjd | j&s$tfdd|D }     |  |t jj d | j'sdtfdd|D } (    |  |t jj)d t | d S )Nr/   r   ZinplaceTc                    s6      D ](}||  |d k	r| | qd S rm   )r  ZassertIsInstancerI  Z
get_device)Ztensor_typeZ	device_idr8   )r  rx  r&   r'   assert_module_parameters_areE  s    z<NewModuleTest._do_test.<locals>.assert_module_parameters_arec                 s   s   | ]}t |tjV  qd S rm   )r  r1   Z
LongTensorr  r&   r&   r'   r7  K  s     z)NewModuleTest._do_test.<locals>.<genexpr>c                 s   s   | ]}|  V  qd S rm   rd  r  r&   r&   r'   r7  N  s     c                 s   s   | ]}| d V  qdS r5  r}  r  r&   r&   r'   r7  T  s     c                 S   s,   |   r| |S |  r$| |S | S d S rm   )rr  rx  rq  )r  realr  r&   r&   r'   to_type[  s
    

z'NewModuleTest._do_test.<locals>.to_typec                    s    | t jd S rm   )r1   Zfloat16re   r  r&   r'   to_halfc  s    z'NewModuleTest._do_test.<locals>.to_halfc                    s    | t jt jS rm   )r1   float32Z	complex64r  r  r&   r'   	to_singleg  s    z)NewModuleTest._do_test.<locals>.to_singlec                    s    | t jt jS rm   )r1   float64r  r  r  r&   r'   	to_doublej  s    z)NewModuleTest._do_test.<locals>.to_doublec                 3   s   | ]} |V  qd S rm   r&   r  r  r&   r'   r7  n  s     c                 3   s   | ]} |V  qd S rm   r&   r  r  r&   r'   r7  t  s     c                 3   s   | ]} |  V  qd S rm   r}  r  r  r&   r'   r7  ~  s     c                 s   s   | ]}|  V  qd S rm   )cpur  r&   r&   r'   r7    s     c                 s   s   | ]}|  V  qd S rm   r}  r  r&   r&   r'   r7    s     F)ZenabledrI   c                 s   s   | ]}| d V  qdS r5  r}  r  r&   r&   r'   r7    s     c                 3   s   | ]} |  V  qd S rm   r}  r  r  r&   r'   r7    s     c                 3   s   | ]} |  V  qd S rm   r}  r  )r  r&   r'   r7    s     )N)*r1   Zget_num_threadsZset_num_threadsr  r  r{  __repr__rL   rZ  r"   r   r>   _versionr   rI  r   rv  ZassertNotEqualr  r\  r  Zno_gradr_  backwardallr   r  rd  ZFloatTensorZdevice_countru  r   r   rD  r  r  backendsflagsr#  r  halfZ
HalfTensor)r   rx  r  r  Znum_threadsry  Z	module_ipZinput_versionrF  Zinput_ipZinput_ip_cloneZ	output_ipr  r|  r&   )r  rx  r  r  r  r  r'   r@    s    









zNewModuleTest._do_testc                 C   s   |  ddS Nr   Fr5  r  r&   r&   r'   _get_target  s    zNewModuleTest._get_targetc                 C   s   |  ddS Nr>   Fr5  r  r&   r&   r'   r>     s    zNewModuleTest.constructor_args)
r   r   r   r0  r{  r@  r  r>  r>   rm  r&   r&   rF  r'   rs    s    rs  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|| |dd| _|dd| _|dd| _|dd| _|dd| _|dd| _|d	d| _	|d
d| _
|dd| _|dd| _d S )NrN   Tr  Fr{   r  r  r  r  rB   rC   ry   r|   )rB  r0  rC  rD  r  r{   r  r  r  r  rB   rC   r|   r  rF  r&   r'   r0    s    zCriterionTest.__init__c           
         s
  | j | j  |  }   t  |  }| jd k	r||j ||| jd}t	|t	|f| j  f }| j| }|
|| | jrd S tdd   D }t|ts|f| |f } fdd}	n|| |f } fdd}	t|	|| jd | jrt|	|| jd d S )Nr  c                 s   s   | ]
}|V  qd S rm   r&   ra  r&   r&   r'   r7    s     z)CriterionTest.__call__.<locals>.<genexpr>c                    s
    | |S rm   r&   )r  r   rz  r  r&   r'   apply_fn  s    z(CriterionTest.__call__.<locals>.apply_fnc                    s    | ||S rm   r&   )rk  rl  r   rz  r  r&   r'   r    s    )r|   )r   r>   r<  r  r	  r  rA   _forward_criterionr  r   rI  r  r  r  r  r   r|   r{   r   )
r   rx  r  r   ry  Zref_argsrP  rz  inputsr  r&   r  r'   r=    s*    


zCriterionTest.__call__Nc                    sl  d fdd	 t r| js"td|  }|  }| j| j }| j| j } ||d}| sf|	 rp ||}|
| |
| t|}t|}	|  |tjtjhkr|  }|  }| j| j }|j||||d}
|j|||	|d}|j|
||tjtjhkr
dndd	dd
 |j|||
||d}|j||||	|d}|j|||tjtjhkr\dndd	dd
 d S )NFc                    sN   t | tjr"|  j dS t | trFt fdd| D S | S d S )Nr   c                 3   s   | ]} |V  qd S rm   r&   rS  )convert_dtyper   r  r&   r'   r7    s     zACriterionTest.test_cuda.<locals>.convert_dtype.<locals>.<genexpr>)r  r1   r  r  rx  requires_grad_r  )rV  r   r  r  r  r'   r    s
    
z.CriterionTest.test_cuda.<locals>.convert_dtyper]  Tr  rO   g-C6:?r   r_  )F)r   rD  rb  rc  r<  r  r   r>   rq  rr  r3  r   rd  r1   r  bfloat16r  rI  Z_backward_criterion)r   rx  r   r  rf  Z
cpu_targetrg  rh  Z	gpu_inputZ
gpu_targetri  rj  rk  rl  r&   r  r'   rN     sZ    




            zCriterionTest.test_cudac                 C   s   |  ddS r  r5  r  r&   r&   r'   r    s    zCriterionTest._get_targetc                 C   s   |  ddS r  r5  r  r&   r&   r'   r>      s    zCriterionTest.constructor_argsc                 C   s   |  ddS )Nr  Fr5  r  r&   r&   r'   r  $  s    zCriterionTest.extra_args)N)r   r   r   r&  r*  unionr0  r=  rN   r  r>  r>   r  rm  r&   r&   rF  r'   r    s   $
2
r  c                 C   s   t j|t j|dd}|d k	r:t j|t j|d|   }||}t j||d}|| | }	|	   }
| }|	|
}|| | j
||||dd | j
|jj|
jj||dd d S )NT)r   ru  r  rt  )ru  Fr_  )r1   rj   r  r   r  r  r  re  r  r  rI  r  r  )rx  opru  Zinp_dimsr  r  rk  Zout1Zgrad_input1Zop_bfp16rl  Zgrad_input2Zout2r&   r&   r'   _test_bfloat16_ops)  s    

r  c                 C   s   |s| d ||}|s.t|}|| |rF| | |  |s| D ] }|jrR| |jt	|j qR| |jt	| d S )NT)
r  r1   Z	rand_liker  rI  r   r  r  r  r  )rx  r  r  Z
check_sizeZ	inferencery  ZgOr8   r&   r&   r'   _test_module_empty_input<  s    


r  )F)F)r  )r  )Nrt   r  )Nr  rg   )Nrt   r  rg   )Nrt   r  rg   )Nrt   r  )r  rG   )r  rG   )r  )rG   r  )r  )r/   r/   Nr  )r   r  )rG   rI   rn  Fr  )r   r  )r   r  )rG   )rG   )r&   r  N)TF)abcr   r  rK  rb  copyr   	functoolsr   r   r   	itertoolsr   operatorr   r	   r1   Z
torch.cudaZtorch.nnr   Ztorch.nn.functionalZ
functionalr   r
   r!   Z$torch.testing._internal.common_utilsr   r   r   r   r   r   r   Z#torch.testing._internal.common_cudar   Ztorch.autograd.gradcheckr   r   Ztorch.autogradr   Ztorch.typesr   Ztorch.backends.cudnntypingr   r   r   r   r   r   r   rL  r#  r(   r+   r   Zmodule_testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r!  r"  r#  r$  r%  r*  r+  r-  r.  r2  r;  r<  r>  r?  rF  rJ  rM  rT  rU  r[  r\  r]  ra  rb  rc  rz  r  r  r  r  Zinterpolater  r  rJ  r  ZgeluZreluSizeZnew_module_testsrS  Zpadding_modeZcpp_padding_moder  r  r@  r  joinmapr	  Zcpp_paddingr@   rr  rY  r,  Znon_linear_activations_no_batchr;  __annotations__Znon_linear_activationZactivation_test_inforC  Z
extra_infoupdater>  r?  rH  rM  rO  rP  rU  rW  rX  r\  ra  rb  rd  re  rf  rm  rr  rs  r|  r"  r'  r-  r   r   r   r   r  r   r  Zcriterion_testsr  Zregression_criterion_no_batchZ
reductionsr  r   Zregression_test_infoZ!classification_criterion_no_batchr  Zclassification_cpp_parityrk   r  Zclassification_test_infor  objectr&  r?  rn  rs  r  r  r  r&   r&   r&   r'   <module>   sn   $$>	
	   2)2







				
					
				
	

















	





						



				



						




   
 
   
 
 




   	
												
                                            T

   
                    

	
     (  
 
%+	

	


"


"












	
	

		***            K#    
 
	
{N 7 It