
    9i                         S SK Jr  S SK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                   Z   ^  \ 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rU =r$ )InbatchRecallMetric   zThe metric computation class for in-batch retrieval classes.

This metric class calculates in-batch image recall@1 for each input batch.
c                 B   > [         TU ]  " U0 UD6  / U l        / U l        g N)super__init__inbatch_t2i_hitcntsbatch_sizes)selfargskwargs	__class__s      h/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/metrics/inbatch_recall_metric.pyr   InbatchRecallMetric.__init__   s%    $)&)#%     outputsinputsc                    U[         R                     nU[         R                     n[        U5      [        R
                  :X  a  [        U5      [        R
                  :X  d   e[        R                  " 5          X4R                  5       -  nUR                  5       nUR                  S   n[        R                  " U5      R                  5       nUR                  UR                  5      nUR                  S5      U:H  R                  5       R                  5       R!                  5       n	U R"                  R%                  U	5        U R&                  R%                  U5        S S S 5        g ! , (       d  f       g = f)Nr   )r   IMG_EMBEDDINGTEXT_EMBEDDINGtypetorchTensorno_gradtshapearangelongtodeviceargmaxsumfloatitemr   appendr   )
r   r   r   image_featurestext_featureslogits_per_imagelogits_per_text
batch_sizeground_truthinbatch_t2i_hitcnts
             r   addInbatchRecallMetric.add   s    !9!9:
 9 9:N#u||39#ll9+ 	+ + ]]_-0AA.002O)//2J <<
388:L'??>+@+@AL"1"8"8"<"L$'CE%%'$$&  $$++,>?##J/ __s   8C%E&&
E4c                    [        U R                  5      [        U R                  5      :X  a  [        U R                  5      S:  d   e[        R                  [        U R                  5      [        U R                  5      -  0$ )Nr   )lenr   r   r
   BatchAccr.   r   s    r   evaluateInbatchRecallMetric.evaluate1   su    4++,1 "%d&6&6"7!";	< < (()C0@0@,AA
 	
r   c                     U R                   R                  UR                   5        U R                  R                  UR                  5        g r   )r   extendr   )r   others     r   mergeInbatchRecallMetric.merge9   s6      ''(A(AB 1 12r   c                 2    U R                   U R                  4$ r   )r   r   r>   s    r   __getstate__ InbatchRecallMetric.__getstate__=   s    '')9)999r   c                 B    U R                  5         Uu  U l        U l        g r   )r   r   r   )r   states     r   __setstate__ InbatchRecallMetric.__setstate__@   s    5:2 $"2r   )r   r   )rC   r   )__name__
__module____qualname____firstlineno____doc__r   r   r9   r?   rD   rG   rK   __static_attributes____classcell__)r   s   @r   r   r      s9    

04 0 0*
3:; ;r   r   )typingr   numpynpr$   modelscope.metainfor   modelscope.outputsr   modelscope.utils.registryr   baser   builderr	   r
   register_moduleinbatch_recallr    r   r   <module>r_      sR       ' ) 3  ( 	)?)?A1;& 1;A1;r   