
    9i}                         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K
Jr  SSKJrJr  \R                  " \	\R                   S	9 " S
 S\5      5       rg)    )DictN)Metrics)
OutputKeys)default_group   )Metric)METRICS
MetricKeys)	group_keymodule_namec                   j   ^  \ rS rSrSrU 4S jrS\S\4S jrS rSS jr	S	 r
S
 r\S 5       rSrU =r$ )	NedMetric   zThe ned metric computation class for classification classes.

This metric class calculates the levenshtein distance between sentences for the whole input batches.
c                 B   > [         TU ]  " U0 UD6  / U l        / U l        g N)super__init__predslabels)selfargskwargs	__class__s      ]/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/metrics/ned_metric.pyr   NedMetric.__init__   s#    $)&)
    outputsinputsc                    [         R                  U;   a  [         R                  O[         R                  nX#   nX   n[         R                  [         R                  [         R
                  [         R                  [         R                  4 H  nXa;   d  M
  X   c  M  X   n  O   [        U5      [        U5      :X  d   e[        U[        5      (       a7  U R                  R                  U5        U R                  R                  U5        g [        U[        R                  5      (       aS  U R                  R                  UR                  5       5        U R                  R                  UR                  5       5        g [!        S5      e)Nzonly support list or np.ndarray)r   LABELLABELSCAPTIONTEXTBOXESSCOREStype
isinstancelistr   extendr   npndarraytolist	Exception)r   r   r   
label_nameground_truthseval_resultskeys          r   addNedMetric.add   s   )3)9)9V)CZ%%IZIZ
**""JOOZ5E5E!!:#4#4
C ~',":&|
 M"d<&8888mT**JJl+KK}-rzz22JJl1134KK}3356=>>r   c                    [        U R                  5      [        U R                  5      :X  d   e[        R                  [
        R                  " [        U R                  U R                  5       VVs/ s H  u  pS[        R                  X5      -
  PM     snn5      R                  5       R                  5       0$ s  snnf )Ng      ?)lenr   r   r
   NEDr*   asarrayzipr   	_distancemeanitem)r   predrefs      r   evaluateNedMetric.evaluate/   s    4::#dkk"2222NNRZZ!$TZZ!=)!=ID i))$44!=)  ttv	
 	
)s   1$B:c                     U R                   R                  UR                   5        U R                  R                  UR                  5        g r   )r   r)   r   )r   others     r   mergeNedMetric.merge8   s.    

%++&5<<(r   c                 2    U R                   U R                  4$ r   )r   r   )r   s    r   __getstate__NedMetric.__getstate__<   s    zz4;;&&r   c                 B    U R                  5         Uu  U l        U l        g r   )r   r   r   )r   states     r   __setstate__NedMetric.__setstate__?   s    "'
DKr   c                     U b  Uc  [        S5      eX:X  a  g[        U 5      S:X  a  [        U5      $ [        U5      S:X  a  [        U 5      $ [        [        U 5      [        U5      5      nUS:X  a  gS nU" X5      U-  $ )Nz#Argument (pred or ref) is NoneType.g        r   c                    S/[        U5      S-   -  nS/[        U5      S-   -  n[        [        U5      5       H  nXBU'   M	     [        [        U 5      5       HZ  nUS-   US'   [        [        U5      5       H5  nSnX   X   :X  a  Sn[        X5   S-   X%S-      S-   X%   U-   5      X5S-   '   M7     X2p2M\     U[        U5         $ )Nr   r   )r5   rangemin)s0s1v0v1ijcosts          r   levenshtein(NedMetric._distance.<locals>.levenshteinQ   s    B!$BB!$B3r7^1 $ 3r7^A1s2wADu~  #BEAIra%y1}bedl KB1uI	 (
 B $ c"g;r   )	TypeErrorr5   max)r<   r=   m_lenrV   s       r   r9   NedMetric._distanceC   s}    <3;ABB;t9>s8Os8q=t9CIs3x(A:	" 4%--r   )r   r   )rA   r   )__name__
__module____qualname____firstlineno____doc__r   r   r2   r>   rB   rE   rI   staticmethodr9   __static_attributes____classcell__)r   s   @r   r   r      sH    

?4 ? ?*
)'( . .r   r   )typingr   numpyr*   modelscope.metainfor   modelscope.outputsr   modelscope.utils.registryr   baser   builderr	   r
   register_moduler6   r    r   r   <module>rm      sL      ' ) 3  ( 	=gkkJS. S. KS.r   