Ë
    Ž\;j�‘  ã                   ó  — d dl Z d dl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	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6 d„ Z7d„ Z8d	„ Z9d
„ Z:d„ Z;	  e*d«      d„ «       Z< e*d«      d„ «       Z= e*d«      d„ «       Z> e*d«      d„ «       Z? e*d«      d„ «       Z@ e*d«      d„ «       ZA e*d«      d„ «       ZB e*d«      d„ «       ZC e*d«      d„ «       ZD e*d«      d„ «       ZE e*d «      d!„ «       ZF e*d"«      d#„ «       ZG e*d$«      d%„ «       ZH e*d&«      	 dÙd'„«       ZI e*d(«      d)„ «       ZJ e*d*«      d+„ «       ZK e*d,«      d-„ «       ZL e*d.«      d/„ «       ZM e*d0«      d1„ «       ZN e*d2«      d3„ «       ZO e*d4«      d5„ «       ZP e*d6«      d7„ «       ZQ e*d8«      d9„ «       ZR e*d:«      d;„ «       ZS e*d<«      d=„ «       ZT e*d>«      d?„ «       ZU e*d@«      dA„ «       ZV e*dB«      dC„ «       ZW e*dD«      dE„ «       ZX e*dF«      dG„ «       ZY e*dH«      dI„ «       ZZ e*dJ«      dK„ «       Z[ e*dL«      dM„ «       Z\ e*dN«      dO„ «       Z] e*dP«      dQ„ «       Z^ e*dR«      dS„ «       Z_ e*dT«      dU„ «       Z` e*dV«      dW„ «       Za e*dX«      dY„ «       Zb e*dZ«      d[„ «       Zc e*d\«      d]„ «       Zd e*d^«      d_„ «       Ze e*d`«      da„ «       Zf e+db«      dc„ «       Zg e+dd«      de„ «       Zh e+df«      dg„ «       Zi e+dh«      di„ «       Zj e+dj«      dk„ «       Zk e+dl«      dm„ «       Zl e+dn«      do„ «       Zm e+dp«      dq„ «       Zn e+dr«      ds„ «       Zo e+dt«      du„ «       Zp e+dv«      dw„ «       Zq e+dx«      dy„ «       Zr e+dz«      d{„ «       Zs e+d|«      d}„ «       Zt e+d~«      d„ «       Zu e+d€«      d�„ «       Zv e+d‚«      dƒ„ «       Zw e+d„«      d…„ «       Zx e+d†«      d‡„ «       Zy e+dˆ«      d‰„ «       Zz e+dŠ«      d‹„ «       Z{ e+dŒ«      d�„ «       Z| e+dŽ«      d�„ «       Z} e+d�«      d‘„ «       Z~ e+d’«      d“„ «       Z e+d”«      d•„ «       Z€ e+d–«      d—„ «       Z� e+d˜«      d™„ «       Z‚ e+dš«      d›„ «       Zƒ e+dœ«      d�„ «       Z„ e+dž«      dŸ„ «       Z… e+d «      d¡„ «       Z† e+d¢«      d£„ «       Z‡ e+d¤«      d¥„ «       Zˆ e+d¦«      d§„ «       Z‰ e)db«      d¨„ «       ZŠ e)dd«      d©„ «       Z‹ e)dh«      dª„ «       ZŒ e)dj«      d«„ «       Z� e)dl«      d¬„ «       ZŽ e)dn«      d­„ «       Z� e)dp«      d®„ «       Z� e)dr«      d¯„ «       Z‘ e)dt«      d°„ «       Z’ e)dv«      d±„ «       Z“ e)dx«      d²„ «       Z” e)dz«      d³„ «       Z• e)d|«      d´„ «       Z– e)d~«      dµ„ «       Z— e)d€«      d¶„ «       Z˜ e)d‚«      d·„ «       Z™ e)d„«      d¸„ «       Zš e)d†«      d¹„ «       Z› e)dˆ«      dº„ «       Zœ e)dŠ«      d»„ «       Z� e)dŒ«      d¼„ «       Zž e)dŽ«      d½„ «       ZŸ e)d�«      d¾„ «       Z  e)d˜«      d¿„ «       Z¡ e)dš«      dÀ„ «       Z¢ e)dœ«      dÁ„ «       Z£ e)dž«      dÂ„ «       Z¤ e)d «      dÃ„ «       Z¥ e)d¢«      dÄ„ «       Z¦ e)d¤«      dÅ„ «       Z§ e)d¦«      dÆ„ «       Z¨ e)df«      dÇ„ «       Z© e,db«      dÈ„ «       Zª e,dd«      dÉ„ «       Z« e,dh«      dÊ„ «       Z¬ e,dj«      dË„ «       Z­ e,d|«      dÌ„ «       Z® e,d~«      dÍ„ «       Z¯ e,d€«      dÎ„ «       Z° e,d‚«      dÏ„ «       Z± e,d„«      dÐ„ «       Z² e,d†«      dÑ„ «       Z³ e,dˆ«      dÒ„ «       Z´ e,dŠ«      dÓ„ «       Zµ e,dŒ«      dÔ„ «       Z¶ e,dŽ«      dÕ„ «       Z· e,d�«      dÖ„ «       Z¸ e,d˜«      d×„ «       Z¹ e,d¦«      dØ„ «       Zºy)Úé    Né   )Úprimops)!ÚaddÚ	bernoulliÚ	broadcastÚconcatÚcosÚdivÚeqÚerfÚexpÚ
fill_constÚgatherÚgeÚgtÚlogÚmatmulÚmulÚneÚnegÚ
reduce_sumÚreshapeÚrsqrtÚscatter_addÚselectÚ	set_valueÚsinÚslice_assignÚslice_selectÚsplitÚsqrtÚsubÚtanhÚ	transposeÚuniform_random)ÚREGISTER_JVPÚREGISTER_ORIG2PRIMÚREGISTER_PRIM2ORIGÚREGISTER_TRANSPOSEÚ	lookup_fnÚ
lookup_jvpÚlookup_orig2primÚlookup_prim2origÚlookup_transposeÚop_position_inputsÚop_position_output)ÚINT_DTYPE_2_STRINGÚget_output_var_listc                 ó>   — t        | j                  «      } || g|¢­Ž S ©N)r,   Útype©ÚopÚargsÚ
_lowerrules      úkG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/incubate/autograd/primrules.pyÚ
_orig2primr;   I   ó    € Ü! "§'¡'Ó*€JÙ�bÐ ˜4Ò Ð ó    c                 ó>   — t        | j                  «      } || g|¢­Ž S r4   )r-   r5   r6   s      r:   Ú
_prim2origr?   N   r<   r=   c                 ó>   — t        | j                  «      } || g|¢­Ž S r4   )r+   r5   )r7   r8   Ú_jvprules      r:   Ú_jvprB   S   s    € Ü˜"Ÿ'™'Ó"€HÙ�BÐ˜ÒÐr=   c                 ó@   — t        | j                  «      } || |g|¢­Ž S r4   )r.   r5   )r7   Údot_checkerr8   Ú_transposerules       r:   Ú
_transposerF   X   s"   € Ü% b§g¡gÓ.€NÙ˜"˜kÐ1¨DÒ1Ð1r=   c                 ó@   — t        | j                  «      } ||i |¤Ž}|S r4   )r*   r5   )r7   r8   ÚkwargsÚfnÚout_dots        r:   Ú
linear_jvprK   ]   s$   € Ü	�2—7‘7Ó	€BÙ�$Ð!˜&Ñ!€GØ€Nr=   Úelementwise_addc                 óz   — |j                   |j                   k7  rt        ||j                   ¬«      }t        ||«      S ©N©Úshape)rP   r   r   ©r7   ÚxÚys      r:   Úelementwise_add_orig2primrT   ƒ   ó.   € à‡w�w�!—'‘'ÒÜ�a˜qŸw™wÔ'ˆÜˆq�!‹9Ðr=   Úelementwise_subc                 óz   — |j                   |j                   k7  rt        ||j                   ¬«      }t        ||«      S rN   )rP   r   r"   rQ   s      r:   Úelementwise_sub_orig2primrX   Š   rU   r=   Úelementwise_mulc                 óz   — |j                   |j                   k7  rt        ||j                   ¬«      }t        ||«      S rN   )rP   r   r   rQ   s      r:   Úelementwise_mul_orig2primr[   ‘   rU   r=   Úelementwise_divc                 óŽ   — |j                   |j                   k7  rt        ||j                   ¬«      }t        j                  ||«      S rN   )rP   r   r   r
   rQ   s      r:   Úelementwise_div_orig2primr^   ˜   ó3   € à‡w�w�!—'‘'ÒÜ�a˜qŸw™wÔ'ˆÜ�;‰;�q˜!ÓÐr=   r#   c                 ó   — t        |«      S r4   )r#   ©r7   rR   s     r:   Útanh_orig2primrb   Ÿ   ó   € ä�‹7€Nr=   r   c                 ó   — t        |«      S r4   )r   ra   s     r:   Úsin_orig2primre   ¤   ó   € äˆq‹6€Mr=   r	   c                 ó   — t        |«      S r4   )r	   ra   s     r:   Úcos_orig2primrh   ©   rf   r=   r   c                 ó   — t        |«      S r4   )r   ra   s     r:   Úexp_orig2primrj   ®   rf   r=   r   c                 ó   — t        |«      S r4   )r   ra   s     r:   Úerf_orig2primrl   ³   rf   r=   Úabsc                 ó,   — t        j                  |«      S r4   )r   rm   ra   s     r:   Úabs_orig2primro   ¸   s   € ä�;‰;�q‹>Ðr=   r   c                 ó   — t        |«      S r4   )r   ra   s     r:   Úlog_orig2primrq   ½   rf   r=   Úfill_zeros_likec                 óF   — t        d|j                  |j                  ¬«      S ©Nç        ©ÚvaluerP   Údtype)r   rP   rx   ra   s     r:   Úfill_zeros_like_orig2primry   Â   s   € ä˜C q§w¡w°a·g±gÔ>Ð>r=   Úfill_any_likec           	      ó  — | j                  d«      dk(  r1t        | j                  d«      |j                  |j                  ¬«      S t        | j                  d«      |j                  t	        j                  | j                  d«      «      ¬«      S )Nrx   éÿÿÿÿrw   rv   )Úattrr   rP   rx   Úpaddlera   s     r:   Úfill_any_like_orig2primr   Ç   sh   € à	‡w�wˆwÓ˜2ÒÜ §¡¨Ó 0¸¿¹ÀqÇwÁwÔOÐOÜØ�g‰g�gÓØ�g‰gÜ�l‰l˜2Ÿ7™7 7Ó+Ó,ôð r=   Úfill_constantc           	      óÀ   — |s|s|rt        d«      ‚t        | j                  d«      | j                  d«      t        j                  | j                  d«      «      ¬«      S )NzKfill_const_orig2prim currently not support Tensor input of shape and value.rw   rP   rx   rv   )Ú	TypeErrorr   r}   r~   rx   )r7   Úshape_tensorÚshape_tensor_listÚvalue_tensors       r:   Úfill_const_orig2primr†   Ò   sX   € ñ Ñ(©LÜØYó
