Ë
    ëÓ^jjz  ã                   óV  — U d Z ddlZddlZddlZddlmZ ddlmZ ddlm	c m
Z ddlZddlmZ ddlmZ ddlmZ ddlmZ  e«       Z ej.                  g d	¢ej0                  ¬
«      dz  ZdZ e«       Zee   ed<    edd¬«       G d„ d«      «       Z ed¬«       G d„ d«      «       Z dedefd„Z!deddfd„Z"dededz  fd„Z#dede$eef   fd„Z%dede&e'   dz  de&e'   dz  fd„Z(dede&e'   dz  de&e'   dz  fd„Z)deddfd„Z*dede&e'   dz  de&e   fd „Z+ded!e&e   defd"„Z,ded#e&e$e-ef      defd$„Z.d%ej^                  dej^                  fd&„Z0d'e&ej^                     d(e&e   dej^                  fd)„Z1d'ej^                  ddfd*„Z2d+ed,e3ddfd-„Z4 G d.„ d/«      Z5dd0œd1ed,e3ddfd2„Z6y)3a'  COCO evaluator for ONNX/TRT export benchmarking.

Provides :class:`CocoEvaluator` used by :mod:`rfdetr.export.benchmark` to compute mAP during ONNX and TensorRT inference
benchmarks.

Implementation mirrors torchvision's evaluator structure but uses ``faster_coco_eval`` as the runtime backend.
é    N)Ú	dataclass)ÚAny)ÚCOCO)ÚCOCOeval)Ú
all_gather)Ú
get_logger)g¤p=
×£Ð?ç      Ð?r	   çffffffÖ?r
   çHáz®Gé?r   ç
×£p=
ç?r   ç×£p=
×ã?r   ç…ëQ¸ñ?r   ç×£p=
×ë?r   ç{®Gázì?r   ©Údtypeg      $@gš™™™™™©?Ú"_WARNED_CUSTOM_KEYPOINT_OKS_COUNTST)ÚfrozenÚslotsc                   óB   — e Zd ZU dZee   ed<   eed<   ee   dz  ed<   y)Ú_KeypointCategoryGroupzDKeypoint categories sharing one keypoint count and OKS sigma vector.Úcategory_idsÚkeypoint_countNÚkeypoint_oks_sigmas)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚlistÚintÚ__annotations__Úfloat© ó    úf/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/evaluation/coco_eval.pyr   r   D   s$   … áNà�s‘)ÓØÓØ˜e™ tÑ+Ô+r$   r   )r   c                   óP   — e Zd ZU dZee   ed<   ej                  ed<   ee	   ed<   y)Ú_GroupedKeypointCOCOevalzLAggregate COCO keypoint stats for categories with different keypoint counts.ÚgroupsÚstatsÚevalsN)
r   r   r   r   r   r   r!   ÚnpÚndarrayr   r#   r$   r%   r'   r'   M   s%   … áVàÐ'Ñ(Ó(Ø�:‰:ÓØ�‰>Ôr$   r'   Úcoco_gtÚreturnc                 ó  — t        | t        «      rt        | d«      r| S t        «       }t        j                  | j
                  «      |_        |j                  «        t        | dd«      }|� t        |dt        j                  |«      «       |S )zAReturn a faster-coco-eval COCO object for evaluator construction.Úcat_img_mapÚ	label2catN)	Ú
isinstancer   ÚhasattrÚcopyÚdeepcopyÚdatasetÚcreateIndexÚgetattrÚsetattr)r-   Úfaster_cocor1   s      r%   Ú_ensure_faster_cocor;   V   sq   € ä�'œ4Ô ¤W¨W°mÔ%DØˆä“&€KÜŸ-™-¨¯©Ó8€KÔØ×ÑÔÜ˜ ¨dÓ3€IØÐÜ�˜[¬$¯-©-¸	Ó*BÔCØÐr$   c                 ó   — i }| j                   j                  dg «      D ]j  }|j                  d«      }t        |t        «      r|||<   |j                  d«      }d|vsŒ?t        |t        «      sŒPt        d„ |ddd…   D «       «      |d<   Œl | j                  j                  «       D ]f  \  }}|j                  d«      }d|vr+t        |t        «      rt        d	„ |ddd…   D «       «      |d<   |j                  |«      }|€ŒZd|v sŒ_|d   |d<   Œh y)
zEPopulate missing COCO ``num_keypoints`` fields from visibility flags.ÚannotationsÚidÚ	keypointsÚnum_keypointsc              3   ó,   K  — | ]  }|d kD  sŒ	d–— Œ y­w©r   é   Nr#   ©Ú.0Ú
visibilitys     r%   ú	<genexpr>z*_backfill_num_keypoints.<locals>.<genexpr>m   ó   è ø€ Ò-d°JÐU_ÐbcÓUc¬aÑ-dùó   ‚
�é   Né   c              3   ó,   K  — | ]  }|d kD  sŒ	d–— Œ y­wrB   r#   rD   s     r%   rG   z*_backfill_num_keypoints.<locals>.<genexpr>r   rH   rI   )r6   Úgetr2   r    r   ÚsumÚannsÚitems)r-   Úannotations_by_idÚ
annotationÚannotation_idr?   Údataset_annotations         r%   Ú_backfill_num_keypointsrU   d   s  € à35ÐØ—o‘o×)Ñ)¨-¸Ó<ò eˆ
Ø"Ÿ™ tÓ,ˆÜ�m¤SÔ)Ø/9Ð˜mÑ,Ø—N‘N ;Ó/ˆ	Ø *Ò,´¸IÄtÕ1LÜ*-Ñ-dÀ)ÈAÈDÈqÈDÁ/Ô-dÓ*dˆJ�Ò'ðeð &-§\¡\×%7Ñ%7Ó%9ò NÑ!ˆ�zØ—N‘N ;Ó/ˆ	Ø *Ñ,´¸IÄtÔ1LÜ*-Ñ-dÀ)ÈAÈDÈqÈDÁ/Ô-dÓ*dˆJ�Ñ'Ø.×2Ñ2°=ÓAÐØÑ)¨oÀÒ.KØ2<¸_Ñ2MÐ˜Ò/ñNr$   c                 óÞ   — t        | «      j                  «       D �ch c]
  }|dkD  sŒ	|’Œ }}|syt        |«      dkD  rt        dt	        |«      › d�«      ‚t        t        |«      «      S c c}w )zIInfer a single keypoint count from COCO category metadata or annotations.r   NrC   z_COCO keypoint evaluation requires one keypoint count across evaluated categories; found counts ú.)Ú"_infer_keypoint_counts_by_categoryÚvaluesÚlenÚ
