Ë
    ¼Ó^j‹ã  ã                  óÎ  — d dl m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	Z	 d dl
mZ d dlmZ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 d dlmZ d dlmZmZ d dlm Z  d dl!m"Z"  e"e#«      Z$erd dl%Z&e	 G d„ d«      «       Z' G d„ d«      Z(dZ)dZ*dZ+ ejX                  ejZ                  «      j\                  Z/ G d„ de«      Z0 G d„ d«      Z1 G d„ d«      Z2 G d„ de«      Z3y)é    )ÚannotationsN)Údefaultdict)Údeepcopy)Ú	dataclass)ÚEnum)ÚTYPE_CHECKINGÚAny)Úpyplot)Ú
Detections)Úbox_iou_batch_with_jaccard)ÚLEGACY_COLOR_PALETTE)ÚMetricÚMetricTarget)Úensure_pandas_installed)Ú_get_loggerc                  óÆ   — e Zd ZU dZded<   ded<   edd„«       Zedd„«       Zedd„«       Zd	ed
<   d	ed<   d	ed<   ded<   dZ	ded<   dZ
ded<   dZded<   dd„Zdd„Zdd„Zy)ÚMeanAveragePrecisionResultu!  
    The result of the Mean Average Precision calculation.

    Defaults to `0` when no detections or targets are present.

    Attributes:
        metric_target: the type of data used for the metric -
            boxes, masks or oriented bounding boxes.
        is_class_agnostic: When computing class-agnostic results, class ID
            is set to `-1`.
        mAP_scores: the mAP scores at each IoU threshold.
            Shape: `(num_iou_thresholds,)`
        ap_per_class: the average precision scores per
            class and IoU threshold. Shape: `(num_target_classes, num_iou_thresholds)`
        iou_thresholds: the IoU thresholds used in the calculations.
        matched_classes: the class IDs of all matched classes.
            Corresponds to the rows of `ap_per_class`.
        small_objects: the mAP results
            for small objects (area < 32Â²).
        medium_objects: the mAP results
            for medium objects (32Â² â‰¤ area < 96Â²).
        large_objects: the mAP results
            for large objects (area â‰¥ 96Â²).
    r   Úmetric_targetÚboolÚis_class_agnosticc                óŠ   — | j                   | j                   dkD     }t        |«      dkD  rt        |j                  «       «      S y)z5the mAP score at IoU thresholds from `0.5` to `0.95`.éÿÿÿÿr   )Ú
mAP_scoresÚlenÚfloatÚmean)ÚselfÚvalid_scoress     úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/supervision/metrics/mean_average_precision.pyÚmap50_95z#MeanAveragePrecisionResult.map50_95;   s?   € ð —‘ t§¡¸Ñ';Ñ<ˆÜˆ|Ó˜qÒ Ü˜×*Ñ*Ó,Ó-Ð-àó    c                ó2   — t        | j                  d   «      S )z(the mAP score at IoU threshold of `0.5`.r   ©r   r   ©r   s    r   Úmap50z MeanAveragePrecisionResult.map50D   ó   € ô �T—_‘_ QÑ'Ó(Ð(r!   c                ó2   — t        | j                  d   «      S )z)the mAP score at IoU threshold of `0.75`.é   r#   r$   s    r   Úmap75z MeanAveragePrecisionResult.map75I   r&   r!   znpt.NDArray[np.float64]r   Úap_per_classÚiou_thresholdsznpt.NDArray[np.int32]Úmatched_classesNz!MeanAveragePrecisionResult | NoneÚsmall_objectsÚmedium_objectsÚlarge_objectsc                óŠ  — | j                   �| j                  �| j                  €,d| j                  d›d| j                  d›d| j
                  d›�S d| j                  d›d| j                  d›d| j
                  d›d| j                   j                  d›d| j                  j                  d›d| j                  j                  d›�S )aI  
        Formats the evaluation output metrics to match the structure used by pycocotools

        Example:
           ```pycon
           >>> import numpy as np
           >>> import supervision as sv
           >>> from supervision.metrics import MeanAveragePrecision
           >>> predictions = sv.Detections(
           ...     xyxy=np.array([[0, 0, 10, 10]]),
           ...     class_id=np.array([0]),
           ...     confidence=np.array([0.9])
           ... )
           >>> targets = sv.Detections(
           ...     xyxy=np.array([[0, 0, 10, 10]]),
           ...     class_id=np.array([0])
           ... )
           >>> map_metric = MeanAveragePrecision()
           >>> map_result = map_metric.update(predictions, targets).compute()
           >>> print(map_result)  # doctest: +ELLIPSIS
           Average Precision (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = ...
           Average Precision (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = ...
           Average Precision (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = ...
           Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = ...
           Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = ...
           Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = ...

           ```
        zHAverage Precision (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = z.3fzI
Average Precision (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = zI
Average Precision (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = zI
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = zI
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = zI
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = )r-   r.   r/   r    r%   r)   r$   s    r   Ú__str__z"MeanAveragePrecisionResult.__str__V   sð   € ð> ×ÑÐ&Ø×"Ñ"Ð*Ø×!Ñ!Ð)ð#Ø#'§=¡=°Ð"5ð 6#à#'§:¡:¨cÐ"2ð 3#à#'§:¡:¨cÐ"2ð4ððØ#Ÿ}™}¨SÐ1ð 2à#Ÿz™z¨#Ð.ð /à#Ÿz™z¨#Ð.ð /à#×1Ñ1×:Ñ:¸3Ð?ð @à#×2Ñ2×;Ñ;¸CÐ@ð Aà#×1Ñ1×:Ñ:¸3Ð?ðAð	
r!   c                ó4  — t        «        ddl}| j                  | j                  | j                  dœ}| j
                  �:| j
                  j                  «       }|j                  «       D ]  \  }}||d|› �<   Œ | j                  �:| j                  j                  «       }|j                  «       D ]  \  }}||d|› �<   Œ | j                  �:| j                  j                  «       }|j                  «       D ]  \  }}||d|› �<   Œ  |j                  |dg¬«      S )zt
        Convert the result to a pandas DataFrame.

        Returns:
            The result as a DataFrame.
        r   N©z	mAP@50:95zmAP@50zmAP@75Úsmall_objects_Úmedium_objects_Úlarge_objects_)Úindex)r   Úpandasr    r%   r)   r-   Ú	to_pandasÚitemsr.   r/   Ú	DataFrame)r   ÚpdÚpandas_dataÚsmall_objects_dfÚkeyÚvalueÚmedium_objects_dfÚlarge_objects_dfs           r   r9   z$MeanAveragePrecisionResult.to_pandas‘   s4  € ô 	 Ô!Ûð Ÿ™Ø—j‘jØ—j‘jñ
ˆð ×ÑÐ)Ø#×1Ñ1×;Ñ;Ó=ÐØ.×4Ñ4Ó6ò <‘
��UØ6;�˜n¨S¨EÐ2Ò3ð<à×ÑÐ*Ø $× 3Ñ 3× =Ñ =Ó ?ÐØ/×5Ñ5Ó7ò =‘
��UØ7<�˜o¨c¨UÐ3Ò4ð=à×ÑÐ)Ø#×1Ñ1×;Ñ;Ó=ÐØ.×4Ñ4Ó6ò <‘
��UØ6;�˜n¨S¨EÐ2Ò3ð<ð ˆr�|‰|ØØ�#ô
ð 	
r!   c                óX  — g d¢}| j                   | j                  | j                  g}t        d   gdz  }| j                  �[|g d¢z  }|| j                  j                   | j                  j                  | j                  j                  gz  }|t        d   gdz  z  }| j
                  �[|g d¢z  }|| j
                  j                   | j
                  j                  | j
                  j                  gz  }|t        d   gdz  z  }| j                  �[|g d¢z  }|| j                  j                   | j                  j                  | j                  j                  gz  }|t        d	   gdz  z  }d
t        j                  d<   t        j                  d¬«      \  }}|j                  dd«       |j                  dd¬«       |j                  dd¬«       t        t        |«      «      }|j                  |||d¬«      }|j!                  |«       |j#                  |dd¬«       |D ]O  }|j%                  «       }	|j'                  |j)                  «       |j+                  «       dz  z   |	dz   |	d›dd¬«       ŒQ dt        j                  d<   t        j,                  «        t        j.                  «        y)z¼
        Plot the mAP results.

        ![example_plot](
            https://media.roboflow.com/supervision-docs/metrics/mAP_plot_example.png
        ){ align=center width="800" }
        r3   r   é   N)zSmall: mAP@50:95zSmall: mAP@50zSmall: mAP@75)zMedium: mAP@50:95zMedium: mAP@50zMedium: mAP@75é   )zLarge: mAP@50:95zLarge: mAP@50zLarge: mAP@75é   Ú	monospacezfont.family)é
   é   )Úfigsizeé   ÚValueÚbold)Ú
