
    9i                     T    S SK r S SKJr  S SKJs  Jr   " S S\R                  5      rg)    Nc                   l   ^  \ rS rSrU 4S jrS rS rSS jrS rS r	S r
S	 rS
 rSS jrS rSrU =r$ )PSS_Loss   c                 d   > [         [        U ]  5         SU l        [	        SU-   S-   5      U l        g )Ngư>zself._loss)superr   __init__epseval	criterion)selfcls_loss	__class__s     _/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/easyocr/DBNet/decoders/pss_loss.pyr	   PSS_Loss.__init__   s-    h&(g07:;    c                     [         R                  " X-  U-  5      n[         R                  " X-  5      [         R                  " X#-  5      -   U R                  -   nSSU-  U-  -
  nUS:  a  [        XE5        U$ )N          @)torchsumr
   print)r   predgtmintersectionunionlosss          r   	dice_lossPSS_Loss.dice_loss   sf    yy+		$&!EIIbdO3dhh>3|#E))!8,&r   c                    US:H  US:H  -  nUS:H  US:H  -  nUR                  5       R                  5       R                  5       nUR                  5       R                  5       R                  5       nUS:X  d  XvS-  :  a  U R                  XU5      $ [	        US-  5      nX   nX   n	[
        R                  " U	SS9u  pU
S U nUR                  5       nUR                  R                  S5        UR                  5       nUR                  5       nUR                  R                  S5        UR                  5       n[
        R                  " X45      n[
        R                  " X45      n[
        R                  " UU-  5      n[
        R                  " U5      [
        R                  " U5      -   U R                  -   nSSU-  U-  -
  nU$ )	Nr   r   g      @   T)
descendingg      ?r   )floatr   itemr   intr   sortclonedatafill_detachcatr
   )r   r   r   r   	pos_index	neg_indexpos_numneg_numpos_predneg_predneg_sort_sampled_neg_predpos_gtneg_gttpredtgtr   r   r   s                       r   dice_ohnm_lossPSS_Loss.dice_ohnm_loss   s   1Wa(	1Wa(	//#'')..0//#'')..0a<7S[0>>$A..'!)nGHH**X$?KH'1^^%FKKc"]]_F%++-FKKa ]]_FIIx:;E))V,-C 99US[1LIIe$uyy}4txx?Es\)E11Dr   c                    US:H  R                  5       nUS:H  R                  5       nXF-  [        R                  " SUR                  -
  U5      -  SU-
  U-  [        R                  " UR                  U5      -  -   n[        R
                  " XUSS9n	[        R                  " X-  5      U R                  UR                  5       -   -  n
U
S-  n
U
$ )Nr   r   noneweight	reduction
   )r$   r   powr)   Fbinary_cross_entropyr   r
   )r   r   r   r   alphagammapos_maskneg_maskmasklr   s              r   
focal_lossPSS_Loss.focal_loss.   s    !G??$!G??$~IIa		k5)*+,U7+YYtyy%0+11 ""4DFKyy~txx/0
r   c                    UR                  5       u  pEn[        R                  " U5      S:X  d   eXR                  5          nX#R                  5          nUS:H  R	                  5       n	U	R                  5       SU	-
  R                  5       R                  5       -  SU	-
  R                  5       U	R                  5       R                  5       -  -   nXiR                  S5      -  n[        R                  " XxUSS9n
U
$ )Nr   r   r   )r@   )
sizer   maxbytesqueezer$   r   r%   rC   rD   )r   r   r   r   nhw	pos_neg_p	pos_neg_trG   r   s              r   wbce_orig_lossPSS_Loss.wbce_orig_loss9   s    ))+a		""#"N	vvxL	N++-NNH11388::\  "X\\^%8%8%::;q!"%%iAOr   c                 >   US:H  R                  5       U-  nUS:H  R                  5       U-  nXER                  5       -  UR                  5       -  U-   n[        R                  " XUSS9n[        R                  " U5      UR                  5       U R
                  -   -  nU$ )Nr   r   r=   r>   )r$   r   rC   rD   r   r
   )	r   r   r   r   rG   rH   rI   rJ   r   s	            r   	wbce_lossPSS_Loss.wbce_lossE   s    !G??$Q&!G??$Q& ,,.(8<<>9HD""4DFKyy|QUUWTXX-.r   c                 p    [         R                  " XUSS9nXCR                  5       U R                  -   -  nU$ )Nr   r>   )rC   rD   r   r
   )r   r   r   r   rJ   r   s         r   bce_lossPSS_Loss.bce_lossO   s2    ""4AG%%'$(("#r   c                 R    U R                  XU5      U R                  XU5      -   S-  $ Nr   )r   r]   r   r   r   r   s       r   dice_bce_lossPSS_Loss.dice_bce_lossT   s(    t+dmmDa.HHCOOr   c                 R    U R                  XU5      U R                  XU5      -   S-  $ r`   )r:   r]   ra   s       r   dice_ohnm_bce_lossPSS_Loss.dice_ohnm_bce_lossW   s+    ##Da04==13MMQTTTr   c           	      ^   US:X  a  U R                  XU5      nU$ US:X  a_  U R                  XS S 2S S2S S 2S S 24   U5      nUS S 2SS S 2S S 24   n[        R                  " US5      u  pxXPR                  XvU5      -  nU$ US:X  a  U R                  US S 2S S2S S 2S S 24   US S 2S S2S S 2S S 24   U5      n	US S 2SS S 2S S 24   n[        R                  " US5      u  pxXR                  XvU5      -  n	U R                  US S 2SS S 2S S 24   US S 2SS S 2S S 24   U5      n
X4$ [	        SU5      $ )Nshrinkpss   r   bothr   zgt_type [%s] is not implemented)get_lossr   rO   r   NotImplementedError)r   r   r   rI   gt_typer   g_gg_pr4   pss_lossshrink_losss              r   forwardPSS_Loss.forwardZ   s8   h==40DK==!RaRA+=DQ1aZ.CYYtQ'FCNN3T22DK}}T!RaRA+%61bqb!Q;NHQ1aZ.CYYtQ'FCs66H..Q1aZ "Q1aZ.$8K((&'H'RRr   c                     [         R                  " S5      n[        UR                  S5      5       H2  nX@R	                  US S 2US S 2S S 24   US S 2US S 2S S 24   U5      -  nM4     U$ )Ng        r   )r   tensorrangerN   r   )r   r   r   rI   r   inds         r   rl   PSS_Loss.get_losso   s[    ||B1&CNN431#5r!S!Q,7GNND 'r   )r   r
   )g      ?g333333?)rh   )__name__
__module____qualname____firstlineno__r	   r   r:   rK   rW   rZ   r]   rb   re   rs   rl   __static_attributes____classcell__)r   s   @r   r   r      sB    <
4	

PUS* r   r   )r   torch.nnnntorch.nn.functional
functionalrC   Moduler    r   r   <module>r      s#       nryy nr   