+
    œ°³jöM  ã                   ó  € ^ RI t^ RIt^ RIHt ^ RIHtHt ^RIH	t	 ^RI
Ht ^RIHt ^RIHtHtHt ^RIHt ]! 4       '       d   ^ RIHt R	 R
 ltR R ltR R ltRR R lltR R lt ! R R]4      t ! R R]4      tR tRR ltR# )é    N)ÚTensorÚnn)Ú!_is_torch_distributed_initialized)Úcenter_to_corners_format)Úis_scipy_available)ÚHungarianMatcherÚ	dice_lossÚgeneralized_box_iou)ÚLwDetrImageLoss)Úlinear_sum_assignmentc                ó„   € V ^8„  d   QhR\         P                  R\         P                  R\        R\         P                  /# )é   ÚinputsÚlabelsÚ	num_masksÚreturn)Útorchr   Úint)Úformats   "Ú_/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/loss/loss_rf_detr.pyÚ__annotate__r   $   s8   € ÷ ñ ¤u§|¡|ð ¼U¿\¹\ð ÔVYð Ô^c×^jÑ^jñ ó    c                ó�   € \         P                  ! RR7      pV! W4      pVP                  ^4      P                  4       V,          pV# )aX  
Args:
    inputs (`torch.Tensor`):
        A float tensor of arbitrary shape.
    labels (`torch.Tensor`):
        A tensor with the same shape as inputs. Stores the binary classification labels for each element in inputs
        (0 for the negative class and 1 for the positive class).

Returns:
    loss (`torch.Tensor`): The computed loss.
Únone©Ú	reduction)r   ÚBCEWithLogitsLossÚmeanÚsum)r   r   r   Ú	criterionÚcross_entropy_lossÚlosss   &&&   r   Úsigmoid_cross_entropy_lossr#   $   sB   € ô ×$Ò$¨vÔ6€IÙ" 6Ó2Ðà×"Ñ" 1Ó%×)Ñ)Ó+¨iÕ7€DØ€Kr   c                óx   € V ^8„  d   QhR\         P                  R\         P                  R\         P                  /# ©r   r   r   r   ©r   r   )r   s   "r   r   r   8   s0   € ÷ ñ ´·±ð ÄuÇ|Á|ð ÔX]×XdÑXdñ r   c                óˆ  € V P                   ^,          p\        P                  ! RR7      pV! V \        P                  ! V 4      4      pV! V \        P
                  ! V 4      4      p\        P                  ! WB,          VP                  4      p\        P                  ! WR,          ^V,
          P                  4      pWg,           pV# )aÂ  
A pair wise version of the cross entropy loss, see `sigmoid_cross_entropy_loss` for usage.

Args:
    inputs (`torch.Tensor`):
        A tensor representing a mask.
    labels (`torch.Tensor`):
        A tensor with the same shape as inputs. Stores the binary classification labels for each element in inputs
        (0 for the negative class and 1 for the positive class).

Returns:
    loss (`torch.Tensor`): The computed loss between each pairs.
r   r   )Úshaper   r   r   Ú	ones_likeÚ
zeros_likeÚmatmulÚT)	r   r   Úheight_and_widthr    Úcross_entropy_loss_posÚcross_entropy_loss_negÚloss_posÚloss_negr"   s	   &&       r   Ú$pair_wise_sigmoid_cross_entropy_lossr2   8   s‘   € ð —|‘| A•Ðä×$Ò$¨vÔ6€IÙ& v¬u¯ª¸vÓ/FÓGÐÙ& v¬u×/?Ò/?ÀÓ/GÓHÐä�|Š|Ð2ÕEÀvÇxÁxÓP€HÜ�|Š|Ð2ÕEÈÈFÍ
Ç~Á~ÓV€HØÕ€DØ€Kr   c                ó<   € V ^8„  d   QhR\         R\         R\         /# r%   )r   )r   s   "r   r   r   T   s!   € ÷ ñ ¤ð ´ð ¼6ñ r   c                ó8  € V P                  4       P                  ^4      p ^\        P                  ! WP                  4      ,          pV P                  R4      R,          VP                  R4      R,          ,           p^V^,           V^,           ,          ,
          pV# )a   
