§
    �Štj�/  ã                   óŽ   — d dl Z d dlmZ d dlmZ  G d„ de¦  «        Z G d„ de¦  «        Z G d„ de j        j        ¦  «        Z	dS )	é    N)ÚFunctionc                   ó:   — e Zd Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚSyncBatchNormc
           
      ó®  ‡— |                      t          j        ¬¦  «        s4|                      t          j        ¬¦  «        s|                     ¦   «         }|�|                     ¦   «         }t          |                     ¦   «         |                     d¦  «        z  ¦  «        }
|
dk    r|	dk     rt          d|
› �¦  «        ‚|j	        d         }|                     ¦   «         dk    r|t          j
        ||¦  «        \  }}t          j        d|                     ¦   «         |                     d¦  «        z  |j        |j        ¬¦  «        }t          j        |||gd¬¦  «        Šn't          j        d|z  dz   |j        |j        ¬¦  «        Š|                     ¦   «         d	k    r„‰                     ¦   «         }t          j        d||	z  ‰j        ‰j        ¬¦  «        }t%          j        |‰|d
¬¦  «         t          j        ||	|f¦  «        Št          j        ‰|d¬¦  «        \  }}}ndˆfd„t-          |	¦  «        D ¦   «         }t%          j        |‰|d
¬¦  «         t          j        |d¬¦  «        Št          j        ‰|d¬¦  «        \  }}}t          j                             ¦   «         rt          j                             ¦   «         s1|                     d¦  «        dk    }||         }||         }||         }|                     d¦  «        }|�*|j        |j        k    r|                     |j        ¦  «        }t          j        ||||||||¦  «        \  }}|                       |||||                     t          j!        ¦  «        ¦  «         || _"        |                     ¦   «         dk    rt          j#        ||||||¦  «        S t          j$        |¦  «        S )N©Úmemory_formaté   é   zEExpected more than 1 value per channel when training, got input size r   )r	   ©ÚdtypeÚdevice©ÚdimÚglooF©Úasync_opc                 ó8   •— g | ]}t          j        ‰¦  «        ‘ŒS © )ÚtorchÚ
empty_like)Ú.0Ú_Úcombineds     €úY/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/nn/modules/_functions.pyú
<listcomp>z)SyncBatchNorm.forward.<locals>.<listcomp>R   s$   ø€ ÐSÐSÐS¸A�UÔ-¨hÑ7Ô7ÐSÐSÐSó    éÿÿÿÿ)%Úis_contiguousr   Úchannels_lastÚchannels_last_3dÚ
contiguousÚintÚnumelÚsizeÚ
ValueErrorÚshapeÚbatch_norm_statsÚfullr   r   ÚcatÚzerosÚ_get_backend_nameÚemptyÚdistÚall_gather_singleÚreshapeÚsplitÚrangeÚ
all_gatherÚstackÚcudaÚis_availableÚis_current_stream_capturingÚsqueezeÚviewÚtoÚ#batch_norm_gather_stats_with_countsÚsave_for_backwardÚint32Úprocess_groupÚbatch_norm_elemtr   )ÚselfÚinputÚweightÚbiasÚrunning_meanÚrunning_varÚepsÚmomentumr=   Ú
world_sizer$   Únum_channelsÚmeanÚinvstdÚcountÚcombined_sizeÚcombined_flatÚmean_allÚ
invstd_allÚ	count_allÚcombined_listÚmaskÚcountsr   s                          @r   ÚforwardzSyncBatchNorm.forward   sØ  ø€ ð ×Ò­eÔ.AÐÑBÔBð	'à×"Ò"µÔ1GÐ"ÑHÔHð	'ð ×$Ò$Ñ&Ô&ˆEØÐØ×&Ò&Ñ(Ô(ˆFå�5—;’;‘=”= E§J¢J¨q¡M¤MÑ1Ñ2Ô2ˆØ�1Š9ˆ9˜ aš˜ÝØ^ÐX\Ð^Ð^ñô ð ð ”{ 1”~ˆØ�;Š;‰=Œ=˜1ÒÐå Ô1°%¸Ñ=Ô=‰LˆD�&å”JØØ—’‘” §¢¨A¡¤Ñ.Ø”jØ”{ð	ñ ô ˆEõ ”y $¨°Ð!6¸AÐ>Ñ>Ô>ˆHˆHõ ”{Ø�LÑ  1Ñ$¨E¬KÀÄðñ ô ˆHð ×*Ò*Ñ,Ô,°Ò6Ð6à$ŸNšNÑ,Ô,ˆMÝ!œKØØ 
Ñ*Ø”nØ”ð	ñ ô ˆMõ Ô"Ø˜x¨Àðñ ô ð õ ”} ]°ZÀÐ4OÑPÔPˆHå.3¬k¸(ÀLÐVWÐ.XÑ.XÔ.XÑ+ˆH�j ) )ð TÐSÐSÐSÅÀzÑARÔARÐSÑSÔSˆMÝŒO˜M¨8°]ÈUÐSÑSÔSÐSÝ”{ =°aÐ8Ñ8Ô8ˆHå.3¬k¸(ÀLÐVWÐ.XÑ.XÔ.XÑ+ˆH�j )å”
×'Ò'Ñ)Ô)ð 	*­e¬j×.TÒ.TÑ.VÔ.Vð 	*ð ×$Ò$ RÑ(Ô(¨AÒ-ˆDØ! $œˆIØ ”~ˆHØ# DÔ)ˆJð —’ Ñ#Ô#ˆØÐ#¨¬¸Ô8JÒ(JÐ(JØ—Y’Y˜|Ô1Ñ2Ô2ˆFÝÔ@ØØØØØØØØñ	
ô 	
‰ˆˆfð 	×Ò˜u f¨d°F¸I¿LºLÍÌÑ<UÔ<UÑVÔVÐVØ*ˆÔð �;Š;‰=Œ=˜1ÒÐÝÔ)¨%°¸¸tÀVÈSÑQÔQÐQåÔ# EÑ*Ô*Ð*r   c                 óh  — |                      t          j        ¬¦  «        s4|                      t          j        ¬¦  «        s|                     ¦   «         }| j        \  }}}}}d x}x}}	| j        }
|                     ¦   «         dk    �r,t          j        |||||| j	        d         | j	        d         | j	        d         ¦  «        \  }}}}	| j	        d         r»|j
        d         }t          j        ||gd¬¦  «        }t          j                             |t          j        j        j        |