ð 	
ô Ø�g‰g�gÓØ�g‰g�gÓÜ�l‰l˜2Ÿ7™7 7Ó+Ó,ôð r=   Úsumc                 ó<   — |d   }|dd  D ]  }t        ||«      }Œ |S )Nr   r   )r   )r7   ÚxsÚx0rR   s       r:   Úsum_orig2primr‹   á   s+   € à	ˆA‰€BØ��‹VˆÜ��Q‹Z‰ð à€Ir=   Úindex_selectc                 ó<   — t        ||| j                  d«      ¬«      S )NÚdim)ÚindextensorÚaxis)r   r}   ©r7   Úindex_trR   s      r:   Úindex_select_orig2primr“   é   s   € ä�! ¨r¯w©w°u«~Ô>Ð>r=   Úscalec                 óD  — |€1t        |j                  |j                  | j                  d«      ¬«      }t        |j                  |j                  | j                  d«      ¬«      }| j                  d«      rt	        t        ||«      |«      S t        t	        ||«      |«      S )Nr”   ©rP   rx   rw   ÚbiasÚbias_after_scale)r   rP   rx   r}   r   r   )r7   Úscale_trR   Úbias_ts       r:   Úscale_orig2primr›   î   s|   € à€ÜØ—'‘' §¡°·±¸Ó0@ô
ˆô ˜aŸg™g¨Q¯W©W¸B¿G¹GÀF»OÔL€FØ	‡w�wÐ!Ô"Ü”3�q˜'“? FÓ+Ð+ä”3�q˜&“> 7Ó+Ð+r=   Úassignc                 ó^   — t        |j                  |j                  d¬«      }t        ||«      S )Nru   r–   )r   rP   rx   r   )r7   rR   Úzero_ts      r:   Úassign_orig2primrŸ   û   s$   € ä˜aŸg™g¨Q¯W©W¸CÔ@€FÜˆq�&‹>Ðr=   r!   c                 ó   — t        |«      S r4   )r!   ra   s     r:   Úsqrt_orig2primr¡     rc   r=   r   c                 ó   — t        |«      S r4   )r   ra   s     r:   Úrsqrt_orig2primr£     s   € ä�‹8€Or=   Ú	matmul_v2c                 ó  — d„ }t        |j                  «      dk  rt        |j                  «      dk  sJ d«       ‚t        |j                  «      dk(  rt        |d|j                  d   g¬«      }t        |j                  «      dk(  rt        ||j                  d   dg¬«      }| j                  d«      rt	        | ||j                  «      ¬«      }| j                  d	«      rt	        | ||j                  «      ¬«      }t        ||«      S )
Nc                 ób   — t        t        t        | «      «      «      }|d   |d   c|d<   |d<   |S )Néþÿÿÿr|   )ÚlistÚrangeÚlen)rP   Úrets     r:   Útransz"matmul_v2_orig2prim.<locals>.trans  s6   € Ü”5œ˜U›Ó$Ó%ˆØ˜r™7 C¨¡GÐˆˆB‰��R‘Øˆ
r=   é   z4Do not support multi batchsize dimensions currently.r   r   rO   Útrans_x©r�   Útrans_y)rª   rP   r   r}   r$   r   )r7   rR   rS   r¬   s       r:   Úmatmul_v2_orig2primr±     sÖ   € òô 	ˆA�G‰G‹�qÒœS §¡›\¨AÒ-ð>à=ó>Ø-ô ˆ1�7‰7ƒ|�qÒÜ�a  1§7¡7¨1¡:˜Ô/ˆÜ
ˆ1�7‰7ƒ|�qÒÜ�a §¡¨¡
¨A˜Ô/ˆØ	‡w�wˆyÔÜ�a™e A§G¡G›nÔ-ˆØ	‡w�wˆyÔÜ�a™e A§G¡G›nÔ-ˆÜ�!�Q‹<Ðr=   Úreshape2c                 ó´   — |�J d«       ‚|�J d«       ‚t        | «      \  }}t        ||j                  ¬«      t        |j                  |j                  d¬«      fS )Nz6Can not lower reshape2 into prim ops with shapetensor.z:Can not lower reshape2 into prim ops with shapetensorlist.rO   ru   r–   )r2   r   rP   r   rx   )r7   Úshape_tÚshape_tlrR   rS   Úxshapes         r:   Úreshape2_orig2primr·   "  sq   € ð 	ˆð@à?ó@Øð 	ÐðDàCóDØä# BÓ'�I€A€vÜ�1˜AŸG™GÔ$¤jØ�l‰l &§,¡,°cô'ð ð r=   r   c                 óL   — |�J d«       ‚t        || j                  d«      ¬«      S )Nz3Can not lower concat into prim ops with axistensor.r�   r¯   )r   r}   )r7   Úaxis_tr‰   s      r:   Úconcat_orig2primrº   0  s'   € àˆ>ÐPÐPÓPˆ>Ü�"˜2Ÿ7™7 6›?Ô+Ð+r=   Úslicec                 ód  — |�J d«       ‚|�J d«       ‚|�J d«       ‚|�J d«       ‚| j                  d«      }| j                  d«      }|D �cg c]  }d‘Œ }	}| j                  d«      }
t        ||||	|
¬	«      }| j                  d
«      r#t        |t        | «      d   j                  ¬«      }|S c c}w )Nz5Can not lower concat into prim ops with startstensor.z3Can not lower concat into prim ops with endstensor.z9Can not lower concat into prim ops with startstensorlist.z7Can not lower concat into prim ops with endstensorlist.ÚstartsÚendsr   Úaxes)r½   r¾   Ústridesr�   Údecrease_axisr   rO   )r}   r   r   r2   rP   )r7   Úends_tÚends_tlrR   Ústarts_tÚ	starts_tlr½   r¾   Ú_rÀ   r�   rS   s               r:   Úslice_orig2primrÇ   6  sÜ   € ð 	Ðð?à>ó?Øàˆ>ÐPÐPÓPˆ>àÐðCàBóCØð 	ˆðAà@óAØà�W‰W�XÓ€FØ�7‰7�6‹?€DÙ Ó!™&�QŠq˜&€GÐ!Ø�7‰7�6‹?€DÜ�Q˜v¨D¸'ÈÔM€AØ	‡w�wˆÔÜ�AÔ0°Ó4°QÑ7×=Ñ=Ô>ˆØ€Hùò "s   Á	B-Úsigmoidc                 óÒ   — t        t        d|j                  |j                  ¬«      t	        t        d|j                  |j                  ¬«      t        t        |«      «      «      «      S ©Nç      ð?rv   )r
   r   rP   rx   r   r   r   ra   s     r:   Úsigmoid_orig2primrÌ   L  sF   € äÜ˜ A§G¡G°1·7±7Ô;Ü	ŒZ˜c¨¯©¸¿¹Ô@Ä#ÄcÈ!ÃfÃ+Ó	Nóð r=   Úp_normc                 ó¾  — d„ }| j                  d«      sJ d«       ‚t        |j                  «      dkD  rt        | ||j                  «      g¬«      }t	        | j                  d«      dz
  «      dk  r!t        t        t        ||«      d	g¬