A pair wise version of the dice loss, see `dice_loss` for usage.

Args:
    inputs (`torch.Tensor`):
        A tensor representing a mask
    labels (`torch.Tensor`):
        A tensor with the same shape as inputs. Stores the binary classification labels for each element in inputs
        (0 for the negative class and 1 for the positive class).

Returns:
    `torch.Tensor`: The computed loss between each pairs.
éÿÿÿÿ)ºNNNN)Nr6   )ÚsigmoidÚflattenr   r+   r,   r   )r   r   Ú	numeratorÚdenominatorr"   s   &&   r   Úpair_wise_dice_lossr;   T   sr   € ð �^‰^Ó×%Ñ% aÓ(€FØ”E—L’L ¯©Ó2Õ2€Ià—*‘*˜R“. Õ)¨F¯J©J°r«N¸7Õ,CÕC€KØ�	˜A• +°¥/Õ2Õ2€DØ€Kr   c                óx   € V ^8„  d   QhR\         P                  R\         P                  R\         P                  /# )r   Úinput_featuresÚpoint_coordinatesr   r&   )r   s   "r   r   r   k   s0   € ÷ ñ Ü—L‘LðÜ5:·\±\ðä
‡\�\ñr   c                óü   € VP                  4       ^8X  d   RpVP                  ^4      p\        P                  P                  P
                  ! V RV,          R,
          3/ VB pV'       d   VP                  ^4      pV# )að  
A wrapper around `torch.nn.functional.grid_sample` to support 3D point_coordinates tensors.

Args:
    input_features (`torch.Tensor` of shape (batch_size, channels, height, width)):
        A tensor that contains features map on a height * width grid
    point_coordinates (`torch.Tensor` of shape (batch_size, num_points, 2) or (batch_size, grid_height, grid_width,:
    2)):
        A tensor that contains [0, 1] * [0, 1] normalized point coordinates
    add_dim (`bool`):
        boolean value to keep track of added dimension

Returns:
    point_features (`torch.Tensor` of shape (batch_size, channels, num_points) or (batch_size, channels,
    height_grid, width_grid):
        A tensor that contains features for points in `point_coordinates`.
Tç       @g      ð?)ÚdimÚ	unsqueezer   r   Ú
functionalÚgrid_sampleÚsqueeze)r=   r>   Úadd_dimÚkwargsÚpoint_featuress   &&&, r   Úsample_pointrI   k   st   € ð( ×ÑÓ !Ô#ØˆØ-×7Ñ7¸Ó:Ðô —X‘X×(Ñ(×4Ò4°^ÀSÐK\ÕE\Ð_bÕEbÑmÐflÑm€NßØ'×/Ñ/°Ó2ˆàÐr   c          
      óT   € V ^8„  d   QhR\         R\        R\        R\        R\         /# )r   ÚlogitsÚ
num_pointsÚoversample_ratioÚimportance_sample_ratior   )r   r   Úfloat)r   s   "r   r   r   Œ   s4   € ÷ .ñ .Üð.Ü #ð.Ü7:ð.ÜUZð.äñ.r   c           
     óP  € V P                   ^ ,          p\        W,          4      p\        P                  ! WE^V P                  R7      p\        WRR7      p\        P                  ! V4      ) p\        W1,          4      p	W,
          p
\        P                  ! VR,          V	^R7      ^,          p\        P                  ! V^VP                  R4      P                  RR^4      4      pV
^ 8”  d<   \        P                  ! V\        P                  ! WJ^V P                  R7      .^R7      pV# )að  
This function is meant for sampling points in [0, 1] * [0, 1] coordinate space based on their uncertainty. The
uncertainty is calculated for each point using the passed `uncertainty function` that takes points logit
prediction as input.