d¬¦  «         t          j        ||¦  «        \  }}|�*|j        |j        k    r|                     |j        ¦  «        }t          j        ||||||||¦  «        }|�| j	        d         sd }|�| j	        d         sd }	nu|j
        d         }| j	        d         r[t          j        d|z  |j        |j        ¬¦  «        }t          j                             |t          j        j        j        |
d¬¦  «         |||	d d d d d d f	S )	Nr   r   r	   r
   r   Fr   r   )r   r   r   r    r!   Úsaved_tensorsr=   r#   Úbatch_norm_backward_reduceÚneeds_input_gradr&   r)   ÚdistributedÚ
all_reduceÚReduceOpÚSUMr0   r   r9   Úbatch_norm_backward_elemtr*   r   )r?   Úgrad_outputÚsaved_inputrA   rI   rJ   Úcount_tensorÚ
grad_inputÚgrad_weightÚ	grad_biasr=   Úsum_dyÚ
sum_dy_xmurH   r   s                  r   ÚbackwardzSyncBatchNorm.backward~   s‚  € ð ×%Ò%µEÔ4GÐ%ÑHÔHð	3à×(Ò(µuÔ7MÐ(ÑNÔNð	3ð &×0Ò0Ñ2Ô2ˆKØ:>Ô:LÑ7ˆ�V˜T 6¨<Ø/3Ð3ˆ
Ð3�[ 9ØÔ*ˆà×ÒÑÔ Ò"Ñ"õ Ô0ØØØØØØÔ% aÔ(ØÔ% aÔ(ØÔ% aÔ(ñ	ô 	ñØØØØð Ô$ QÔ'ð à%œ|¨Aœ�Ý œ9 f¨jÐ%9¸qÐAÑAÔA�ÝÔ!×,Ò,ØÝÔ%Ô.Ô2Ø!Ø"ð	 -ñ ô ð õ &+¤[°¸<Ñ%HÔ%HÑ"�˜
ð Ð%¨&¬,¸$¼*Ò*DÐ*DØ#ŸYšY t¤zÑ2Ô2�FÝ"Ô<ØØØØØØØØ ñ	ô 	�
ð ˆ~ TÔ%:¸1Ô%=ˆ~Ø"�àˆ~ TÔ%:¸1Ô%=ˆ~Ø �	øð 'Ô,¨QÔ/ˆLØÔ$ QÔ'ð 
å œ;Ø˜Ñ$¨KÔ,=ÀkÔFXðñ ô �õ Ô!×,Ò,ØÝÔ%Ô.Ô2Ø!Ø"ð	 -ñ ô ð ð ˜;¨	°4¸¸tÀTÈ4ÐQUÐUÐUr   N©Ú__name__Ú
__module__Ú__qualname__ÚstaticmethodrT   rf   r   r   r   r   r      sV   € € € € € Øðr+ð r+ñ „\ðr+ðh ðRVð RVñ „\ðRVð RVð RVr   r   c                   ó<   — e Zd Zedd„¦   «         Zed„ ¦   «         ZdS )ÚCrossMapLRN2dç-Cëâ6?ç      è?r	   c                 óÚ  — || _         || _        || _        || _        d | _        |                     ¦   «         dk    r%t          d|                     ¦   «         › d�¦  «        ‚| j        p|                     ¦   «         | _        |                     ¦   «         }|                      d¦  «        }|                     |¦  «         | j                             |¦  «         |}t          j
        |d|¬¦  «         t          | j         dz
  dz  dz   ¦  «        }	t          |	|¦  «        }
| j                             dd¦  «        }|                     ¦   «          t          |
¦  «        D ]+}|                     |                     d|¦  «        ¦  «         Œ,t          d|¦  «        D ]Å}| j                             d|dz
  ¦  «        }| j                             d|¦  «        }|                     |¦  «         |||	z
  dz   k     r3|                     d||	z   dz
  ¦  «        }|                     |d¬¦  «         ||	k    r0|                     d||	z
  ¦  «        }|                     |d	¬¦  «         ŒÆ| j                             | j        | j         z  ¦  «                             | j        ¦  «         t          j
        | j        | j         |¬¦  «         |                     |¦  «         |                      ||¦  «         |S )