fontweightzMean Average PrecisionÚcenter)ÚcolorÚaligné-   Úright)ÚrotationÚhag{®Gáz”?z.2fÚbottom)rU   Úvaz
sans-serif)r    r%   r)   r   r-   r.   r/   ÚpltÚrcParamsÚsubplotsÚset_ylimÚ
set_ylabelÚ	set_titleÚranger   ÚbarÚ
set_xticksÚset_xticklabelsÚ
get_heightÚtextÚget_xÚ	get_widthÚtight_layoutÚshow)
r   ÚlabelsÚvaluesÚcolorsÚ_ÚaxÚx_positionsÚbarsr_   Úy_values
             r   ÚplotzMeanAveragePrecisionResult.plot´   sŒ  € ò 3ˆØ—-‘- §¡¨T¯Z©ZÐ8ˆÜ& qÑ)Ð*¨QÑ.ˆà×ÑÐ)ØÒLÑLˆFØØ×"Ñ"×+Ñ+Ø×"Ñ"×(Ñ(Ø×"Ñ"×(Ñ(ðñ ˆFð
 Ô+¨AÑ.Ð/°!Ñ3Ñ3ˆFà×ÑÐ*ØÒOÑOˆFØØ×#Ñ#×,Ñ,Ø×#Ñ#×)Ñ)Ø×#Ñ#×)Ñ)ðñ ˆFð
 Ô+¨AÑ.Ð/°!Ñ3Ñ3ˆFà×ÑÐ)ØÒLÑLˆFØØ×"Ñ"×+Ñ+Ø×"Ñ"×(Ñ(Ø×"Ñ"×(Ñ(ðñ ˆFð
 Ô+¨AÑ.Ð/°!Ñ3Ñ3ˆFà&1Œ�‰�]Ñ#ä—‘ WÔ-‰ˆˆ2Ø
�‰�A�qÔØ
�‰�g¨&ˆÔ1Ø
�‰Ð-¸&ˆÔAäœC ›KÓ(ˆØ�v‰v�k 6°¸xˆvÓHˆà
�‰�kÔ"Ø
×Ñ˜6¨B°7ÐÔ;àò 	ˆCØ—n‘nÓ&ˆGØ�G‰GØ—	‘	“˜cŸm™m›o°Ñ1Ñ1Ø˜$‘Ø˜3�-ØØð õ ð	ð '3Œ�‰�]Ñ#ä×ÑÔÜ�‰�
r!   )Úreturnr   )rq   Ústr)rq   zpd.DataFrame©rq   ÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__Úpropertyr    r%   r)   r-   r.   r/   r1   r9   rp   © r!   r   r   r      sœ   … ñð2  ÓØÓàòó ðð ò)ó ð)ð ò)ó ð)ð (Ó'Ø)Ó)Ø+Ó+Ø*Ó*Ø7;€MÐ4Ó;Ø8<€NÐ5Ó<Ø7;€MÐ4Ó;ó9
óv!
ôFBr!   r   c                  ó    — e Zd ZdZddd„Zedd„«       Zdd„Z	 	 	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 	 	 dd„Z		 	 d	 	 	 	 	 dd„Z
ddd	„Zdd
„Zy)ÚEvaluationDatasetzh
    Class used representing a dataset in the right format needed by the
    `COCOEvaluator` class.
    Nc                ó   — t        «       | _        t        «       | _        t        «       | _        t        «       | _        t        t        «      | _        t        t        «      | _        |€y|| _        | j                  «        y)zê
        Constructor of EvaluationDataset object used to evaluate models with
        Mean Average Precision.

        Args:
            targets: The targets (ground truth) of the dataset in a the
                COCO format.
        N)
ÚdictÚdatasetÚannsÚcatsÚimgsr   ÚlistÚimg_to_annsÚcat_to_imgsÚcreate_class_members)r   Útargetss     r   Ú__init__zEvaluationDataset.__init__ÿ   s_   € ô (,£vˆŒÜ$(£FˆŒ	Ü$(£FˆŒ	Ü$(£FˆŒ	Ü1<¼TÓ1BˆÔÜ1<¼TÓ1BˆÔàˆ?Øð ˆŒØ×!Ñ!Õ#r!   c                ó   —  | d ¬«      S )N©rˆ   r{   )Úclss    r   ÚemptyzEvaluationDataset.empty  s   € á˜4Ô Ð r!   c                óP  — i i i }}}t        t        «      t        t        «      }}d| j                  v r3| j                  d   D ]!  }||d      j                  |«       |||d   <   Œ# d| j                  v r| j                  d   D ]
  }|||d   <   Œ d| j                  v r| j                  d   D ]
  }|||d   <   Œ d| j                  v r<d| j                  v r.| j                  d   D ]  }||d      j                  |d   «       Œ || _        || _        || _        || _        || _        y)z8
        Create index elements for the dataset.
        r   Úimage_idÚidÚimagesÚ
categoriesÚcategory_idN)	r   r„   r€   Úappendr�   r…   r†   rƒ   r‚   )	r   r�   r‚   rƒ   r…   r†   ÚannÚimgÚcats	            r   r‡   z&EvaluationDataset.create_class_members  sH  € ð ˜r 2�DˆdˆÜ#.¬tÓ#4´kÄ$Ó6G�[ˆØ˜DŸL™LÑ(Ø—|‘| MÑ2ò &�Ø˜C 
™OÑ,×3Ñ3°CÔ8Ø"%��S˜‘Y’ð&ð �t—|‘|Ñ#Ø—|‘| HÑ-ò &�Ø"%��S˜‘Y’ð&ð ˜4Ÿ<™<Ñ'Ø—|‘| LÑ1ò &�Ø"%��S˜‘Y’ð&ð ˜DŸL™LÑ(¨\¸T¿\¹\Ñ-IØ—|‘| MÑ2ò H�Ø˜C Ñ.Ñ/×6Ñ6°s¸:±ÕGðHð ˆŒ	Ø&ˆÔØ&ˆÔØˆŒ	Øˆ�	r!   c                ó"  — |s|s|s| j                   d   }n¬|rS|D �cg c]  }|| j                  v r| j                  |   ‘Œ! }}t        t        j                  j                  |«      «      }n| j                   d   }|s|n|D �cg c]  }|d   |v sŒ|‘Œ c}}|s|n'|D �cg c]  }|d   |d   cxk  r	|d   k  sŒn n|‘Œ c}}|du r|D �cg c]  }|d   dk(  sŒ|d   ‘Œ }	}|	S |D �cg c]  }|d   ‘Œ	 }	}|	S c c}w c c}w c c}w c c}w c c}w )	a¥  
        Get annotation ids that satisfy given filter conditions.

        Args:
            img_ids: ids of the images that we want to retrieve.
            cat_ids: ids of the categories that we want to retrieve.
            area_range: area range of the annotations that we want to retrieve
                in the format [min_area, max_area].
            iscrowd: if annotations to retrieve are `iscrowded=1`.
        r   r“   r   ÚarearK   TÚiscrowdr�   )r€   r…   r„   Ú	itertoolsÚchainÚfrom_iterable)
r   Úimg_idsÚcat_idsÚ
area_rangerš   r�   Úimg_idÚlistsr•   Úidss
             r   Úget_annotation_idsz$EvaluationDataset.get_annotation_ids:  sL  € ñ$ ™w©zØ—<‘< Ñ.‰Dáð #*öàØ ×!1Ñ!1Ñ1ð ×$Ñ$ VÓ,ð�ð ô
 œIŸO™O×9Ñ9¸%Ó@ÓA‘à—|‘| MÑ2�ñ
 ñ à%)ÖK˜c¨S°Ñ-?À7Ò-J’cÒKð ñ "ñ ð $(öØ¨:°a©=¸3¸v¹;Ô+VÈÐTUÉÖ+V’Còð ð �d‰?Ø(,ÖD °°I±À!Ó0C�3�t“9ÐDˆCÐDð ˆ
ð )-Ö- �3�t“9Ð-ˆCÐ-Øˆ
ùò=ùò Lùòùò Eùâ-s/   �$C8ÂC=ÂC=ÂDÂ9DÃDÃDÃ(Dc                óD  — |s|s|s| j                   d   }nc| j                   d   }|s|n|D �cg c]  }|d   |v sŒ|‘Œ c}}|s|n|D �cg c]  }|d   |v sŒ|‘Œ c}}|s|n|D �cg c]  }|d   |v sŒ|‘Œ c}}|D �cg c]  }|d   ‘Œ	 }}|S c c}w c c}w c c}w c c}w )aX  
        Get category ids that satisfy given filter conditions.

        Args:
            cat_names: names of the categories to retrieve.
            supercategory_names: names of the supercategories to retrieve.
            cat_ids: ids of the categories to retrieve.

        Returns:
            ids: integer array of category ids.
        r’   ÚnameÚsupercategoryr�   )r€   )r   Ú	cat_namesÚsupercategory_namesrŸ   r‚   r—   r£   s          r   Úget_category_idsz"EvaluationDataset.get_category_idsp  s×   € ñ$ Ñ!4¹WØ—<‘< Ñ-‰Dà—<‘< Ñ-ˆDñ
 !ñ à%)ÖF˜c¨S°©[¸IÒ-E’cÒFð ñ +ñ ð $(öØ¨3¨Ñ+?ÐCVÒ+V’Còð ñ $‘¸Ö)V°#ÀÀTÁÈgÒAUª#Ò)Vð ð %)Ö)˜Sˆs�4‹yÐ)ˆÐ)Øˆ
ùò# Gùòùò *Wùâ)s(   ®B»BÁ
BÁBÁ&BÁ3BÁ>Bc                ó8  — |s'|s%| j                   j                  «       }t        |«      S |rt        |«      n	t        «       }|rNt	        |«      D ]@  \  }}|dk(  r|st        | j
                  |   «      }Œ&|t        | j
                  |   «      z  }ŒB t        |«      S )zÿ
        Get image ids that satisfy given filter conditions.

        Args:
            img_ids: ids of the images to retrieve.
            cat_ids: ids of the categories to retrieve.

        Returns:
            ids: integer array of image ids.
        r   )rƒ   Úkeysr„   ÚsetÚ	enumerater†   )r   rž   rŸ   r£   Úids_setÚiÚcat_ids          r   Úget_image_idszEvaluationDataset.get_image_idsž  s‘   € ñ  ™wØ—)‘)—.‘.Ó"ˆCÜ˜“9Ðá")”#�g”,¬s«uˆáÜ& wÓ/ò =‘	��6Ø˜’6¡'Ü! $×"2Ñ"2°6Ñ":Ó;‘Gàœs 4×#3Ñ#3°FÑ#;Ó<Ñ<‘Gð	=ô �G‹}Ðr!   c                óN   — |€g S |D �cg c]  }| j                   |   ‘Œ c}S c c}w )zµ
        Get annotations with the specified ids.

        Args:
            ids: integer ids specifying annotations.

        Returns:
            anns: loaded annotations.
        )r�   )r   r£   Úidxs      r   Úget_annotationsz!EvaluationDataset.get_annotations½  s*   € ð ˆ;ØˆIØ*-Ö. 3�—	‘	˜#“Ò.Ð.ùÒ.s   ‰"c           	     ó|  — t         j                  «       }| j                  d   D �cg c]  }|‘Œ c}|j                  d<   t        |t        «      st        d«      ‚t        |«      dk(  rg |j                  d<   |S |D �cg c]  }|d   ‘Œ	 }}t        |«      t        |«      t        | j                  «       «      z  k(  sJ d«       ‚d|d   v rt        d«      ‚d	|d   v rt        d