«      «      S t	        | j                  d«      dz
  «      dk  r!t        t        j                  |«      d	g¬
«      S t        d«      ‚)Nc                 ó"   — d}| D ]  }||z  }Œ	 |S )Nr   © )rP   ÚnÚss      r:   Únum_elz p_norm_orig2prim.<locals>.num_elV  s   € ØˆÛˆAØ�A‘‰Að àˆr=   Úasvectorz5Only support lower pnorm when asvector=True currentlyr   rO   Úporderç       @gñhãˆµøä>r   r¯   rË   z'Only support lower l2/l1 norm currently)
r}   rª   rP   r   rm   r!   r   r   r   ÚRuntimeError)r7   rR   rÓ   s      r:   Úp_norm_orig2primrØ   T  sÆ   € òð �7‰7Øôð ?à>ó?ð ô ˆ1�7‰7ƒ|�aÒÜ�A™f Q§W¡W›oÐ.Ô/ˆä
ˆ2�7‰7�8Ó˜sÑ"Ó# dÒ*Ü”Jœs 1 a›y°¨sÔ3Ó4Ð4Ü	ˆR�W‰W�XÓ Ñ$Ó	%¨Ò	,Üœ'Ÿ+™+ a›.°¨sÔ3Ð3äÐDÓEÐEr=   Úcastc                 ór   — t        j                  |t        j                  | j	                  d«      «      «      S )NÚ	out_dtype)r   rÙ   r~   rx   r}   ra   s     r:   Úcast_orig2primrÜ   j  s%   € ä�<‰<˜œ6Ÿ<™<¨¯©°Ó(<Ó=Ó>Ð>r=   Úwherec                 ó   — t        |||«      S r4   )r   ©r7   Ú	conditionrR   rS   s       r:   Úselect_orig2primrá   p  s   € ä�)˜Q Ó"Ð"r=   Úequalc                 óz   — |j                   |j                   k7  rt        ||j                   ¬«      }t        ||«      S rN   )rP   r   r   rQ   s      r:   Úequal_orig2primrä   u  ó-   € à‡w�w�!—'‘'ÒÜ�a˜qŸw™wÔ'ˆÜˆa�‹8€Or=   Ú	not_equalc                 óz   — |j                   |j                   k7  rt        ||j                   ¬«      }t        ||«      S rN   )rP   r   r   rQ   s      r:   Úne_orig2primrè   |  rå   r=   Úgreater_thanc                 óz   — |j                   |j                   k7  rt        ||j                   ¬«      }t        ||«      S rN   )rP   r   r   rQ   s      r:   Úgt_orig2primrë   ƒ  rå   r=   Úgreater_equalc                 óz   — |j                   |j                   k7  rt        ||j                   ¬«      }t        ||«      S rN   )rP   r   r   rQ   s      r:   Úge_orig2primrî   Š  rå   r=   Úelementwise_powc                 ó’   — |j                   |j                   k7  rt        ||j                   ¬«      }t        j                  ||«      }|S rN   )rP   r   r   Úpow)r7   rR   rS   Úzs       r:   Úelementwise_pow_orig2primró   ’  s7   € à‡w�w�!—'‘'ÒÜ�a˜qŸw™wÔ'ˆÜ�‰�A�qÓ€AØ€Hr=   rñ   c                 óŠ   — t        j                  |t        | j                  d«      |j                  |j
                  «      «      S )NÚfactor)r   rñ   r   r}   rP   rx   rQ   s      r:   Úpow_orig2primrö   ›  s/   € ô �;‰;�qœ* R§W¡W¨XÓ%6¸¿¹ÀÇÁÓIÓJÐJr=   Úsquarec                 ó,   — t        j                  |«      S r4   )r   r÷   ra   s     r:   Úsquare_orig2primrù   ¡  s   € ä�>‰>˜!ÓÐr=   Úelementwise_maxc                 óŽ   — |j                   |j                   k7  rt        ||j                   ¬«      }t        j                  ||«      S rN   )rP   r   r   ÚmaxrQ   s      r:   Úelementwise_max_orig2primrý   ¦  r_   r=   Úgeluc                 óª  — | j                  d«      �rt        t        d|j                  |j                  «      t        t        d|j                  |j                  «      t        t        t        t        j                  dt        j                  z  «      |j                  |j                  «      t        |t        t        d|j                  |j                  «      t        j                  |t        d|j                  |j                  «      «      «      «      «      «      «      «      }t        ||«      S t        t        t        d|j                  |j                  «      |«      t        t        d|j                  |j                  «      t        t        |t        dt        j                  d«      z  |j                  |j                  «      «      «      «      «      S )	NÚapproximateg      à?rË   é   g÷Hmâä¦?g      @r   rÖ   )r}   r   r   rP   rx   r   r#   Úmathr!   Úpir   rñ   r   )r7   rR   Úcdfs      r:   Úgelu_orig2primr  ­  sE  € à	‡w�wˆ}ÕÜÜ�s˜AŸG™G Q§W¡WÓ-ÜÜ˜3 §¡¨¯©Ó1ÜÜÜ"¤4§9¡9¨Q´·±©[Ó#9¸1¿7¹7ÀAÇGÁGÓLÜØÜÜ *¨8°Q·W±W¸a¿g¹gÓ FÜ '§¡Ø$%¤z°#°q·w±wÀÇÁÓ'Hó!"óóóóóó
ˆô( �1�c‹{ÐäÜ”
˜3 §¡¨¯©Ó1°1Ó5ÜÜ˜3 §¡¨¯©Ó1Ü”C˜œ: a¬$¯)©)°C«.Ñ&8¸!¿'¹'À1Ç7Á7ÓKÓLÓMóó
ð 	
r=   Údropoutc           
      óp  — |�J d«       ‚t        |j                  |j                  | j                  d«      ¬«      }| j                  d«      dk(  r¦| j                  d«      snt	        t        ||«      t        d| j                  d«      z
  |j                  |j                  «      «      }t        j                  |t        j                  ¬«      |fS t        j                  |t        j                  ¬«      |fS | j                  d«      d	k(  r¤| j                  d«      s1t        j                  |t        j                  ¬«      t        ||«      fS t        j                  |t        j                  ¬«      t        |t        d| j                  d«      z
  |j                  |j                  «      «      fS t        d
«      ‚)Nz4Can not lower dropout into prim ops with seedtensor.Údropout_prob)rP   rx   ÚpÚdropout_implementationÚupscale_in_trainÚis_testrË   )rx   Údowngrade_in_inferzXUnsupported dropout_implementation, only support upscale_in_train and downgrade_in_infer)r   rP   rx   r}   r
   r   r   r   rÙ   r~   Úuint8r×   )r7   Úseed_trR   ÚmaskÚouts        r:   Údropout_orig2primr  Ï  sZ  € ð 	ˆð>à=ó>Øä˜1Ÿ7™7¨!¯'©'°R·W±W¸^Ó5LÔM€DØ	‡w�wÐ'Ó(Ð,>Ò>Ø�w‰w�yÔ!ÜÜ�A�t“Ü˜3 §¡¨Ó!8Ñ8¸!¿'¹'À1Ç7Á7ÓKóˆCô —<‘< ¬F¯L©LÔ9¸3Ð>Ð>ä—<‘< ¬F¯L©LÔ9¸1Ð<Ð<Ø	�‰Ð)Ó	*Ð.BÒ	BØ�w‰w�yÔ!Ü—<‘< ¬F¯L©LÔ9¼3¸qÀ$»<ÐGÐGä—<‘< ¬F¯L©LÔ9¼3Ø”:˜c B§G¡G¨NÓ$;Ñ;¸Q¿W¹WÀaÇgÁgÓNó<ð ð ô Øfó
ð 	
r=   r%   c                 ó  — |s|rt        d«      ‚| j                  d«      }| j                  d«      }| j                  d«      }t        j                  | j                  d«      «      }| j                  d«      }t	        |||||¬«      S )NzZuniform_random_orig2prim currently not support ShapeTensor input or ShapeTensorList input.Úminrü   Úseedrx   rP   rO   )r‚   r}   r~   rx   r%   )r7   r´   rµ   Ú	min_valueÚ	max_valuer  rx   rP   s           r:   Úuniform_random_orig2primr  ë  sx   € á‘(ÜØhó
ð 	
ð —‘˜“€IØ—‘˜“€IØ�7‰7�6‹?€DÜ�L‰L˜Ÿ™ Ó)Ó*€EØ�G‰G�GÓ€EÜ˜% ¨I°tÀ5ÔIÐIr=   r   c                 óÐ   — | j                  d«      r(t        t        dt        |j                  «      «      «      n| j                  d«      }t        ||| j                  d«      ¬«      S )NÚ
reduce_allr   rŽ   Úkeep_dim©r�   Úkeepdim)r}   Útupler©   rª   rP   r   ©r7   rR   r¿   s      r:   Úreduce_sum_orig2primr   ù  sS   € ð �7‰7�<Ô ô 	Œe�A”s˜1Ÿ7™7“|Ó$Ô%à�W‰W�U‹^ð 	ô
 �a˜d¨B¯G©G°JÓ,?Ô@Ð@r=   Úreduce_meanc                 óâ   — | j                  d«      r(t        t        dt        |j                  «      «      «      n| j                  d«      }t        j                  ||| j                  d«      «      S )Nr  r   rŽ   r  )r}   r  r©   rª   rP   r   Úmeanr  s      r:   Úreduce_mean_orig2primr$    sW   € ð �7‰7�<Ô ô 	Œe�A”s˜1Ÿ7™7“|Ó$Ô%à�W‰W�U‹^ð 	ô
 �<‰<˜˜4 §¡¨Ó!4Ó5Ð5r=   Ú