Né   z,CrossMapLRN2d: Expected input to be 4D, got z
D instead.r	   r
   ©Úoutr   ©Úalphar   )r$   ru   ÚbetaÚkÚscaler   r%   ÚnewÚ
resize_as_r   Úpowr"   ÚminÚselectÚzero_r1   Úadd_Úcopy_Úmul_r;   )Úctxr@   r$   ru   rv   rw   ÚoutputÚchannelsÚinput_squareÚpre_padÚpre_pad_cropÚscale_firstÚcÚscale_previousÚscale_currentÚsquare_nextÚsquare_previouss                    r   rT   zCrossMapLRN2d.forwardÖ   sÐ  € ð ˆŒØˆŒ	ØˆŒØˆŒØˆŒ	à�9Š9‰;Œ;˜!ÒÐÝØV¸u¿yºy¹{¼{ÐVÐVÐVñô ð ð ”IÐ, §¢¡¤ˆŒ	Ø—’‘”ˆØ—:’:˜a‘=”=ˆà×Ò˜%Ñ Ô Ð ØŒ	×Ò˜UÑ#Ô#Ð#ð ˆÝŒ	�%˜ Ð-Ñ-Ô-Ð-å�s”x !‘| qÑ(¨1Ñ,Ñ-Ô-ˆÝ˜7 HÑ-Ô-ˆà”i×&Ò& q¨!Ñ,Ô,ˆØ×ÒÑÔÐå�|Ñ$Ô$ð 	8ð 	8ˆAØ×Ò˜\×0Ò0°°AÑ6Ô6Ñ7Ô7Ð7Ð7õ �q˜(Ñ#Ô#ð 
	>ð 
	>ˆAØ œY×-Ò-¨a°°Q±Ñ7Ô7ˆNØœI×,Ò,¨Q°Ñ2Ô2ˆMØ×Ò Ñ/Ô/Ð/Ø�8˜gÑ%¨Ñ)Ò)Ð)Ø*×1Ò1°!°Q¸±[À1±_ÑEÔE�Ø×"Ò" ;°aÐ"Ñ8Ô8Ð8à�7Š{ˆ{Ø".×"5Ò"5°a¸¸W¹Ñ"EÔ"E�Ø×"Ò" ?¸"Ð"Ñ=Ô=Ð=øàŒ	�Š�s”y 3¤8Ñ+Ñ,Ô,×1Ò1°#´%Ñ8Ô8Ð8åŒ	�#”)˜cœh˜Y¨FÐ3Ñ3Ô3Ð3Ø�Š�EÑÔÐà×Ò˜e VÑ,Ô,Ð,Øˆr   c           	      óê  — | j         \  }}|                     ¦   «         }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     || j        z   dz
  ||¦  «        }	|                     ||¦  «        }