«      ‚d|d   v rt        d«      ‚d|d   v r“|d   d   g k(  sˆt        j                  | j                  d   «      |j                  d<   t        |«      D ]K  \  }}|d   \  }}}	}
|||	z   |||
z   g\  }}}}d	|vr||||||||gg|d	<   d|vr|	|
z  |d<   |dz   |d<   d|d<   ŒM ||j                  d<   |j                  «        |S c c}w c c}w )zÚ
        Load prediction result into an EvaluationDataset object.

        Args:
            predictions: prediction result.

        Returns:
            EvaluationDataset object representing the predictions.
        r‘   zresults must be a listr   r   r�   z-Results do not correspond to current coco setÚcaptionz5Evaluating predictions with caption is not supported.Úsegmentationz:Evaluating predictions with segmentation is not supported.Ú	keypointsz7Evaluating predictions with keypoints is not supported.Úbboxr’   r™   rK   r�   rš   )r}   r�   r€   Ú
isinstancer„   Ú
ValueErrorr   r­   r²   ÚNotImplementedErrorÚcopyr   r®   r‡   )r   ÚpredictionsÚpredictions_datasetr–   Úpredr£   r´   ÚxÚyÚwÚhÚx1Úx2Úy1Úy2s                  r   Úload_predictionsz"EvaluationDataset.load_predictionsË  s-  € ô 0×5Ñ5Ó7ÐØ@DÇÁÈXÑ@VÖ0W¸²Ò0WÐ×#Ñ# HÑ-ä˜+¤tÔ,ÜÐ5Ó6Ð6ô ˆ{Ó˜qÒ Ø9;Ð×'Ñ'¨Ñ6Ø&Ð&à,7Ö8 Dˆt�JÓÐ8ˆÐ8ô �3‹xœC ›H¤s¨4×+=Ñ+=Ó+?Ó'@Ñ@ÒAð 	
Ø;ó	
ÐAð
 ˜ A™Ñ&Ü%ØGóð ð ˜{¨1™~Ñ-Ü%ØLóð ð ˜K¨™NÑ*Ü%ØIóð ð �{ 1‘~Ñ%¨k¸!©n¸VÑ.DÈÒ.JÜ8<¿¹Ø—‘˜\Ñ*ó9Ð×'Ñ'¨Ñ5ô
 ' {Ó3ò $‘	��TØ! &™\‘
��1�a˜Ø"# Q¨¡U¨A¨q°1©uÐ!5‘��B˜˜Bð "¨Ñ-Ø-/°°R¸¸RÀÀRÈÐ,LÐ+M�D˜Ñ(à Ñ%Ø#$ q¡5�D˜‘LØ  1™W��T‘
à"#��Y’ð$ð 6AÐ×#Ñ# MÑ2Ø×0Ñ0Ô2Ø"Ð"ùòi 1Xùò 9s   ¦	F4Á=F9)N)rˆ   údict[str, Any] | None)rq   r}   rs   )NNNF)
rž   úlist[int] | NonerŸ   rÌ   r    ztuple[float, float] | Nonerš   r   rq   ú	list[int])NNN)r¨   úlist[str] | Noner©   rÎ   rŸ   rÌ   rq   rÍ   )NN)rž   rÌ   rŸ   rÌ   rq   rÍ   )r£   rÌ   rq   úlist[dict[str, Any]])r¿   rÏ   rq   r}   )ru   rv   rw   rx   r‰   Úclassmethodr�   r‡   r¤   rª   r²   rµ   rÊ   r{   r!   r   r}   r}   ù   sÕ   „ ñô
$ð2 ò!ó ð!óð@ %)Ø$(Ø15Øð4à!ð4ð "ð4ð /ð	4ð
 ð4ð 
ó4ðp '+Ø04Ø$(ð	,à#ð,ð .ð,ð "ð	,ð
 
ó,ð` %)Ø$(ðà!ðð "ðð 
ó	ô>/ô@#r!   r}   i   i $  g    _ Bc                  ó    — e Zd ZdZdZdZdZdZy)Ú
ObjectSizez
    Enum for object size.
    ÚallÚsmallÚmediumÚlargeN)ru   rv   rw   rx   ÚALLÚSMALLÚMEDIUMÚLARGEr{   r!   r   rÒ   rÒ     s   „ ñð €CØ€EØ€FØ�Er!   rÒ   c                  ó   — e Zd ZdZdd„Zy)ÚCOCOEvaluatorParametersz&
    Parameters for COCOEvaluator
    c           	     ó¸  — g | _         g | _        t        j                  ddt	        t        j
                  d«      «      dz   dt        j                  ¬«      | _        t        j                  ddt	        t        j
                  d	«      «      dz   dt        j                  ¬«      | _        g d
¢| _	        dt        gdt        gt        t        gt        t        gg| _        y)z(Initialize all parameters for evaluationç      à?gffffffî?gÿÿÿÿÿÿ!@rK   T)ÚendpointÚdtypeç        g      ð?g      Y@)rK   rH   éd   r   N)rž   rŸ   ÚnpÚlinspaceÚintÚroundÚfloat32Úiou_thrsÚrec_thrsÚmax_detsÚMAX_ALL_OBJECT_AREAÚSMALL_OBJECT_AREAÚMEDIUM_OBJECT_AREAr    r$   s    r   r‰   z COCOEvaluatorParameters.__init__'  s¼   € ð #%ˆŒØ"$ˆŒô Ÿ™ØØÜ”—‘Ð,Ó-Ó.°Ñ2ØÜ—*‘*ô
ˆŒô Ÿ™ØØÜ”—‘Ð,Ó-Ó.°Ñ2ØÜ—*‘*ô
ˆŒò %ˆŒð Ô#Ð$ØÔ!Ð"ÜÔ 2Ð3ÜÔ!4Ð5ð	.
ˆ�r!   Nrs   )ru   rv   rw   rx   r‰   r{   r!   r   rÜ   rÜ   "  s   „ ñô
r!   rÜ   c                  ód   — e Zd ZdZ	 	 	 	 d
d„Zdd„Zdd„Z	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Z	dd„Z
y	)ÚCOCOEvaluatorz2
    Evaluator class to compute COCO metrics.
    c                óÜ  — |€t        d«      ‚|€t        d«      ‚|| _        || _        t        t        «      | _        i | _        t        t        «      | _        t        t        «      | _        t        «       | _
        g | _        i | _        t        | j                  j                  «       «      | j                  _        t        | j                  j!                  «       «      | j                  _        y)zÃ
        Constructor of COCOEvaluator object.

        Args:
            coco_targets: The dataset with the ground truths.
            coco_predictions: The dataset with the predictions.
        Nzcoco_targets must be providedz!coco_predictions must be provided)r¼   Úcoco_targetsÚcoco_predictionsr   r„   Ú	eval_imgsÚresultsÚ_targetsÚ_predictionsrÜ   ÚparamsÚstatsÚiousÚsortedr²   rž   rª   rŸ   )r   rñ   rò   s      r   r‰   zCOCOEvaluator.__init__M  s¿   € ð ÐÜÐ<Ó=Ð=ØÐ#ÜÐ@ÓAÐAà(ˆÔØ 0ˆÔô *¬$Ó/ˆŒà')ˆŒäALÌTÓARˆŒÜEPÔQUÓEVˆÔä-Ó/ˆŒà "ˆŒ
à02ˆŒ	ä$ T×%6Ñ%6×%DÑ%DÓ%FÓGˆ�‰ÔÜ$ T×%6Ñ%6×%GÑ%GÓ%IÓJˆ�‰Õr!   c                ó  — | j                   j                  | j                  j                  | j                  j                  ¬«      }| j                   j                  |«      }| j                  j                  | j                  j                  | j                  j                  ¬«      }| j                  j                  |«      }|D ]  }d|v r|d   nd|d<   d|v xr |d   |d<   Œ  t        t        «      | _	        |D ](  }| j                  |d   |d   f   j                  |«       Œ* t        t        «      | _        |D ](  }| j                  |d   |d   f   j                  |«       Œ* t        t        «      | _        i | _        y)zA
        Prepare targets and predictions for evaluation.
        )rž   rŸ   Úignorer   rš   r�   r“   N)rñ   r¤   r÷   rž   rŸ   rµ   rò   r   r„   rõ   r”   rö   ró   rô   )r   Úannotation_idsrˆ   Úprediction_idsr¿   ÚgtÚdts          r   Ú _prepare_targets_and_predictionsz.COCOEvaluator._prepare_targets_and_predictionsq  sy  € ð
 ×*Ñ*×=Ñ=Ø—K‘K×'Ñ'°·±×1DÑ1Dð >ó 
ˆð ×#Ñ#×3Ñ3°NÓCˆà×.Ñ.×AÑAØ—K‘K×'Ñ'°·±×1DÑ1Dð Bó 
ˆð ×+Ñ+×;Ñ;¸NÓKˆð ò 	=ˆBØ+3°r©>˜2˜hš<¸qˆBˆx‰LØ$¨˜?Ò<¨r°)©}ˆBˆxŠLð	=ô
 $¤DÓ)ˆŒØò 	HˆBØ�M‰M˜"˜Z™.¨"¨]Ñ*;Ð;Ñ<×CÑCÀBÕGð	Hô (¬Ó-ˆÔØò 	LˆBØ×Ñ˜b ™n¨b°Ñ.?Ð?Ñ@×GÑGÈÕKð	Lô %¤TÓ*ˆŒØˆ�r!   c                óÌ  — | j                   ||f   }| j                  ||f   }t        |«      dk(  r5t        |«      dk(  r't        j                  g t        j
                  ¬«      }|S t        j                  |D �cg c]  }|d    ‘Œ
 c}d¬«      }|D �cg c]  }||   ‘Œ	 }}t        |«      | j                  j                  d   kD  r|d| j                  j                  d    }|D �	cg c]  }	|	d   ‘Œ	 }
}	|D �cg c]  }|d   ‘Œ	 }}|D �cg c]  }t        |d   «      ‘Œ }}t        |
||«      j                  t        j
                  «      }|S c c}w c c}w c c}	w c c}w c c}w )	a  
        Compute the IoU between the targets and predictions for a given image and
        category.

        Args:
            img_id: The image id.
            cat_id: The category id.

        Returns:
            The IoU between the targets and predictions.
        r   ©rà   ÚscoreÚstable©Úkindr   rº   rš   )rõ   rö   r   rã   Úarrayrç   Úargsortr÷   rê   r   r   Úastype)r   r¡   r±   rÿ   r   Úempty_resultÚdÚindsr°   ÚgÚgt_boxesÚdt_boxesÚoÚis_crowdÚious                  r   Ú_compute_iouzCOCOEvaluator._compute_iou“  sU  € ð �]‰]˜6 6˜>Ñ*ˆØ×Ñ˜v v˜~Ñ.ˆô ˆr‹7�aŠ<œC ›G qšLÜ46·H±H¸RÄrÇzÁzÔ4RˆLØÐô �z‰z°Ö3¨1˜A˜g™Jš;Ò3¸(ÔCˆØ!Ö"˜ˆb�‹eÐ"ˆÐ"ô ˆr‹7�T—[‘[×)Ñ)¨"Ñ-Ò-Ø�A˜Ÿ™×,Ñ,¨RÑ0Ð1ˆBà')Ö* !�A�f“IÐ*ˆÐ*Ø')Ö* !�A�f“IÐ*ˆÐ*ð 13Ö3¨1”D˜˜9™Õ&Ð3ˆÐ3ä(¨°8¸XÓF×MÑMÜ�J‰Jó
ˆð ˆ
ùò# 4ùÚ"ùò +ùÚ*ùò 4s   Á9EÂEÃ&EÃ8EÄ
E!c                óV  — | j                   ||f   }| j                  ||f   }t        |«      dk(  rt        |«      dk(  ry|\  }}|D ]"  }	|	d   s||	d   cxk  r|k  sn d|	d<   Œd|	d<   Œ$ t        j                  |D �	cg c]  }	|	d   ‘Œ	 c}	d¬«      }
|
D �cg c]  }||   ‘Œ	 }}t        j                  |D �cg c]  }|d	    ‘Œ
 c}d¬«      }|d| D �cg c]  }||   ‘Œ	 }}t        | j
                  ||f   «      dkD  r| j
                  ||f   dd…|
f   n| j
                  ||f   }t        | j                  j                  «      }t        |«      }t        |«      }t        j                  ||f«      }t        j                  ||f«      }t        j                  |D �	cg c]  }	|	d   ‘Œ	 c}	«      }t        j                  ||f«      }t        |«      dk7  rÖt        | j                  j                  «      D ]´  \  }}t        |«      D ]¡  \  }}t        |d
g«      }d}t        |«      D ]X  \  }}	t        |	j                  dd«      «      }|||f   dkD  r|sŒ.|dkD  r||   dk(  r
||   dk(  r n|||f   |k\  sŒP|||f   }|}ŒZ |dk7  sŒ�||   |||f<   ||   d   |||f<   |d   |||f<   Œ£ Œ¶ t        j                  |D �cg c]  }|d   |k  xs |d   |kD  ‘Œ c}«      j                  dt        |«      f«      }t        j                  |t        j                   |dk(  t        j"                  ||d«      «      «      }|||||D �cg c]  }|d   ‘Œ	 c}|D �	cg c]  }	|	d   ‘Œ	 c}	|||D �cg c]  }|d	   ‘Œ	 c}||dœS c c}	w c c}w c c}w c c}w c c}	w c c}w c c}w c c}	w c c}w )a-  
        Perform evaluation for single category and image.
        Args:
            img_id: The image id.
            cat_id: The category id.
            area_range: The area range.
            max_det: The maximum number of detections.

        Returns:
            The evaluation results.
        r   Nrü   r™   rK   Ú_ignorer  r  r  g�Aòÿÿÿï?r   rš   r�   )r�   r“   r    Úmax_detÚdt_idsÚgt_idsÚ	dtMatchesÚ	gtMatchesÚdtScoresÚgtIgnoreÚdtIgnore)rõ   rö   r   rã   r	  rù   r÷   rè   Úzerosr  r®   Úminrå   ÚgetÚreshapeÚ
logical_orÚlogical_andÚrepeat)r   r¡   r±   r    r  rÿ   r   Úmin_areaÚmax_arear  Ú	gt_sortedr°   r  Ú	dt_sortedrù   Únum_thresholdsÚnum_ground_truthsÚnum_detectionsÚ
gt_matchesÚ
dt_matchesÚ	gt_ignoreÚ	dt_ignoreÚ	tresh_idxÚthreshÚdet_idxÚdetÚiou_best_matchÚbest_match_idxÚg_idxrš   Úarea_range_masks                                  r   Ú_evaluate_imagezCOCOEvaluator._evaluate_image¼  s  € ð& $(§=¡=°¸°Ñ#@ˆØ#'×#4Ñ#4°V¸V°^Ñ#Dˆô ˆr‹7�aŠ<œC ›G qšLØà'Ñˆ�(ð ò 	!ˆAØ�Š{ 8¨q°©yÔ#D¸HÔ#DØ ��)’à ��)’ð		!ô —J‘J°bÖ9°  )£Ò9ÀÔIˆ	Ø&Ö'˜ˆb�‹eÐ'ˆÐ'ô —J‘J°RÖ8°  7¡¢Ò8¸xÔHˆ	Ø& q¨Ð1Ö2˜ˆb�‹eÐ2ˆÐ2ô
 �4—9‘9˜V V˜^Ñ,Ó-°Ò1ð �I‰I�f˜f�nÑ%¢a¨ lÒ3à—‘˜6 6˜>Ñ*ð 	ô ˜TŸ[™[×1Ñ1Ó2ˆÜ ›GÐÜ˜R›ˆô —X‘X˜~Ð/@ÐAÓBˆ
Ü—X‘X˜~¨~Ð>Ó?ˆ
ä—H‘H°BÖ7¨q˜a 	›lÒ7Ó8ˆ	Ü—H‘H˜n¨nÐ=Ó>ˆ	Üˆt‹9˜Š>ä%.¨t¯{©{×/CÑ/CÓ%Dò  JÑ!�	˜6ä$-¨b£Mò J‘L�G˜Sä%(¨&°)Ð)<Ó%=�Nà%'�Nä$-¨b£Mò 3™˜˜qô #& a§e¡e¨I°qÓ&9Ó":˜Ø% i°Ð&6Ñ7¸!Ò;ÁGØ$ð +¨RÒ/Ø )¨.Ñ 9Ø ò!!à )¨%Ñ 0°AÒ 5á!ð   ¨ Ñ/°>ÓAØ-1°'¸5°.Ñ-A˜NØ-2™Nð%3ð* &¨Ó+Ø8AÀ.Ñ8Q˜	 )¨WÐ"4Ñ5Ø9;¸NÑ9KÈDÑ9Q˜
 9¨gÐ#5Ñ6Ø@CÀDÁ	˜
 9¨nÐ#<Ò=ñ=Jð JôF Ÿ(™(ØCEÖF¸aˆQˆv‰Y˜Ñ!Ò9 Q v¡Y°Ñ%9Ñ9ÒFó
ç
‰'�1”c˜"“g�,Ó
ð 	ô
 —M‘MØÜ�N‰NØ˜a‘¤§¡¨?¸NÈAÓ!Nóó
ˆ	ð Ø!Ø$ØØ(*Ö+ 1�q˜“wÒ+Ø(*Ö+ 1�q˜“wÒ+Ø#Ø#Ø-/Ö0¨˜˜7›Ò0Ø!Ø!ñ
ð 	
ùòU  :ùÚ'ùò  9ùÚ2ùò$ 8ùòP Gùò  ,ùÚ+ùò 1s6   Á?M>ÂNÂ9NÃNÆ NËNÍNÍN!Í+N&c                ó´  — t        | j                  j                  «      }t        | j                  j                  «      }t        | j                  j                  «      }t        | j                  j
                  «      }t        | j                  j                  «      }t        | j                  j                  «      }t        j                  |||||ft        j                  ¬«       }t        j                  ||||ft        j                  ¬«       }t        j                  |||||ft        j                  ¬«       }	t        | j                  j                  «      }
| j                  j
                  D �ch c]  }t        |«      ’Œ }}t        | j                  j                  «      }t        | j                  j                  «      }t        | j                  j                  «      D ��cg c]  \  }}||
v sŒ|‘Œ }}}| j                  j                  D �cg c]	  }||v sŒ|‘Œ }}t        | j                  j
                  «      D ��cg c]  \  }}t        |«      |v r|‘Œ }}}t        | j                  j                  «      D ��cg c]  \  }}||v sŒ|‘Œ }}}t        |«      D �]  \  }}||z  |z  }t        |«      D �]ü  \  }}||z  }t        |«      D �]â  \  }} |D �cg c]  }| j                  ||z   |z      ‘Œ }!}|!D �"cg c]  }"|"€Œ|"‘Œ	 }!}"t        |!«      dk(  rŒJt        j                  |!D �"cg c]
  }"|"d   d|  ‘Œ c}"«      }#t        j                   |# d¬«      }$|#|$   }%t        j                  |!D �"cg c]  }"|"d   dd…d| …f   ‘Œ c}"d¬	«      dd…|$f   }&t        j                  |!D �"cg c]  }"|"d
   dd…d| …f   ‘Œ c}"d¬	«      dd…|$f   }'t        j                  |!D �"cg c]  }"|"d   ‘Œ	 c}"«      }(t        j"                  |(dk(  «      })|)dk(  r�ŒEt        j$                  |&t        j&                  |'«      «      }*t        j$                  t        j&                  |&«      t        j&                  |'«      «      }+t        j(                  |*d¬	«      j+                  t        j                  ¬«      },t        j(                  |+d¬	«      j+                  t        j                  ¬«      }-t        t-        |,|-«      «      D �]¶  \  }.\  }/}0t        j.                  |/«      }/t        j.                  |0«      }0t        |/«      }1|/t        j                  |)«      z  }2|/|0|/z   t0        z   z  j3                  «       }3dg|z  }4dg|z  }5|1r|2d   nd||.|||f<   t5        |1dz
  dd«      D ]  }|3|   |3|dz
     kD  sŒ|3|   |3|dz
  <   Œ t        j6                  |2| j                  j                  d¬«      }6|6j3                  «       }7t        |7«      D ]P  \  }8}9t9        |9«      }:d|:cxk  rt        |3«      k  sŒ&n Œ)d|:cxk  rt        |%«      k  sŒ>n ŒA|3|:   |4|8<   |%|:   |5|8<   ŒR t        j.                  |4t        j                  ¬«      ||.dd…|||f<   t        j.                  |5t        j                  ¬«      |	|.dd…|||f<   �Œ¹ �Œå �Œÿ �Œ | j                  |||||gt:        j:                  j=                  «       j?                  d«      |||	dœ| _         	 	 	 	 dd„};tC        tD        «      jG                  tD        jH                  «      }<| j                  j                  jG                  d«      }=|dd…dd…dd…|<|=f   }> |;|>«      \  }?}@tC        tD        «      jG                  tD        jJ                  «      }A|dd…dd…dd…|A|=f   }B |;|B«      \  }C}DtC        tD        «      jG                  tD        jL                  «      }E|dd…dd…dd…|E|=f   }F |;|F«      \  }G}HtC        tD        «      jG                  tD        jN                  «      }I|dd…dd…dd…|I|=f   }J |;|J«      \  }K}L| j                  |||||gt:        j:                  j=                  «       j?                  d«      |||	|?|@|C|D|G|H|K|Ldœ| _         yc c}w c c}}w c c}w c c}}w c c}}w c c}w c c}"w c c}"w c c}"w c c}"w c c}"w )z^
        Accumulate per image evaluation results and store the result in self.results
        r  Nr   r  r  r  r  rK   ©Úaxisr  r  rá   r   Úleft)Úsidez%Y-%m-%d %H:%M:%S)r÷   ÚcountsÚdateÚ	precisionÚrecallÚscoresc                óÂ   ‡‡— | dk7  Št        j                  ‰| t        j                  d«      «      Š	 	 	 	 dˆˆfd„} |d«      } |d«      j                  dd«      }||fS )z<Compute average precision while handling -1 sentinel values.r   rá   c           	     ó<  •— ‰j                  | t        j                  ¬«      }‰j                  | ¬«      }t        j                  ||t        j                  |j
                  dt        j                  ¬«      |dkD  ¬«      }|j                  t        j                  «      S )N)r<  rà   r;  ç      ð¿r  r   )ÚoutÚwhere)Úsumrã   Úfloat64ÚdivideÚfullÚshaper
  rç   )r<  Úsumsr?  ÚmeansÚ
valid_maskÚvalid_precisions       €€r   Úmean_with_maskzTCOCOEvaluator._accumulate.<locals>.compute_average_precision.<locals>.mean_with_maskù  sv   ø€ ð '×*Ñ*°¼B¿J¹JÐ*ÓG�Ø#Ÿ™¨T˜Ó2�ÜŸ	™	ØØÜŸ™ §
¡
¨D¼¿
¹
ÔCØ  1™*ô	�ð —|‘|¤B§J¡JÓ/Ð/r!   )rK   rE   rK   r   )r<  zint | tuple[int, ...]rq   únpt.NDArray[np.float32])rã   rH  rç   Ú	transpose)Úprecision_slicerR  r   r*   rP  rQ  s       @@r   Úcompute_average_precisionz<COCOEvaluator._accumulate.<locals>.compute_average_precisionò  sl   ù€ ð )¨BÑ.ˆJÜ Ÿh™h z°?ÄBÇJÁJÈsÃOÓTˆOð0Ø+ð0à(ö0ñ (¨Ó/ˆJÙ)¨!Ó,×6Ñ6°q¸!Ó<ˆLØ˜|Ð+Ð+r!   râ   )r÷   r?  r@  rA  rB  rC  ÚmAP_scores_all_sizesÚap_per_class_all_sizesÚmAP_scores_smallÚap_per_class_smallÚmAP_scores_mediumÚap_per_class_mediumÚmAP_scores_largeÚap_per_class_large)rU  rS  rq   z7tuple[npt.NDArray[np.float32], npt.NDArray[np.float32]])(r   r÷   rè   ré   rŸ   r    rê   rž   rã   Úonesrç   r­   Útupler®   ró   Úconcatenater	  Úcount_nonzeror$  Úlogical_notÚcumsumr
  Úzipr  ÚEPSÚtolistr^   Úsearchsortedrå   ÚdatetimeÚnowÚstrftimerô   r„   rÒ   r7   r×   rØ   rÙ   rÚ   )Mr   Únum_iou_thresholdsÚnum_recall_thresholdsÚnum_categoriesÚnum_area_rangesÚnum_max_detectionsÚnum_imgsrA  rB  rC  Úset_categoriesÚaÚset_area_rangesÚset_max_detectionsÚset_image_idsÚnÚkÚselected_category_idsÚmÚselected_max_detectionsr´   r™   Úselected_area_ranges_idsr°   Ú
image_indsÚcat_idxÚcat_eval_idxÚ
cat_offsetÚarea_idxÚarea_eval_idxÚarea_offsetÚmax_det_idxr  Úeval_img_dataÚeÚ	dt_scoresr  Údt_scores_sortedr.  Ú
dt_ignoredÚ
gt_ignoredÚnum_non_ignored_gtÚtrue_positivesÚfalse_positivesÚtp_sumÚfp_sumÚiou_thresh_idxÚtpÚfpÚnum_tpsÚrcÚprÚprecision_at_recallÚscore_at_recallÚrecall_indsÚrecall_inds_listÚriÚpos_idx_valueÚpos_idx_intrV  Úarea_range_idxÚmax_100_dets_idxÚaverage_precision_all_sizesrW  rX  Úsmall_area_range_idxÚaverage_precision_smallrY  rZ  Úmedium_area_range_idxÚaverage_precision_mediumr[  r\  Úlarge_area_range_idxÚaverage_precision_larger]  r^  sM                                                                                r   Ú_accumulatezCOCOEvaluator._accumulate9  sù  € ô
 ! §¡×!5Ñ!5Ó6ÐÜ # D§K¡K×$8Ñ$8Ó 9ÐÜ˜TŸ[™[×0Ñ0Ó1ˆÜ˜dŸk™k×4Ñ4Ó5ˆÜ  §¡×!5Ñ!5Ó6ÐÜ�t—{‘{×*Ñ*Ó+ˆô —W‘Wà"Ø%ØØØ"ðô —*‘*ô	
ð 	
ˆ	ô —'‘'Ø °ÐBTÐUÜ—*‘*ô
ð 
ˆô —'‘'à"Ø%ØØØ"ðô —*‘*ô	
ð 	
ˆô ˜TŸ[™[×0Ñ0Ó1ˆà"Ÿk™k×4Ñ4ö3
ØŒE�!�Hð3
ˆð 3
ô ! §¡×!5Ñ!5Ó6ÐÜ˜DŸK™K×/Ñ/Ó0ˆô $ D§K¡K×$7Ñ$7Ó8÷!
Ù�!�Q¸AÀÒ<OŠAð!
Ðñ !
ð
 —{‘{×+Ñ+ö#
Ø¨qÐ4FÒ/FŠAð#
Ðð #
ô ' t§{¡{×'=Ñ'=Ó>÷$
á��TÜ�T‹{˜oÑ-ò ð$
Ð ñ $
ô $ D§K¡K×$7Ñ$7Ó8÷
Ù�!�Q¸AÀÒ<NŠAð
ˆ
ñ 
ô &/Ð/DÓ%Eó a	Ñ!ˆG�\Ø%¨Ñ7¸(ÑBˆJô ,5Ð5MÓ+Nó ]Ñ'�˜-Ø+¨hÑ6�ô -6Ð6MÓ,Nó YÑ(�K àNXö%ØIJ˜Ÿ™ z°KÑ'?À!Ñ'CÓDð%�Mð %ð 1>Ö$O¨1ÀÁ¢QÐ$O�MÐ$Oô ˜=Ó)¨QÒ.Ø ô !#§¡Ø;HÖI°a˜˜:™ q¨Ò1ÒIó!�Iô Ÿ:™: y j°xÔ@�DØ'0°¡Ð$ô "$§¡Ø?LÖM¸!˜˜;™ª¨1¨W¨9¨Ó5ÒMÐTUô"â˜�gñ"�Jô "$§¡Ø>KÖL¸˜˜:™¢q¨!¨G¨) |Ó4ÒLÐSTô"â˜�gñ"�Jô
 "$§¡ÈÖ0VÀ1°°:³Ò0VÓ!W�JÜ)+×)9Ñ)9¸*È¹/Ó)JÐ&ð *¨QÒ.Ù ô &(§^¡^Ø"¤B§N¡N°:Ó$>ó&�Nô ')§n¡nÜŸ™ zÓ2´B·N±NÀ:Ó4Nó'�Oô  ŸY™Y ~¸AÔ>×EÑEÌBÏJÉJÐEÓW�FÜŸY™Y ¸QÔ?×FÑFÌRÏZÉZÐFÓX�Fô 5>¼cÀ&È&Ó>QÓ4Ró ,Ñ0˜©¨¨RÜŸX™X b›\˜ÜŸX™X b›\˜Ü"% b£'˜à¤"§*¡*Ð-?Ó"@Ñ@˜à  B¨¡G¬c¡MÑ2×:Ñ:Ó<˜à/2¨eÐ6KÑ.KÐ+à+.¨%Ð2GÑ*G˜ñ
 '.˜B˜ršF°1ð ˜~¨w¸À+ÐMÑNô
 "' w°¡{°A°rÓ!:ò 2˜AØ! !™u r¨!¨a©%¡yÓ0Ø,.¨q©E  1 q¡5¢	ð2ô =?¿O¹OØ §¡× 4Ñ 4¸6ô=˜ð 7B×6HÑ6HÓ6JÐ(Ü1:Ð;KÓ1Lò TÑ-˜B ä/2°=Ó/A˜KØ  KÔ9´#°b³'Ö9¸aÀ;ô ?ÔQTØ 0óRö ?ð ;=¸[¹/Ð 3°BÑ 7Ø6FÀ{Ñ6S °Ò 3ðTô ŸH™HÐ%8ÄÇ
Á
ÔKð " .²!°W¸hÈÐ"SÑTô
 ŸH™H _¼B¿J¹JÔGð ˜~ªq°'¸8À[ÐPÓQòU,ò[Yò	]ð	a	ðH —k‘kà"Ø%ØØØ"ðô ×%Ñ%×)Ñ)Ó+×4Ñ4Ð5HÓIØ"ØØñ
ˆŒð 	,Ø4ð	,àDó	,ô2 œjÓ)×/Ñ/´
·±Ó?ˆØŸ;™;×/Ñ/×5Ñ5°cÓ:Ðà&/ÚŠq’!�^Ð%5Ð5ñ'
Ð#ñ
 8QØ'ó8
Ñ4ÐÐ4ô
  $¤JÓ/×5Ñ5´j×6FÑ6FÓGÐØ"+ÚŠq’!Ð)Ð+;Ð;ñ#
Ðñ 0IØ#ó0
Ñ,ÐÐ,ô
 !%¤ZÓ 0× 6Ñ 6´z×7HÑ7HÓ IÐØ#,ÚŠq’!Ð*Ð,<Ð<ñ$
Ð ñ 2KØ$ó2
Ñ.ÐÐ.ô
  $¤JÓ/×5Ñ5´j×6FÑ6FÓGÐØ"+ÚŠq’!Ð)Ð+;Ð;ñ#
Ðñ 0IØ#ó0
Ñ,ÐÐ,ð
 —k‘kà"Ø%ØØØ"ðô ×%Ñ%×)Ñ)Ó+×4Ñ4Ð5HÓIØ"ØØØ$8Ø&<Ø 0Ø"4Ø!2Ø#6Ø 0Ø"4ñ)
ˆ�ùòa3
ùó!
ùò#
ùó$
ùó
ùò"%ùò %Pùò Jùò Nùò Mùò 1WsZ   Å2b Ç&b%Ç3b%È	b+Èb+Éb0Êb6Êb6Ëb<
Ë?c
Ìc
Ì/cÍ5cÎ-cÏ%cc                óÀ   ‡ ‡— ddt         j                  df	 	 	 	 	 	 	 	 	 dˆ fd„Šdˆˆ fd„}t        ‰ j                  «      dk7  r |«       j	                  «       ‰ _        yy)	zM
        Compute and display summary metrics for evaluation results.
        TNrâ   c           
     óD  •— d}| rdnd}| rdnd}|€7‰j                   j                  d   d›d‰j                   j                  d	   d›�n|d›}t        t        «      }|j	                  |«      }	‰j                   j
                  j	                  |«      }
| rV‰j                  d
   }|�4t        j                  |‰j                   j                  k(  «      d   }||   }|d d …d d …d d …|	|
f   }nR‰j                  d   }|�4t        j                  |‰j                   j                  k(  «      d   }||   }|d d …d d …|	|
f   }t        ||d	kD     «      dk(  rd}n$t        t        j                  ||d	kD     «      «      }t        j                  |j                  ||||||«      «       |S )NzC {:<18} {} @[ IoU={:<9} | area={:>6s} | maxDets={:>3d} ] = {:0.10f}zAverage PrecisionzAverage Recallz(AP)z(AR)r   z0.2fú:r   rA  rB  rF  )r÷   rè   r„   rÒ   r7   rê   rô   rã   rH  r   r   r   ÚloggerÚinfoÚformat)Úuse_apÚiou_thrr    rê   ÚiStrÚtitleStrÚtypeStrÚiou_strÚall_object_sizesr�  Úmax_detections_idxÚsÚtÚmean_sr   s                 €r   Ú
_summarizez8COCOEvaluator._pycocotools_summarize.<locals>._summarizeN  sª  ø€ ð YˆDÙ.4Ñ*Ð:JˆHÙ &‘f¨FˆGð �?ð —;‘;×'Ñ'¨Ñ*¨4Ð0°°$·+±+×2FÑ2FÀrÑ2JÈ4Ð1PÑQà �~ð ô
  $¤JÓ/ÐØ-×3Ñ3°JÓ?ˆNØ!%§¡×!5Ñ!5×!;Ñ!;¸HÓ!EÐÙð —L‘L Ñ-�àÐ&ÜŸ™ ¨D¯K©K×,@Ñ,@Ñ!@ÓAÀ!ÑD�AØ˜!™�AØ’aššA˜~Ð/AÐAÑB‘ð —L‘L Ñ*�ØÐ&ÜŸ™ ¨D¯K©K×,@Ñ,@Ñ!@ÓAÀ!ÑD�AØ˜!™�AØ’aš˜NÐ,>Ð>Ñ?�Ü�1�Q˜‘V‘9‹~ Ò"Ø‘äœrŸw™w q¨¨R©¡yÓ1Ó2�Ü�K‰KØ—‘˜H g¨w¸
ÀHÈfÓUôð ˆMr!   c                 ó:  •— t        j                  dt         j                  ¬«      }  ‰d¬«      | d<    ‰dd‰j                  j                  d   ¬«      | d	<    ‰dd
‰j                  j                  d   ¬«      | d<    ‰dt
        j                  ‰j                  j                  d   ¬«      | d<    ‰dt
        j                  ‰j                  j                  d   ¬«      | d<    ‰dt
        j                  ‰j                  j                  d   ¬«      | d<    ‰d‰j                  j                  d   ¬«      | d<    ‰d‰j                  j                  d	   ¬«      | d<    ‰d‰j                  j                  d   ¬«      | d<    ‰dt
        j                  ‰j                  j                  d   ¬«      | d<    ‰dt
        j                  ‰j                  j                  d   ¬«      | d<    ‰dt
        j                  ‰j                  j                  d   ¬«      | d<   | S )N)é   r  T)r­  r   rÞ   rE   )r­  r®  rê   rK   g      è?)r­  r    rê   rD   rF   r(   F)r­  rê   rI   é   é   é	   rH   é   )	rã   r  rç   r÷   rê   rÒ   rØ   rÙ   rÚ   )rø   r¸  r   s    €€r   Ú_summarize_predictionszDCOCOEvaluator._pycocotools_summarize.<locals>._summarize_predictionsy  sç  ø€ Ü-/¯X©X°eÄ2Ç:Á:Ô-NˆEÙ!¨Ô.ˆE�!‰HÙ!Ø S°4·;±;×3GÑ3GÈÑ3JôˆE�!‰Hñ "Ø T°D·K±K×4HÑ4HÈÑ4KôˆE�!‰Hñ "ØÜ%×+Ñ+ØŸ™×-Ñ-¨aÑ0ôˆE�!‰Hñ
 "ØÜ%×,Ñ,ØŸ™×-Ñ-¨aÑ0ôˆE�!‰Hñ
 "ØÜ%×+Ñ+ØŸ™×-Ñ-¨aÑ0ôˆE�!‰Hñ
 "¨¸¿¹×9MÑ9MÈaÑ9PÔQˆE�!‰HÙ!¨¸¿¹×9MÑ9MÈaÑ9PÔQˆE�!‰HÙ!¨¸¿¹×9MÑ9MÈaÑ9PÔQˆE�!‰HÙ!ØÜ%×+Ñ+ØŸ™×-Ñ-¨aÑ0ôˆE�!‰Hñ
 #ØÜ%×,Ñ,ØŸ™×-Ñ-¨aÑ0ôˆE�"‰Iñ
 #ØÜ%×+Ñ+ØŸ™×-Ñ-¨aÑ0ôˆE�"‰Ið
 ˆLr!   r   )
r­  r   r®  zfloat | Noner    rÒ   rê   rå   rq   r   )rq   rS  )rÒ   r×   r   rô   rg  rø   )r   r¿  r¸  s   ` @r   Ú_pycocotools_summarizez$COCOEvaluator._pycocotools_summarizeI  sz   ù€ ð  Ø$(Ü%/§^¡^Øð	)	Øð)	à!ð)	ð #ð)	ð ð	)	ð
 õ)	öV*	ôX ˆt�|‰|Ó Ò!Ù/Ó1×8Ñ8Ó:ˆD�Jð "r!   c                óŒ  — t        t        j                  | j                  j                  «      «      | j                  _        t        t        j                  | j                  j
                  «      «      | j                  _        t        | j                  j                  «      | j                  _        | j                  «        | j                  j                  D ��ci c]2  }| j                  j
                  D ]  }||f| j                  ||«      “Œ Œ4 c}}| _
        | j                  j                  d   }| j                  j
                  D ���cg c]L  }| j                  j                  D ]1  }| j                  j                  D ]  }| j                  ||||«      ‘Œ Œ3 ŒN c}}}| _        | j                  «        yc c}}w c c}}}w )z„
        Start the per image evaluation on all images and keeep results in
        self.eval_imgs (a list of dictionaries).
        r   N)r„   rã   Úuniquer÷   rž   rŸ   rú   rê   r  r  rù   r    r9  ró   r¦  )r   r¡   r±   r  r    s        r   ÚevaluatezCOCOEvaluator.evaluate¨  sw  € ô #¤2§9¡9¨T¯[©[×-@Ñ-@Ó#AÓBˆ�‰ÔÜ"¤2§9¡9¨T¯[©[×-@Ñ-@Ó#AÓBˆ�‰ÔÜ% d§k¡k×&:Ñ&:Ó;ˆ�‰Ôà×-Ñ-Ô/ð
 Ÿ+™+×-Ñ-÷