Args:
    logits (`float`):
        Logit predictions for P points.
    uncertainty_function:
        A function that takes logit predictions for P points and returns their uncertainties.
    num_points (`int`):
        The number of points P to sample.
    oversample_ratio (`int`):
        Oversampling parameter.
    importance_sample_ratio (`float`):
        Ratio of points that are sampled via importance sampling.

Returns:
    point_coordinates (`torch.Tensor`):
        Coordinates for P sampled points.
©ÚdeviceF©Úalign_corners)ÚkrA   ©rA   )r6   r   r6   r5   )r(   r   r   ÚrandrR   rI   ÚabsÚtopkÚgatherrB   ÚexpandÚcat)rK   rL   rM   rN   Ú	num_boxesÚnum_points_sampledr>   Úpoint_logitsÚpoint_uncertaintiesÚnum_uncertain_pointsÚnum_random_pointsÚidxs   &&&&        r   Úsample_points_using_uncertaintyrd   Œ   sú   € ð2 —‘˜Q•€IÜ˜ZÕ:Ó;Ðô Ÿ
š
 9À!ÈFÏMÉMÔZÐä ÈÔO€Lä!ŸIšI lÓ3Ð4ÐäÐ6ÕCÓDÐØ"Õ9Ðä
�*Š*Ð(¨Õ1Ð5IÈqÔ
QÐRSÕ
T€CÜŸšÐ%6¸¸3¿=¹=ÈÓ;L×;SÑ;SÐTVÐXZÐ\]Ó;^Ó_Ðà˜1ÔÜ!ŸIšIØ¤§
¢
¨9ÈÐSY×S`ÑS`Ô aÐbØô
Ðð Ðr   c                   óp   a a€ ] tR t^½t oRV3R lV 3R lllt]P                  ! 4       R 4       tRtVt	V ;t
# )ÚRfDetrHungarianMatcherc                ó>   <€ V ^8„  d   QhRS[ RS[ RS[ RS[RS[ RS[ /# )r   Ú
class_costÚ	bbox_costÚ	giou_costÚmask_point_sample_ratioÚcost_mask_class_costÚcost_mask_dice_cost)rO   r   )r   Ú__classdict__s   "€r   r   Ú#RfDetrHungarianMatcher.__annotate__¾   sG   ø€ ÷ 2ñ 2áð2ñ ð2ñ ð	2ñ
 "%ð2ñ $ð2ñ #ñ2r   c                óL   <€ \         SV `  WV4       W@n        WPn        W`n        R # ©N)ÚsuperÚ__init__rk   Úcost_mask_classÚcost_mask_dice)Úselfrh   ri   rj   rk   rl   rm   Ú	__class__s   &&&&&&&€r   rs   ÚRfDetrHungarianMatcher.__init__¾   s&   ø€ ô 	‰Ñ˜°	Ô:à'>Ô$Ø3ÔØ1Ör   c                ó”  € VR,          P                   R,          w  rEVR,          P                  ^ ^4      P                  4       pVR,          P                  ^ ^4      pVR,          P                  ^ ^4      p\        P                  ! V U	u. uF  q™R,          NK  	  up	4      p
\        P                  ! V U	u. uF  q™R,          NK  	  up	4      p\        P                  ! V U	u. uF  q™R,          NK  	  up	4      pRpR	p^V,
          Wn,          ,          ^V,
          R
,           P                  4       ) ,          pV^V,
          V,          ,          VR