batch_normc                 ó®  — | j                  d«      }| j                  d«      }| j                  d«      }	| j                  d«      }
| j                  d«      }| j                  d«      }t        | j                  «      dk(  rd nt        | «      d   }|
d	v rdnt        |j                  «      dz
  }|	xr | xs |}t        j                  ||||||||||¬
«
      S )NÚmomentumÚepsilonr  Údata_layoutÚuse_global_statsÚtrainable_statisticsé   r   )ÚNCÚNCLÚNCHWÚNCHWD)Úepsr'  Úuse_run_statÚreserve_space)r}   rª   Úoutput_namesr2   rP   r   r%  )r7   r—   Úrun_meanÚmomentum_tensorr”   Úrun_varrR   r'  r1  r  r)  r*  r+  r3  Úfeature_axisr2  s                   r:   Úbatch_norm_orig2primr9    sé   € ð �w‰w�zÓ"€HØ
�'‰'�)Ó
€CØ�g‰g�iÓ €GØ—'‘'˜-Ó(€KØ—w‘wÐ1Ó2ÐØŸ7™7Ð#9Ó:Ðä�B—O‘OÓ$¨Ò)‰Ô/BÀ2Ó/FÀqÑ/Ið ð
 Ð:Ñ:‰ÄÀAÇGÁGÃÈqÑ@Pð ð Ò:Ð%9Ð!9ÒOÐ?O€Lä×ÑØ	ØØØØØØØØ!Ø#ôð r=   Úsizec                 ó�   — t        t        j                  t        j                  |j
                  «      dt        j                  «      S )NrÐ   )r   Ú	functoolsÚreduceÚoperatorr   rP   r~   Úint64ra   s     r:   Úsize_orig2primr@  .  s*   € ä”i×&Ñ&¤x§|¡|°Q·W±WÓ=¸rÄ6Ç<Á<ÓPÐPr=   Úadd_pc                 ó.   — t        j                  ||«      S r4   )r~   r   rQ   s      r:   Úadd_prim2origrC  4  ó   € ä�:‰:�a˜ÓÐr=   Úsub_pc                 ó.   — t        j                  ||«      S r4   )r~   ÚsubtractrQ   s      r:   Úsub_prim2origrH  9  ó   € ä�?‰?˜1˜aÓ Ð r=   Úrsqrt_pc                 ó,   — t        j                  |«      S r4   )r~   r   ra   s     r:   Úrsqrt_prim2origrL  >  s   € ä�<‰<˜‹?Ðr=   Úmul_pc                 ó.   — t        j                  ||«      S r4   )r~   ÚmultiplyrQ   s      r:   Úmul_prim2origrP  C  rI  r=   Údiv_pc                 ó.   — t        j                  ||«      S r4   )r~   ÚdividerQ   s      r:   Údiv_prim2origrT  H  ó   € ä�=‰=˜˜AÓÐr=   Úsqrt_pc                 ó,   — t        j                  |«      S r4   )r~   r!   ra   s     r:   Úsqrt_prim2origrX  M  ó   € ä�;‰;�q‹>Ðr=   Útanh_pc                 ó,   — t        j                  |«      S r4   )r~   r#   ra   s     r:   Útanh_prim2origr\  R  rY  r=   Úsin_pc                 ó,   — t        j                  |«      S r4   )r~   r   ra   s     r:   Úsin_prim2origr_  W  ó   € ä�:‰:�a‹=Ðr=   Úcos_pc                 ó,   — t        j                  |«      S r4   )r~   r	   ra   s     r:   Úcos_prim2origrc  \  r`  r=   Úexp_pc                 ó,   — t        j                  |«      S r4   )r~   r   ra   s     r:   Úexp_prim2origrf  a  r`  r=   Úerf_pc                 ó,   — t        j                  |«      S r4   )r~   r   ra   s     r:   Úerf_prim2origri  f  r`  r=   Úabs_pc                 ó,   — t        j                  |«      S r4   )r~   rm   ra   s     r:   Úabs_prim2origrl  k  r`  r=   Úlog_pc                 ó,   — t        j                  |«      S r4   )r~   r   ra   s     r:   Úlog_prim2origro  p  r`  r=   Ú	reshape_pc                 óN   — t        j                  || j                  d«      ¬«      S ©NrP   rO   )r~   r   r}   ra   s     r:   Úreshape_prim2origrs  u  s   € ä�>‰>˜! 2§7¡7¨7Ó#3Ô4Ð4r=   Úbroadcast_pc                 óN   — t        j                  || j                  d«      ¬«      S rr  )r~   Úbroadcast_tor}   ra   s     r:   Úbroadcast_prim2origrw  z  s   € ä×Ñ˜q¨¯©°Ó(8Ô9Ð9r=   Útranspose_pc                 óN   — t        j                  || j                  d«      ¬«      S )Nr�   )Úperm)r~   r$   r}   ra   s     r:   Útranspose_prim2origr{    s   € ä×Ñ˜A B§G¡G¨F£OÔ4Ð4r=   Úsplit_pc                 ó˜   — | j                  d«      }t        |«      dk(  r|d   }t        j                  ||| j                  d«      ¬«      S )NÚnum_or_sectionsr   r   r�   ©r~  r�   )r}   rª   r~   r    )r7   rR   r~  s      r:   Úsplit_prim2origr€  „  sH   € à—g‘gÐ/Ó0€OÜ
ˆ?Ó˜qÒ Ø)¨!Ñ,ˆÜ�<‰<Ø	˜?°·±¸³ôð r=   Úconcat_pc                 óN   — t        j                  || j                  d«      ¬«      S ©Nr�   r¯   )r~   r   r}   )r7   r‰   s     r:   Úconcat_prim2origr„  Ž  s   € ä�=‰=˜ "§'¡'¨&£/Ô2Ð2r=   Úreduce_sum_pc                 ón   — t        j                  || j                  d«      | j                  d«      ¬«      S ©Nr�   r  r  )r~   r‡   r}   ra   s     r:   Úreduce_prim2origrˆ  “  s&   € ä�:‰:�a˜bŸg™g f›o°r·w±w¸yÓ7IÔJÐJr=   Úmatmul_pc                 ó.   — t        j                  ||«      S r4   )r~   r   rQ   s      r:   Úmatmul_prim2origr‹  ˜  rU  r=   Úslice_select_pc           	      ó®   — t        j                  || j                  d«      | j                  d«      | j                  d«      | j                  d«      ¬«      S )Nr�   r½   r¾   rÀ   )r¿   r½   r¾   rÀ   )r~   Ústrided_slicer}   ra   s     r:   Úslice_select_prim2origr�  �  sF   € ä×ÑØ	Ø�W‰W�V‹_Ø�w‰w�xÓ Ø�W‰W�V‹_Ø—‘˜	Ó"ôð r=   Úslice_assign_pc           
      óÈ   — t        j                  |«      }t        ||| j                  d«      | j                  d«      | j                  d«      | j                  d«      |¬«      S )Nr�   r½   r¾   rÀ   )r�   r½   r¾   rÀ   r  )r~   rœ   r   r}   )r7   rR   rS   Úx_copys       r:   Úslice_assign_prim2origr“  ¨  sT   € ä�]‰]˜1Ó€FÜØØ	Ø�W‰W�V‹_Ø�w‰w�xÓ Ø�W‰W�V‹_Ø—‘˜	Ó"Øôð r=   Úgather_pc                 óP   — t        j                  ||| j                  d«      ¬«      S rƒ  )r~   r   r}   r‘   s      r:   Úgather_prim2origr–  ¶  s   € ä�=‰=˜˜G¨"¯'©'°&«/Ô:Ð:r=   Úscatter_add_pc                 óØ   — | j                  d«      dk(  sJ d«       ‚t        j                  ||j                  ¬«      }t        j                  |||d¬«      }t        j
                  ||«      S )Nr�   r   zOnly support axis==0 currently)rR   rx   F)rR   ÚindexÚupdatesÚ	overwrite)r}   r~   Ú