àØŸ+™+×-Ñ-ò
ð ð �VÐ˜d×/Ñ/°¸Ó?Ñ?ð
Øó
ˆŒ	ð —+‘+×&Ñ& rÑ*ˆð
 Ÿ+™+×-Ñ-÷
ð 
àØ"Ÿk™k×4Ñ4ò
ð ØŸ+™+×-Ñ-ò	
ð ð × Ñ  ¨°¸WÕEð
ØEð
ØEô
ˆŒð 	×ÑÕùó%
ùô
s   Ã7F9ÅAF?N)rñ   r}   rò   r}   rs   )r¡   rå   r±   rå   rq   rS  )
r¡   rå   r±   rå   r    z!list[float] | tuple[float, float]r  rå   rq   rË   )ru   rv   rw   rx   r‰   r  r  r9  r¦  rÀ  rÃ  r{   r!   r   rï   rï   H  s{   „ ñð"KØ-ð"KØARó"KóH óD'ðR{
àð{
ð ð{
ð 6ð	{
ð
 ð{
ð 
ó{
ózN
ó`];ô~r!   rï   c                  óˆ   — e Zd ZdZej
                  dddf	 	 	 	 	 	 	 d
d„Zdd„Z	 	 	 	 	 	 dd„Z	 	 	 	 dd„Z		 	 	 	 dd„Z
dd	„Zy)ÚMeanAveragePrecisiona  
    Mean Average Precision (mAP) is a metric used to evaluate object detection models.
    It is the average of the precision-recall curves at different IoU thresholds.

    Examples:
        ```pycon
        >>> import numpy as np
        >>> import supervision as sv
        >>> from supervision.metrics import MeanAveragePrecision
        >>> predictions = sv.Detections(
        ...     xyxy=np.array([[0, 0, 10, 10]]),
        ...     class_id=np.array([0]),
        ...     confidence=np.array([0.9])
        ... )
        >>> targets = sv.Detections(
        ...     xyxy=np.array([[0, 0, 10, 10]]),
        ...     class_id=np.array([0])
        ... )
        >>> map_metric = MeanAveragePrecision()
        >>> map_result = map_metric.update(predictions, targets).compute()
        >>> round(float(map_result.map50), 2)
        1.0
        >>> print(map_result)
        Average Precision (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 1.000
        Average Precision (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 1.000
        Average Precision (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 1.000
        Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 1.000
        Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
        Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000

        ```

    ![example_plot](
        https://media.roboflow.com/supervision-docs/metrics/mAP_plot_example.png
    ){ align=center width="800" }
    FNc                óX   — || _         || _        g | _        g | _        || _        || _        y)aW  
        Initialize the Mean Average Precision metric.

        Args:
            metric_target: The type of detection data to use.
            class_agnostic: Whether to treat all data as a single class.
            class_mapping: A dictionary to map class IDs to new IDs.
            image_indices: The indices of the images to use.
        N)Ú_metric_targetÚ_class_agnosticÚ_predictions_listÚ_targets_listÚ_class_mappingÚ_image_indices)r   r   Úclass_agnosticÚclass_mappingÚimage_indicess        r   r‰   zMeanAveragePrecision.__init__ð  s4   € ð  ,ˆÔØ-ˆÔà35ˆÔØ/1ˆÔØ+ˆÔØ+ˆÕr!   c                ó    — g | _         g | _        y)zR
        Reset the metric to its initial state, clearing all stored data.
        N)rÉ  rÊ  r$   s    r   ÚresetzMeanAveragePrecision.reset  s   € ð "$ˆÔØˆÕr!   c                ó  — t        |t        «      s|g}t        |t        «      s|g}t        |«      t        |«      k7  r$t        dt        |«      › dt        |«      › d�«      ‚| j                  r\t        |«      }t        |«      }|D ]  }|j                  €Œd|j                  dd Œ  |D ]  }|j                  €Œd|j                  dd Œ  | j                  j                  |«       | j                  j                  |«       | S )a  
        Add new predictions and targets to the metric, but do not compute the result.

        Args:
            predictions: The predicted detections.
            targets: The ground-truth detections.

        Returns:
            The updated metric instance.
        úThe number of predictions (ú) and targets (z%) during the update must be the same.Nr   )
r»   r„   r   r¼   rÈ  r   Úclass_idrÉ  ÚextendrÊ  )r   r¿   rˆ   Ú
predictionÚtargets        r   ÚupdatezMeanAveragePrecision.update  s  € ô ˜+¤tÔ,Ø&˜-ˆKÜ˜'¤4Ô(Ø�iˆGäˆ{Óœs 7›|Ò+ÜØ-¬c°+Ó.>Ð-?ð @Ü  ›\˜NÐ*OðQóð ð
 ×ÒÜ" ;Ó/ˆKÜ˜wÓ'ˆGà)ò 0�
Ø×&Ñ&Ñ2Ø-/�J×'Ñ'©Ñ*ð0ð "ò ,�Ø—?‘?Ñ.Ø)+�F—O‘O¡AÑ&ð,ð 	×Ñ×%Ñ% kÔ2Ø×Ñ×!Ñ! 'Ô*àˆr!   c           
     ó  — t        t        |«      «      D �cg c]  }d|i‘Œ }}| j                  �!|D �cg c]  }d| j                  |d      i‘Œ }}g }t        |«      D �][  \  }}| j                  �| j                  |   }|j                  €Œ/t        |j                  «      D �]  \  }}	|	d   |	d   |	d   |	d   z
  |	d   |	d   z
  g}
d}|j
                  �?|j
                  |   }| j                  �| j                  t        |«         }nt        |«      }d}|j                  �)d|j                  v rt        |j                  d   |   «      }|€|
d   |
d   z  }d}|j                  �)d|j                  v rt        |j                  d   |   «      }||||
|t        |«      dz   dd	œ} |j                  |«       �Œ �Œ^ |D �ch c]  }|j                  d
«      ’Œ }}|D �cg c]  }d|i‘Œ }}|||dœS c c}w c c}w c c}w c c}w )zJTransform targets into a dictionary that can be used by the COCO evaluatorr�   Nr   rK   rE   rD   r™   rš   )r™   rš   r�   rº   r“   r�   rü   r“   )r‘   r   r’   )r^   r   rÌ  r®   ÚxyxyrÕ  rË  rå   Údatar   r”   r!  )r   rˆ   r¡   r‘   r–   r   r�   Úimage_targetsÚ
target_idxrÛ  Úxywhr“   Úcls_idr™   rš   Údict_annotationÚ
annotationÚall_cat_idsr±   r’   s                       r   Ú_prepare_targetsz%MeanAveragePrecision._prepare_targets9  sb  € ô 05´S¸³\Ó/BÖC V�4˜’.ÐCˆÐCØ×ÑÐ*ØHNÖOÀ�t˜T×0Ñ0°°T±Ñ;Ò<ÐOˆFÐOà,.ˆÜ'0°Ó'9ó *	4Ñ#ˆH�mØ×"Ñ"Ð.Ø×.Ñ.¨xÑ8�ð ×!Ñ!Ð)Øä$-¨m×.@Ñ.@Ó$Aó "4Ñ �
˜DØ˜Q™  a¡¨$¨q©'°D¸±GÑ*;¸TÀ!¹WÀtÈAÁwÑ=NÐO�ð  �à ×)Ñ)Ð5Ø*×3Ñ3°JÑ?�FØ×*Ñ*Ð6Ø&*×&9Ñ&9¼#¸f»+Ñ&F™ä&)¨&£k˜ð �Ø ×%Ñ%Ð1°fÀ×@RÑ@RÑ6RÜ  ×!3Ñ!3°FÑ!;¸JÑ!GÓH�Dà�<Ø ™7 T¨!¡WÑ,�Dà�Ø ×%Ñ%Ð1°iÀ=×CUÑCUÑ6UÜ! -×"4Ñ"4°YÑ"?À
Ñ"KÓL�Gð !Ø&Ø (Ø Ø#.Ü˜kÓ*¨QÑ.Øñ#�ð #�×"Ñ" ?Ö3òE"4ð*	4ðX HSÖS¸�z—~‘~ mÕ4ÐSˆÐSØ3>Ö?¨�t˜V’nÐ?ˆ
Ð?ð Ø&Ø$ñ
ð 	
ùòi DùâOùò^ TùÚ?s   —G2´G7ÇG<ÇHc           
     ó¸  — g }t        |«      D �]H  \  }}| j                  �| j                  |   }|j                  €Œ/t        |j                  «      D �]  \  }}|d   |d   |d   |d   z
  |d   |d   z
  g}d}d}	|j                  �?|j                  |   }
| j                  �| j                  t        |
«         }nt        |
«      }|j                  �t        |j                  |   «      }	d}|j                  �)d|j                  v rt        |j                  d   |   «      }|€|d   |d   z  }|||	||t        |«      dz   dœ}|j                  |«       �Œ �ŒK |S )	z`Transform predictions into a list of predictions that can be used by the COCO
        evaluator.Nr   rK   rE   rD   rá   r™   )r�   rº   r  r“   r™   r�   )r®   rÌ  rÛ  rÕ  rË  rå   Ú
confidencer   rÜ  r   r”   )r   r¿   rò   r�   Úimage_predictionsÚpred_idxrÛ  rß  r“   r  rà  r™   Údict_predictions                r   Ú_prepare_predictionsz)MeanAveragePrecision._prepare_predictionsw  s£  € ð
 24ÐÜ+4°[Ó+Aó *	9Ñ'ˆHÐ'Ø×"Ñ"Ð.Ø×.Ñ.¨xÑ8�à ×%Ñ%Ð-Øä"+Ð,=×,BÑ,BÓ"Có #9‘�˜$Ø˜Q™  a¡¨$¨q©'°D¸±GÑ*;¸TÀ!¹WÀtÈAÁwÑ=NÐO�à�Ø�à$×-Ñ-Ð9Ø.×7Ñ7¸ÑA�FØ×*Ñ*Ð6Ø&*×&9Ñ&9¼#¸f»+Ñ&F™ä&)¨&£k˜à$×/Ñ/Ð;Ü!Ð"3×">Ñ">¸xÑ"HÓI�Eð �à%×*Ñ*Ð6ØÐ"3×"8Ñ"8Ñ8ä Ð!2×!7Ñ!7¸Ñ!?ÀÑ!IÓJ�Dà�<Ø ™7 T¨!¡WÑ,�Dð !)Ø Ø"Ø#.Ø ÜÐ.Ó/°!Ñ3ñ#�ð !×'Ñ'¨Ö8òG#9ð*	9ðV  Ðr!   c                ó<  — t        | j                  «      }t        | j                  «      }||k7  rt        d|› d|› d�«      ‚| j	                  | j                  «      }| j                  | j                  «      }t        |¬«      }|j                  |«      }t        ||«      }|j                  «        t        | j                  | j                  |j                  d   |j                  d   |j                  j                  t!        j"                  |j                  j$                  «      ¬«      }t        | j                  | j                  |j                  d   |j                  d	   |j                  j                  t!        j"                  |j                  j$                  «      ¬«      }	t        | j                  | j                  |j                  d
   |j                  d   |j                  j                  t!        j"                  |j                  j$                  «      ¬«      }
t        | j                  | j                  |j                  d   |j                  d   |j                  j                  t!        j"                  |j                  j$                  «      ||	|
¬«	      }|S )a6  
        Calculate Mean Average Precision based on predicted and ground-truth
        detections at different thresholds using the COCO evaluation metrics.
        Source: https://github.com/rafaelpadilla/review_object_detection_metrics

        Returns:
            The Mean Average Precision result.
        rÓ  rÔ  z)) during the evaluation must be the same.r‹   rY  rZ  )r   r   r   r*   r+   r,   r[  r\  r]  r^  rW  rX  )	r   r   r   r*   r+   r,   r-   r.   r/   )r   rÉ  rÊ  r¼   rä  rê  r}   rÊ   rï   rÃ  r   rÇ  rÈ  rô   r÷   rè   rã   r  rŸ   )r   Útotal_images_predictionsÚtotal_images_targetsÚdict_targetsÚlst_predictionsÚcoco_gtÚcoco_detÚcocoEvalÚ	mAP_smallÚ