ValueErrorÚsortedÚnextÚiter)r-   ÚcountÚcountss      r%   Ú_infer_keypoint_countra   x   sw   € ä!CÀGÓ!L×!SÑ!SÓ!UÖc˜ÐY^ÐabÓYbŠeÐc€FÐcáØÜ
ˆ6ƒ{�Q‚ÜðÜ" 6›NÐ+¨1ð.ó
ð 	
ô ”�V“ÓÐùò ds
   œ
A*§A*c                 óº  — i }| j                   j                  «       D ]A  \  }}|j                  d«      }t        |t        «      sŒ(|sŒ+t        |«      |t        |«      <   ŒC | j                  j                  dg «      D ]_  }|j                  d«      }t        |t        «      r|sŒ't        |d   «      }t        |j                  |d«      t        |«      dz  «      ||<   Œa | j                  j                  «       D ]_  }|j                  d«      }t        |t        «      r|sŒ't        |d   «      }t        |j                  |d«      t        |«      dz  «      ||<   Œa |S )zRInfer keypoint count for each category from COCO category metadata or annotations.r?   r=   Úcategory_idr   rK   )ÚcatsrP   rM   r2   r   rZ   r    r6   ÚmaxrO   rY   )r-   r`   rc   Úcategoryr?   rR   s         r%   rX   rX   †   sD  € à€FØ!(§¡×!3Ñ!3Ó!5ò 6Ñˆ�XØ—L‘L Ó-ˆ	Ü�i¤Õ&ª9Ü'*¨9£~ˆF”3�{Ó#Ò$ð6ð
 —o‘o×)Ñ)¨-¸Ó<ò Sˆ
Ø—N‘N ;Ó/ˆ	Ü˜)¤TÔ*±)ØÜ˜* ]Ñ3Ó4ˆÜ! &§*¡*¨[¸!Ó"<¼cÀ)»nÐPQÑ>QÓRˆˆ{ÒðSð —l‘l×)Ñ)Ó+ò Sˆ
Ø—N‘N ;Ó/ˆ	Ü˜)¤TÔ*±)ØÜ˜* ]Ñ3Ó4ˆÜ! &§*¡*¨[¸!Ó"<¼cÀ)»nÐPQÑ>QÓRˆˆ{ÒðSð €Mr$   r   c                 ón  — t        | «      }|�Ñt        j                  |t        j                  ¬«      }|j                  dk7  s|j
                  dk(  rt        d«      ‚t        j                  |«      j                  «       rt        j                  |dk  «      rt        d«      ‚|�+|j
                  |k7  rt        d|j
                  › d|› d	�«      ‚|j                  «       S |�|t        t        «      k(  ryt        |«       t        j                  |t        t        j                  ¬«      j                  «       S )
z<Resolve OKS sigmas for faster-coco-eval keypoint evaluation.Nr   rC   r   úAkeypoint_oks_sigmas must be a non-empty one-dimensional sequence.ú;keypoint_oks_sigmas values must be positive finite numbers.úkeypoint_oks_sigmas length ú' does not match dataset keypoint count rW   )ra   r+   ÚasarrayÚfloat32ÚndimÚsizer[   ÚisfiniteÚallÚanyÚtolistrZ   Ú_COCO_PERSON_KEYPOINT_SIGMASÚ$_warn_custom_keypoint_oks_sigma_onceÚfullÚ"_DEFAULT_CUSTOM_KEYPOINT_OKS_SIGMA)r-   r   r   Úsigmass       r%   Ú_resolve_keypoint_oks_sigmasry   �   sÿ   € ä*¨7Ó3€NØÐ&Ü—‘Ð/´r·z±zÔBˆØ�;‰;˜!Ò˜vŸ{™{¨aÒ/ÜÐ`ÓaÐaÜ�{‰{˜6Ó"×&Ñ&Ô(¬B¯F©F°6¸Q±;Ô,?ÜÐZÓ[Ð[ØÐ%¨&¯+©+¸Ò*GÜØ-¨f¯k©k¨]Ð:aÐbpÐaqÐqrÐsóð ð �}‰}‹ÐàÐ ´3Ô7SÓ3TÒ!TØä(¨Ô8Ü�7‰7�>Ô#EÌRÏZÉZÔX×_Ñ_ÓaÐar$   r   c                 óV  — |€V| t        t        «      k(  ryt        | «       t        j                  | t
        t        j                  ¬«      j                  «       S t        j                  |t        j                  ¬«      }|j                  dk7  s|j                  dk(  rt        d«      ‚t        j                  |«      j                  «       rt        j                  |dk  «      rt        d«      ‚|j                  | k  rt        d|j                  › d| › d	�«      ‚|d|  j                  «       S )
z0Resolve OKS sigmas for one keypoint-count group.Nr   rC   r   rh   ri   rj   rk   rW   )rZ   rt   ru   r+   rv   rw   rm   rs   rl   rn   ro   r[   rp   rq   rr   )r   r   rx   s      r%   Ú"_resolve_group_keypoint_oks_sigmasr{   ³   sú   € ð
 Ð"ØœSÔ!=Ó>Ò>ØÜ,¨^Ô<Ü�w‰w�~Ô'IÔQS×Q[ÑQ[Ô\×cÑcÓeÐeä�Z‰ZÐ+´2·:±:Ô>€FØ‡{�{�aÒ˜6Ÿ;™;¨!Ò+ÜÐ\Ó]Ð]Ü�;‰;�vÓ×"Ñ"Ô$¬¯©¨v¸©{Ô(;ÜÐVÓWÐWØ‡{�{�^Ò#ÜØ)¨&¯+©+¨Ð6]Ð^lÐ]mÐmnÐoó
ð 	
ð �/�>Ð"×)Ñ)Ó+Ð+r$   c                 óv   — | t         v ryt         j                  | «       t        j                  d| t        «       y)zBWarn once per keypoint count when using uniform custom OKS sigmas.Nz“COCO keypoint metadata defines %s keypoints, but no keypoint_oks_sigmas were provided. Using uniform OKS sigma %.3f for custom keypoint evaluation.)r   ÚaddÚloggerÚwarningrw   )r   s    r%   ru   ru   Ê   s4   € àÔ;Ñ;ØÜ&×*Ñ*¨>Ô:Ü
‡N�Nð	GàÜ*õ	r$   c                 ó<  — t        | «      }i }|j                  «       D ],  \  }}|dk  rŒ|j                  |g «      j                  |«       Œ. t	        |j                  «       «      D ��cg c]&  \  }}t        t	        |«      |t        ||«      ¬«      ‘Œ( c}}S c c}}w )zPBuild category groups that can each be evaluated by one COCO keypoint evaluator.r   )r   r   r   )rX   rP   Ú
setdefaultÚappendr\   r   r{   )r-   r   Úcounts_by_categoryÚgrouped_category_idsrc   r   r   s          r%   Ú_build_keypoint_category_groupsr…   ×   s¬   € ô
 <¸GÓDÐØ13ÐØ'9×'?Ñ'?Ó'Aò PÑ#ˆ�^Ø˜QÒØØ×'Ñ'¨¸Ó;×BÑBÀ;ÕOðPô -3Ð3G×3MÑ3MÓ3OÓ,P÷ñ )ˆN˜Lô 	Ü Ó-Ø)Ü BÀ>ÐSfÓ gö	