zeros_likerx   Úscatterr   )r7   r’   rR   rS   ÚzerosÚtmps         r:   Úscatter_add_prim2origr   »  sY   € à�7‰7�6‹?˜aÒÐAÐ!AÓAÐÜ×Ñ ¨¯©Ô1€EÜ
�.‰.˜5¨¸ÀeÔ
L€CÜ�:‰:�a˜ÓÐr=   Úfill_constant_pc                 óš   — t        j                  | j                  d«      | j                  d«      t        | j                  d«         ¬«      S )NrP   rw   rx   ©rP   Ú
fill_valuerx   )r~   Úfullr}   r1   ©r7   s    r:   Úfill_constant_prim2origr§  Ã  s<   € ä�;‰;Ø�g‰g�gÓØ—7‘7˜7Ó#Ü  §¡¨Ó!1Ñ2ôð r=   Úbernoulli_pc                 óÄ   — t        j                  | j                  d«      | j                  d«      t        | j                  d«         ¬«      }t        j                  |«      S )NrP   r	  rx   r£  )r~   r¥  r}   r1   r   )r7   Úts     r:   Úbernoulli_prim2origr«  Ì  sK   € ä�‰Ø�g‰g�gÓØ—7‘7˜3“<Ü  §¡¨Ó!1Ñ2ô	€Aô
 ×Ñ˜AÓÐr=   Úuniform_random_pc           	      óÚ   — t        j                  | j                  d«      t        | j                  d«         | j                  d«      | j                  d«      | j                  d«      ¬«      S )NrP   rx   r  rü   r  )rP   rx   r  rü   r  )r~   Úuniformr}   r1   r¦  s    r:   Úuniform_random_prim2origr¯  Ö  sQ   € ä�>‰>Ø�g‰g�gÓÜ  §¡¨Ó!1Ñ2Ø�G‰G�E‹NØ�G‰G�E‹NØ�W‰W�V‹_ôð r=   Úselect_pc                 ó0   — t        j                  |||«      S r4   )r~   rÝ   rß   s       r:   Úselect_prim2origr²  á  s   € ä�<‰<˜	 1 aÓ(Ð(r=   Úeq_pc                 ó.   — t        j                  ||«      S r4   )r~   râ   rQ   s      r:   Úeq_prim2origrµ  æ  s   € ä�<‰<˜˜1ÓÐr=   Úgt_pc                 ó.   — t        j                  ||«      S r4   )r~   ré   rQ   s      r:   Úgt_prim2origr¸  ë  s   € ä×Ñ˜q !Ó$Ð$r=   Úge_pc                 ó.   — t        j                  ||«      S r4   )r~   rì   rQ   s      r:   Úge_prim2origr»  ð  s   € ä×Ñ  1Ó%Ð%r=   Úne_pc                 ó.   — t        j                  ||«      S r4   )r~   ræ   rQ   s      r:   Úne_prim2origr¾  õ  s   € ä×Ñ˜A˜qÓ!Ð!r=   Úpow_pc                 ó.   — t        j                  ||«      S r4   )r~   rñ   rQ   s      r:   Úpow_prim2origrÁ  ú  rD  r=   Úmax_pc                 ó.   — t        j                  ||«      S r4   )r~   ÚmaximumrQ   s      r:   Úmax_prim2origrÅ  ÿ  s   € ä�>‰>˜!˜QÓÐr=   Úcast_pc                 ór   — t        j                  |t        j                  | j                  d«      «      «      S )Nrx   )r~   rÙ   rx   r}   ra   s     r:   Úcast_prim2origrÈ    s%   € ä�;‰;�qœ&Ÿ,™, r§w¡w¨wÓ'7Ó8Ó9Ð9r=   c                 ó,   — |€|S |€|S t        | ||«      S r4   )rK   ©r7   Úx_dotÚy_dots      r:   Úadd_jvprÍ  
  s%   € à€}ØˆØ	ˆØˆä˜"˜e UÓ+Ð+r=   c                 ó>   — |€t        |«      S |€|S t        | ||«      S r4   )r   rK   rÊ  s      r:   Úsub_jvprÏ    s*   € à€}Ü�5‹zÐØ	ˆØˆä˜"˜e UÓ+Ð+r=   c                 ó¬   — |€|€y t        | «      \  }}|€t        ||«      S |€t        ||«      S t        ||«      t        ||«      }}t        ||«      }|S r4   )r/   r   r   )r7   rË  rÌ  rR   rS   Út1Út2Úz_dots           r:   Úmul_jvprÔ    sc   € à€}˜˜ØÜ˜bÓ!�D€A€qØ€}Ü�1�e‹}ÐØ	ˆÜ�5˜!‹}Ðä�U˜A“¤ A u£ˆBˆÜ�B˜“ˆØˆr=   c           	      ó
  — |€|€y t        | «      \  }}|€t        ||«      S |€)t        t        t        ||«      t        ||«      «      «      S t        ||«      }t        t        ||«      t        ||«      «      }t	        ||«      S r4   )r/   r
   r   r   r"   ©r7   rË  rÌ  rR   rS   rÑ  rÒ  s          r:   Údiv_jvpr×  -  s   € à€}˜˜ØÜ˜bÓ!�D€A€qØ€}Ü�5˜!‹}ÐØ	ˆÜ”3”s˜1˜e“}¤c¨!¨Q£iÓ0Ó1Ð1ä�˜‹]ˆÜ”�Q˜“¤ A q£	Ó*ˆÜ�2�r‹{Ðr=   c                 ó’   — |€y t        | «      }t        d|j                  |j                  ¬«      }t	        |t        ||«      «      }|S )NrÖ   rv   )r0   r   rP   rx   r
   r   )r7   rË  rS   Úc2rÌ  s        r:   Úsqrt_jvprÚ  <  sA   € à€}ØÜ˜2Ó€AÜ	˜# Q§W¡W°A·G±GÔ	<€BÜ�”s˜2˜q“zÓ"€EØ€Lr=   c           
      ó¦   — |€y t        | «      }t        d|j                  |j                  ¬«      }t	        |t        |t	        ||«      «      «      }|S rÊ   )r0   r   rP   rx   r   r"   )r7   rË  rS   Úc1rÌ  s        r:   Útanh_jvprÝ  F  sH   € à€}ØÜ˜2Ó€AÜ	˜# Q§W¡W°A·G±GÔ	<€BÜ�”s˜2œs 1 a›yÓ)Ó*€EØ€Lr=   c                 óL   — |€y t        | «      \  }t        |t        |«      «      S r4   )r/   r   r	   ©r7   rË  rR   s      r:   Úsin_jvprà  P  s'   € à€}ØÜ˜bÓ!�D€QÜˆu”c˜!“fÓÐr=   c                 ó^   — |€y t        | «      \  }t        |t        t        |«      «      «      S r4   )r/   r   r   r   rß  s      r:   Úcos_jvprâ  X  s+   € à€}ØÜ˜bÓ!�D€QÜˆu”cœ#˜a›&“kÓ"Ð"r=   c                 ó6   — |€y t        | «      }t        ||«      S r4   )r0   r   ©r7   rË  rS   s      r:   Úexp_jvprå  `  s    € à€}ØÜ˜2Ó€AÜˆu�a‹=Ðr=   c                 ó^  — |€y t        | «      \  }t        t        dt        j                  t        j
                  «      z  |j                  |j                  «      t        |t        t        t        j                  |t        d|j                  |j                  «      «      «      «      «      «      S )NrÖ   )r/   r   r   r  r!   r  rP   rx   r   r   r   rñ   rß  s      r:   Úerf_jvprç  h  sy   € à€}ØÜ˜bÓ!�D€QÜÜ�3œŸ™¤4§7¡7Ó+Ñ+¨Q¯W©W°a·g±gÓ>ÜˆE”3”sœ7Ÿ;™; q¬*°S¸!¿'¹'À1Ç7Á7Ó*KÓLÓMÓNÓOóð r=   c           
      ó    — |€y t        | «      \  }t        t        |t        d|j                  |j
                  «      «      |t        |«      «      S )Nru   )r/   r   r   r   rP   rx   r   rß  s      r:   Úabs_jvpré  s  sA   € à€}ØÜ˜bÓ!�D€QÜ”"�Qœ
 3¨¯©°·±Ó9Ó:¸EÄ3ÀuÃ:ÓNÐNr=   c                 ó:   — |€y t        | «      \  }t        ||«      S r4   ©r/   r
   rß  s      r:   Úlog_jvprì  {  s"   € à€}ØÜ˜bÓ!�D€QÜˆu�a‹=Ðr=   c                 óF   — |€y | j                  d«      }t        | ||¬«      S rr  ©r}   rK   ©r7   rË  rP   s      r:   Úreshape_jvprð  ƒ  ó'   € à€}ØØ�G‰G�GÓ€EÜ�b˜% uÔ-Ð-r=   c                 óF   — |€y | j                  d«      }t        | ||¬«      S rr  rî  rï  s      r:   Úbroadcast_jvpró  ‹  rñ  r=   c                 óF   — |€y | j                  d«      }t        | ||¬«      S rƒ  rî  )r7   rË  r�   s      r:   Útranspose_jvprõ  “  s&   € à€}ØØ�7‰7�6‹?€DÜ�b˜% dÔ+Ð+r=   c                 ój   — |€y | j                  d«      }| j                  d«      }t        | |||¬«      S )Nr~  r�   r  rî  )r7   rË  r~  r�   s       r:   Ú	split_jvpr÷  ›  s7   € à€}ØØ—g‘gÐ/Ó0€OØ�7‰7�6‹?€DÜ�b˜%°ÀtÔLÐLr=   c                 óF   — |€y | j                  d«      }t        | ||¬«      S rƒ  rî  )r7   Úxs_dotr�   s      r:   Ú
concat_jvprú  ¤  s&   € à€~ØØ�7‰7�6‹?€DÜ�b˜& tÔ,Ð,r=   c                 ój   — |€y | j                  d«      }| j                  d«      }t        | |||¬«      S r‡  rî  )r7   rË  r�   r  s       r:   Úreduce_sum_jvprü  ¬  s6   € à€}ØØ�7‰7�6‹?€DØ�g‰g�iÓ €GÜ�b˜% d°GÔ<Ð<r=   c                 ó¨   — |€|€y t        | «      \  }}|€t        ||«      S |€t        ||«      S t        ||«      }t        ||«      }t        ||«      S r4   )r/   r   r   rÖ  s          r:   Ú
matmul_jvprþ  µ  sd   € à€}˜˜ØÜ˜bÓ!�D€A€qØ€}Ü�a˜ÓÐØ	ˆÜ�e˜QÓÐä�A�uÓˆÜ�E˜1ÓˆÜ�2�r‹{Ðr=   c                 ó´   — |€|S | j                  d«      }| j                  d«      }| j                  d«      }| j                  d«      }t        | |||||¬«      S )Nr�   r½   r¾   rÀ   ©r�   r½   r¾   rÀ   rî  )r7   rË  r�   r½   r¾   rÀ   s         r:   Úslice_select_jvpr  Ä  s\   € à€}ØˆØ�7‰7�6‹?€DØ�W‰W�XÓ€FØ�7‰7�6‹?€DØ�g‰g�iÓ €GÜØ
ˆE˜ V°$Àôð r=   c                 ód  — t        | «      \  }}|€	|€J d«       ‚| j                  d«      }| j                  d«      }| j                  d«      }| j                  d«      }|€2t        | t        d|j                  |j
                  ¬«      |||||¬«      S |€2t        | |t        d|j                  |j
                  ¬«      ||||¬«      S t        t        | t        d|j                  |j
                  ¬«      |||||¬«      t        | |t        d|j                  |j
                  ¬«      ||||¬«      «      S )	Nz0x_dot and y_dot can't be None at the same time. r�   r½   r¾   rÀ   ru   rv   r   )r/   r}   rK   r   rP   rx   r   )	r7   rË  rÌ  rR   rS   r�   r½   r¾   rÀ   s	            r:   Úslice_assign_jvpr  Ñ  s@  € ä˜bÓ!�D€A€qàÐ˜UÐ.ð:à9ó:Ø.à�7‰7�6‹?€DØ�W‰W�XÓ€FØ�7‰7�6‹?€DØ�g‰g�iÓ €GØ€}ÜØÜ˜S¨¯©°q·w±wÔ?ØØØØØô