mAP_mediumÚ	mAP_largeÚ
mAP_results               r   ÚcomputezMeanAveragePrecision.computeª  sJ  € ô $' t×'=Ñ'=Ó#>Ð Ü" 4×#5Ñ#5Ó6Ðà#Ð';Ò;ÜØ-Ð.FÐ-Gð HØ1Ð2ð 3ðóð ð
 ×,Ñ,¨T×-?Ñ-?Ó@ˆØ×3Ñ3°D×4JÑ4JÓKˆä#¨LÔ9ˆà×+Ñ+¨OÓ<ˆä  ¨(Ó3ˆð 	×ÑÔô /Ø×-Ñ-Ø"×2Ñ2Ø×'Ñ'Ð(:Ñ;Ø!×)Ñ)Ð*>Ñ?Ø#Ÿ?™?×3Ñ3ÜŸH™H X§_¡_×%<Ñ%<Ó=ô
ˆ	ô 0Ø×-Ñ-Ø"×2Ñ2Ø×'Ñ'Ð(;Ñ<Ø!×)Ñ)Ð*?Ñ@Ø#Ÿ?™?×3Ñ3ÜŸH™H X§_¡_×%<Ñ%<Ó=ô
ˆ
ô /Ø×-Ñ-Ø"×2Ñ2Ø×'Ñ'Ð(:Ñ;Ø!×)Ñ)Ð*>Ñ?Ø#Ÿ?™?×3Ñ3ÜŸH™H X§_¡_×%<Ñ%<Ó=ô
ˆ	ô 0Ø×-Ñ-Ø"×2Ñ2Ø×'Ñ'Ð(>Ñ?Ø!×)Ñ)Ð*BÑCØ#Ÿ?™?×3Ñ3ÜŸH™H X§_¡_×%<Ñ%<Ó=Ø#Ø%Ø#ô