óð ùó s   Á)+Br   c           
      ó*  — t        |«      }t        j                  | j                  «      }|j	                  dg «      D �cg c]  }t        |d   «      |v sŒ|‘Œ c}|d<   |j	                  dg «      D �cg c]!  }t        |j	                  dd«      «      |v r|‘Œ# c}|d<   t        «       }||_        |j                  «        t        | dd«      }|�4t        |d|j                  «       D ��	ci c]  \  }}	|	|v sŒ||	“Œ c}	}«       |S c c}w c c}w c c}	}w )zNReturn a COCO object containing only the requested categories and annotations.Ú
categoriesr>   r=   rc   éÿÿÿÿr1   N)Úsetr4   r5   r6   rM   r    r   r7   r8   r9   rP   )
r-   r   Úcategory_id_setr6   rf   rR   Úfilteredr1   ÚlabelÚcat_ids
             r%   Ú_filter_coco_by_category_idsrŽ   ì   s  € ä˜,Ó'€OÜ�m‰m˜GŸO™OÓ,€Gà!(§¡¨\¸2Ó!>öØÄ#ÀhÈtÁnÓBUÐYhÒBhŠò€GˆLÑð
 "Ÿ+™+ m°RÓ8öàÜˆz�~‰~˜m¨RÓ0Ó1°_ÑDò 	ò€GˆMÑô ‹v€HØ€HÔØ×ÑÔÜ˜ ¨dÓ3€IØÐÜØØØ09·±Ó0A×_™}˜u fÀVÈÒE^ˆU�F‰]Ó_ô	
ð
 €Oùò'ùòùó `s   ¿DÁDÁ3&D
Ã)DÃ6DÚresultsc                 óð  — |rt        j                  | |«      S t        «       }t        j                  | j                  j                  di «      «      |j                  d<   t        j                  | j                  j                  dg «      «      |j                  d<   t        j                  | j                  j                  dg «      «      |j                  d<   g |j                  d<   |j                  «        |S )z@Build a COCO detections object, including the empty-result case.ÚinfoÚimagesr‡   r=   )r   ÚloadResr4   r5   r6   rM   r7   )r-   r�   Úcoco_dts      r%   Ú_load_coco_resultsr•     sµ   € áÜ�|‰|˜G WÓ-Ð-ä‹f€GÜ"Ÿm™m¨G¯O©O×,?Ñ,?ÀÈÓ,KÓL€G‡O�O�FÑÜ $§¡¨g¯o©o×.AÑ.AÀ(ÈBÓ.OÓ P€G‡O�O�HÑÜ$(§M¡M°'·/±/×2EÑ2EÀlÐTVÓ2WÓ$X€G‡O�O�LÑ!Ø%'€G‡O�O�MÑ"Ø×ÑÔØ€Nr$   Úboxesc                 ó†   — | j                  «       } | dd…dfxx   | dd…df   z  cc<   | dd…dfxx   | dd…df   z  cc<   | S )z6Convert boxes from [x1, y1, x2, y2] to [x1, y1, w, h].NrJ   r   rK   rC   )r4   )r–   s    r%   Ú_xyxy_to_xywhr˜     sF   € à�J‰J‹L€EØ	Š!ˆQˆ$ƒK�5š˜A˜‘;ÑƒKØ	Š!ˆQˆ$ƒK�5š˜A˜‘;ÑƒKØ€Lr$   r)   Úweightsc                 ó”  — | s&t        j                  ddt         j                  ¬«      S t        d„ | D «       «      }t        j                  |fdt         j                  ¬«      }t	        |«      D ]X  }d}d}t        | |«      D ]5  \  }}t        |«      |k  s||   dk  rŒ|t        ||   «      |z  z  }||z  }Œ7 |dkD  sŒQ||z  ||<   ŒZ |S )zNCompute category-weighted mean COCO stats, ignoring unavailable ``-1`` values.©é
   ç      ð¿r   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)rZ   )rE   Úitems     r%   rG   z,_weighted_mean_coco_stats.<locals>.<genexpr>!  s   è ø€ Ò. ”#�d—)Ñ.ùs   ‚g        r   )r+   rv   rm   re   ÚrangeÚziprZ   r"   )	r)   r™   Úmax_lenÚ
aggregatedÚstat_idxÚ	numeratorÚdenominatorÚstatÚweights	            r%   Ú_weighted_mean_coco_statsr©     s×   € áÜ�w‰w�u˜d¬"¯*©*Ô5Ð5äÑ.¨Ô.Ó.€GÜ—‘˜'˜ T´·±Ô<€JÜ˜'“Nò 	;ˆØˆ	ØˆÜ  wÓ/ò 	"‰LˆD�&Ü�4‹y˜HÒ$¨¨X©¸Ò(:ØØœ˜t H™~Ó.°Ñ7Ñ7ˆIØ˜6Ñ!‰Kð		"ð
 ˜‹?Ø#,¨{Ñ#:ˆJ�xÒ ð	;ð Ðr$   c                 ó¶   — d}d}|D ]P  \  }}}}}}t        | «      |kD  rt        | |   «      nd}	t        j                  |j	                  ||||||	«      «       ŒR y)z>Log keypoint COCO stats from an already accumulated evaluator.)
)úAverage Precisionú(AP)ú	0.50:0.95rq   é   r   )r«   r¬   ú0.50rq   r®   rC   )r«   r¬   ú0.75rq   r®   rJ   )r«   r¬   r­   Úmediumr®   rK   )r«   r¬   r­   Úlarger®   é   )úAverage Recallú(AR)r­   rq   r®   é   )r´   rµ   r¯   rq   r®   é   )r´   rµ   r°   rq   r®   é   )r´   rµ   r­   r±   r®   é   )r´   rµ   r­   r²   r®   é	   úB {:<18} {} @[ IoU={:<9} | area={:>6s} | maxDets={:>3d} ] = {:0.3f}r�   N)rZ   r"   r~   r‘   Úformat)
r)   ÚlabelsÚlog_templateÚtitleÚmetric_typeÚiouÚareaÚmax_detsr¤   Úvalues
             r%   Ú_log_keypoint_statsrÅ   0  sl   € ð€Fð X€LØ=Cò YÑ9ˆˆ{˜C  x°Ü*-¨e«*°xÒ*?”�e˜H‘oÔ&ÀTˆÜ�‰�L×'Ñ'¨¨{¸CÀÀxÐQVÓWÕXñYr$   Ú	coco_evalÚlog_summaryc                ó,  — |r| j                  «        t        | «       yt        t        j                  d«      5 }t        j                  |«      5  | j                  «        t        | d¬«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)zJAccumulate a COCO evaluator and populate ``stats`` regardless of log mode.NÚwF©rÇ   )Ú
