U
    §Ê¹jò®  ã                   @   sv  U d dl Z d dlmZmZmZmZmZmZmZ ee	e
f Zd dlZee	 ee	 dœdd„Zee	 ee	 ee	 dœdd„Zee	 eee	 dœd	d
„Zee	 ee	 dœdd„Zee	 dœdd„Zee	 dœdd„Zee	 ee	 dœdd„Zee	 ee	 dœdd„Zee	 ee	 edœdd„Zee	 e	ee	 dœdd„Zee	 dœdd „Zee	 ee	 dœd!d"„Zd#d$œee	 ee	 ed%œd&d'„Zee	 eee	  eed(œd)d*„Zee	 e	ed+œd,d-„Ze	e	d.œd/d0„Ze	e	e	e	e	e	ed1œd2d3„Ze	e	e	e	e	ed4œd5d6„Zee	 e	e	e	e	e	e	e	e	e	e	e	e	e	d7œd8d9„Z ee	 ee	 ee	 ee	 ee	 ed:œd;d<„Z!ee	 ee	 ee	 ee	 ee	 ed:œd=d>„Z"ee	 eee	  eee
  d?œd@dA„Z#ee	 ee	 dBœdCdD„Z$ee	 ee	 dEœdFdG„Z%ee	 ee	 dHœdIdJ„Z&ee	 e	dKœdLdM„Z'ee	 dNœdOdP„Z(ee	 e	dKœdQdR„Z)ee	 ee	 dSœdTdU„Z*ee	 e	ee	 dVœdWdX„Z+�d4ee	 ee	 e	eedZœd[d\„Z,d]d^„ Z-ee	 e	ee	 ee	 e	d_œd`da„Z.eee	  dbœdcdd„Z/e	eee	  deœdfdg„Z0ee	 dhœdidj„Z1ee	 ee	 e	e	dkœdldm„Z2eee	  e	dnœdodp„Z3eee	  e	dnœdqdr„Z4ee	 e	e	dVœdsdt„Z5ee	 ee	 duœdvdw„Z6ee	 dœdxdy„Z7ee	 e	e	dzœd{d|„Z8ee	 ee	 eee	  d}œd~d„Z9ee	 ee	 ee	 eed€œd�d‚„Z:ee	 edƒœd„d…„Z;ee	 ee	 eee	  ee	 ee	 ee	 e	d†œd‡dˆ„Z<ee	 ee	 eee	  ee	 ee	 ee	 e	d‰œdŠd‹„Z=ee	 ee	 eee	  ee	 ee	 ee	 e	dŒœd�dŽ„Z>ee	 ee	 eee	  ee	 ee	 ee	 e	dŒœd�d�„Z?ee	 ee	 ee	 eee	  d‘œd’d“„Z@�d5ee	 ee	 eee	  eee	  eee	  eee	  e	eee	  ee	 d•œ	d–d—„ZAee	 ee	 eee	  ee	 ee	 ee	 eee	 e	ee	 d˜œ