ð 	
ð 
ˆÜØØÜ˜S¨¯©°q·w±wÔ?ØØØØô
ð 	
ô ÜØÜ˜S¨¯©°q·w±wÔ?ØØØØØô	
ô 	ØØÜ˜S¨¯©°q·w±wÔ?ØØØØô	
óð r=   c                 ód   — |€y t        | «      \  }}| j                  d«      }t        | |||¬«      S rƒ  ©r/   r}   rK   )r7   rË  r�   rÆ   r�   s        r:   Ú
gather_jvpr    s6   € à€}ØÜ'¨Ó+�N€A€{Ø�7‰7�6‹?€DÜ�b˜% °4Ô8Ð8r=   c                 óh   — |€y t        | «      \  }}}| j                  d«      }t        | ||||¬«      S rƒ  r  )r7   rË  rÌ  rÆ   r�   r�   s         r:   Úscatter_add_jvpr    s;   € à€}ØÜ*¨2Ó.Ñ€A€qˆ+Ø�7‰7�6‹?€DÜ�b˜% ¨¸$Ô?Ð?r=   c                 óÔ   — |€|€y t        | «      \  }}}|€"t        d|j                  |j                  ¬«      }|€"t        d|j                  |j                  ¬«      }t	        |||«      S rt   ©r/   r   rP   rx   r   )r7   Úcond_dotrË  rÌ  ÚcondrR   rS   s          r:   Ú
select_jvpr    sc   € à€}˜˜Øä# BÓ'�J€Dˆ!ˆQØ€}Ü ¨A¯G©G¸1¿7¹7ÔCˆØ€}Ü ¨A¯G©G¸1¿7¹7ÔCˆÜ�$˜˜uÓ%Ð%r=   c                 óp   — |€|€y t        | «      \  }}t        d|j                  |j                  ¬«      }|S rt   ©r/   r   rP   rx   ©r7   rË  rÌ  rR   rÆ   rÓ  s         r:   Úeq_jvpr  $  ó7   € à€}˜˜ØÜ˜bÓ!�D€A€qÜ˜S¨¯©°q·w±wÔ?€EØ€Lr=   c                 óp   — |€|€y t        | «      \  }}t        d|j                  |j                  ¬«      }|S rt   r  r  s         r:   Úgt_jvpr  -  r  r=   c                 óp   — |€|€y t        | «      \  }}t        d|j                  |j                  ¬«      }|S rt   r  r  s         r:   Úge_jvpr  6  r  r=   c                 óp   — |€|€y t        | «      \  }}t        d|j                  |j                  ¬«      }|S rt   r  r  s         r:   Úne_jvpr  ?  r  r=   c           	      ó  ‡— ˆfd„}‰€|€y t        | «      \  }}t        | «      }|€	 |||«      S ‰€t        |t        t        |«      |«      «      S  |||«      t        |t        t        |«      |«      «      }}t	        ||«      }	|	S )Nc           
      ó*  •— t        d|j                  |j                  ¬«      }t        d|j                  |j                  ¬«      }t        ||«      }t	        ||t        ||«      «      }t        ‰t        |t        j                  | |«      «      «      }|S )Nru   rv   rË   )	r   rP   rx   r   r   r"   r   r   rñ   )rR   rS   Úzero_yÚone_yr  Únew_yrÑ  rË  s          €r:   Ú_compute_t1zpow_jvp.<locals>._compute_t1J  sq   ø€ Ü #¨Q¯W©W¸A¿G¹GÔDˆÜ ¨A¯G©G¸1¿7¹7ÔCˆä�!�V‹}ˆÜ�t˜U¤C¨¨5£MÓ2ˆÜ�œ˜AœwŸ{™{¨1¨eÓ4Ó5Ó6ˆØˆ	r=   )r/   r0   r   r   r   )