,           P                  4       ) ,          pVRV
3,          VRV
3,          ,
          p\        P                  ! VP                  \        P                  4      VP                  \        P                  4      ^R7      P                  V4      p\        \        V4      \        V4      4      ) pVP                   R,          w  ppVV,          V P                  ,          p\        P                  ! ^V^VP                  R7      pVP                  VP                   ^ ,          ^^4      pVP!                  ^4      p\#        VVRR7      p\        P$                  ! VR4      pVP                  VP&                  4      pVP                  VP                   ^ ,          ^^4      pVP!                  ^4      p\#        VVRRR7      p\        P$                  ! VR4      p\)        VV4      p\+        VV4      pV P,                  V,          V P.                  V,          ,           V P0                  V,          ,           V P2                  V,          ,           V P4                  V,          ,           pVP7                  WER4      P9                  4       p\        P:                  ! VP&                  4      P<                  VVP?                  4       VPA                  4       ,          &   V U	u. uF  p	\C        V	R,          4      NK  	  pp	. pWS,          p VPE                  V ^R7      p!\G        V4       FÎ  p"V!V",          p#\I        V#PE                  VR4      4       U$U%u. uF  w  p$p%\K        V%V$,          4      NK  	  p&p$p%V"^ 8X  d   T&pKV  \M        VV&4       U'U(u. uF`  w  p'p(\N        PP                  ! V'^ ,          V(^ ,          V V",          ,           .4      \N        PP                  ! V'^,          V(^,          .4      3NKb  	  pp'p(KÐ  	  V U$U)u. uFR  w  p$p)\        PR                  ! V$\        PT                  R7      \        PR                  ! V)\        PT                  R7      3NKT  	  p*p$p)V*# u up	i u up	i u up	i u up	i u up%p$i u up(p'i u up)p$i )zÙ
Differences:
- out_prob = outputs["logits"].flatten(0, 1).sigmoid() instead of softmax
- class_cost uses alpha and gamma
- Additionally, mask cost is computed using pair-wise sigmoid cross entropy loss and dice loss
rK   :Nr   NÚ
pred_boxesÚ
pred_masksÚclass_labelsÚboxesÚmasksg      Ð?r@   g:Œ0âŽyE>r6   )ÚprQ   FrS   Únearest©rT   ÚmoderV   )Údtyper5   )r5   é   )+r(   r8   r7   r   r\   ÚlogÚcdistÚtoÚfloat32Útype_asr
   r   rk   rW   rR   ÚrepeatrB   rI   rE   rƒ   r2   r;   ri   rh   rj   rt   ru   ÚviewÚcpuÚfinfoÚmaxÚisinfÚisnanÚlenÚsplitÚrangeÚ	enumerater   ÚzipÚnpÚconcatenateÚ	as_tensorÚint64)+rv   ÚoutputsÚtargetsÚ