d™dš„ZBee	 ee	 eee	  ee	 ee	 ee	 eee	 e	eeeeee	 d›œdœd�„ZCee	 eee	  eee	  eee	  eee	  ee
e
edžœ	dŸd „ZDee	 ee	 eee	  ee	 ee	 ee	 e	dŒœd¡d¢„ZE�d6e	e	ed¤œd¥d¦„ZFed§œd¨d©„ZGee	 dNœdªd«„ZHeeeeed¬œd­d®„ZIeeeeeed¯œd°d±„ZJeeeeeeed²œd³d´„ZKee	 ee	 dµœd¶d·„ZLee	 ee	 ee	 ee	 d¸œd¹dº„ZMee	 e	e	d»œd¼d½„ZNee	 d§œd¾d¿„ZOee	 d§œdÀdÁ„ZPee	 e	edÂœdÃdÄ„ZQ�d7ee	 ee	 eee	 dÅœdÆdÇ„ZRee	 ee	 ee	 dÈœdÉdÊ„ZSee	 ee	 dËœdÌdÍ„ZT�d8ee	 e	e	eee	 ee	 f dÎœdÏdÐ„ZUee	 ee	 eee	  e	eee	 ee	 f dÑœdÒdÓ„ZVee	 ee	 eee	 ee	 ee	 f dÔœdÕdÖ„ZWee	 eee	  eee	  eee	  eee	  eeee	 ee	 ee	 f d×œdØdÙ„ZX�d9ee	 ee	 eee	  e	e	e
ee	 dÜœdÝdÞ„ZYejZj[Z\i a]ee^e\f e_dß< i Z`ee^ee\e\f f e_dà< i Zaeee\f e_dá< edâœdãdä„Zbe^edåœdædç„Zce^eedèœdédê„Zdecdëeƒ ecdìeƒ ecdíeƒ ecdîeƒ ecdïeGƒ ecdðeGƒ ecdñeƒ ecdòeƒ ecdóeIƒ ecdôeJƒ ecdõeKƒ ecdöe(ƒ ecd÷e)ƒ ecdøe*ƒ ecdùe'ƒ ecdúe.ƒ ecdûe5ƒ ecdüe+ƒ ecdýeƒ ecdþeƒ ecdÿeƒ ec�d eƒ ec�de,ƒ ec�de$ƒ ec�de%ƒ ec�de&ƒ ec�de6ƒ ec�de9ƒ ec�de!ƒ ec�de"ƒ ec�d	e7ƒ ec�d
e8ƒ ec�de>ƒ ec�de?ƒ ec�deDƒ ec�deEƒ ec�de@ƒ ec�deBƒ ec�deCƒ ec�deAƒ ec�deNƒ ec�de3ƒ ec�de4ƒ ec�deLƒ ec�deMƒ ec�deƒ ec�deƒ ec�deƒ ec�deƒ ec�deƒ ec�deƒ ec�deGƒ ec�deGƒ ec�d e:ƒ ec�d!e#ƒ ec�d"eƒ ec�d#eƒ ec�d$eƒ ec�d%eƒ ec�d&eRƒ ec�d'eSƒ ec�d(eTƒ ec�d)eUƒ ec�d*eVƒ ec�d+eWƒ ec�d,eXƒ ec�d-eXƒ ec�d.eXƒ ec�d/eYƒ ec�d0eƒ ec�d1eƒ ec�d2eƒ ed�d3eOePƒ dS (:  é    N)ÚAnyÚCallableÚDictÚListÚOptionalÚTupleÚUnion)ÚaÚbc                 C   sÄ   t | ƒ}t |ƒ}t||ƒ}g }t|ƒD ]˜}|d | }|d | }|d | }	|dkr^| | nd}
|	dkrr||	 nd}|
|kr¨|
dkr¨|dkr¨td|
› d|› d|› �ƒ‚| |
dkr¸|n|
¡ q&|S )Né   r   zThe size of tensor a z" must match the size of tensor b (z) at non-singleton dimension )ÚlenÚmaxÚrangeÚAssertionErrorÚappend)r	   r
   ÚdimsAÚdimsBÚndimZexpandedSizesÚiÚoffsetÚdimAÚdimBÚsizeAÚsizeB© r   úY/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/jit/_shape_functions.pyÚ	broadcast   s     
ÿr   ©r	   r
   Úcc                 C   s   t t | |ƒ|ƒS ©N©r   r   r   r   r   Úbroadcast_three1   s    r!   c                 C   s
   t | |ƒS r   r    r   r   r   r   Úbroadcast_one_three5   s    r"   )ÚselfÚoutc                 C   s’   t |ƒdkst‚t | ƒdks,t | ƒdks,t‚tdt | ƒƒD ]}| | dks:t‚q:g }tdt | ƒd ƒD ]}| | | ¡ qf|D ]}| |¡ q~|S )Né   é   é   r   r   )r   r   r   r   )r#   r$   r   ÚshapeÚelemr   r   r   Úadaptive_avg_pool2d9   s    r*   ©r#   c                 C   s   g }| D ]}|  |¡ q|S r   ©r   )r#   r$   r)   r   r   r   Ú_copyG   s    r-   c                 C   s   t | ƒS r   ©r-   r+   r   r   r   ÚunaryN   s    r/   c                 C   sŽ   t | ƒ}t |ƒ}||kr.td|› d|› d�ƒ‚t|ƒD ]N}|| | }| | }|dkr^|| nd}||kr6|dkr6td |||¡ƒ‚q6t| ƒS )NzThe dims of tensor b (z5) must be less than or equal tothe dims of tensor a (z) r   r   zZThe size of tensor a {} must match the size of tensor b ({}) at non-singleton dimension {})r   r   r   Úformatr-   )r	   r
   r   r   r   r   r   r   r   r   r   Úbroadcast_inplaceR   s&    ÿ  ÿÿr1   ©r#   Úsizesc           
      C   s¸   t |ƒt | ƒkst‚t |ƒ}t | ƒ}|dkr4t|ƒS g }t|ƒD ]r}|d | }|d | }|dkrl| | nd}|| }	|	dkr�|dksŒt‚|}	||	kr¨|dks¤t‚|	}| |¡ q@|S )Nr   r   éÿÿÿÿ)r   r   r-   r   r   )
r#   r3   r   Z
tensor_dimr$   r   r   ÚdimÚsizeZ
targetSizer   r   r   Úexpandf   s&    r7   ©r#   r3   Úinp0c                 C   s
   t | |ƒS r   )r7   r8   r   r   r   Úexpand_one_unused|   s    r:   )r(   ÚnumelÚreturnc                 C   sª   d}d }t t| ƒƒD ]H}| | dkr:|d k	r4tdƒ‚|}q| | dkrT|| | 9 }qtdƒ‚q||ksŠ|d k	r‚|dkr‚|| dksŠtdƒ‚t| ƒ}|d k	r¦|| ||< |S )Nr   r4   z"only one dimension can be inferredr   zinvalid shape dimensionszinvalid shape)r   r   r   r-   )r(   r;   ZnewsizeZ	infer_dimr5   r$   r   r   r   Úinfer_size_impl€   s.    
ÿþþ
þr=   )r3   c                 C   s   d}| D ]}||9 }q|S ©Nr   r   )r3   r;   r)   r   r   r   r;   —   s    
r;   c                 C   s   t |t| ƒƒS r   )r=   r;   r2   r   r   r   Úviewž   s    r?   F)Úimplicit©r#   r3   r@   c                C   s
   t | |ƒS r   )r?   rA   r   r   r   Úview_one_unused¢   s    rB   )r#   Úopt_dimsÚkeep_dimÚdtc           	      C   sŠ   g }|d kst |ƒdkr*ttt | ƒƒƒ}n|}tt | ƒƒD ]J}d}|D ]}|t|t | ƒƒkrFd}qF|rv|r„| d¡ q:| | | ¡ q:|S )Nr   FTr   )r   Úlistr   Úmaybe_wrap_dimr   )	r#   rC   rD   rE   r$   ÚdimsÚidxZis_mean_dimZ
reduce_dimr   r   r   Úsum_mean_dim¦   s    rJ   )r#   r5   rD   c                 C   s   t | |g|d ƒ}||fS r   )rJ   )r#   r5   rD   r$   r   r   r   Úmax_dim¼   s    rK   ©ÚxÚyc                 C   s   | | S r   r   rL   r   r   r   Údiv_rtnÂ   s    rO   )Ú	inputSizeÚ
kernelSizeÚpad_lÚpad_rÚstrideÚdilationÚ	ceil_modec                 C   sZ   t | | | ||d   d |r(|d nd |ƒd }|rV|d | | | krV|d }|S ©Nr   r   )rO   )rP   rQ   rR   rS   rT   rU   rV   Z
outputSizer   r   r   Úpooling_output_shape_pad_lrÆ   s*    
ÿþ
ýüûù	÷ÿrX   ©rP   rQ   rR   rT   rU   rV   c                 C   s$   |dkst dƒ‚t| ||||||ƒS )Nr   zstride should not be zeero)r   rX   rY   r   r   r   Úpooling_output_shapeá   s          ÿrZ   )ÚinputÚkHÚkWÚdHÚdWÚpadHÚpadWÚ	dilationHÚ	dilationWÚnInputPlaneÚinputHeightÚ
inputWidthÚoutputHeightÚoutputWidthc                 C   sÈ   t | ƒ}|	}|dkr|dks t‚|dkr0|dks4t‚|dkrD|dksHt‚| d dko^| d dk}|dkrx| d dkrx|s”|dkr�|r�| d dks”t‚|d |kr¬|d |ks°t‚|dkrÀ|dksÄt‚d S )Nr   r   r%   r&   r'   ©r   r   )r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   r   ZnOutputPlaneZ
valid_dimsr   r   r   Úpool2d_shape_checkï   s(    ÿ
þýüü
ürj   )r[   Úkernel_sizerT   ÚpaddingrU   rV   c                 C   sö  t |ƒdks t |ƒdks tdƒ‚|d }t |ƒdkr8|n|d }t |ƒdkslt |ƒdkslt |ƒdksltdƒ‚t |ƒdkr||n|d }t |ƒdkr–|}	nt |ƒdkr¨|}	n|d }	t |ƒdksÐt |ƒdksÐtdƒ‚|d }
t |ƒdkrè|
n|d }t |ƒdk�st |ƒdk�stdƒ‚|d }t |ƒdk�r.|n|d }t | ƒdk�sVt | ƒd	k�sVt‚t | ƒd	k�rl| d
 nd}| d }| d }| d }t|||
|||ƒ}t||||	||ƒ}t| ||||	|
||||||||ƒ t | ƒdk�ræ|||gS ||||gS d S )Nr   r%   zKmax_pool2d: kernel_size must either be a single int, or a tuple of two intsr   zOmax_pool2d: stride must either be omitted, a single int, or a tuple of two intszGmax_pool2d: padding must either be a single int, or a tuple of two intszHmax_pool2d: dilation must be either a single int, or a tuple of two intsr&   r'   éüÿÿÿéýÿÿÿéþÿÿÿr4   )r   r   rZ   rj   )r[   rk   rT   rl   rU   rV   r\   r]   r^   r_   r`   ra   rb   rc   Znbatchrd   re   rf   rg   rh   r   r   r   Ú
max_pool2d  s€    	
ÿ
ÿþ
ÿ
ÿ
ÿþ
ÿ
ÿþ
ÿ
ÿþ ò
rp   c                 C   s   t | |||||ƒ}||fS r   )rp   )r[   rk   rT   rl   rU   rV   r$   r   r   r   Úmax_pool2d_with_indicesX  s    rq   )r[   Úoutput_sizeÚscale_factorsc                 C   sà   g }|  | d ¡ |  | d ¡ |d kr<|d kr<ds<tdƒ‚|d k	r€|d ksTtdƒ‚t|ƒdksdt‚|  |d ¡ |  |d ¡ |d k	rÜ|d ks˜tdƒ‚t|ƒdks¨t‚|  t| d |d  ƒ¡ |  t| d |d  ƒ¡ |S )Nr   r   z5Either output_size or scale_factors must be presentedz9Must specify exactly one of output_size and scale_factorsr%   r&   )r   r   r   Úint)r[   rr   rs   r$   r   r   r   Úupsample_nearest2dd  s,    ÿþÿþru   ©r#   Úmat2c                 C   sL   t | ƒdkstdƒ‚t |ƒdks(tdƒ‚| d |d ks<t‚| d |d gS )Nr%   zself must be a matrixzmat2 must be a matrixr   r   ri   rv   r   r   r   Úmmƒ  s    rx   )r#   Útensorc                 C   s8   t | ƒdkrt |ƒdkst‚| d |d ks0t‚g }|S rW   ri   )r#   ry   r$   r   r   r   Údot‹  s    rz   ©r#   Zvecc                 C   s:   t | ƒdkrt |ƒdkst‚| d |d ks0t‚| d gS ©Nr%   r   r   ri   r{   r   r   r   Úmv’  s    r}   )Úlir5   c                 C   s*   t |t| ƒd ƒ}t| ƒ}| |d¡ |S r>   )rG   r   r-   Úinsert)r~   r5   r$   r   r   r   Ú	unsqueeze™  s    r€   )r~   c                 C   s4   g }t t| ƒƒD ]}| | dkr| | | ¡ q|S r>   )r   r   r   )r~   r$   r   r   r   r   Úsqueeze_nodim   s
    r�   c                 C   sZ   g }t |t| ƒƒ}tt| ƒƒD ]6}||krF| | dkrT| | | ¡ q| | | ¡ q|S r>   )rG   r   r   r   )r~   r5   r$   Zwrapped_dimr   r   r   r   Úsqueeze¨  s    r‚   )r~   rH   c                 C   sŒ   t |ƒdkr| S t|ƒ}tt |ƒƒD ]}t|| t | ƒƒ||< q$g }tt | ƒƒD ]6}| | dkrx||kr†| | | ¡ qP| | | ¡ qP|S ©Nr   r   )r   r-   r   rG   r   )r~   rH   Zwrapped_dimsr   Úresultr   r   r   Úsqueeze_dims´  s    r…   )r#   r5   Úindexc                 C   sz   t |t| ƒƒ}t|ƒ}t|ƒdks&t‚|dks>|t| ƒk s>t‚g }tt| ƒƒD ]&}||krf| |¡ qN| | | ¡ qN|S rW   )rG   r   Úmultiply_integersr   r   r   )r#   r5   r†   r;   Úresult_sizer   r   r   r   Úindex_selectÄ  s    r‰   r4   )ÚweightÚindicesÚpadding_idxÚscale_grad_by_freqÚsparsec                 C   sB   t | ƒdkst‚t |ƒdkr(t| d|ƒS t|ƒ}| | d ¡ |S r|   )r   r   r‰   r-   r   )rŠ   r‹   rŒ   r�   rŽ   r6   r   r   r   Ú	embeddingÒ  s    r�   c                   C   s   dS )Nl   ÿÿÿÿ r   r   r   r   r   Úmax_intá  s    r�   )r#   r5   ÚstartÚendÚstepc           
      C   sî   t | ƒ}|dkst‚t||ƒ}|d k	r*|nd}|d k	r:|ntƒ }|dksLt‚|tƒ krZd}|dk rn|| | 7 }|dk r‚|| | 7 }|dk r�d}n|| | kr¤| | }||k r²|}n|| | krÆ| | }|| }t| ƒ}	|| d | |	|< |	S rƒ   )r   r   rG   r�   r-   )