r7   rË  rÌ  r  rR   rS   rò   rÑ  rÒ  rÓ  s
    `        r:   Úpow_jvpr  H  s�   ø€ ôð €}˜˜ØÜ˜bÓ!�D€A€qÜ˜2Ó€Aà€}Ù˜1˜aÓ Ð Ø	ˆÜ�5œ#œc !›f a›.Ó)Ð)á˜Q Ó"¤C¨¬s´3°q³6¸1«~Ó$>ˆBˆÜ�B˜“ˆØˆr=   c                 ó  — |€|€y t        | «      \  }}t        | «      }t        d|j                  |j                  ¬«      }|€t        t        ||«      ||«      S |€t        t        ||«      ||«      S t        t        ||«      ||«      S rt   )r/   r0   r   rP   rx   r   r   )r7   rË  rÌ  rR   rS   rò   Úz_zeross          r:   Úmax_jvpr"  b  s‡   € à€}˜˜Øä˜bÓ!�D€A€qÜ˜2Ó€AÜ˜s¨!¯'©'¸¿¹ÔA€Gð
 €}Ü”b˜˜A“h ¨Ó/Ð/Ø	ˆÜ”b˜˜A“h  wÓ/Ð/ä”b˜˜A“h  uÓ-Ð-r=   c                 óX   — t        | «      }t        j                  ||j                  «      S r4   )r0   r   rÙ   rx   rä  s      r:   Úcast_jvpr$  v  s!   € ä˜2Ó€AÜ�<‰<˜˜qŸw™wÓ'Ð'r=   c           	      ó¼   — |€y t        | «      }t        | «      }t        d|j                  |j                  ¬«      }t        |t        t        ||«      |«      «      }|S )Ng       Àrv   )r0   r/   r   rP   rx   r   r
   )r7   rË  rS   rR   rÙ  rÌ  s         r:   Ú	rsqrt_jvpr&  |  sR   € à€}ØÜ˜2Ó€AÜ˜2Ó€AÜ	˜$ a§g¡g°Q·W±WÔ	=€BÜ�”sœ3˜q !›9 bÓ)Ó*€EØ€Lr=   c                 óª   — t        | «      \  }} ||«      s" ||«      sJ d ||«      › d ||«      › d�«       ‚ ||«      r|nd } ||«      r|nd }||fS ©Nz>(check_dot(x) or check_dot(y)) must be True, but check_dot(x)=ú and check_dot(y)=Ú.)r/   ©r7   Ú	check_dotÚz_barrR   rS   Úx_barÚy_bars          r:   Úadd_transposer0  Š  sq   € ä˜bÓ!�D€A€qÙ�QŒ<™9 Qœ<ð ðÙ% a›L˜>Ð);¹IÀa»L¸>Èð	LóÐ'ñ ˜q”\‰E t€EÙ˜q”\‰E t€EØ�%ˆ<Ðr=   c                 ó¼   — t        | «      \  }} ||«      s" ||«      sJ d ||«      › d ||«      › d�«       ‚ ||«      r|nd } ||«      rt        |«      nd }||fS r(  )r/   r   r+  s          r:   Úsub_transposer2  –  su   € ä˜bÓ!�D€A€qÙ�QŒ<™9 Qœ<ð ðÙ% a›L˜>Ð);¹IÀa»L¸>Èð	LóÐ'ñ ˜q”\‰E t€EÙ# Aœ,ŒC�ŒJ¨D€EØ�%ˆ<Ðr=   c                 ó¼   — t        | «      \  }} ||«       ||«      z  sJ d ||«      › d ||«      › d�«       ‚ ||«      rt        ||«      d fS d t        ||«      fS )Nú=(check_dot(x) ^ check_dot(y)) must be True, but check_dot(x)=r)  r*  )r/   r   )r7   r,  r-  rR   rS   s        r:   Úmul_transposer5  ¢  sy   € ä˜bÓ!�D€A€qÙ�Q‹<™) A›,Ò&ð ðÙ% a›L˜>Ð);¹IÀa»L¸>Èð	LóÐ&ñ �„|Ü�5˜!‹}˜dÐ"Ð"à”S˜˜E“]Ð"Ð"r=   c                 óp   — t        | «      \  }} ||«      rJ d«       ‚ ||«      rt        ||«      nd }|d fS )Nzcheck_dot(y) must be Falserë  )r7   r,  r-  rR   rS   r.  s         r:   Údiv_transposer7  ¯  s@   € ä˜bÓ!�D€A€qÙ˜Œ|Ð9Ð9Ó9ÐÙ& qœ\ŒC��qŒM¨t€EØ�$ˆ;Ðr=   c                 óh   — t        | «      \  } ||«      sJ d«       ‚t        ||j                  ¬«      S )Núcheck_dot(x) must be TruerO   )r/   r   rP   ©r7   r,  r/  rR   s       r:   Úreshape_transposer;  ·  s1   € ä˜bÓ!�D€QÙ�QŒ<Ð4Ð4Ó4ˆ<Ü�5 §¡Ô(Ð(r=   c                 óv  — t        | «      \  } ||«      sJ d«       ‚t        |j                  «      t        |j                  «      z
  }t        t	        |«      «      }t        |j                  «      D ��cg c]  \  }}|dk(  sŒ||z   ‘Œ }}}||z  }t        ||d¬«      }	t        |	|j                  «      S c c}}w )Nr9  r   Fr  )r/   rª   rP   r¨   r©   Ú	enumerater   r   )
r7   r,  r/  rR   Úbatr�   ÚirÒ   r  r  s
             r:   Úbroadcast_transposer@  ¾  s¤   € ä˜bÓ!�D€QÙ�QŒ<Ð4Ð4Ó4ˆ<Ü
ˆe�k‰kÓ
œS §¡›\Ñ
)€CÜ”�c“
Ó€DÜ%.¨q¯w©wÔ%7ÔBÑ%7™T˜Q ¸1À»6��a“Ð%7€GÑBØˆG�O€Dä
�U ¨uÔ
5€CÜ�3˜Ÿ™Ó Ð ùó	 Cs   Á4B5ÂB5c                 óà   — t        | «      \  } ||«      sJ d«       ‚| j                  d«      }t        d„ t        |«      D «       «      }|D ��cg c]  \  }}|‘Œ	 }}}t	        ||¬«      S c c}}w )Nr9  r�   c              3   ó*   K  — | ]  \  }}||f–— Œ y ­wr4   rÐ   )Ú.0r?  Úks      r:   Ú	<genexpr>z&transpose_transpose.<locals>.<genexpr>Ð  s   è ø€ Ð:©/¡$ ! Q˜˜1”v©/ùs   ‚r¯   )r/   r}   Úsortedr=  r$   )r7   r,  r/  rR   r�   Ú	reorderedrD  r?  s           r:   Útranspose_transposerH  Ë  sk   € ä˜bÓ!�D€QÙ�QŒ<Ð4Ð4Ó4ˆ<Ø�7‰7�6‹?€DÜÑ:¬)°D¬/Ó:Ó:€IÙ#Ô$™)‘$�!�QŠA˜)€DÑ$Ü�U Ô&Ð&ùó %s   ÁA*c                 ór   — t        | «      \  } ||«      sJ d«       ‚t        || j                  d«      ¬«      S )Nr9  r�   r¯   )r/   r   r}   )r7   r,  Úys_barrR   s       r:   Úsplit_transposerK  Õ  s5   € ä˜bÓ!�D€QÙ�QŒ<Ð4Ð4Ó4ˆ<Ü�&˜rŸw™w v›Ô/Ð/r=   c                 ó"  — t        | «      \  }t        |t        j                  «      s|g}|D ]  } ||«      rŒJ d«       ‚ | j	                  d«      }|D �cg c]  }|j
                  |   ‘Œ }}t        |«      dk(  r|S t        |||¬«      S c c}w )Nr9  r�   r   r  )r/   Ú
isinstanceÚtypingÚSequencer}   rP   rª   r    )r7   r,  r/  r‰   rR   r�   Úsectionss          r:   Úconcat_transposerQ  Ü  s�   € ä˜rÓ"�E€RÜ�bœ&Ÿ/™/Ô*ØˆTˆÛˆÙ˜�|Ð8Ð8Ó8ˆ|ð à�7‰7�6‹?€DÙ')Ó*¡r !�—‘˜“ r€HÐ*Ü
ˆ8ƒ}˜ÒØˆÜ�¨°tÔ<Ð<ùò +s   ÁBc                 óô   ‡— t        | «      \  } ||«      sJ d«       ‚| j                  d«      Št        ˆfd„t        |j                  «      D «       «      }t        ||¬«      }t        ||j                  ¬«      S )Nr9  r�   c              3   ó4   •K  — | ]  \  }}|‰v rd n|–— Œ y­w)r   NrÐ   )rC  r?  r:  r¿   s      €r:   rE  z'reduce_sum_transpose.<locals>.<genexpr>ï  s#   øè ø€ ÐMÑ:L©w¨q°$�q˜D‘y‘! dÓ*Ñ:Lùs   ƒrO   )r/   r}   r  r=  rP   r   r   )r7   r,  r/  rR   rP   rª  r¿   s         @r:   Úreduce_sum_transposerT  ê  sd   ø€ ä˜bÓ!�D€QÙ�QŒ<Ð4Ð4Ó4ˆ<Ø�7‰7�6‹?€DÜÓM¼)ÀAÇGÁGÔ:LÓMÓM€EÜ�˜UÔ#€AÜ�Q˜aŸg™gÔ&Ð&r=   c                 ó(  — t        | «      \  }} ||«       ||«      z  sJ d ||«      › d ||«      › d�«       ‚t        |j                  «      dk(  rddgng d¢} ||«      rt        |t	        ||¬«      «      d fS d t        t	        ||¬«      |«      fS )	Nr4  r)  r*  r  r   r   )r   r  r   r¯   )r/   rª   rP   r   r$   )r7   r,  r-  rR   rS   r�   s         r:   Úmatmul_transposerV  ô  s£   € ä˜bÓ!�D€A€qÙ�Q‹<™) A›,Ò&ð ðÙ% a›L˜>Ð);¹IÀa»L¸>Èð	LóÐ&ô
 ˜Ÿ™“\ QÒ&ˆAˆq‰6ªI€DÙ�„|Ü�eœY q¨tÔ4Ó5°tÐ;Ð;à”VœI a¨dÔ3°UÓ;Ð;Ð;r=   c                 ó(  — t        | «      \  } ||«      sJ d«       ‚t        d|j                  |j                  ¬«      }| j	                  d«      }| j	                  d«      }| j	                  d«      }| j	                  d«      }t        ||||||¬«      S )	Nr9  ru   rv   r�   r½   r¾   rÀ   r   )r/   r   rP   rx   r}   r   )	r7   r,  r/  rR   rž  r�   r½   r¾   rÀ   s	            r:   Úslice_select_transposerX    s†   € ä˜bÓ!�D€QÙ�QŒ<Ð4Ð4Ó4ˆ<Ü˜S¨¯©°q·w±wÔ?€EØ�7‰7�6‹?€DØ�W‰W�XÓ€FØ�7‰7�6‹?€DØ�g‰g�iÓ €GÜØˆu˜4¨°TÀ7ôð r=   c                 óš  — t        | «      \  }} ||«       ||«      z  sJ d ||«      › d ||«      › d�«       ‚t        d|j                  |j                  ¬«      }| j	                  d«      }| j	                  d«      }| j	                  d«      }| j	                  d	«      }	 ||«      rt        ||||||	¬
«      d fS d t        |||||	¬
«      fS )Nr4  r)  r*  ru   rv   r�   r½   r¾   rÀ   r   )r/   r   rP   rx   r}   r   r   )
r7   r,  r-  rR   rS   rž  r�   r½   r¾   rÀ   s
             r:   Úslice_assign_transposerZ    sí   € ä˜bÓ!�D€A€qÙ�Q‹<™) A›,Ò&ð ðÙ% a›L˜>Ð);¹IÀa»L¸>Èð	LóÐ&ô ˜S¨¯©°q·w±wÔ?€EØ�7‰7�6‹?€DØ�W‰W�XÓ€FØ�7‰7�6‹?€DØ�g‰g�iÓ €GÙ�„|äØØØØØØôð ð

ð 
	
ð ”Ø�D ¨d¸Gôð ð r=   c                 óÊ   — t        | «      \  }} ||«      sJ d«       ‚| j                  d«      }t        d|j                  |j                  «      }t        ||||¬«      }d }||fS )Nr9  r�   ru   r¯   )r/   r}   r   rP   rx   r   )	r7   r,  r/  rR   r�   r�   rž  r.  Úindextensor_bars	            r:   Úgather_transposer]  .  se   € ä'¨Ó+�N€A€{Ù�QŒ<Ð4Ð4Ó4ˆ<Ø�7‰7�6‹?€DÜ�s˜AŸG™G Q§W¡WÓ-€EÜ˜˜u k¸Ô=€EØ€OØ�/Ð!Ð!r=   c                 ó"  — t        | «      \  }}} ||«      r ||«      sJ d ||«      › d ||«      › d�«       ‚| j                  d«      }t        d|j                  |j                  ¬«      }t        ||||¬«      }t        |||¬«      }	d }
||	|
fS )Nz?(check_dot(x) and check_dot(y)) must be True, but check_dot(x)=r)  r*  r�   ru   rv   r¯   )r/   r}   r   rP   rx   r   r   )r7   r,  r-  rR   rS   r�   r�   rž  r.  r/  r\  s              r:   Úscatter_add_transposer_  9  s£   € ä*¨2Ó.Ñ€A€qˆ+Ù�QŒ<™I aœLð ðÙ% a›L˜>Ð);¹IÀa»L¸>Èð	LóÐ(ð �7‰7�6‹?€DÜ˜S¨¯©°q·w±wÔ?€EÜ˜˜u k¸Ô=€EÜ�5˜+¨DÔ1€EØ€OØ�%˜Ð(Ð(r=   c           	      óÜ  — t        | «      \  }}} ||«      s3 ||«      s+ ||«      s#J d ||«      › d ||«      › d ||«      › d�«       ‚t        d|j                  |j                  ¬«      }t        d|j                  |j                  ¬«      } ||«      r"t        d|j                  |j                  ¬«      nd } ||«      rt	        |||«      nd }	 ||«      rt	        |||«      nd }
||	|
fS )NzRcheck_dot(cond) ^ (check_dot(x) ^ check_dot(y)) must be True, but check_dot(cond)=z, check_dot(x)=r)  r*  ru   rv   r
  )r7   r,  r-  r  rR   rS   Úzeros_xÚzeros_yÚcond_barr.  r/  s              r:   Úselect_transposerd  H  só   € ä# BÓ'�J€Dˆ!ˆQÙ�TŒ?™i¨œl©i¸¬lð ðÙ(¨›Ð/¨¹yÈ»|¸nÐL^Ñ_hÐijÓ_kÐ^lÐlmð	oóÐ:ô
 ˜s¨!¯'©'¸¿¹ÔA€GÜ˜s¨!¯'©'¸¿¹ÔA€Gñ �TŒ?ô 	˜ A§G¡G°4·:±:Õ>àð ñ
 -6°a¬LŒF�4˜ Ô(¸d€EÙ,5°a¬LŒF�4˜ %Ô(¸d€Eà�U˜EÐ!Ð!r=   c                 ó\   — t        | «      \  }t        j                  ||j                  «      S r4   )r/   r   rÙ   rx   r:  s       r:   Úcast_transposerf  ^  s#   € ä˜bÓ!�D€QÜ�<‰<˜˜qŸw™wÓ'Ð'r=   )NNN)»r<  r  r>  rN  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%   Úprimregr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   Úutilsr1   r2   r;   r?   rB   rF   rK   rT   rX   r[   r^   rb   re   rh   rj   rl   ro   rq   ry   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$  r9  r@  rC  rH  rL  rP  rT  rX  r\  r_  rc  rf  ri  rl  ro  rs  rw  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õ  r÷  rú  rü  rþ  r  r  r  r  r  r  r  r  r  r  r"  r$  r&  r0  r2  r5  r7  r;  r@  rH  rK  rQ  rT  rV  rX  rZ  r]  r_  rd  rf  rÐ   r=   r:   Ú<module>rj     s  ðó Û Û Û ã å ÷"÷ "÷ "÷ "÷ "÷ "÷ "÷ "õ "÷F÷ ÷ ñ ÷ ;ò!ò
!ò
ò
2ò
ðñ> Ð%Ó&ñó 'ðñ Ð%Ó&ñó 'ðñ Ð%Ó&ñó 'ðñ Ð%Ó&ñó 'ðñ �FÓñó ðñ �EÓñó ðñ �EÓñó ðñ �EÓñó ðñ �EÓñó ðñ �EÓñó ðñ �EÓñó ðñ Ð%Ó&ñ?ó 'ð?ñ �OÓ$ñó %ðñ �OÓ$à@Dòó %ðñ �EÓñó ðñ �NÓ#ñ?ó $ð?ñ �GÓñ	,ó ð	,ñ �HÓñó ðñ
 �FÓñó ðñ �GÓñó ðñ �KÓ ñó !ðñ, �JÓñ
ó  ð
ñ �HÓñ,ó ð,ñ
 �GÓñó ðñ* �IÓñó ðñ �HÓñFó ðFñ* �FÓñ?ó ð?ñ
 �GÓñ#ó ð#ñ �GÓñó ðñ �KÓ ñó !ðñ �NÓ#ñó $ðñ �OÓ$ñó %ðñ Ð%Ó&ñó 'ðñ �EÓñKó ðKñ
 �HÓñó ðñ Ð%Ó&ñó 'ðñ �FÓñ
ó ð
ñB �IÓñ
ó ð
ñ6 Ð$Ó%ñ
Jó &ð
Jñ �LÓ!ñAó "ðAñ �MÓ"ñ6ó #ð6ñ �LÓ!ñó "ðñ@ �FÓñQó ðQñ
 �GÓñó ðñ �GÓñ!ó ð!ñ �IÓñó ðñ �GÓñ!ó ð!ñ �GÓñó ðñ �HÓñó ðñ �HÓñó ðñ �GÓñó ðñ �GÓñó ðñ �GÓñó ðñ �GÓñó ðñ �GÓñó ðñ �GÓñó ðñ �KÓ ñ5ó !ð5ñ �MÓ"ñ:ó #ð:ñ �MÓ"ñ5ó #ð5ñ �IÓñó ðñ �JÓñ3ó  ð3ñ �NÓ#ñKó $ðKñ �JÓñó  ðñ Ð$Ó%ñó &ðñ Ð$Ó%ñ
ó &ð
ñ �JÓñ;ó  ð;ñ �OÓ$ñó %ðñ Ð%Ó&ñó 'ðñ �MÓ"ñó #ðñ Ð&Ó'ñó (ðñ �JÓñ)ó  ð)ñ �FÓñó ðñ �FÓñ%ó ð%ñ �FÓñ&ó ð&ñ �FÓñ"ó ð"ñ �GÓñó ðñ �GÓñ ó ð ñ �HÓñ:ó ð:ñ
 ˆgÓñ,ó ð,ñ ˆgÓñ,ó ð,ñ ˆgÓñó ðñ ˆgÓñó ðñ ˆhÓñó ðñ ˆhÓñó ðñ ˆgÓñó ðñ ˆgÓñ#ó ð#ñ ˆgÓñó ðñ ˆgÓñó ðñ ˆgÓñOó ðOñ ˆgÓñó ðñ ˆkÓñ.ó ð.ñ ˆmÓñ.ó ð.ñ ˆmÓñ,ó ð,ñ ˆiÓñMó ðMñ ˆjÓñ-ó ð-ñ ˆnÓñ=ó ð=ñ ˆjÓñó ðñ ÐÓñ	ó  ð	ñ ÐÓñ0ó  ð0ñf ˆjÓñ9ó ð9ñ ˆoÓñ@ó ð@ñ ˆjÓñ	&ó ð	&ñ ˆfÓñó ðñ ˆfÓñó ðñ ˆfÓñó ðñ ˆfÓñó ðñ ˆgÓñó ðñ2 ˆgÓñ.ó ð.ñ& ˆhÓñ(ó ð(ñ
 ˆiÓñó ðñ �GÓñó ðñ �GÓñó ðñ �GÓñ	#ó ð	#ñ �GÓñó ðñ �KÓ ñ)ó !ð)ñ �MÓ"ñ	!ó #ð	!ñ �MÓ"ñ'ó #ð'ñ �IÓñ0ó ð0ñ �JÓñ
=ó  ð
=ñ �NÓ#ñ'ó $ð'ñ �JÓñ<ó  ð<ñ Ð$Ó%ñ
ó &ð
ñ Ð$Ó%ñó &ðñ8 �JÓñ"ó  ð"ñ �OÓ$ñ)ó %ð)ñ �JÓñ"ó  ð"ñ* �HÓñ(ó ñ(r=   