d| j        z  | j        z  | j        z  }t          | j        | j        dz
  dz  z
  ¦  «        }|                     |¦  «         t          j        | j	        | j         |¬¦  «         
                    |¦  «         |	                     ¦   «          |	                     d||¦  «        }t          |¦  «        D �]}t          j        ||         ||         |¬¦  «         |                     | j	        |         ¦  «         t          j        |	                     dd| j        dz
  ¦  «        dd|
¬¦  «         t          |¦  «        D ]v}|
                     |	|| j        z   dz
           ¦  «         ||         |                              ||         |         |
| ¬¦  «         |
                     |	|         d	¬
¦  «         Œw�Œ|d d d d fS )Nr   r	   r
   é   rr   F)Úkeepdimrs   )Úvaluer   rt   )rV   ry   r$   ru   rv   r"   rz   r   r{   rx   r�   r~   Únarrowr1   ÚmulÚdiv_Úsumr   Úaddcmul_)r‚   r^   r@   rƒ   ra   Ú
batch_sizer„   Úinput_heightÚinput_widthÚpaddded_ratioÚaccum_ratioÚcache_ratio_valueÚinversePrePadÚpadded_ratio_centerÚnr‰   s                   r   rf   zCrossMapLRN2d.backward  sn  € ð Ô)‰ˆˆvØ —_’_Ñ&Ô&ˆ
à—Z’Z ‘]”]ˆ
Ø—:’:˜a‘=”=ˆØ—z’z !‘}”}ˆØ—j’j ‘m”mˆàŸ	š	 (¨S¬XÑ"5¸Ñ"9¸<ÈÑUÔUˆØ—i’i ¨kÑ:Ô:ˆà ¤	™M¨C¬HÑ4°s´xÑ?ÐÝ˜CœH¨¬°1©¸Ñ'9Ñ9Ñ:Ô:ˆà×Ò˜eÑ$Ô$Ð$ÝŒ	�#”)˜cœh˜Y¨JÐ7Ñ7Ô7×<Ò<¸[ÑIÔIÐIà×ÒÑÔÐØ+×2Ò2°1°mÀXÑNÔNÐÝ�zÑ"Ô"ð 	=ñ 	=ˆAÝŒI�k !”n f¨Q¤iÐ5HÐIÑIÔIÐIØ×$Ò$ S¤Y¨q¤\Ñ2Ô2Ð2ÝŒIØ×$Ò$ Q¨¨3¬8°a©<Ñ8Ô8ØØØð	ñ ô ð õ ˜8‘_”_ð =ð =�Ø× Ò  ¨q°3´8©|¸aÑ/?Ô!@ÑAÔAÐAØ˜1”˜aÔ ×)Ò)Ø˜!”H˜Q”K Ð5FÐ4Fð *ñ ô ð ð × Ò  ¨qÔ!1¸Ð Ñ<Ô<Ð<Ð<ñ=ð ˜4  t¨TÐ1Ð1r   N)rn   ro   r	   rg   r   r   r   rm   rm   Õ   sN   € € € € € Øð4ð 4ð 4ñ „\ð4ðl ð$2ð $2ñ „\ð$2ð $2ð $2r   rm   c                   ó:   — e Zd Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚBackwardHookFunctionc                 ó.   —  | j         d„ |D ¦   «         Ž  |S )Nc                 ó    — g | ]}|j         °	|‘ŒS r   )Úrequires_grad)r   Úargs     r   r   z0BackwardHookFunction.forward.<locals>.<listcomp>;  s    € Ð%SÐ%SÐ%S¨cÀÔARÐ%S cÐ%SÐ%SÐ%Sr   )Úmark_non_differentiable©r‚   Úargss     r   rT   zBackwardHookFunction.forward8  s(   € ð 	$ˆÔ#Ð%SÐ%S°TÐ%SÑ%SÔ%SÐTÐTØˆr   c                 ó   — |S )Nr   r§   s     r   rf   zBackwardHookFunction.backward>  s   € àˆr   Nrg   r   r   r   r¡   r¡   7  sH   € € € € € Øðð ñ „\ðð ðð ñ „\ðð ð r   r¡   )
r   Útorch.distributedrY   r-   Útorch.autograd.functionr   r   rm   Úautogradr¡   r   r   r   ú<module>r­      sÙ   ðà €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðKVð KVð KVð KVð KV�Hñ KVô KVð KVð\_2ð _2ð _2ð _2ð _2�Hñ _2ô _2ð _2ðD	ð 	ð 	ð 	ð 	˜5œ>Ô2ñ 	ô 	ð 	ð 	ð 	r   