r#   r5   r‘   r’   r“   r   Z	start_valZend_valZ	slice_lenr$   r   r   r   Úsliceå  s0    

r”   )Útensorsc                 C   s   | D ]}t |ƒdkst‚qd S ©Nr   ri   )r•   ry   r   r   r   Úcheck_cat_no_zero_dim  s    r—   )r5   Útensor_sizesc                 C   sL   d }|D ]2}t |ƒdkr$|d dks|d krt| t |ƒƒ}q|d krH| }|S rW   )r   rG   )r5   r˜   Zout_dimr6   r   r   r   Úlegacy_cat_wrap_dim  s    r™   ©ry   c                 C   s   t | ƒdkot| ƒdkS rƒ   ©r;   r   rš   r   r   r   Úshould_skip  s    rœ   )ÚfirstÚsecondÚ	dimensionr†   c                 C   sT   t | ƒ}t |ƒ}||ks tdƒ‚td|ƒD ]$}||kr*| | || ks*tdƒ‚q*d S )Nz+Tensors must have same number of dimensionsr   z/Sizes of tensors must match except in dimension)r   r   r   )r�   rž   rŸ   r†   Z
first_dimsZsecond_dimsr5   r   r   r   Úcheck_cat_shape_except_dim  s    ÿþr    )r•   r5   c                 C   sž   t | ƒ t|| ƒ}t| ƒdks"t‚d }| D ]}t|ƒs*|}q*|d krJdgS d}tt| ƒƒD ].}| | }t|ƒsZt||||ƒ |||  }qZt|ƒ}|||< |S r–   )r—   r™   r   r   rœ   r   r    r-   )r•   r5   Znot_skipped_tensorry   Zcat_dim_sizer   rˆ   r   r   r   Úcat#  s$    
r¡   c                 C   s,   g }| D ]}t ||ƒ}| |¡ qt||ƒS r   )r€   r   r¡   )r•   r5   Zunsqueezed_tensorsry   Z
unsqueezedr   r   r   Ústack;  s
    