group_detrÚ
batch_sizeÚnum_queriesÚout_probÚout_bboxÚ	out_masksÚvÚ
target_idsÚtarget_bboxÚtarget_masksÚalphaÚgammaÚneg_cost_classÚpos_cost_classrh   ri   rj   ÚheightÚwidthrL   Úpoint_coordsÚpred_point_coordsÚpred_masks_logitsÚtarget_point_coordsrt   ru   Úcost_matrixÚsizesÚindicesÚgroup_num_queriesÚcost_matrix_listÚgroup_idÚgroup_cost_matrixÚiÚcÚgroup_indicesÚindice1Úindice2ÚjÚmatched_indicess+   &&&&                                       r   ÚforwardÚRfDetrHungarianMatcher.forwardÍ   sý  € ð #*¨(Õ"3×"9Ñ"9¸"Õ"=Ñˆ
ð ˜8Õ$×,Ñ,¨Q°Ó2×:Ñ:Ó<ˆØ˜<Õ(×0Ñ0°°AÓ6ˆØ˜LÕ)×1Ñ1°!°QÓ7ˆ	ô —Y’Y¹7ÓC¹7°a .× 1Ð 1¹7ÑCÓDˆ
Ü—i’i±WÓ =±W° 7§ ±WÑ =Ó>ˆÜ—y’y±gÓ!>±g° G§* *±gÑ!>Ó?ˆð ˆØˆØ˜e�)¨­Õ8¸aÀ(½lÈTÕ>Q×=VÑ=VÓ=XÐ<XÕYˆØ 1 x¥<°EÕ"9Õ:ÀÈ4Å×?TÑ?TÓ?VÐ>VÕWˆØ# A z MÕ2°^ÀAÀzÀMÕ5RÕRˆ
ô —K’K §¡¬E¯M©MÓ :¸K¿N¹NÌ5Ï=É=Ó<YÐ]^Ô_×gÑgÐhpÓqˆ	ô )Ô)AÀ(Ó)KÔMeÐfqÓMrÓsÐsˆ	ð !Ÿ™ rÕ*‰ˆ�Ø˜e•^ t×'CÑ'CÕCˆ
Ü—z’z ! Z°¸9×;KÑ;KÔLˆà(×/Ñ/°	·±ÀÕ0BÀAÀqÓIÐØ×'Ñ'¨Ó*ˆ	Ü(¨Ð4EÐUZÔ[ÐÜ!ŸMšMÐ*;¸WÓEÐà#—‘ y§¡Ó7ˆØ*×1Ñ1°,×2DÑ2DÀQÕ2GÈÈAÓNÐØ#×-Ñ-¨aÓ0ˆÜ# LÐ2EÐUZÐajÔkˆÜ—}’} \°7Ó;ˆä>Ð?PÐR^Ó_ˆÜ,Ð->ÀÓMˆð �N‰N˜YÕ&Ø�o‰o 
Õ*õ+à�n‰n˜yÕ(õ)ð ×"Ñ" _Õ4õ5ð ×!Ñ! NÕ2õ	3ð 	ð "×&Ñ& zÀÓC×GÑGÓIˆô BGÇÂÈ[×M^ÑM^ÓA_×AcÑAcˆ�K×%Ñ%Ó'¨+×*;Ñ*;Ó*=Õ=Ñ>ñ +2Ó2©' Q”�Q�w•Z–©'ˆÐ2ØˆØ'Õ5ÐØ&×,Ñ,Ð->ÀAÐ,ÓFÐÜ˜jÖ)ˆHØ 0°Õ :ÐÜENÐO`×OfÑOfÐglÐnpÓOqÔErÔsÑEr¹T¸QÀÔ2°1°Qµ4Ö8ÑErˆMÑsØ˜1Œ}Ø'’ô -0°¸Ô,Gôñ
 -HÑ(˜ ô Ÿš¨°­
°G¸AµJÐARÐU]ÕA]Õ4]Ð'^Ó_ÜŸš¨°­
°G¸AµJÐ'?Ó@óñ -Hð ñ ‘ñ *ñ hoô
ÙgnÑ_cÐ_`ÐbcŒU�_Š_˜Q¤e§k¡kÔ2´E·O²OÀAÌUÏ[É[Ô4YÓZÑgnð 	ñ 
ð ÐùòM  DùÚ =ùÚ!>ùò` 3ùó tùóùó
s,   Â
V$Â6V)Ã"V.Ð+V3ÒV8ÓA&V>ÕAW)rt   ru   rk   )r„   r„   r„   é   r„   r„   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rs   r   Úno_gradr¾   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©rw   rn   s   @@r   rf   rf   ½   s1   ù‡ € ÷2õ 2ð ‡]‚]ƒ_ñUó ÷Uð Ur   rf   c                   ó>   a a€ ] tR tRt oV 3R ltR tR tRtVtV ;t	# )ÚRfDetrImageLossi&  c                ó6   <€ \         SV `  WW4V4       W`n        R # rq   )rr   rs   rk   )rv   ÚmatcherÚnum_classesÚfocal_alphaÚlossesrœ   rk   rw   s   &&&&&&&€r   rs   ÚRfDetrImageLoss.__init__'  s   ø€ Ü‰Ñ˜¨{ÀJÔOØ'>Ö$r   c           	     óÔ  € RV9  d   \        R4      hV P                  V4      pVR,          V,          pVP                  4       ^ 8X  d/   R\        P                  ! V4      R\        P                  ! V4      /# \        P
                  ! \        W#4       UUU	u. uF  w  pw  r‰VR,          V	,          NK  	  up	pp^ R7      p