accumulateÚpatched_pycocotools_summarizeÚopenÚosÚdevnullÚ
contextlibÚredirect_stdout)rÆ   rÇ   rÏ   s      r%   Ú_accumulate_and_summarizerÒ   D  sˆ   € áØ×ÑÔÜ% iÔ0Øä	Œb�j‰j˜#Ó	ð H 'Ü×'Ñ'¨Ó0ñ 	HØ× Ñ Ô"Ü)¨)ÀÕG÷	H÷Hð H÷	Hð 	Hú÷Hð Hús#   ¹B
ÁA>Á-B
Á>B	ÂB
Â
Bc                   ó¸  — e Zd ZdZ	 	 	 d dedee   dedee   dz  de	ddfd	„Z
d
ede	dedz  fd„Zdee   de	fd„Zdeeef   ddfd„Zd!d„Zd!d„Zd!d„Zdededdfd„Zdeddfd„Zedededeeeef      dee   ddf
d„«       Zdeeef   dedeeeef      fd„Zdeeef   deeeef      fd„Zdeeef   deeeef      fd„Zdeeef   deeeef      fd„Zy)"ÚCocoEvaluatorz.COCO evaluator that works in distributed mode.Nr-   Ú	iou_typesrÃ   r   rÇ   r.   c           	      óJ  — t        |t        t        f«      sJ ‚t        j                  t        |«      «      }d }g }d|v r1t        |«       t        ||«      }t        |«      dk  rt        ||«      }|| _
        || _        t        |dd «      | _        || _        i | _        |D ]™  }|dk(  rNt        |«      dkD  r@t!        |t#        j$                  ddt"        j&                  ¬«      g ¬«      | j                  |<   ŒV|dk(  rd|ini }	t)        |fd	|i|	¤Ž}
|dk(  rd
gndd|g|
j*                  _        |
| j                  |<   Œ› g | _        |D �ci c]  }|g “Œ c}| _        t3        |j4                  j7                  «       «      | _        t;        |«      | _        d| _        || _         y c c}w )Nr?   rC   r1   r›   r�   r   )r(   r)   r*   Úkpt_oks_sigmasÚiouTyper®   rœ   F)!r2   r   Útupler4   r5   r;   rU   r…   rZ   ry   r-   rÃ   r8   r1   rÕ   rÆ   r'   r+   rv   rm   r   ÚparamsÚmaxDetsÚimg_idsÚcoco_resultsr‰   rd   ÚkeysÚcat_idsrX   Ú_keypoint_counts_by_categoryÚ_prefer_raw_category_idsÚ_log_summary)Úselfr-   rÕ   rÃ   r   rÇ   Úresolved_keypoint_oks_sigmasÚkeypoint_category_groupsÚiou_typeÚkwargsrÆ   Úks               r%   Ú__init__zCocoEvaluator.__init__T  s­  € ô ˜)¤d¬E ]Ô3Ð3Ð3Ü—-‘-Ô 3°GÓ <Ó=ˆØ'+Ð$ØACÐ Ø˜)Ñ#Ü# GÔ,Ü'FÀwÐPcÓ'dÐ$ÜÐ+Ó,°Ò1Ü/KÈGÐUhÓ/iÐ,ØˆŒØ ˆŒô 18¸ÀÈdÓ0SˆŒà"ˆŒØIKˆŒØ!ò 	1ˆHØ˜;Ò&¬3Ð/GÓ+HÈ1Ò+LÜ+CØ3ÜŸ'™' %¨´R·Z±ZÔ@Øô,�—‘˜xÑ(ð
 ØIQÐU`ÒI`Ð&Ð(DÑEÐfhˆFÜ  ÑE°(ÐE¸fÑEˆIØ/7¸;Ò/F¨¡tÈQÐPRÐT\ÐL]ˆI×ÑÔ$Ø'0ˆD�N‰N˜8Ò$ð	1ð #%ˆŒØMVÖ=WÈ¸aÀ¹eÒ=WˆÔÜ˜7Ÿ<™<×,Ñ,Ó.Ó/ˆŒÜ,NÈwÓ,WˆÔ)Ø(-ˆÔ%Ø'ˆÕùò	 >Xs   Å
F rŒ   Úuse_raw_category_idsc                 ó¾   — |r|| j                   v r|S dS | j                  �-| j                  j                  |«      }|| j                   v r|S dS || j                   v r|S y)z0Resolve a predicted label to a COCO category_id.N)rß   r1   rM   )rã   rŒ   rê   rc   s       r%   Ú_resolve_category_idz"CocoEvaluator._resolve_category_id�  sc   € áØ! T§\¡\Ñ1�5Ð;°tÐ;Ø�>‰>Ð%ØŸ.™.×,Ñ,¨UÓ3ˆKØ"-°·±Ñ"=�;ÐGÀ4ÐGØ�D—L‘LÑ ØˆLØr$   r½   c                 óÚ   — | j                   €y| j                  ryt        | j                   j                  «       «      t        | j                   j	                  «       «      k(  }|rd| _        yy)zCDetect whether model predictions are already raw COCO category IDs.TF)r1   rá   r   rÞ   rY   )rã   r½   Úuses_raw_idss      r%   Ú_should_use_raw_category_idsz*CocoEvaluator._should_use_raw_category_idsŒ  sZ   € à�>‰>Ð!ØØ×(Ò(ØÜ˜DŸN™N×/Ñ/Ó1Ó2´d¸4¿>¹>×;PÑ;PÓ;RÓ6SÑSˆÙØ,0ˆDÔ)ØØr$   Úpredictionsc                 ó&  — t        t        j                  t        |j                  «       «      «      «      }| j                  j                  |«       | j                  D ]2  }| j                  ||«      }| j                  |   j                  |«       Œ4 y)z!Accumulate per-image predictions.N)	r   r+   ÚuniquerÞ   rÜ   ÚextendrÕ   ÚpreparerÝ   )rã   rð   rÜ   ræ   r�   s        r%   ÚupdatezCocoEvaluator.update˜  sq   € ä”r—y‘y¤ k×&6Ñ&6Ó&8Ó!9Ó:Ó;ˆØ�‰×Ñ˜GÔ$àŸ™ò 	8ˆHØ—l‘l ;°Ó9ˆGØ×Ñ˜hÑ'×.Ñ.¨wÕ7ñ	8r$   c                 ó°  — t        | j                  «      }i }t        |«      D ]  \  }}|D ]  }||vsŒ|||<   Œ Œ t        |j	                  «       «      | _        | j
                  D ]n  }t        | j                  |   «      }g }t        |«      D ]5  \  }}	|	D ]+  }