r¢   c                 C   sx   t | ƒ}|dkst‚t||ƒ}| | }|| k s8||kr<t‚|dk rL||7 }g }t|ƒD ]}||krX| | | ¡ qX|S r–   )r   r   rG   r   r   )r#   r5   r†   r   r6   r$   r   r   r   r   ÚselectC  s    
r£   )Útensor1Útensor2c                 C   sf  t | ƒ}t |ƒ}|dkr*|dkr*t| |ƒS |dkrD|dkrDt| |ƒS |dkrj|dkrjttt| dƒ|ƒdƒS |dkr„|dkr„t| |ƒS |dk�rT|dk�rT|dkr¨| d nd}| d }g }t|d ƒD ]}| | | ¡ qÄ|dkrè|d nd}|d }	g }
t|d ƒD ]}|
 || ¡ �qt||
ƒ}|}|dk�r<| |¡ |dk�rP| |	¡ |S d�sbt	dƒ‚d S )Nr   r%   r   ro   r4   Fz0both  arguments to matmul need to be at least 1D)
r   rz   r}   r‚   rx   r€   r   r   r   r   )r¤   r¥   Zdim_tensor1Zdim_tensor2ÚnÚm1Zbatch_tensor1r   Úm2ÚpZbatch_tensor2Zexpand_batch_portionZoutput_shaper   r   r   ÚmatmulR  s:    







rª   c                 C   sN   t | ƒdkst‚t | ƒ}|dkr(g }|S |dkr:| d gS | d | d gS d S )Nr%   r   r   ri   )r#   Zself_lenr$   r   r   r   Út}  s    
r«   )r#   Údim0Údim1c                 C   s€   t | ƒ}t||ƒ}t||ƒ}||kr,t| ƒS g }t|ƒD ]B}||krT| | | ¡ q8||krl| | | ¡ q8| | | ¡ q8|S r   )r   rG   r-   r   r   )r#   r¬   r­   Zndimsr$   r   r   r   r   Ú	transpose‰  s    