VP                  ^4      pV
P                  ^4      P                  4       p
\        VP                  R,          VP                  R,          VP                  R,          ,          V P                  ,          4      p\        P                  ! 4       ;_uu_ 4        \        Wk^R4      p\        W¬RR	R
7      P                  ^4      pRRR4       \        VXRR7      P                  ^4      pR\!        VXV4      R\#        WíV4      /pV# u up	ppi   + '       g   i     LQ; i)z¬
Compute the losses related to the masks: the focal loss and the dice loss.

Targets dicts must contain the key "masks" containing a tensor of dim [nb_target_boxes, h, w].
r{   z#No predicted masks found in outputsÚloss_mask_ceÚloss_mask_dicer~   rV   g      è?Fr€   r�   NrS   éþÿÿÿr5   )ÚKeyErrorÚ_get_source_permutation_idxÚnumelr   r*   r\   r•   rB   rO   rŽ   r(   rk   rÅ   rd   rI   rE   r#   r	   )rv   rš   r›   r²   r]   Ú
source_idxÚsource_masksÚtÚ_r¼   r¥   rL   r¬   Úpoint_labelsr_   rÐ   s   &&&&&           r   Ú
loss_masksÚRfDetrImageLoss.loss_masks+  s¬  € ð ˜wÔ&ÜÐ@ÓAÐAà×5Ñ5°gÓ>ˆ
Ø˜|Õ,¨ZÕ8ˆØ×ÑÓ 1Ô$à¤× 0Ò 0°Ó >Ø ¤%×"2Ò"2°<Ó"@ðð ô —y’yÄÀWÔAVÕ!WÑAV±I°A±v¸ ! G¥*¨Q§- -ÑAVÓ!WÐ]^Ô_ˆà#×-Ñ-¨aÓ0ˆØ#×-Ñ-¨aÓ0×6Ñ6Ó8ˆô Ø×Ñ˜rÕ" L×$6Ñ$6°rÕ$:¸\×=OÑ=OÐPRÕ=SÕ$SÐW[×WsÑWsÕ$só
ˆ
ô �]Š]�_�_ä:¸<ÐUVÐX\Ó]ˆLä'¨ÐRWÐ^gÔh×pÑpÐqrÓsˆL÷	 ô $ L°,ÈeÔT×\Ñ\Ð]^Ó_ˆð Ô6°|À\ÐS\Ó]Øœi¨ÀIÓNð
ˆð ˆùô- "X÷ �_ús   ÂGÅ#+GÇG'	c           
     ó€  € V P                   '       d   V P                  M^pVP                  4        UUu/ uF  w  rEVR8w  g   K  VR8w  g   K  WEbK  	  pppV P                  WbV4      p\	        R V 4       4      pWƒ,          p\
        P                  ! V.\
        P                  \        \        VP                  4       4      4      P                  R7      p^p	\        4       '       dF   \        P                  ! V\        P                  P                   R7       \        P"                  ! 4       p	\
        P$                  ! W‰,          ^R7      P'                  4       p/ p