ˆ
ð Ðr!   )r   r   rÍ  r   rÎ  zdict[int, int] | NonerÏ  rÌ   rs   )r¿   úDetections | list[Detections]rˆ   rø  rq   rÅ  )rˆ   úlist[Detections]rq   zdict[str, list[dict[str, Any]]])r¿   rù  rq   rÏ   )rq   r   )ru   rv   rw   rx   r   ÚBOXESr‰   rÑ  rÙ  rä  rê  r÷  r{   r!   r   rÅ  rÅ  Ê  s    „ ñ#ðN '3×&8Ñ&8Ø$Ø/3Ø*.ð,à#ð,ð ð,ð -ð	,ð
 (ó,ó0 ð(à2ð(ð /ð(ð 
ó	(ðT<
Ø'ð<
à	(ó<
ð|1 Ø+ð1 à	ó1 ôfFr!   rÅ  )4Ú
__future__r   r¾   ri  r›   Úcollectionsr   r   Údataclassesr   Úenumr   Útypingr   r	   Únumpyrã   Únumpy.typingÚnptÚ
matplotlibr
   rX   Úsupervision.detection.corer   Ú'supervision.detection.utils.iou_and_nmsr   Úsupervision.draw.colorr   Úsupervision.metrics.corer   r   Úsupervision.metrics.utils.utilsr   Úsupervision.utils.loggerr   ru   rª  r8   r<   r   r}   rì   rí   rë   Úfinforç   Úepsrf  rÒ   rÜ   rï   rÅ  r{   r!   r   ú<module>r     s×   ðÝ "ã Û Û Ý #Ý Ý !Ý ß %ã Ý Ý $å 1Ý NÝ 7ß 9Ý CÝ 0á	�XÓ	€áÛð ÷Xð Xó ðX÷vR#ñ R#ðl Ð ØÐ ØÐ ð €b‡h�hˆr�z‰zÓ×Ñ€ô�ô ÷#
ñ #
÷L	ñ 	ôDf˜6õ fr!   