r®   )r[   rŠ   Úbiasc                 C   s,   t | t|ƒƒ}|d k	r(t||ƒ|ks(t‚|S r   )rª   r«   r   r   )r[   rŠ   r¯   r$   r   r   r   Úlinearš  s    r°   ©r#   Zmat1rw   ÚbetaÚalphac                 C   s   t | t||ƒƒS r   )r   rx   r±   r   r   r   Úaddmm¡  s    r´   )Úarrayr<   c                 C   s   d}| D ]}|dk rd}q|S )NFr   Tr   )rµ   Znon_negativeÚvalr   r   r   Úcheck_non_negative¥  s
    r·   )r[   Úweight_sizesr¯   rT   rl   rU   Úgroupsc           
      C   sä   t | ƒ}t |ƒ}t|ƒrt‚t|ƒr(t‚||ks4t‚|d |ksDt‚|d | dksXt‚| d |d | kspt‚|d ks˜t |ƒdkr”|d |d ks˜t‚td|ƒD ]<}	| |	 d||	d    ||	d  ||	 d  d ks¢t‚q¢d S ©Nr   r   r%   )r   r·   r   r   )
r[   r¸   r¯   rT   rl   rU   r¹   ÚkZ
weight_dimr   r   r   r   Úcheck_shape_forward®  s    	(ÿr¼   )Ú
input_sizeÚweight_sizer¯   rT   rl   rU   r¹   c                 C   s¾   t | ||||||ƒ t|ƒdk}t| ƒ}g }	d}
d}|	 | |
 ¡ |	 || ¡ td|ƒD ]^}|rn||d  nd}||| d  d }|	 | | d||d    | ||d   d ¡ qZ|	S )Nr   r%   r   )r¼   r   r   r   )r½   r¾   r¯   rT   rl   rU   r¹   Úhas_dilationr5   rr   Úinput_batch_size_dimÚweight_output_channels_dimÚdÚ	dilation_Úkernelr   r   r   Úconv_output_sizeÍ  s.    	      ÿ*ÿrÅ   ©r[   rŠ   r¯   rT   rl   rU   r¹   c                 C   s4   t |ƒdkst‚t | ƒdks t‚t| ||||||ƒS )Nr&   ©r   r   rÅ   rÆ   r   r   r   Úconv1dë  s    	rÈ   c                 C   s4   t |ƒdkst‚t | ƒdks t‚t| ||||||ƒS )Nr'   rÇ   rÆ   r   r   r   Úconv2dù  s    	rÉ   ©Zgrad_outputr[   rŠ   Zbiasesc                 C   s   t |ƒt |ƒ| d gfS r>   r.   rÊ   r   r   r   Úconv_backwards  s    rË   r   )	r[   rŠ   r¯   rT   rl   Úoutput_paddingr¹   rU   r<   c                 C   sú   |d krddg}|d kr ddg}|d kr0ddg}|d kr@ddg}t |ƒdk}t | ƒ}	g }
d}d}|
 | | ¡ |
 || | ¡ td|	ƒD ]j}|rž||d  nd}||| d  }|
 | | d ||d   d||d    | ||d   d ¡ qŠ|
S )Nr   r   r%   ©r   r   r   )r[   rŠ   r¯   rT   rl   rÌ   r¹   rU   r¿   r5   rr   rÀ   rÁ   rÂ   rÃ   rÄ   r   r   r   Úconv_transpose2d_input  s<    
ÿþ
ýüÿrÎ   )
r[   rŠ   r¯   rT   rl   rU   Ú
transposedrÌ   r¹   r<   c	                 C   s:  t |ƒdk}	t |ƒdk}
t | ƒ}g }d}|r0dnd}| | | ¡ |rZ| || | ¡ n| || ¡ td|ƒD ]Â}|	r†||d  nd}|
rš||d  nd}|rî||| d  }| | | d ||d   d||d    | | d ¡ qr||| d  d }| | | d||d    | ||d   d ¡ qr|S rº   rÍ   )r[   rŠ   r¯   rT   rl   rU   rÏ   rÌ   r¹   r¿   Zhas_output_paddingr5   rr   rÀ   rÁ   rÂ   rÃ   Zoutput_padding_rÄ   r   r   r   Úconv_forwards8  s>    ÿþýüÿ*ÿrÐ   )r[   rŠ   r¯   rT   rl   rU   rÏ   rÌ   r¹   Ú	benchmarkÚdeterministicÚcudnn_enabledÚ
allow_tf32r<   c              
   C   s   t | ||||||||ƒ	S r   )rÐ   )r[   rŠ   r¯   rT   rl   rU   rÏ   rÌ   r¹   rÑ   rÒ   rÓ   rÔ   r   r   r   Ú_conv_forwardsc  s    ÷rÕ   )	r[   rŠ   r¯   Úrunning_meanÚrunning_varÚtrainingÚmomentumÚepsrÓ   c	                 C   s   g }	| D ]}