V P(                   F%  pV
P+                  V P-                  W±W'V4      4       K'  	  RV9   d“   \/        VR,          4       F|  w  rÍV P                  WÒV4      pV P(                   FU  pV P-                  W½W'V4      pVP                  4        UUu/ uF  w  rEVRV 2,           VbK  	  pppV
P+                  V4       KW  	  K~  	  RV9   d   VR,          pV P                  WòVR7      pV P(                   FR  pV P-                  W¿W'V4      pVP                  4        UUu/ uF  w  rEVR	,           VbK  	  pppV
P+                  V4       KT  	  V
# u uppi u uppi u uppi )
aj  
This performs the loss computation.

Args:
     outputs (`dict`, *optional*):
        Dictionary of tensors, see the output specification of the model for the format.
     targets (`list[dict]`, *optional*):
        List of dicts, such that `len(targets) == batch_size`. The expected keys in each dict depends on the
        losses applied, see each loss' doc.
Úenc_outputsÚauxiliary_outputsc              3   óF   "  € T F  p\        VR ,          4      x € K  	  R# 5i)r|   N)r‘   )Ú.0rÛ   s   & r   Ú	<genexpr>Ú*RfDetrImageLoss.forward.<locals>.<genexpr>i  s   é € Ð@¹°1œ˜A˜nÕ-×.Ð.»ùs   ‚!)rƒ   rR   )Úop)ÚminrÜ   )rœ   Ú_enc)Útrainingrœ   ÚitemsrÍ   r   r   r˜   rO   ÚnextÚiterÚvaluesrR   r   ÚdistÚ
all_reduceÚReduceOpÚSUMÚget_world_sizeÚclampÚitemrÐ   ÚupdateÚget_lossr”   )rv   rš   r›   rœ   rU   r¢   Úoutputs_without_aux_and_encr²   r]   Ú
world_sizerÐ   r"   r·   râ   Úl_dictrá   s   &&&             r   r¾   ÚRfDetrImageLoss.forwardU  sH  € ð )-¯¯¨�T—_’_¸1ˆ
à$Ÿ]™]œ_ô'
Ù,‘T�Q°°]Ñ0BŒDÀqÐL_ÑG_ŒDˆAŠD™_ð 	$ñ '
ð
 —,‘,Ð:ÀZÓPˆô Ñ@¹Ó@Ó@ˆ	ØÕ*ˆ	Ü—O’O Y K´u·{±{Ì4ÔPTÐU\×UcÑUcÓUeÓPfÓKg×KnÑKnÔoˆ	Øˆ
Ü,×.Ò.Ü�OŠO˜I¬$¯-©-×*;Ñ*;Õ<Ü×,Ò,Ó.ˆJÜ—K’K 	Õ 6¸AÔ>×CÑCÓEˆ	ð ˆØ—K”KˆDØ�M‰M˜$Ÿ-™-¨°wÈÓSÖTñ  ð
  'Ô)Ü(1°'Ð:MÕ2NÖ(OÑ$�ØŸ,™,Ð'8À:ÓN�Ø ŸKœK�DØ!Ÿ]™]¨4ÀGÐV_Ó`�FØ9?¿¹¼ÔH¹±°˜a A a S '�k¨1šn¹�FÑHØ—M‘M &Ö)ó (ñ )Pð ˜GÔ#Ø! -Õ0ˆKØ—l‘l ;ÀJ�lÓOˆGØŸœ�ØŸ™ t¸'ÈIÓV�Ø4:·L±L´NÔC±N©D¨A˜!˜f�* aš-±N�ÑCØ—‘˜fÖ%ñ $ð
 ˆùóQ'
ùó: Iùó Ds   ´J.ÁJ.ÁJ.Ç3J4
É?J:)rk   )
rÁ   rÂ   rÃ   rÄ   rs   rÞ   r¾   rÆ   rÇ   rÈ   rÉ   s   @@r   rË   rË   &  s   ù‡ € õ?ò(÷T4ò 4r   rË   c                 óv   € \        V R R VR R VR R 4       UUUu. uF  w  r4pRVRVRV/NK  	  uppp# u upppi )NrK   rz   r{   r5   )r•   )Úoutputs_classÚoutputs_coordÚoutputs_masksÚaÚbr¸   s   &&&   r   Ú_set_aux_lossr  Œ  sZ   € ô ˜=¨¨"Ð-¨}¸S¸bÐ/AÀ=ÐQTÐRTÐCUÔVõáV‰GˆA�!ð 
�1�l A |°QÓ7ÙVóð ùô s   ›4c           
      ó2  aa€ \        VP                  VP                  VP                  VP                  VP
                  VP                  R 7      p. ROp\        VVP                  VP                  VVP                  VP                  R7      pVP                  V4       / pRpV VR&   VVR&   VVR&   RV	RV
RV/VR&   VP                  '       d   \        WgV4      pVVR&   V! VV4      oRVP                  R	VP                  /oVP                   SR
&   VP
                  SR&   VP                  SR&   VP                  '       d²   / p\#        VP$                  ^,
          4       FB  pTP'                  SP)                  4        UUu/ uF  w  ppVRV 2,           VbK  	  upp4       KD  	  TP'                  SP)                  4        UUu/ uF  w  ppVR,           VbK  	  upp4       SP'                  V4       \+        VV3R lS 4       4      pVSV3# u uppi u uppi ))rh   ri   rj   rk   rl   rm   )rÍ   rÎ   rÏ   rÐ   rœ   rk   NrK   rz   r{   rá   râ   Úloss_ceÚ	loss_bboxÚ	loss_giourÓ   rÔ   rÜ   ré   c              3   ób   <"  € T F$  qS9   g   K  SV,          SV,          ,          x € K&  	  R # 5irq   © )rä   rU   Ú	loss_dictÚweight_dicts   & €€r   rå   Ú,RfDetrForSegmentationLoss.<locals>.<genexpr>Ò  s)   øé € ÐT±i°ÈÑCSÔ,ˆy˜�|˜k¨!�n×,Ò,³iùs   ƒ/�/)r   r}   Úcardinalityr~   )rf   rh   ri   rj   rk   Úmask_class_loss_coefficientÚmask_dice_loss_coefficientrË   Ú
