
    ^j                     Z    d Z ddlmZ ddlZdeeeef      dedee   deeeef      fdZ	y)	z?Confidence-threshold sweep for precision/recall/F1 computation.    )AnyNper_class_dataconf_thresholdsclasses_with_gtreturnc                    t        |       }g }|D ]  }g }g }g }t        |      D ]  }	| |	   }
|
d   }|
d   }|
d   }|
d   }||k\  }|| z  }||   }t        j                  |dk7        }t        j                  |dk(        }||z
  }||z   dkD  r|||z   z  nd}||z   dkD  r|||z   z  nd}||z   dkD  rd|z  |z  ||z   z  nd}|j	                  |       |j	                  |       |j	                  |        t        |      dkD  rst        j
                  |D 	cg c]  }	||	   	 c}	      }t        j
                  |D 	cg c]  }	||	   	 c}	      }t        j
                  |D 	cg c]  }	||	   	 c}	      }nd}d}d}|j	                  ||||t        j                  |      t        j                  |      t        j                  |      d        |S c c}	w c c}	w c c}	w )	uP  Sweep confidence thresholds and compute precision/recall/F1 at each.

    Args:
        per_class_data: Per-class matching data list indexed by class id.
            Each entry is a dict with keys ``"scores"``, ``"matches"``, ``"ignore"``, and ``"total_gt"``.
        conf_thresholds: Iterable of float confidence thresholds to evaluate.
        classes_with_gt: List of class indices that have at least one GT instance — used for macro-averaging.

    Returns:
        List of result dicts, one per threshold, each containing:
            - ``"confidence_threshold"``: float
            - ``"macro_f1"``: float
            - ``"macro_precision"``: float
            - ``"macro_recall"``: float
            - ``"per_class_prec"``: float ndarray
            - ``"per_class_rec"``: float ndarray
            - ``"per_class_f1"``: float ndarray
    scoresmatchesignoretotal_gtr   g           )confidence_thresholdmacro_f1macro_precisionmacro_recallper_class_precper_class_recper_class_f1)lenrangenpsumappendmeanarray)r   r   r   num_classesresultsconf_threshper_class_precisionsper_class_recallsper_class_f1skdatar	   r
   r   r   above_threshvalidvalid_matchestpfpfn	precisionrecallf1r   r   r   s                              e/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/evaluation/f1_sweep.pysweep_confidence_thresholdsr.      s   . n%KG& 0
!{# 	%A!!$D(^F9oG(^FJ'H![0L F7*E#ENM*+B*+BBB+-7a-b2gSI(*R1}R27^#FCLvCUYZBZY'9v+=>`cB ''	2$$V,  $-	%0 !# gg&X1';A'>&XYO77/#RQ$5a$8#RSLww/JQa 0JKH!OLH(3$#2 ,"$((+?"@!#*;!< " 7
	
M0
d N) 'Y#RJs   G
>G
$G
)
__doc__typingr   numpyr   listdictstrintr.        r-   <module>r8      s]    F  Lc3h(LL #YL 
$sCx.	Lr7   