|	  |
¡ q|	S r   r,   )r[   rŠ   r¯   rÖ   r×   rØ   rÙ   rÚ   rÓ   r$   r)   r   r   r   Ú
batch_norm  s    rÛ   c                 C   s4   t |ƒdkst‚t | ƒdks t‚t| ||||||ƒS )Né   rÇ   rÆ   r   r   r   Úconv3d�  s    	rÝ   T)r5   Údim_post_exprÚwrap_scalarc                 C   sJ   |dkr|st ‚d}| }|d }| |k s2| |kr6t ‚| dk rF| |7 } | S rƒ   )r   )r5   rÞ   rß   Úminr   r   r   r   rG   ž  s    rG   ©r[   c                 C   s   g }|S r   r   )r[   r$   r   r   r   Úzero_dim_tensorª  s    râ   c                 C   s   d}| D ]}|| }q|S r>   r   )r~   r$   r)   r   r   r   r‡   ¯  s    
r‡   ©r’   r9   Úinp1Úinp2Úinp3c                 C   s   | dkst ‚tt | ¡ƒgS r–   ©r   rt   ÚmathÚceilrã   r   r   r   Ú
arange_end¶  s    rê   ©r‘   r’   r9   rä   rå   ræ   c                 C   s,   |dkst ‚|| kst ‚tt ||  ¡ƒgS r–   rç   rë   r   r   r   Úarange_start»  s    rì   ©r‘   r’   r“   r9   rä   rå   ræ   c                 C   sF   |dkst ‚|dk r"| |ks.t ‚n|| ks.t ‚tt ||  | ¡ƒgS r–   rç   rí   r   r   r   Úarange_start_stepÃ  s
    rî   )r[   rH   c                 C   sŽ   t | ƒt |ƒkst‚t |ƒ}g }g }t|ƒD ]*}t|| |ƒ}| |¡ | | | ¡ q,td|ƒD ]&}t|ƒD ]}|| || ksnt‚qnqb|S r>   )r   r   r   rG   r   )r[   rH   r   Z	seen_dimsZnewSizesr   r5   Újr   r   r   ÚpermuteÎ  s    
rð   )r#   ÚsourceÚdestinationr<   c                 C   s<  t | ƒ}|dkr| S g }g }tt |ƒƒD ],}| t|| |ƒ¡ | t|| |ƒ¡ q(dd„ t|ƒD ƒ}dd„ t|ƒD ƒ}dd„ t|ƒD ƒ}	tt |ƒƒD ],}|| ||| < d||| < d|	|| < q˜g }
g }|D ]}|dkrÒ|
 |¡ qÒ|	D ]}|dkrî| |¡ qî|t |ƒ }t|ƒD ]}|
| ||| < �qt| |ƒS )Nr   c                 S   s   g | ]}d ‘qS )r4   r   ©Ú.0r   r   r   r   Ú
<listcomp>æ  s     zmovedim.<locals>.<listcomp>c                 S   s   g | ]}|‘qS r   r   ró   r   r   r   rõ   ç  s     c                 S   s   g | ]}|‘qS r   r   ró   r   r   r   rõ   è  s     r4   )r   r   r   rG   rð   )r#   rñ   rò   Úself_dimZnormalized_srcZnormalized_dstr   ÚorderZsrc_dimsZdst_dimsZsource_dimsZdestination_dimsZeleZrest_dimr   r   r   ÚmovedimÝ  s6    rø   )r[   Ú	start_dimÚend_dimc                 C   sÖ   t |t| ƒƒ}t |t| ƒƒ}||ks(t‚t| ƒdkr:dgS ||kr^g }| D ]}| |¡ qJ|S d}t||d ƒD ]}|| | 9 }qpg }t|ƒD ]}| | | ¡ qŽ| |¡ t|d t| ƒƒD ]}| | | ¡ q¾|S rƒ   )rG   r   r   r   r   )r[   rù   rú   r$   r)   Zslice_numelr   r(   r   r   r   Úflattenþ  s(    
rû   c                 C   s   dt | ƒgS r–   ©r   rá   r   r   r   Únonzero_lower_bound  s    rý   c                 C   s   t | ƒt| ƒgS r   r›   rá   r   r   r   Únonzero_upper_bound  s    rþ   ©r#   r5   Úkeepdimc                 C   sJ   t |t| ƒƒ}g }t| ƒD ]*\}}||kr:|rD| d¡ q| |¡ q|S r>   )rG   r   Ú	enumerater   )r#   r5   r   r$   r   rö   r   r   r   Ú_reduce_along_dim   s    r  )r#   r5   r   r<   c                 C   s   |d krg S t | ||ƒS r   )r  rÿ   r   r   r   Úargmax,  s    r  )r#   rw   r<   c                 C   sn   t | ƒdkstdƒ‚t |ƒdks(tdƒ‚| d |d ks@tdƒ‚| d |d ksXtdƒ‚| d | d |d gS )Nr&   zbmm only supports 3D tensorsr   zmismatching batch dimensionr%   r   z!mismatching contracting dimensionri   rv   r   r   r   Úbmm4  s
    r  )r#   r<   c                 C   s
   t | ƒgS r   rü   r+   r   r   r   Ú_shape_as_tensor<  s    r  )r#   r»   r5   r<   c                 C   sT   t | ƒdkrg }n:|| | ks<td|› d|› d| | › �ƒ‚t| ƒ}|||< ||fS )Nr   zk (z) is too big for dimension z	 of size )r   r   r-   )r#   r»   r5   r„   r   r   r   Útopk@  s    
ÿþr  )r#   ÚtargetrŠ   Ú	reductionr<   c           
      C   s¶   t | ƒ}t |ƒ}d|  k r$dks*n t‚|dks6t‚|dkoD|dk}|s^| d |d ks^t‚| d }g }|d ksŽt |ƒdkrŠ|d |ksŽt‚|dkrª|dkrª| d g}	n|}	|	|fS )Nr   r%   r   r4   ri   )