num_labelsrÏ   rœ   r‡   Úauxiliary_lossr  Úclass_loss_coefficientÚbbox_loss_coefficientÚgiou_loss_coefficientr“   Údecoder_layersrö   rë   r   )rK   r   rR   rz   r{   Úconfigrý   rþ   rÿ   Úenc_outputs_classÚenc_outputs_coordÚenc_outputs_masksrG   rÍ   rÐ   r    Úoutputs_lossrâ   Úaux_weight_dictr·   rU   r¢   r"   r	  r
  s   &&&&&&&&&&&&,          @@r   ÚRfDetrForSegmentationLossr  ”  s   ù€ ô  %Ø×$Ñ$Ø×"Ñ"Ø×"Ñ"Ø &× >Ñ >Ø#×?Ñ?Ø"×=Ñ=ô€Gò 9€FÜØØ×%Ñ%Ø×&Ñ&ØØ×$Ñ$Ø &× >Ñ >ô€Ið ‡L�L�Ôà€LØÐØ#€L�ÑØ!+€L�ÑØ!+€L�ÑàÐ#ØÐ'ØÐ'ð#€L�Ñð
 ××ÐÜ)¨-ÈÓVÐØ,=ˆÐ(Ñ)á˜,¨Ó/€Ià˜f×;Ñ;¸[È&×JfÑJfÐg€KØ%×;Ñ;€K�ÑØ"(×"DÑ"D€K�ÑØ$*×$EÑ$E€KÐ Ñ!Ø××ÐØˆÜ�v×,Ñ,¨qÕ0Ö1ˆAØ×"Ñ"¸{×?PÑ?PÔ?RÔ#SÑ?R±t°q¸! A¨!¨A¨3¨¥K°¢NÑ?RÒ#SÖTñ 2à×Ñ¸+×:KÑ:KÔ:MÔNÑ:M±$°!°Q  F¥
¨A¢Ñ:MÒNÔOØ×Ñ˜?Ô+ÜÕT±iÓTÓT€DØ�Ð-Ð-Ð-ùó	 $TùÛNs   Æ HÇH
)F)NNNNNN)Únumpyr–   r   Útorch.distributedÚdistributedrï   r   r   Údistributed.utilsr   Úimage_transformsr   Úutilsr   Úloss_for_object_detectionr   r	   r
   Úloss_lw_detrr   Úscipy.optimizer   r#   r2   r;   rI   rd   rf   rË   r  r  r  r   r   Ú<module>r%     s}   ðó Û Ý  ß å AÝ 7Ý &÷ñ õ
 *ñ ×ÒÝ4õõ(õ8÷.õB.ôbfÐ-ô fôRc�oô còLö?.r   