|j                  |
d   «      |k(  sŒ|j                  |
«       Œ- Œ7 || j                  |<   Œp y)u°  Merge image IDs and COCO result records across distributed processes.

        Each image ID is assigned to exactly one rank (first rank that reports it), so
        predictions for images that appear on multiple ranks due to
        ``DistributedSampler(drop_last=False)`` padding are included only once.  Without
        this deduplication, padded images produce duplicate DT entries that compete for
        the per-image ``maxDets`` cap and bias mAP upward in early epochs then downward
        as genuine new detections are displaced â€” the "peak-then-decrease" pattern.

        Contract:
            This method assumes that when the same ``image_id`` appears on multiple ranks
            its predictions are *identical* (DDP-padding duplicates).  It is **not** safe
            for evaluation strategies where independent predictions for the same image are
            produced on different ranks, because only the first rank's predictions are kept
            and the rest are silently discarded.

        Single-process path:
            When ``all_gather`` is called in a non-distributed context it returns a
            single-element list ``[x]``, so ``rank_idx`` is always 0 and every result
            passes the ownership check unchanged â€” the dedup loop is a no-op and all
            results are preserved.  This makes the method safe for single-GPU and ONNX/TRT
            benchmark use via :mod:`rfdetr.export.benchmark`.
        Úimage_idN)	r   rÜ   Ú	enumerater\   rÞ   rÕ   rÝ   rM   r‚   )rã   Úgathered_img_idsÚimg_id_to_rankÚrank_idxÚrank_img_idsÚimg_idræ   Úgathered_resultsÚdedupedÚrank_resultsÚresults              r%   Úsynchronize_between_processesz+CocoEvaluator.synchronize_between_processes¡  sù   € ô0 & d§l¡lÓ3Ðð *,ˆÜ&/Ð0@Ó&Aò 	6Ñ"ˆH�lØ&ò 6�Ø Ò/Ø-5�N 6Ò*ñ6ð	6ô ˜n×1Ñ1Ó3Ó4ˆŒØŸ™ò 	2ˆHÜ)¨$×*;Ñ*;¸HÑ*EÓFÐØ,.ˆGÜ*3Ð4DÓ*Eò /Ñ&�˜,Ø*ò /�FØ%×)Ñ)¨&°Ñ*<Ó=ÀÓIØŸ™ vÕ.ñ/ð/ð +2ˆD×Ñ˜hÒ'ñ	2r$   c                 ó   — | j                   j                  «       D ]q  \  }}t        |t        «      r3| j	                  |«       | j
                  rt        |j                  «       ŒI| j                  ||«       t        || j
                  ¬«       Œs y)z:Accumulate per-image evaluation results into mean metrics.rÊ   N)
rÆ   rP   r2   r'   Ú_evaluate_grouped_keypointsrâ   rÅ   r)   Ú	_evaluaterÒ   ©rã   ræ   rÆ   s      r%   rË   zCocoEvaluator.accumulateË  st   € à#'§>¡>×#7Ñ#7Ó#9ò 	PÑˆH�iÜ˜)Ô%=Ô>Ø×0Ñ0°Ô;Ø×$Ò$Ü'¨	¯©Ô8ØØ�N‰N˜8 YÔ/Ü% i¸T×=NÑ=NÖOñ	Pr$   c                 óò   — | j                   j                  «       D ]Z  \  }}t        j                  dj	                  |«      «       t        |t        «      rt        |j                  «       ŒPt        |«       Œ\ y)z&Print and log COCO summary statistics.zIoU metric: {}N)
rÆ   rP   r~   r‘   r¼   r2   r'   rÅ   r)   rÌ   r  s      r%   Ú	summarizezCocoEvaluator.summarizeÖ  sZ   € à#'§>¡>×#7Ñ#7Ó#9ò 	9ÑˆH�iÜ�K‰KÐ(×/Ñ/°Ó9Ô:Ü˜)Ô%=Ô>Ü# I§O¡OÕ4ä-¨iÕ8ñ	9r$   ræ   rÆ   c                 óœ  — | j                   |   }t        t        j                  d«      5 }t	        j
                  |«      5  t        | j                  |«      }||_        t        t        j                  | j                  «      «      |j                  _        |j                  «        ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)zDRun faster-coco-eval evaluation for accumulated COCO result records.rÉ   N)rÝ   rÍ   rÎ   rÏ   rÐ   rÑ   r•   r-   ÚcocoDtr   r+   rò   rÜ   rÚ   ÚimgIdsÚevaluate)rã   ræ   rÆ   r�   rÏ   r”   s         r%   r  zCocoEvaluator._evaluateß  s£   € à×#Ñ# HÑ-ˆÜ”"—*‘*˜cÓ"ð 	% gÜ×+Ñ+¨GÓ4ñ %Ü,¨T¯\©\¸7ÓC�Ø#*�	Ô Ü*.¬r¯y©y¸¿¹Ó/FÓ*G�	× Ñ Ô'Ø×"Ñ"Ô$÷	%÷	%ð 	%÷%ð %ú÷	%ð 	%ús$   ªCÁ A%B6Â%CÂ6B?	Â;CÃCÚgrouped_evalc                 ó  — g |_         g }g }| j                  d   }t        t        j                  | j
                  «      «      }|j                  D �]   }t        |j                  «      }t        | j                  |j                  «      }|D �	cg c]  }	t        |	d   «      |v sŒ|	‘Œ }
}	t        |d|j                  ¬«      }dg|j                  _        | j!                  |||
|«       t#        |d¬«       |j                   j%                  |«       |j%                  t        j&                  |j(                  t        j*                  ¬«      «       |j%                  t-        |j                  «      «       �Œ# t/        ||«      |_        yc c}	w )	zERun keypoint evaluation per keypoint-count group and aggregate stats.r?   rc   )rØ   r×   r®   FrÊ   r   N)r*   rÝ   r   r+   rò   rÜ   r(   r‰   r   rŽ   r-   r    r   r   rÚ   rÛ   Ú"_evaluate_grouped_keypoint_resultsrÒ   r‚   rl   r)   rm   rZ   r©   )rã   r  Úgroup_statsÚgroup_weightsÚall_resultsrÜ   ÚgrouprŠ   Úgroup_gtr  Úgroup_resultsÚgroup_coco_evals               r%   r  z)CocoEvaluator._evaluate_grouped_keypointsé  sL  € àˆÔØ(*ˆØ#%ˆØ×'Ñ'¨Ñ4ˆÜ”r—y‘y §¡Ó.Ó/ˆà!×(Ñ(ó 	:ˆEÜ! %×"4Ñ"4Ó5ˆOÜ3°D·L±LÀ%×BTÑBTÓUˆHØ2=Öo¨ÄÀVÈMÑEZÓA[Ð_nÒAnšVÐoˆMÐoÜ&ØØ#Ø$×8Ñ8ôˆOð
 /1¨TˆO×"Ñ"Ô*Ø×3Ñ3°OÀXÈ}Ð^eÔfÜ% oÀ5ÕIØ×Ñ×%Ñ% oÔ6Ø×ÑœrŸz™z¨/×*?Ñ*?ÄrÇzÁzÔRÔSØ× Ñ ¤ U×%7Ñ%7Ó!8Ö9ð	:ô  7°{ÀMÓRˆÕùò ps   ÂFÂ"Fr�   rÜ   c                 ó  — t        t        j                  d«      5 }t        j                  |«      5  t        ||«      }|| _        || j                  _        | j                  «        ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z)Evaluate one grouped keypoint result set.rÉ   N)
rÍ   rÎ   rÏ   rÐ   rÑ   r•   r
  rÚ   r  r  )rÆ   r-   r�   rÜ   rÏ   r”   s         r%   r  z0CocoEvaluator._evaluate_grouped_keypoint_results  s   € ô ”"—*‘*˜cÓ"ð 	% gÜ×+Ñ+¨GÓ4ñ %Ü,¨W°gÓ>�Ø#*�	Ô Ø*1�	× Ñ Ô'Ø×"Ñ"Ô$÷	%÷	%ð 	%÷%ð %ú÷	%ð 	%ús"   ›B±5A7Á&BÁ7B 	Á<BÂBc                 óº   — |dk(  r| j                  |«      S |dk(  r| j                  |«      S |dk(  r| j                  |«      S t        dj	                  |«      «      ‚)z:Convert predictions to COCO format for the given iou_type.ÚbboxÚsegmr?   zUnknown iou type {})Úprepare_for_coco_detectionÚprepare_for_coco_segmentationÚprepare_for_coco_keypointr[   r¼   )rã   rð   ræ   s      r%   rô   zCocoEvaluator.prepare  sd   € à�vÒØ×2Ñ2°;Ó?Ð?Ø˜ÒØ×5Ñ5°kÓBÐBØ˜Ò$Ø×1Ñ1°+Ó>Ð>äÐ2×9Ñ9¸(ÓCÓDÐDr$   c           	      óÂ  — g }|j                  «       D ]É  \  }}t        |«      dk(  rŒ|d   }t        |j                  «       j	                  «       «      j                  «       }|d   j                  «       }|d   j                  «       }| j                  |«      }t        |«      D ]6  \  }	}