r#   r  rŠ   r  rö   Z
target_dimZno_batch_dimZ	n_classesZscalar_shapeÚreduction_shaper   r   r   Únll_loss_forwardL  s    $r
  )r[   Únormalized_shaper<   c                 C   sh   g }t | ƒt |ƒ }|dks t‚t|ƒD ]}| | | ¡ q(t|t | ƒƒD ]}| d¡ qJt| ƒ||fS rƒ   )r   r   r   r   r-   )r[   r  r	  Znum_unreduced_dimensionsr   r   r   r   Únative_layer_norm`  s    r  )r[   rŠ   r¯   rÖ   r×   rØ   r<   c                 C   s$   |r| d g}ndg}t | ƒ||fS rW   r.   )r[   rŠ   r¯   rÖ   r×   rØ   Ú_sizer   r   r   Únative_batch_normm  s    r  éœÿÿÿç        )r#   r  rŠ   r  Úignore_indexÚlabel_smoothingr<   c                 C   s   t | |||ƒd }|S r–   )r
  )r#   r  rŠ   r  r  r  Zresult_shaper   r   r   Úcross_entropy_loss|  s    r  Úshape_compute_graph_mappingÚbounded_compute_graph_mappingÚscript_func_map)Úfuncc                 C   s\   | t krTtj | ¡}tj |j¡ tdƒD ] }tj |j¡ tj 	|j¡ q*|t | < t |  S )Nr%   )
r  ÚtorchZjitÚscriptÚ_CZ_jit_pass_inlineÚgraphr   Z_jit_pass_peepholeZ_jit_pass_constant_propagation)r  Zscripted_funcÚ_r   r   r   Úprocess_func¡  s    r  ©Úoperator_schemar  c                 C   s   t |ƒt| < d S r   )r  r  r  r   r   r   Úadd_shape_compute_mapping¯  s    r   )r  Úlower_bound_funcÚupper_bound_funcc                 C   s   t |ƒt |ƒf}|t| < d S r   )r  r  )r  r!  r"  Zfnsr   r   r   Úadd_bounded_compute_mappingµ  s    r#  z^aten::contiguous(Tensor(a) self, *, MemoryFormat memory_format=contiguous_format) -> Tensor(a)zFaten::rsub.Tensor(Tensor self, Scalar other, Scalar alpha=1) -> Tensorz:aten::dropout(Tensor input, float p, bool train) -> TensorzDaten::adaptive_avg_pool2d(Tensor self, int[2] output_size) -> Tensorz,prim::NumToTensor.Scalar(Scalar a) -> Tensorz(prim::NumToTensor.bool(bool a) -> Tensorzuaten::zeros(int[] size, *, int? dtype=None, int? layout=None, Device? device=None, bool? pin_memory=None) -> (Tensor)z{aten::to.dtype(Tensor(a) self, int dtype, bool non_blocking=False, bool copy=False, int? memory_format=None) -> (Tensor(a))zvaten::arange(Scalar end, *, int? dtype=None, int? layout=None, Device? device=None, bool? pin_memory=None) -> (Tensor)z’aten::arange.start(Scalar start, Scalar end, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensorz¤aten::arange.start_step(Scalar start, Scalar end, Scalar step, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensorz*aten::squeeze(Tensor(a) self) -> Tensor(a)z7aten::squeeze.dim(Tensor(a) self, int dim) -> Tensor(a)z:aten::squeeze.dims(Tensor(a) self, int[] dim) -> Tensor(a)z5aten::unsqueeze(Tensor(a) self, int dim) -> Tensor(a)zfaten::slice.Tensor(Tensor(a) self, int dim=0, int? start=None, int? end=None, int step=1) -> Tensor(a)zAaten::select.int(Tensor(a) self, int dim, int index) -> Tensor(a)z@aten::index_select(Tensor self, int dim, Tensor index) -> Tensorz‘aten::layer_norm(Tensor input, int[] normalized_shape, Tensor? weight=None, Tensor? bias=None, float eps=1e-05, bool cudnn_enable=True) -> TensorzIaten::softmax.int(Tensor self, int dim, ScalarType? dtype=None) -> Tensorzhaten::_no_grad_embedding_renorm_(Tensor weight, Tensor input, float max_norm, float norm_type) -> Tensorzgaten::embedding_renorm_(Tensor(a!) self, Tensor indices, float max_norm, float norm_type) -> Tensor(a!)z~aten::embedding(Tensor weight, Tensor indices, int padding_idx=-1, bool scale_grad_by_freq=False, bool sparse=False) -> Tensorz,aten::mm(Tensor self, Tensor mat2) -> Tensorz/aten::dot(Tensor self, Tensor tensor) -> Tensorz+aten::mv(Tensor self, Tensor vec) -> Tensorz1aten::matmul(Tensor self, Tensor other) -> TensorzFaten::linear(Tensor input, Tensor weight, Tensor? bias=None) -> Tensorzˆaten::max_pool2d(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> TensorzŸaten::max_pool2d_with_indices(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> (Tensor, Tensor)z$aten::t(Tensor(a) self) -> Tensor(a)zDaten::transpose.int(Tensor(a) self, int dim0, int dim1) -> Tensor(a)zŠaten::conv1d(Tensor input, Tensor weight, Tensor? bias=None, int[1] stride=1, int[1] padding=0, int[1] dilation=1, int groups=1) -> TensorzŠaten::conv2d(Tensor input, Tensor weight, Tensor? bias=None, int[2] stride=1, int[2] padding=0, int[2] dilation=1, int groups=1) -> Tensorz¯aten::batch_norm(Tensor input, Tensor? weight, Tensor? bias, Tensor? running_mean, Tensor? running_var, bool training, float momentum, float eps, bool cudnn_enabled) -> TensorzŠaten::conv3d(Tensor input, Tensor weight, Tensor? bias=None, int[3] stride=1, int[3] padding=0, int[3] dilation=1, int groups=1) -> Tensorzïaten::convolution_backward(Tensor grad_output, Tensor input, Tensor weight, int[]? bias_sizes, int[] stride, int[] padding, int[] dilation, bool transposed, int[] output_padding, int groups, bool[3] output_mask) -> (Tensor, Tensor, Tensor)z¦aten::convolution(Tensor input, Tensor weight, Tensor? bias, int[] stride, int[] padding, int[] dilation, bool transposed, int[] output_padding, int groups) -> Tensorzðaten::_convolution(Tensor input, Tensor weight, Tensor? bias, int[] stride, int[] padding, int[] dilation, bool transposed, int[] output_padding, int groups, bool benchmark, bool deterministic, bool cudnn_enabled, bool allow_tf32) -> Tensorz³aten::conv_transpose2d.input(Tensor input, Tensor weight, Tensor? bias=None, int[2] stride=1, int[2] padding=0, int[2] output_padding=0, int groups=1, int[2] dilation=1) -> TensorzVaten::flatten.using_ints(Tensor(a) self, int start_dim=0, int end_dim=-1) -> Tensor(a)z0aten::cat(Tensor[] tensors, int dim=0) -> Tensorz2aten::stack(Tensor[] tensors, int dim=0) -> Tensorz6aten::permute(Tensor(a) self, int[] dims) -> Tensor(a)zSaten::movedim.intlist(Tensor(a) self, int[] source, int[] destination) -> Tensor(a)z3aten::view(Tensor(a) self, int[] size) -> Tensor(a)z:aten::expand_as(Tensor(a) self, Tensor other) -> Tensor(a)zMaten::expand(Tensor(a) self, int[] size, *, bool implicit=False) -> Tensor(a)zaaten::mean.dim(Tensor self, int[1]? dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensorzhaten::sum.dim_IntList(Tensor self, int[1]? dim, bool keepdim=False, *, ScalarType? dtype=None) -> TensorzZaten::max.dim(Tensor self, int dim, bool keepdim=False) -> (Tensor values, Tensor indices)z<aten::mean(Tensor self, *, ScalarType? dtype=None) -> Tensorz;aten::sum(Tensor self, *, ScalarType? dtype=None) -> Tensorz^aten::addmm(Tensor self, Tensor mat1, Tensor mat2, *, Scalar beta=1, Scalar alpha=1) -> Tensorzbaten::upsample_nearest2d.vec(Tensor input, int[]? output_size, float[]? scale_factors) -> (Tensor)z_aten::quantize_per_tensor(Tensor self, float scale, int zero_point, ScalarType dtype) -> Tensorzraten::quantize_per_tensor.tensor_qparams(Tensor self, Tensor scale, Tensor zero_point, ScalarType dtype) -> Tensorz'aten::dequantize(Tensor self) -> TensorzNquantized::add(Tensor qa, Tensor qb, float scale, int zero_point) -> Tensor qczFaten::argmax(Tensor self, int? dim=None, bool keepdim=False) -> Tensorz-aten::bmm(Tensor self, Tensor mat2) -> Tensorz-aten::_shape_as_tensor(Tensor self) -> Tensorzraten::topk(Tensor self, int k, int dim=-1, bool largest=True, bool sorted=True) -> (Tensor values, Tensor indices)z‹aten::nll_loss_forward(Tensor self, Tensor target, Tensor? weight, int reduction, int ignore_index) -> (Tensor output, Tensor total_weight)z‚aten::native_layer_norm(Tensor input, int[] normalized_shape, Tensor? weight, Tensor? bias, float eps) -> (Tensor, Tensor, Tensor)z´aten::native_batch_norm(Tensor input, Tensor? weight, Tensor? bias, Tensor? running_mean, Tensor? running_var, bool training, float momentum, float eps) -> (Tensor, Tensor, Tensor)z¹aten::_native_batch_norm_legit(Tensor input, Tensor? weight, Tensor? bias, Tensor running_mean, Tensor running_var, bool training, float momentum, float eps) -> (Tensor, Tensor, Tensor)zÂaten::_native_batch_norm_legit.no_stats(Tensor input, Tensor? weight, Tensor? bias, Tensor running_mean, Tensor running_var, bool training, float momentum, float eps) -> (Tensor, Tensor, Tensor)zœaten::cross_entropy_loss(Tensor self, Tensor target, Tensor? weight=None, int reduction=Mean, SymInt ignore_index=-100, float label_smoothing=0.0) -> TensorzCaten::lerp.Tensor(Tensor self, Tensor end, Tensor weight) -> TensorzMaten::where.ScalarSelf(Tensor condition, Scalar self, Tensor other) -> TensorzQaten::add_.Tensor(Tensor(a!) self, Tensor other, *, Scalar alpha=1) -> Tensor(a!)z&aten::nonzero(Tensor self) -> (Tensor))r4   FF)NNNNr   N)T)NF)r4   )Nr   r  r  )erè   Útypingr   r   r   r   r   r   r   rt   ÚfloatÚnumberr  r   r!   r"   r*   r-   r/   r1   r7   r:   r=   r;   r?   ÚboolrB   rJ   rK   rO   rX   rZ   rj   rp   rq   ru   rx   rz   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Ý   rG   râ   r‡   rê   rì   rî   rð   rø   rû   rý   rþ   r  r  r  r  r  r
  r  r  r  r  ZScriptFunctionZScriptFnr  ÚstrÚ__annotations__r  r  r  r   r#  r   r   r   r   Ú<module>   sD   $  
  ÿùúò$úGú

ý  ûû    ÿ   ÿ+""

ù 
ù
ù
ù
ü     ø




÷(
ö,
ò



÷
ù     ÿ	      ÿ$!  ÿ  þ,  
 þ þ



ù   ú
ù  ÿþ ÿ ÿþ ÿ
þþþþþ
 ÿ ÿ ÿþ ÿ ÿý ÿþþþ ÿþþ ÿþþþþþþþþþ ÿþ ÿþþþþ ÿ ÿþþþþþ ÿ ÿþþþþþþþþþþ  ÿ