ó
    !EñiR  ã                   óô   • % S SK r S SKJr  S SKrS SKJr  S SKJr  S SKJ	r	   " S S\5      r
 " S S	\5      r " S
 S\5      r " S S\5      rSq\\R                   S-     S-  \S'   S\R$                  4S jrg)é    N)Úchain)Ú_get_device_index)ÚFunction)Úcommc                   ó4   • \ rS rSr\S 5       r\S 5       rSrg)Ú	Broadcasté
   c                 ó  ^• [        S U 5       5      (       d  [        S5      eU Vs/ s H  n[        US5      PM     nnXl        [	        U5      S:X  a  g[	        U5      U l        US   R                  5       U l        U Vs/ s H  oDR                  5       PM     snU l	        [        R                  " X R                  5      nU HD  n[        U R                  5       H(  u  pxU(       d  M  [        R                  " Xg   5      Xg'   M*     MF     / n	[        U R                  SS  5       H*  u  mn
U
(       a  M  U	R!                  U4S jU 5       5        M,     U R"                  " U	6   [%        [&        R(                  " U5      5      $ s  snf s  snf )Nc              3   óR   #   • U  H  oR                   R                  S :g  v •  M     g7f©ÚcpuN©ÚdeviceÚtype©Ú.0Úis     ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/nn/parallel/_functions.pyÚ	<genexpr>Ú$Broadcast.forward.<locals>.<genexpr>   ó   é € Ð:²6¨a—8‘8—=‘= EÖ)²6ùó   ‚%'z2Broadcast function not implemented for CPU tensorsTr   © é   c              3   ó,   >#   • U  H	  oT   v •  M     g 7f©Nr   )r   ÚoutputÚidxs     €r   r   r   "   s   øé € Ð*MÂW¸6°#®;ÂWùs   ƒ)ÚallÚAssertionErrorr   Útarget_gpusÚlenÚ
num_inputsÚ
get_deviceÚinput_deviceÚ
is_complexÚcomplex_maskr   Úbroadcast_coalescedÚ	enumerateÚtorchÚview_as_complexÚneeds_input_gradÚextendÚmark_non_differentiableÚtupler   Úfrom_iterable)Úctxr!   ÚinputsÚxÚinpÚoutputsÚdevice_outputsr   r&   Únon_differentiablesÚinput_requires_gradr   s              @r   ÚforwardÚBroadcast.forward   sT  ø€ äÑ:±6Ó:×:Ñ:Ü Ð!UÓVÐVÙ;FÓGº;°aÔ(¨¨DÖ1¹;ˆÐGØ%ŒÜˆv‹;˜!ÓØÜ˜V›ˆŒØ! !™9×/Ñ/Ó1ˆÔá8>Ó?º°ŸN™NÖ,¹Ñ?ˆÔä×*Ò*¨6·?±?ÓCˆã%ˆNÜ!*¨3×+;Ñ+;Ö!<‘�ß�:Ü(-×(=Ò(=¸nÑ>OÓ(P�NÓ%ó "=ñ &ð
 !ÐÜ(1°#×2FÑ2FÀqÀrÐ2JÖ(KÑ$ˆCÐ$ß&Ð&Ø#×*Ñ*Ô*MÁWÓ*MÖMñ )Lð 	×#Ò#Ð%8Ñ9Ü”U×(Ò(¨Ó1Ó2Ð2ùò+ Hùò @s   ¨FÂFc                 ód   • [         R                  " U R                  U R                  /UQ76 nSU-   $ )Nr   )ÚReduceAddCoalescedÚapplyr%   r#   )r1   Úgrad_outputsÚgradss      r   ÚbackwardÚBroadcast.backward&   s5   € ä"×(Ò(Ø×Ñ˜cŸn™nð
Ø/;ò
ˆð ˜‰Ðó    r   N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ústaticmethodr9   r@   Ú__static_attributes__r   rB   r   r   r   
   s(   † Øñ3ó ð3ð4 ñó órB   r   c                   ó4   • \ rS rSr\S 5       r\S 5       rSrg)r<   é/   c                 óØ  • [        S[        U5      U5       Vs/ s H  oCU   R                  5       PM     snU l        [        U5       Vs/ s H  oCU   R	                  5       PM     nnXPl        [        S U 5       5      n[        S[        U5      U5       Vs/ s H	  nXdXB-    PM     nn[        R                  " Xq5      n[        S [        X…5       5       5      nU$ s  snf s  snf s  snf )Nr   c              3   óz   #   • U  H1  oR                  5       (       a  [        R                  " U5      OUv •  M3     g 7fr   )r&   r*   Úview_as_real©r   Úgs     r   r   Ú-ReduceAddCoalesced.forward.<locals>.<genexpr>9   s+   é € ð  
ÚDI¸q§\¡\§^¡^ŒE×Ò˜qÔ!¸Ô:ÂEùs   ‚9;c              3   ód   #   • U  H&  u  pU(       a  [         R                  " U5      OUv •  M(     g 7fr   ©r*   r+   )r   Úrr&   s      r   r   rQ   C   s+   é € ð 
â!;‘�ö )3ŒE×!Ò! !Ô$¸Ô9Ú!;ùs   ‚.0)
Úranger"   r$   r!   r&   r'   r/   r   Úreduce_add_coalescedÚzip)	r1   Údestinationr#   r?   r   r'   Úgrads_convertedÚgrads_Úresultss	            r   r9   ÚReduceAddCoalesced.forward0   sù   € ô ,1°´C¸³JÀ
Ô+Kó
Ú+K a�!‰H×ÑÖ!Ñ+Kñ
ˆŒô 8=¸ZÔ7HÓIÒ7H°!˜a™×+Ñ+Ö-Ñ7HˆÐIØ'Ôäñ  
ÙDIó 
ó 
ˆô ˜1œc /Ó2°JÔ?ó
â?�ð  ¡Ó/Ù?ð 	ð 
ô ×+Ò+¨FÓ@ˆäñ 
ä!$ WÔ!;ó
ó 
ˆð
 ˆùò-
ùò Jùò
s   ™CÁ
C"ÂC'c                 óJ   • S[         R                  " U R                  /UQ76 -   $ )N©NN)r   r=   r!   )r1   r>   s     r   r@   ÚReduceAddCoalesced.backwardJ   s(   € ð
ô �OŠO˜CŸO™OÐ;¨lÒ;ñ<ð 	<rB   r   NrC   r   rB   r   r<   r<   /   s(   † Øñó ðð2 ñ<ó ó<rB   r<   c                   ó4   • \ rS rSr\S 5       r\S 5       rSrg)ÚGatheréR   c                 ó†  ^ • [        S U 5       5      (       d  [        S5      eUS:X  a  ST l        O[        US5      nUT l        UT l        [        S U 5       5      T l        [        S U 5       5      (       a5  US:X  a/  [        S U 5       5      n[        R                  " S	S
S9  ST l	        OST l	        [        U 4S jU 5       5      T l
        [        U5      S:„  =(       a    US   R                  5       n[        R                  " UT R                  T R                  5      nU(       a  [        R                   " U5      nU$ )Nc              3   óR   #   • U  H  oR                   R                  S :g  v •  M     g7fr   r   r   s     r   r   Ú!Gather.forward.<locals>.<genexpr>U   r   r   z/Gather function not implemented for CPU tensorsr   Tc              3   ó@   #   • U  H  oR                  5       v •  M     g 7fr   )r$   r   s     r   r   re   ]   s   é € Ð>²v°!Ÿ|™|Ÿ~˜~²vùs   ‚c              3   óF   #   • U  H  oR                  5       S :H  v •  M     g7f©r   N)Údim©r   Úts     r   r   re   ^   s   é € Ð,¢V �u‰u‹w˜!Ž|¢Vùs   ‚!r   c              3   óB   #   • U  H  oR                  S 5      v •  M     g7f)r   N)Úviewrj   s     r   r   re   _   s   é € Ð5ªf¨Ÿ6™6 !Ÿ9˜9ªfùs   ‚zvWas asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.é   )Ú
stacklevelFc              3   óX   >#   • U  H  oR                  TR                  5      v •  M!     g 7fr   )Úsizeri   )r   r   r1   s     €r   r   re   i   s   øé € Ð@º°A§¡ s§w¡w§ ºùs   ƒ'*)r   r    Útarget_devicer   ri   r/   Ú
input_gpusÚwarningsÚwarnÚunsqueezed_scalarÚinput_sizesr"   r&   r   Úgatherr*   r+   )r1   rr   ri   r2   r&   r   s   `     r   r9   ÚGather.forwardS   s  ø€ äÑ:±6Ó:×:Ñ:Ü Ð!RÓSÐSØ˜EÓ!Ø %ˆCÕä-¨m¸TÓBˆMØ -ˆCÔØˆŒÜÑ>±vÓ>Ó>ˆŒÜÑ,¡VÓ,×,Ñ,°¸³ÜÑ5©fÓ5Ó5ˆFÜ�MŠMð'ð ò	ð %)ˆCÕ!à$)ˆCÔ!ÜÔ@¹Ó@Ó@ˆŒä˜“[ 1‘_×?¨°©×)=Ñ)=Ó)?ˆ
ä—’˜V S§W¡W¨c×.?Ñ.?Ó@ˆæÜ×*Ò*¨6Ó2ˆFàˆrB   c                 ó¾   • [         R                  U R                  U R                  U R                  U5      nU R
                  (       a  [        S U 5       5      nSU-   $ )Nc              3   ó*   #   • U  H	  oS    v •  M     g7frh   r   rO   s     r   r   Ú"Gather.backward.<locals>.<genexpr>z   s   é € Ð#B²/¨Q a¦D²/ùs   ‚r^   )ÚScatterr=   rs   rw   ri   rv   r/   )r1   Úgrad_outputÚscattered_gradss      r   r@   ÚGather.backwardt   sK   € ä!Ÿ-™-Ø�N‰N˜CŸO™O¨S¯W©W°kó
ˆð × × Ü#Ñ#B±/Ó#BÓBˆOØ˜oÑ-Ð-rB   r   NrC   r   rB   r   ra   ra   R   s)   † Øñó ðð@ ñ.ó ó.rB   ra   c                   ó4   • \ rS rSr\S 5       r\S 5       rSrg)r}   é~   c                 óH  • U Vs/ s H  n[        US5      PM     nnX0l        UR                  R                  S:w  a  UR	                  5       OSU l        S n[        R                  R                  5       (       a?  U R
                  S:X  a/  U Vs/ s H"  n[        [        R                  " U5      5      PM$     nnUR                  5       n[        R                  " XAX R                  U5      n	U(       a  [        S U	 5       5      n	Ub€  [        U	5       Hq  u  p«[        R                  R                  X   5         [        R                  R!                  5       nUR#                  Xj   5        UR%                  U5        S S S 5        Ms     U	$ s  snf s  snf ! , (       d  f       M�  = f)NTr   éÿÿÿÿc              3   óN   #   • U  H  n[         R                  " U5      v •  M     g 7fr   rS   )r   Úos     r   r   Ú"Scatter.forward.<locals>.<genexpr>Ž   s   é € ÐFºg¸œE×1Ò1°!×4Ð4ºgùs   ‚#%)r   ri   r   r   r$   r%   r*   ÚacceleratorÚis_availableÚ_get_streamr&   r   Úscatterr/   r)   Údevice_indexÚcurrent_streamÚwait_streamÚrecord_stream)r1   r!   Úchunk_sizesri   Úinputr3   Ústreamsr   r&   r5   r   r   Úmain_streams                r   r9   ÚScatter.forward   sO  € á;FÓGº;°aÔ(¨¨DÖ1¹;ˆÐGØŒØ16·±×1BÑ1BÀeÓ1K˜5×+Ñ+Ô-ÐQSˆÔØˆÜ×Ñ×)Ñ)×+Ñ+°×0@Ñ0@ÀBÓ0FáGRÓSÂ{¸V”{¤5§<¢<°Ó#7Ö8Á{ˆGÐSà×%Ñ%Ó'ˆ
ä—,’,˜u°;ÇÁÈÓQˆæÜÑF¹gÓFÓFˆGð ÑÜ& wÖ/‘	�Ü×&Ñ&×3Ñ3°K±NÕCÜ"'×"3Ñ"3×"BÑ"BÓ"D�KØ×+Ñ+¨G©JÔ7Ø×(Ñ(¨Ô5÷ DÑCñ 0ð
 ˆùò- Hùò T÷ DÖCús   …FÂ)FÄ7AFÆ
F!	c                 ób   • S S S [         R                  " U R                  U R                  /UQ76 4$ r   )ra   r=   r%   ri   )r1   r~   s     r   r@   ÚScatter.backward™   s+   € à�T˜4¤§¢¨c×.>Ñ.>ÀÇÁÐ!VÈ+Ò!VÐVÐVrB   r   NrC   r   rB   r   r}   r}   ~   s*   † Øñó ðð2 ñWó óWrB   r}   Ú_streamsr   c                 óZ  • U R                   S:X  d#  [        R                  R                  5       (       d  g[        R                  R	                  5       R                   U R                   :w  aA  [        S[        R                  R	                  5       R                    SU R                    35      e[        c"  S/[        R                  R                  5       -  q[        U R                     c1  [        R                  " U R                  5      [        U R                  '   [        U R                     $ )zBGet a background stream for copying between CPU and target device.r   Nz"Expected current accelerator type z to match device type )
r   r*   rˆ   r‰   Úcurrent_acceleratorr    r—   Údevice_countÚindexÚStream)r   s    r   rŠ   rŠ   ¢   sâ   € ð ‡{�{�eÓ¤5×#4Ñ#4×#AÑ#A×#CÑ#CØÜ×Ñ×,Ñ,Ó.×3Ñ3°v·{±{ÓBÜØ0´×1BÑ1B×1VÑ1VÓ1X×1]Ñ1]Ð0^ð _$Ø$*§K¡K =ð2ó
ð 	
ô ÑØ�6œE×-Ñ-×:Ñ:Ó<Ñ<ˆÜ�—‘ÑÑ%Ü!&§¢¨f¯l©lÓ!;Œ�—‘ÑÜ�F—L‘LÑ!Ð!rB   )rt   Ú	itertoolsr   r*   Útorch._utilsr   Útorch.autogradr   Útorch.nn.parallelr   r   r<   ra   r}   r—   Úlistrœ   Ú__annotations__r   rŠ   r   rB   r   Ú<module>r£      s|   ðÜ Ý ã Ý *Ý #Ý "ô"�ô "ôJ <˜ô  <ôF).ˆXô ).ôXWˆhô WðB .2€ˆ$ˆu�|‰|˜dÑ"Ñ
# dÑ
*Ó 1ð"˜Ÿ™õ "rB   