| j                  ||	   |«      }|€Œ|j                  |||
||	   dœ«       Œ8 ŒË |S )z5Format bounding-box predictions as COCO result dicts.r   r–   Úscoresr½   )r÷   rc   r  Úscore)
rP   rZ   r˜   ÚcpuÚnumpyrs   rï   rø   rì   r‚   )rã   rð   rÝ   Úoriginal_idÚ
predictionr–   r  r½   rê   rè   Úboxrc   s               r%   r  z(CocoEvaluator.prepare_for_coco_detection  sù   € àˆØ'2×'8Ñ'8Ó':ò 	Ñ#ˆK˜Ü�:‹ !Ò#Øà˜wÑ'ˆEÜ! %§)¡)£+×"3Ñ"3Ó"5Ó6×=Ñ=Ó?ˆEØ Ñ)×0Ñ0Ó2ˆFØ Ñ)×0Ñ0Ó2ˆFØ#'×#DÑ#DÀVÓ#LÐ Ü# EÓ*ò ‘��3Ø"×7Ñ7¸¸q¹	ÐCWÓX�ØÐ&ØØ×#Ñ#à$/Ø'2Ø #Ø!'¨¡ñ	õñ	ð	ð* Ðr$   c                 ó   — g }|j                  «       D �]2  \  }}t        |«      dk(  rŒ|d   }|d   }|d   }|dkD  }|d   j                  «       }|d   j                  «       }| j                  |«      }|D �	cg c]e  }	t	        j
                  t        j                  |	j                  «       ddd…dd…t        j                  f   t        j                  d¬«      «      d   ‘Œg }
}	|
D ]  }|d	   j                  d
«      |d	<   Œ t        |
«      D ]6  \  }}| j                  ||   |«      }|€Œ|j                  |||||   dœ«       Œ8 �Œ5 |S c c}	w )z:Format segmentation mask predictions as COCO result dicts.r   r  r½   Úmasksç      à?NÚF)r   Úorderr`   zutf-8)r÷   rc   Úsegmentationr   )rP   rZ   rs   rï   Ú	mask_utilÚencoder+   Úarrayr!  ÚnewaxisÚuint8Údecoderø   rì   r‚   )rã   rð   rÝ   r#  r$  r  r½   r'  rê   ÚmaskÚrlesÚrlerè   rc   s                 r%   r  z+CocoEvaluator.prepare_for_coco_segmentation7  s�  € àˆØ'2×'8Ñ'8Ó':ó  	Ñ#ˆK˜Ü�:‹ !Ò#Øà Ñ)ˆFØ Ñ)ˆFØ˜wÑ'ˆEà˜C‘KˆEà Ñ)×0Ñ0Ó2ˆFØ Ñ)×0Ñ0Ó2ˆFØ#'×#DÑ#DÀVÓ#LÐ ð "öàô × Ñ ¤§¡¨$¯(©(«*°Qºº1¼b¿j¹jÐ5HÑ*IÔQS×QYÑQYÐadÔ!eÓfÐghÓiðˆDð ð ò >�Ø # H¡× 4Ñ 4°WÓ =��H’ð>ô $ D›/ò ‘��3Ø"×7Ñ7¸¸q¹	ÐCWÓX�ØÐ&ØØ×#Ñ#à$/Ø'2Ø(+Ø!'¨¡ñ	õò	ð+ 	ðB Ðùò's   Á8A*Ec           	      óZ  — g }|j                  «       D �]  \  }}t        |«      dk(  rŒ|d   }t        |j                  «       j	                  «       «      j                  «       }|d   j                  «       }|d   j                  «       }|d   }|j                  d¬«      j                  «       }| j                  |«      }	t        |«      D ][  \  }
}| j                  ||
   |	«      }|€Œ| j                  j                  |«      }|�|d|d	z   }|j                  |||||
   d
œ«       Œ] �Œ |S )z1Format keypoint predictions as COCO result dicts.r   r–   r  r½   r?   rC   )Ú	start_dimNrK   )r÷   rc   r?   r   )rP   rZ   r˜   r!  r"  rs   Úflattenrï   rø   rì   rà   rM   r‚   )rã   rð   rÝ   r#  r$  r–   r  r½   r?   rê   rè   Úkeypointrc   r   s                 r%   r  z'CocoEvaluator.prepare_for_coco_keypoint]  sM  € àˆØ'2×'8Ñ'8Ó':ó 	Ñ#ˆK˜Ü�:‹ !Ò#Øà˜wÑ'ˆEÜ! %§)¡)£+×"3Ñ"3Ó"5Ó6×=Ñ=Ó?ˆEØ Ñ)×0Ñ0Ó2ˆFØ Ñ)×0Ñ0Ó2ˆFØ" ;Ñ/ˆIØ!×)Ñ)°AÐ)Ó6×=Ñ=Ó?ˆIØ#'×#DÑ#DÀVÓ#LÐ Ü(¨Ó3ò ‘��8Ø"×7Ñ7¸¸q¹	ÐCWÓX�ØÐ&ØØ!%×!BÑ!B×!FÑ!FÀ{Ó!S�Ø!Ð-Ø'Ð(<¨.¸1Ñ*<Ð=�HØ×#Ñ#à$/Ø'2Ø%-Ø!'¨¡ñ	õòð	ð4 Ðr$   )éd   NT)r.   N)r   r   r   r   r   r   Ústrr    r"   Úboolré   rì   rï   Údictrõ   r  rË   r  r   r  r'   r  Ústaticmethodr   r  rô   r  r  r  r#   r$   r%   rÔ   rÔ   Q  sü  „ Ù8ð Ø26Ø ñ+(àð+(ð ˜‘9ð+(ð ð	+(ð
 " %™[¨4Ñ/ð+(ð ð+(ð 
ó+(ðZ	¨#ð 	ÀTð 	ÈcÐTXÉjó 	ð
°4¸±9ð 
Àó 
ð8 $ s¨C x¡.ð 8°Tó 8ó(2óT	Pó9ð% #ð %°(ð %¸tó %ðSÐ8Pð SÐUYó Sð4 ð%Øð%àð%ð �d˜3 ˜8‘nÑ%ð%ð �c‘ð	%ð
 
ò%ó ð%ð	E 4¨¨S¨¡>ð 	E¸Sð 	EÀTÈ$ÈsÐTWÈxÉ.ÑEYó 	Eð°d¸3À¸8±nð ÈÈdÐSVÐX[ÐS[ÉnÑI]ó ð4$¸¸cÀ3¸h¹ð $ÈDÐQUÐVYÐ[^ÐV^ÑQ_ÑL`ó $ðL°T¸#¸s¸(±^ð ÈÈTÐRUÐWZÐRZÉ^ÑH\ô r$   rÔ   rÊ   rã   c                óP  ‡ ‡‡— ddt         dt        dz  dt        dt         dt        f
ˆˆ fd„Šdt        j                  fˆˆ fd„}dt        j                  fˆfd	„}‰ j
                  st        d
«      ‚‰ j                  j                  }|dk(  s|dk(  r|}n|dk(  r|} «       ‰ _	        y)z;Compute and display summary metrics for evaluation results.NÚapÚiou_thrÚarea_rngrÃ   r.   c           
      óŽ  •— ‰j                   }d}| dk(  rdnd}| dk(  rdnd}|€,dj                  |j                  d   |j                  d	   «      nd
j                  |«      }t        |j                  «      D �	�
cg c]  \  }	}
|
|k(  sŒ|	‘Œ }}	}
t        |j
                  «      D �	�cg c]  \  }	}||k(  sŒ|	‘Œ }}	}| dk(  rL‰j                  d   }|�*t        j                  ||j                  k(  «      d   }||   }|d d …d d …d d …||f   }nH‰j                  d   }|�*t        j                  ||j                  k(  «      d   }||   }|d d …d d …||f   }t        ||d	kD     «      dk(  rd	n#t        t        j                  ||d	kD     «      «      }‰r)t        j                  |j                  ||||||«      «       |S c c}
}	w c c}}	w )Nr»   rC   r«   r´   r¬   rµ   z{:0.2f}:{:0.2f}r   rˆ   z{:0.2f}Ú	precisionÚrecall)rÚ   r¼   ÚiouThrsrø   Ú
areaRngLblrÛ   Úevalr+   ÚwhererZ   r"   Úmeanr~   r‘   )r?  r@  rA  rÃ   Úpr¾   Ú	title_strÚtype_strÚiou_strÚiÚaRngÚaindÚmDetÚmindÚsÚtÚmean_srÇ   rã   s                    €€r%   Ú
_summarizez1patched_pycocotools_summarize.<locals>._summarize„  s»  ø€ Ø�K‰KˆØ[ˆØ+-°ª7Ñ'Ð8Hˆ	Ø 1šW‘6¨&ˆàELÀ_Ð×$Ñ$ Q§Y¡Y¨q¡\°1·9±9¸R±=ÔAÐZc×ZjÑZjÐkrÓZsð 	ô "+¨1¯<©<Ó!8×M‘g�a˜¸DÀHÓ<L’ÐMˆÑMÜ!*¨1¯9©9Ó!5×J‘g�a˜¸ÀÓ9I’ÐJˆÑJØ�Š7Ø—	‘	˜+Ñ&ˆAØÐ"Ü—H‘H˜W¨¯	©	Ñ1Ó2°1Ñ5�Ø�a‘D�Ø’!’Qš˜4 Ð%Ñ&‰Aà—	‘	˜(Ñ#ˆAØÐ"Ü—H‘H˜W¨¯	©	Ñ1Ó2°1Ñ5�Ø�a‘D�Ø’!’Q˜˜dÐ"Ñ#ˆAÜ˜1˜Q ™V™9“~¨Ò*‘´´b·g±g¸aÀÀBÁ¹iÓ6HÓ0IˆÙÜ�K‰K˜×+Ñ+¨I°xÀÈ(ÐT\Ð^dÓeÔfØˆùó# NùÛJs   Á9F;ÂF;Â&GÂ4Gc                  ó¢  •— t        j                  d«      }  ‰d‰j                  j                  d   ¬«      | d<    ‰dd‰j                  j                  d   ¬«      | d<    ‰dd‰j                  j                  d   ¬«      | d<    ‰dd	‰j                  j                  d   ¬
«      | d<    ‰dd‰j                  j                  d   ¬
«      | d<    ‰dd‰j                  j                  d   ¬
«      | d<    ‰d‰j                  j                  d   ¬«      | d<    ‰d‰j                  j                  d   ¬«      | d<    ‰d‰j                  j                  d   ¬«      | d<    ‰dd	‰j                  j                  d   ¬
«      | d<    ‰dd‰j                  j                  d   ¬
«      | d<    ‰dd‰j                  j                  d   ¬
«      | d<   | S )N)é   rC   rJ   ©rÃ   r   r(  )r@  rÃ   ç      è?Úsmall)rA  rÃ   rK   r±   r³   r²   r¶   r·   r¸   r¹   rº   rœ   é   )r+   ÚzerosrÚ   rÛ   )r)   rV  rã   s    €€r%   Ú_summarizeDetsz5patched_pycocotools_summarize.<locals>._summarizeDets   sŸ  ø€ Ü—‘˜“ˆÙ˜a¨$¯+©+×*=Ñ*=¸aÑ*@ÔAˆˆa‰Ù˜a¨°t·{±{×7JÑ7JÈ1Ñ7MÔNˆˆa‰Ù˜a¨¸¿¹×8KÑ8KÈAÑ8NÔOˆˆa‰Ù˜a¨'¸D¿K¹K×<OÑ<OÐPQÑ<RÔSˆˆa‰Ù˜a¨(¸T¿[¹[×=PÑ=PÐQRÑ=SÔTˆˆa‰Ù˜a¨'¸D¿K¹K×<OÑ<OÐPQÑ<RÔSˆˆa‰Ù˜a¨$¯+©+×*=Ñ*=¸aÑ*@ÔAˆˆa‰Ù˜a¨$¯+©+×*=Ñ*=¸aÑ*@ÔAˆˆa‰Ù˜a¨$¯+©+×*=Ñ*=¸aÑ*@ÔAˆˆa‰Ù˜a¨'¸D¿K¹K×<OÑ<OÐPQÑ<RÔSˆˆa‰Ù˜q¨8¸d¿k¹k×>QÑ>QÐRSÑ>TÔUˆˆb‰	Ù˜q¨7¸T¿[¹[×=PÑ=PÐQRÑ=SÔTˆˆb‰	Øˆr$   c                  óF  •— t        j                  d«      }  ‰dd¬«      | d<    ‰ddd¬«      | d<    ‰ddd¬«      | d	<    ‰ddd
¬«      | d<    ‰ddd¬«      | d<    ‰dd¬«      | d<    ‰ddd¬«      | d<    ‰ddd¬«      | d<    ‰ddd
¬«      | d<    ‰ddd¬«      | d<   | S )Nr›   rC   r®   rY  r   r(  )rÃ   r@  rZ  rJ   r±   )rÃ   rA  rK   r²   r³   r¶   r·   r¸   r¹   rº   )r+   r]  )r)   rV  s    €r%   Ú_summarizeKpsz4patched_pycocotools_summarize.<locals>._summarizeKps°  sÅ   ø€ Ü—‘˜“ˆÙ˜a¨"Ô-ˆˆa‰Ù˜a¨"°cÔ:ˆˆa‰Ù˜a¨"°dÔ;ˆˆa‰Ù˜a¨"°xÔ@ˆˆa‰Ù˜a¨"°wÔ?ˆˆa‰Ù˜a¨"Ô-ˆˆa‰Ù˜a¨"°cÔ:ˆˆa‰Ù˜a¨"°dÔ;ˆˆa‰Ù˜a¨"°xÔ@ˆˆa‰Ù˜a¨"°wÔ?ˆˆa‰Øˆr$   zPlease run accumulate() firstr  r  r?   )rC   Nrq   r9  )
r    r"   r:  r+   r,   rG  Ú	ExceptionrÚ   rØ   r)   )rã   rÇ   r^  r`  ræ   r  rV  s   ``    @r%   rÌ   rÌ   �  sŸ   ú€ ñ”sð ¬°©ð Ìð Ô_bð Ômrö ð8œBŸJ™Jö ð œ2Ÿ:™:õ ð �9Š9ÜÐ7Ó8Ð8Ø�{‰{×"Ñ"€HØ�6Ò˜X¨Ò/Ø"‰	Ø	�[Ò	 Ø!ˆ	Ù“€D…Jr$   )7r   rÐ   r4   rÎ   Údataclassesr   Útypingr   Úfaster_coco_eval.core.maskÚcorer2  r,  r"  r+   Úfaster_coco_evalr   Ú%faster_coco_eval.core.faster_eval_apir   Úrfdetr.utilities.distributedr   Úrfdetr.utilities.loggerr   r~   rl   rm   rt   rw   r‰   r   r    r!   r   r'   r;   rU   ra   r<  rX   r   r"   ry   r{   ru   r…   rŽ   r:  r•   r,   r˜   r©   rÅ   r;  rÒ   rÔ   rÌ   r#   r$   r%   ú<module>rj     s³  ðòó Û Û 	Ý !Ý ç .Ð .Û Ý !Ý :å 3Ý .á	‹€ð €B‡J�Jò	
ð& �j‰jô)ð, ñ-ð ð2 &*Ð "Ù/2«uÐ " C¨¡HÓ 4ñ �$˜dÔ#÷,ð ,ó $ð,ñ �Ô÷ð ó ðð ð ¨ó ðN Tð N¨dó Nð( 4ð ¨C°$©Jó ð°ð ¸¸cÀ3¸h¹ó ð.b¨$ð bÀTÈ%Á[ÐSWÑEWð bÐ\`ÐafÑ\gÐjnÑ\nó bð,,Øð,à˜e™ tÑ+ð,ð 
ˆ%�[�4Ñó,ð.
¸ð 
Àó 
ðØðà˜e™ tÑ+ðð 
Ð
 Ñ!óð*¨$ð ¸dÀ3¹ið ÈDó ð4 ð ¨t°D¸¸c¸±NÑ/Cð Èó ð˜Ÿ™ð ¨¯
©
ó ð T¨"¯*©*Ñ%5ð ÀÀSÁ	ð ÈbÏjÉjó ð(Y˜rŸz™zð Y¨dó Yð(
H¨ð 
HÀ4ð 
HÈDó 
H÷iñ ið`	 JNò D¨ð DÀ$ð DÐRVô Dr$   