+
    "Ý³jzK  ã                   ó¶  € ^ RI t ^ RIHt ^ RIHt ^ RIHt ^ RIHtH	t	H
t
HtHtHt ^ RIt^ RIt] ! R R4      4       tR tR	 R
 lt ! R R4      tR9R R lltR9R R lltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R  ltR! R" ltR# R$ lt R% R& lt!R' R( lt"R) R* lt#R+ R, lt$R- R. lt%R/ R0 lt&R1 R2 lt'R3 R4 lt(R5 R6 lt)R7 R8 lt*R# ):é    N©Údeepcopy)Ú	dataclass)Úproduct)ÚAnyÚDictÚ	GeneratorÚ	ItemsViewÚListÚTuplec                   ó2   a € ] tR t^t o R tV 3R ltRtV tR# )ÚRLEDatac                ó   € V P                   # ©N)Úb©Úselfs   &Ú_/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchao/_models/sam2/utils/amg.pyÚ__len__ÚRLEData.__len__   s   € Ø�v‰vˆó    c                ó~   <€ V ^8„  d   Qh/ S[ P                  ;R&   S[ P                  ;R&   S[;R&   S[;R&   S[;R&   # )é   Úalt_lens_ntÚcounts_initr   ÚhÚw)ÚtorchÚTensorÚint)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚRLEData.__annotate__   sI   ø‡ ‚ á—‘Ññ ñ —‘Ññ ñ �Fñ	 ñ
 �Fñ ñ �Fò r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r"   s   @r   r   r      s   ø‡ € ò÷ ƒ r   r   c                 ó<  € V P                  4       pV P                  4       pVP                  4       pW1,          P                  4       pWA,          P                  4       p\	        WV4       UUu. uF"  w  rxV\
        P                  ! V4      ,           NK$  	  p	pp\
        P                  ! V	4      P                  VP                  4      p	\
        P                  ! V^ V	4      p
VP                  VP                  4      p\
        P                  P                  W¦R7      # u uppi )r   ©Úlengths)ÚvaluesÚoffsetsÚdiffÚcpuÚzipr   ÚarangeÚcatÚtoÚdeviceÚindex_selectÚnestedÚnested_tensor_from_jagged)ÚntÚindexr1   r2   r0   Úoffsets_indexÚlengths_indexÚoÚlÚindicesÚvalues_indexs   &&         r   Únt_index_select_dim_0rE      sÓ   € Ø�Y‰Y‹[€FØ�j‰j‹l€GØ�l‰l‹n€GØ•N×&Ñ&Ó(€MØ•N×&Ñ&Ó(€MÜ14°]Ô1RÔSÑ1R¡v¨ˆq”5—<’< “?×"Ð"Ñ1R€GÑSÜ�iŠi˜Ó ×#Ñ# F§M¡MÓ2€GÜ×%Ò% f¨a°Ó9€LØ!×$Ñ$ V§]¡]Ó3€MÜ�<‰<×1Ñ1°,Ð1ÓVÐVùó	 Ts   Á+(Dc                óN   € V ^8„  d   QhR\         \        P                  ,          /# )r   Únts)r   r   r   )r!   s   "r   r#   r#   *   s   € ÷ Sñ S”dœ5Ÿ<™<Õ(ñ Sr   c                 óL  € . p. pV  FO  pVP                  VP                  4       4       VP                  VP                  4       P                  4       4       KQ  	  \        P
                  ! V4      p\        P
                  ! V4      p\        P                  P                  WER 7      # )r/   )Úappendr1   r2   r3   r   r7   r;   r<   )rG   Ú
all_valuesÚall_lengthsr=   Ú
new_valuesÚnew_lengthss   &     r   Únt_cat_dim_0rN   *   s}   € Ø€JØ€KÛˆØ×Ñ˜"Ÿ)™)›+Ô&Ø×Ñ˜2Ÿ:™:›<×,Ñ,Ó.Ö/ñ ô —’˜:Ó&€JÜ—)’)˜KÓ(€KÜ�<‰<×1Ñ1°*Ð1ÓRÐRr   c                   ó´   a € ] tR t^6t o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltRtV tR# )ÚMaskDatazw
A structure for storing masks and their related data in batched format.
Implements basic filtering and concatenation.
c                ó   <€ V ^8„  d   QhRR/# ©r   ÚreturnNr%   )r!   r"   s   "€r   r#   ÚMaskData.__annotate__<   s   ø€ ÷ %ñ % Dñ %r   c                óÖ   € VP                  4        FD  p\        V\        \        P                  \
        P                  \        34      '       d   K?  Q R 4       h	  \        R/ VB V n	        R# )ú=MaskData only supports list, numpy arrays, and torch tensors.Nr%   )
r1   Ú
isinstanceÚlistÚnpÚndarrayr   r   r   ÚdictÚ_stats)r   ÚkwargsÚvs   &, r   Ú__init__ÚMaskData.__init__<   sO   € Ø—‘–ˆAÜ˜a¤$¬¯
©
´E·L±LÄ'Ð!J×KÔKð ØOóÐKñ !ô ‘n˜V‘nˆŽr   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r   ÚkeyÚitemrS   N©Ústrr   )r!   r"   s   "€r   r#   rT   C   s"   ø€ ÷  ñ  ™sð  ©#ð  °$ñ  r   c                ó¤   € \        V\        \        P                  \        P
                  \        34      '       g   Q R 4       hW P                  V&   R# )rV   N)rW   rX   rY   rZ   r   r   r   r\   )r   rb   rc   s   &&&r   Ú__setitem__ÚMaskData.__setitem__C   s>   € Ü˜$¤¤r§z¡z´5·<±<ÄÐ I×JÒJð 	
ØKó	
ÐJð  �‰�CÓr   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   rb   rS   N)re   )r!   r"   s   "€r   r#   rT   I   s   ø€ ÷ ñ ™sð  tñ r   c                ó    € V P                   V R # r   ©r\   ©r   rb   s   &&r   Ú__delitem__ÚMaskData.__delitem__I   s   € Ø�K‰K˜Òr   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   rb   rS   rd   )r!   r"   s   "€r   r#   rT   L   s   ø€ ÷  ñ  ™sð  ¡sñ  r   c                ó(   € V P                   V,          # r   rk   rl   s   &&r   Ú__getitem__ÚMaskData.__getitem__L   s   € Ø�{‰{˜3ÕÐr   c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# )r   rS   )r
   re   r   )r!   r"   s   "€r   r#   rT   O   s   ø€ ÷ #ñ #‘y¡¡c Õ*ñ #r   c                ó6   € V P                   P                  4       # r   )r\   Úitemsr   s   &r   ru   ÚMaskData.itemsO   s   € Ø�{‰{× Ñ Ó"Ð"r   c                ó8   <€ V ^8„  d   QhRS[ P                  RR/# )r   ÚkeeprS   N©r   r   )r!   r"   s   "€r   r#   rT   R   s#   ø€ ÷ Xñ X™5Ÿ<™<ð X¨Dñ Xr   c           	     óT  € V P                   P                  4        EFý  w  r#Vf   R V P                   V&   K  \        V\        P                  4      '       d   W1,          V P                   V&   KR  \        V\
        P                  4      '       dB   W1P                  4       P                  4       P                  4       ,          V P                   V&   K³  \        V\        4      '       d_   VP                  \        P                  8X  d@   \        V4       UUu. uF  w  rEW,          '       g   K  VNK  	  uppV P                   V&   EK'  \        V\        4      '       d)   V Uu. uF  qCV,          NK  	  upV P                   V&   EKe  \        V\        4      '       dk   \        VP                   V4      p\        VVP"                  V,          VP%                  ^ 4      VP&                  VP(                  R7      V P                   V&   EKå  \+        RV R\-        V4       R24      h	  R # u uppi u upi )N©r   r   r   r   r   úMaskData key ú has an unsupported type Ú.)r\   ru   rW   r   r   rY   rZ   Údetachr4   ÚnumpyrX   ÚdtypeÚboolÚ	enumerater   rE   r   r   Úsizer   r   Ú	TypeErrorÚtype)r   rx   Úkr^   ÚiÚaÚnew_alt_lens_nts   &&     r   ÚfilterÚMaskData.filterR   s  € Ø—K‘K×%Ñ%×'‰DˆAØŠyØ!%�—‘˜A“Ü˜AœuŸ|™|×,Ò,à!"¥�—‘˜A“Ü˜AœrŸz™z×*Ò*Ø!"§;¡;£=×#4Ñ#4Ó#6×#<Ñ#<Ó#>Õ!?�—‘˜A“Ü˜Aœt×$Ò$¨¯©´u·z±zÔ)AÜ09¸!´Ô!H±©¨ÀÇÁ§! !±Ò!H�—‘˜A”Ü˜Aœt×$Ò$Ù04Ó!5±¨1 A§$ $±Ñ!5�—‘˜A”Ü˜Aœw×'Ò'Ü"7¸¿¹ÀtÓ"L�Ü!(Ø /Ø !§¡¨dÕ 3Ø%×*Ñ*¨1Ó-Ø—c‘cØ—c‘cô"�—‘˜A”ô   -°¨sÐ2KÌDÐQRËGÈ9ÐTUÐ VÓWÐWó- (ùó "Iùâ!5s   ÄHÄ(HÅH%c                ó"   <€ V ^8„  d   QhRRRR/# )r   Ú	new_statsrP   rS   Nr%   )r!   r"   s   "€r   r#   rT   k   s   ø€ ÷ Xñ X˜Zð X¨Dñ Xr   c           	     ó`  € VP                  4        EF˜  w  r#W P                  9  g   V P                  V,          f   \        V4      V P                  V&   KE  \        V\        P
                  4      '       d;   \        P                  ! V P                  V,          V.^ R7      V P                  V&   KŸ  \        V\        P                  4      '       d;   \        P                  ! V P                  V,          V.^ R7      V P                  V&   Kù  \        V\        4      '       d4   V P                  V,          \        V4      ,           V P                  V&   EKB  \        V\        4      '       Ed(   V P                  V,          P                  VP                  8X  g   Q hV P                  V,          P                  VP                  8X  g   Q h\        \        V P                  V,          P                  VP                  .4      \        P                  ! V P                  V,          P                   VP                   .4      V P                  V,          P"                  VP"                  ,           VP                  VP                  R7      V P                  V&   EK€  \%        RV R\'        V4       R24      h	  R # )N©Údim©Úaxisr{   r|   r}   r~   )ru   r\   r   rW   r   r   r7   rY   rZ   ÚconcatenaterX   r   r   r   rN   r   r   r   r…   r†   )r   rŽ   r‡   r^   s   &&  r   r7   ÚMaskData.catk   sÅ  € Ø—O‘O×%‰DˆAØŸ™Ô# t§{¡{°1¥~Ò'=Ü!)¨!£�—‘˜A“Ü˜AœuŸ|™|×,Ò,Ü!&§¢¨D¯K©K¸­N¸AÐ+>ÀAÔ!F�—‘˜A“Ü˜AœrŸz™z×*Ò*Ü!#§¢°·±¸QµÀÐ0CÈ!Ô!L�—‘˜A“Ü˜Aœt×$Ò$Ø!%§¡¨Q¥´(¸1³+Õ!=�—‘˜A”Ü˜Aœw×'Ó'Ø—{‘{ 1•~×'Ñ'¨1¯3©3Ô.Ð.Ð.Ø—{‘{ 1•~×'Ñ'¨1¯3©3Ô.Ð.Ð.Ü!(Ü ,ØŸ™ Q�×3Ñ3°Q·]±]ÐCó!ô !&§	¢	¨4¯;©;°q­>×+EÑ+EÀqÇ}Á}Ð*UÓ VØ—k‘k !•n×&Ñ&¨¯©Õ,Ø—c‘cØ—c‘cô"�—‘˜A”ô   -°¨sÐ2KÌDÐQRËGÈ9ÐTUÐ VÓWÐWó- &r   c                ó   <€ V ^8„  d   QhRR/# rR   r%   )r!   r"   s   "€r   r#   rT   „   s   ø€ ÷ Bñ B˜$ñ Br   c                ó  € V P                   P                  4        Fn  w  r\        V\        P                  4      '       g   K'  VP                  4       P                  4       P                  4       P                  4       V P                   V&   Kp  	  R # r   )	r\   ru   rW   r   r   Úfloatr   r4   r€   )r   r‡   r^   s   &  r   Úto_numpyÚMaskData.to_numpy„   sZ   € Ø—K‘K×%Ñ%Ö'‰DˆAÜ˜!œUŸ\™\×*Ô*Ø!"§¡£×!1Ñ!1Ó!3×!7Ñ!7Ó!9×!?Ñ!?Ó!A�—‘˜A“ó (r   rk   N)r&   r'   r(   r)   Ú__doc__r_   rg   rm   rq   ru   r‹   r7   r™   r+   r,   r-   s   @r   rP   rP   6   s`   ø‡ € ñ÷
%ð %÷ ð  ÷ð ÷ ð  ÷#ð #÷Xð X÷2Xð X÷2Bö Br   rP   c                óÆ   € V ^8„  d   QhR\         P                  R\        \        ,          R\         P                  R\         P                  R\        R\         P                  /# )r   ÚboxesÚcrop_boxÚcrop_box_torchÚorig_box_torchÚatolrS   ©r   r   r   r    r˜   )r!   s   "r   r#   r#   Š   sX   € ÷ ,ñ ,Ü�<‰<ð,ä”3�ið,ô —L‘Lð,ô —L‘Lð	,ô
 ð,ô ‡\�\ñ,r   c                ó  € \        W4      P                  4       p \        P                  ! WR,          V^ R7      p\        P                  ! WR,          V^ R7      p\        P                  ! WV( 4      p\        P
                  ! V^R7      # )zNFilter masks at the edge of a crop, but not at the edge of the original image.)r¡   Úrtolr�   ©NºNNN)Úuncrop_boxes_xyxyr˜   r   ÚiscloseÚlogical_andÚany)r�   rž   rŸ   r    r¡   Únear_crop_edgeÚnear_image_edges   &&&&&  r   Úis_box_near_crop_edge_torchr­   Š   sk   € ô ˜eÓ.×4Ñ4Ó6€EÜ—]’] 5¸Õ*AÈÐSTÔU€NÜ—m’m E¸'Õ+BÈÐTUÔV€OÜ×&Ò& ~Ð7GÓH€NÜ�9Š9�^¨Ô+Ð+r   c          
      ó¨   € V ^8„  d   QhR\         P                  R\        \        ,          R\        \        ,          R\        R\         P                  /# )r   r�   rž   Úorig_boxr¡   rS   r¢   )r!   s   "r   r#   r#   ™   sD   € ÷ ñ Ü�<‰<ðÜ#'¬¥9ðÜ8<¼S½	ðÜINðä
‡\�\ñr   c                 óà   € \         P                  ! V\         P                  V P                  R 7      p\         P                  ! V\         P                  V P                  R 7      p\	        WWEV4      # )©r�   r9   )r   Ú	as_tensorr˜   r9   r­   )r�   rž   r¯   r¡   rŸ   r    s   &&&&  r   Úis_box_near_crop_edger³   ™   sL   € ô —_’_ X´U·[±[ÈÏÉÔV€NÜ—_’_ X´U·[±[ÈÏÉÔV€NÜ&Ø˜¸óð r   c                óX   € V ^8„  d   QhR\         P                  R\         P                  /# )r   Úbox_xyxyrS   ry   )r!   s   "r   r#   r#   £   s"   € ÷ ñ œuŸ|™|ð ´·±ñ r   c                 ó„   € \        V 4      pV^,          V^ ,          ,
          V^&   V^,          V^,          ,
          V^&   V# )r   r   )rµ   Úbox_xywhs   & r   Úbox_xyxy_to_xywhr¸   £   s=   € Ü˜Ó!€HØ˜1•+ ¨¥Õ+€HˆQ�KØ˜1•+ ¨¥Õ+€HˆQ�KØ€Or   c                ób   € V ^8„  d   QhR\         R\        \        \        ,          RR3,          /# )r   Ú
batch_sizerS   N)r    r	   r   r   )r!   s   "r   r#   r#   ª   s.   € ÷ Kñ Kœsð K¬i¼¼S½	À4ÈÐ8MÕ.Nñ Kr   c              '   óÆ  a"  € \        S4      ^ 8”  dA   \        ;QJ d    V3R lS 4       F  '       d   K   RM	  RM! V3R lS 4       4      '       g   Q R4       h\        S^ ,          4      V ,          \        \        S^ ,          4      V ,          ^ 8g  4      ,           p\        V4       F-  pS Uu. uF  qDW0,          V^,           V ,           NK  	  upx € K/  	  R# u upi 5i)r   c              3   ó`   <"  € T F#  p\        V4      \        S^ ,          4      8H  x € K%  	  R# 5i)r   N)Úlen)Ú.0r‰   Úargss   & €r   Ú	<genexpr>Ú!batch_iterator.<locals>.<genexpr>«   s"   øé € Ð FÁ¸A¤ Q£¬3¨t°A­w«<Ö!7Ãùs   ƒ+.FTz8Batched iteration must have inputs of all the same size.N)r½   Úallr    Úrange)rº   r¿   Ú	n_batchesr   Úargs   &j   r   Úbatch_iteratorrÆ   ª   s¨   øé € Üˆt‹9�qŒ=ŸS›SÔ FÁÓ FŸSŸSšSÔ FÁÓ F×FÒFð ØBóÐFô �D˜•G“ 
Õ*¬S´°T¸!µW³À
Õ1JÈaÑ1OÓ-PÕP€IÜ�9ÖˆÙEIÓJÁT¸c�1•> Q¨¥U¨jÕ$8Ó9ÁTÑJÔJó ùÚJùs"   ƒC!ŸC!¶C!ÁAC!Â0!CÃC!c                ó|   € V ^8„  d   QhR\         P                  R\        \        \        \
        3,          ,          /# ©r   ÚtensorrS   ©r   r   r   r   re   r   )r!   s   "r   r#   r#   ³   s+   € ÷ ñ ¤§¡ð ´´d¼3Ä¸8µnÕ1Eñ r   c                óþ  € V P                   w  rpV P                  ^ ^^4      P                  ^4      p V R,          V RRR13,          ,          pVP                  4       p. p\	        V4       EF  pWUR	,          V8H  ^3,          p\
        P                  ! \
        P                  ! ^ .VP                  VP                  R7      V^,           \
        P                  ! W#,          .VP                  VP                  R7      .4      pVR,          VRR ,
          p	W^ 3,          ^ 8X  d   . M^ .p
V
P                  V	P                  4       P                  4       P                  4       4       VP                  RW#.RV
/4       EK  	  V# )
úO
Encodes masks to an uncompressed RLE, in the format expected by
pycoco tools.
r¦   ºé   NNNr±   r„   Úcounts©r¦   rÍ   éÿÿÿÿ©r¦   r   )ÚshapeÚpermuteÚflattenÚnonzerorÃ   r   r7   rÉ   r�   r9   Úextendr   r4   ÚtolistrI   )rÉ   r   r   r   r3   Úchange_indicesÚoutrˆ   Úcur_idxsÚbtw_idxsrÏ   s   &          r   Úmask_to_rle_pytorchrÝ   ³   s@  € ð �l‰l�G€Aˆ!Ø�^‰^˜A˜q !Ó$×,Ñ,¨QÓ/€Fð �%�=˜6 ! S b S &�>Õ)€DØ—\‘\“^€Nð €CÜ�1�XˆØ!°Õ"6¸!Ñ";¸QÐ">Õ?ˆÜ—9’9ä—’˜a˜S¨¯©¸x¿¹ÔOØ˜1•Ü—’˜a�e˜W¨H¯N©NÀ8Ç?Á?ÔSðó
ˆð ˜B•< (¨3¨B -Õ/ˆØ ˜d•| qÔ(‘¨q¨cˆØ�‰�h—o‘oÓ'×+Ñ+Ó-×4Ñ4Ó6Ô7Ø�
‰
�F˜Q˜F H¨fÐ5×6ñ ð €Jr   c                óf   € V ^8„  d   QhR\         \        \        3,          R\        P                  /# ©r   ÚrlerS   )r   re   r   rY   rZ   )r!   s   "r   r#   r#   Ò   s&   € ÷ ñ ”Tœ#œs˜(•^ð ¬¯
©
ñ r   c                óü   € V R,          w  r\         P                  ! W,          \        R7      p^ pRpV R,           F  pWSWDV,           % WF,          pVR,          pK   	  VP                  W!4      pVP	                  4       # )z/Compute a binary mask from an uncompressed RLE.r„   ©r�   FrÏ   T)rY   Úemptyr‚   ÚreshapeÚ	transpose)rà   r   r   ÚmaskÚidxÚparityÚcounts   &      r   Úrle_to_maskrê   Ò   sr   € àˆv�;�D€AÜ�8Š8�A•E¤Ô&€DØ
€CØ€FØ�X—�ˆØ"(ˆS˜•;ÐØ�ˆØ�$�Šñ ð �<‰<˜Ó€DØ�>‰>ÓÐr   c                óx   € V ^8„  d   QhR\         P                  R\         P                  \         P                  3/# rÈ   ry   )r!   s   "r   r#   r#   á   s+   € ÷ ñ ¤u§|¡|ð ¼¿¹ÄuÇ|Á|Ð8Tñ r   c                ód  € V P                   w  rpV P                  ^ ^^4      P                  ^4      p V R,          V RRR13,          ,          p\        P                  ! R\
        VP                  R7      pVP                  VP                  ^^ ^4      4      p\        P                  ! WTV.^R7      pV# )rÌ   r¦   Nr±   r�   rÐ   rÑ   )rÎ   rÎ   )
rÓ   rÔ   rÕ   r   Úonesr‚   r9   Ú	expand_asÚnarrowr7   )rÉ   r   r   r   r3   r‰   s   &     r   Ú_mask_to_rle_pytorch_2_0_0rð   á   s–   € ð �l‰l�G€Aˆ!Ø�^‰^˜A˜q !Ó$×,Ñ,¨QÓ/€Fð �%�=˜6 ! S b S &�>Õ)€Dä�
Š
�6¤¨d¯k©kÔ:€Að 	
�‰�D—K‘K  1 aÓ(Ó)€AÜ�9Š9�a˜q�\ qÔ)€DØ€Kr   c          	      ó¸   € V ^8„  d   QhR\         P                  R\         P                  R\         P                  R\         P                  \         P                  3/# )r   rÉ   r3   rÙ   rS   ry   )r!   s   "r   r#   r#   ÷   sE   € ÷ $ñ $Ü�L‰Lð$Ü %§¡ð$Ü>C¿l¹lð$ä‡l�l”E—L‘LÐ!ñ$r   c                 óÄ  € V P                  ^ ^^4      P                  ^4      p VP                  ^R7      pVR,          pVP                  4       ^ 8X  d   TpTpM<VP	                  ^ ^VP                  ^ 4      ^,
          4      pVP	                  ^ ^ ^4      p\        P                  ! WV.4      pWt,
          p\        P                  P                  WsR7      pV R,          ^ 8H  p	W‰3# )r   r�   r/   )r¦   rÎ   rÒ   )
rÔ   rÕ   ÚsumÚnumelrï   r„   r   r7   r;   r<   )
rÉ   r3   rÙ   Úalt_lensÚall_cur_idxÚall_cur_idx_0Úall_cur_idx_1Úall_btw_idxr   r   s
   &&&       r   Ú_mask_to_rle_pytorch_2_0_1rú   ÷   sÔ   € ð �^‰^˜A˜q !Ó$×,Ñ,¨QÓ/€Fà�x‰x˜Aˆx‹€Hà  Õ&€KØ×ÑÓ˜aÔØ#ˆØ#‰à#×*Ñ*¨1¨a°×1AÑ1AÀ!Ó1DÀqÕ1HÓIˆØ#×*Ñ*¨1¨a°Ó3ˆÜ—)’)˜]Ð:Ó;€KØÕ+€Kä—,‘,×8Ñ8¸Ð8ÓW€Kà˜•, !Ñ#€KØÐ#Ð#r   c                óD   € V ^8„  d   QhR\         P                  R\        /# rÈ   )r   r   r   )r!   s   "r   r#   r#     s"   € ÷ Tñ T¤U§\¡\ð T´gñ Tr   c           	      ó(  € V P                   w  rp\        P                  P                  P	                  R 4      ;_uu_ 4        \        V 4      pRRR4       \        P                  P                  P	                  R4      ;_uu_ 4        ^pVXP                  4       R,           R,          8¼  g   Q R4       h\        P                  ! VP                  V4       Uu. uF  qfP                  4       NK  	  up4      pRRR4       \        P                  P                  P	                  R4      ;_uu_ 4        \        V XX4      w  r‰RRR4       \        XX	WVR7      #   + '       g   i     EL; iu upi   + '       g   i     L�; i  + '       g   i     LK; i)z1mask_to_rle_pytorch_2: _mask_to_rle_pytorch_2_0_0Nzmask_to_rle_pytorch_2: nonzeroiþÿÿz!Needed more chunks than expected.z1mask_to_rle_pytorch_2: _mask_to_rle_pytorch_2_0_1r{   )rÓ   r   ÚautogradÚprofilerÚrecord_functionrð   rô   r7   ÚchunkrÖ   rú   r   )
rÉ   r   r   r   r3   Ú
num_chunksÚdrÙ   r   r   s
   &         r   Ú_mask_to_rle_pytorch_2_0r    s<  € Ø�l‰l�G€Aˆ!Ü	�‰×	 Ñ	 ×	0Ñ	0Ø;÷
õ 
ô *¨&Ó1ˆ÷
ô 
�‰×	 Ñ	 ×	0Ñ	0Ð1Q×	RÕ	Rð ˆ
Ø˜tŸz™z›|¨jÕ8¸ZÕGÔHð 	
Ø/ó	
ÐHô Ÿš¸¿¹ÀJÔ9OÓ#PÑ9O°A§I¡I¦KÑ9OÑ#PÓQˆ÷ 
Sô 
�‰×	 Ñ	 ×	0Ñ	0Ø;÷
õ 
ô $>Ø�D˜.ó$
Ñ ˆ÷
ô ˜{¸ÀqÐQRÔSÐS÷-
÷ 
ð 
üò $Q÷ 
S×	Rú÷
÷ 
ús7   ÁEÂAE.ÃE)Ã.E.Ä.FÅE&	Å)E.Å.E>	ÆF	c                ó$   € V ^8„  d   QhR\         /# )r   Úrle_data)r   )r!   s   "r   r#   r#   )  s   € ÷ ñ ¤wñ r   c           	      óÊ  € \         P                  P                  P                  R 4      ;_uu_ 4        . pV P                  P                  4       P                  4       pV P                  P                  4       pVP                  4       pVP                  4       pV P                  P                  4       p^ p\        \        V P                  4      V4       Fq  w  rgW5WRV,          ,            RR pWRV,          ,          pV'       d   . M^ .p	V	P                  V4       VP                  RV P                  V P                   .RV	/4       Ks  	  RRR4       V#   + '       g   i     X# ; i)z(mask_to_rle_pytorch_2: Encode run lengthNr„   rÏ   rÑ   )r   rý   rþ   rÿ   r   r2   r3   r1   rØ   r   r5   rÃ   r   r×   rI   r   r   )
r  rÚ   rõ   rù   r   Úoffsetrˆ   ÚcirÜ   rÏ   s
   &         r   Ú_mask_to_rle_pytorch_2_1r	  )  s$  € Ü	�‰×	 Ñ	 ×	0Ñ	0Ø2÷
õ 
ð ˆØ×'Ñ'×/Ñ/Ó1×6Ñ6Ó8ˆØ×*Ñ*×1Ñ1Ó3ˆØ—?‘?Ó$ˆØ!×(Ñ(Ó*ˆØ×*Ñ*×1Ñ1Ó3ˆØˆÜœ˜xŸz™zÓ*¨KÖ8‰EˆAØ"¨F¸aµ[Õ,@ÐAÀ#À2ÐFˆHØ˜q•kÕ!ˆFß‘R A 3ˆFØ�M‰M˜(Ô#Ø�J‰J˜ §¡¨X¯Z©ZÐ 8¸(ÀFÐKÖLñ 9÷
ð" €J÷#
ö 
ð" €Jús   ²DEÅE"	c                ó|   € V ^8„  d   QhR\         P                  R\        \        \        \
        3,          ,          /# rÈ   rÊ   )r!   s   "r   r#   r#   >  s/   € ÷ Jñ J¤%§,¡,ð J´4¼¼SÄ#¸X½Õ3Gñ Jr   c                 óÊ   € \         P                  P                  P                  R 4      ;_uu_ 4        \	        \        V 4      4      uuRRR4       #   + '       g   i     R# ; i)Úmask_to_rle_pytorch_2N)r   rý   rþ   rÿ   r	  r  )rÉ   s   &r   r  r  >  s<   € Ü	�‰×	 Ñ	 ×	0Ñ	0Ð1H×	IÕ	IÜ'Ô(@ÀÓ(HÓI÷ 
J×	I×	IÓ	Iús   ²AÁA"	c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# rß   )r   re   r   r    )r!   s   "r   r#   r#   C  s"   € ÷ $ñ $”tœC¤˜H•~ð $¬#ñ $r   c                 ó4   € \        V R ,          R,          4      # )rÏ   :rÎ   Nr   )ró   )rà   s   &r   Úarea_from_rler  C  s   € Üˆs�8�}˜TÕ"Ó#Ð#r   c                óp   € V ^8„  d   QhR\         P                  R\        R\        R\         P                  /# )r   ÚmasksÚmask_thresholdÚthreshold_offsetrS   )r   r   r˜   )r!   s   "r   r#   r#   I  s4   € ÷ "ñ "Ü�<‰<ð"Ü).ð"ÜBGð"ä
‡\�\ñ"r   c                ó6  € WV,           8„  P                  R\        P                  R7      P                  R\        P                  R7      pWV,
          8„  P                  R\        P                  R7      P                  R\        P                  R7      pW4,          # )z·
Computes the stability score for a batch of masks. The stability
score is the IoU between the binary masks obtained by thresholding
the predicted mask logits at high and low values.
râ   rÑ   )ró   r   Úint16Úint32)r  r  r  ÚintersectionsÚunionss   &&&  r   Úcalculate_stability_scorer  I  s{   € ð 
Ð#3Õ3Ñ	4ß	‰ˆR”u—{‘{ˆÓ	#ß	‰ˆR”u—{‘{ˆÓ	#ð ð 
Ð#3Õ3Ñ	4ß	‰ˆR”u—{‘{ˆÓ	#ß	‰ˆR”u—{‘{ˆÓ	#ð ð
 Õ!Ð!r   c                óD   € V ^8„  d   QhR\         R\        P                  /# )r   Ú
n_per_siderS   )r    rY   rZ   )r!   s   "r   r#   r#   `  s   € ÷ ñ ¤ð ¬¯©ñ r   c                ó6  € ^^V ,          ,          p\         P                  ! V^V,
          V 4      p\         P                  ! VR,          V ^34      p\         P                  ! VR,          ^V 34      p\         P                  ! W4.RR7      P	                  R^4      pV# )z;Generates a 2D grid of points evenly spaced in [0,1]x[0,1].r’   r¥   )r¦   NrÑ   )rY   ÚlinspaceÚtileÚstackrä   )r  r  Úpoints_one_sideÚpoints_xÚpoints_yÚpointss   &     r   Úbuild_point_gridr$  `  s}   € à�!�j•.Õ!€FÜ—k’k &¨!¨f­*°jÓA€OÜ�wŠw� wÕ/°*¸a°ÓA€HÜ�wŠw� wÕ/°!°Z°ÓA€HÜ�XŠX�xÐ*°Ô4×<Ñ<¸RÀÓC€FØ€Mr   c          	      ór   € V ^8„  d   QhR\         R\         R\         R\        \        P                  ,          /# )r   r  Ún_layersÚscale_per_layerrS   )r    r   rY   rZ   )r!   s   "r   r#   r#   j  s5   € ÷ ñ ÜðÜ"ðÜ58ðä	Œ"�*‰*Õñr   c                ó    € . p\        V^,           4       F5  p\        WV,          ,          4      pVP                  \        V4      4       K7  	  V# )z*Generates point grids for all crop layers.)rÃ   r    rI   r$  )r  r&  r'  Úpoints_by_layerrˆ   Ún_pointss   &&&   r   Úbuild_all_layer_point_gridsr+  j  sJ   € ð €OÜ�8˜a•<Ö ˆÜ�z°aÕ%7Õ8Ó9ˆØ×ÑÔ/°Ó9Ö:ñ !ð Ðr   c                óÆ   € V ^8„  d   QhR\         \        R3,          R\        R\        R\         \        \        \        ,          ,          \        \        ,          3,          /# )r   Úim_size.r&  Úoverlap_ratiorS   )r   r    r˜   r   )r!   s   "r   r#   r#   u  sJ   € ÷ ""ñ ""Ü”3˜�8�_ð""Ü(+ð""Ü<Að""ä
Œ4””S•	�?œD¤�IÐ%Õ&ñ""r   c           	     óÈ  € . . rCV w  rV\        WV4      pVP                  ^ ^ We.4       VP                  ^ 4       R p\        V4       EF  p	^V	^,           ,          p
\        W',          ^V
,          ,          4      pV! WjV4      pV! WZV4      p\        V
4       Uu. uF  p\        WË,
          V,          4      NK  	  pp\        V
4       Uu. uF  p\        WÛ,
          V,          4      NK  	  pp\	        VV4       FW  w  ppVV\        VV,           V4      \        VV,           V4      .pVP                  V4       VP                  V	^,           4       KY  	  EK  	  W43# u upi u upi )zf
Generates a list of crop boxes of different sizes. Each layer
has (2**i)**2 boxes for the ith layer.
c                 óv   € \        \        P                  ! W!^,
          ,          V ,           V,          4      4      # )rÎ   )r    ÚmathÚceil)Úorig_lenÚn_cropsÚoverlaps   &&&r   Úcrop_lenÚ%generate_crop_boxes.<locals>.crop_len„  s'   € Ü”4—9’9˜g°1­Õ5¸Õ@ÀGÕKÓLÓMÐMr   )ÚminrI   rÃ   r    r   )r-  r&  r.  Ú
crop_boxesÚ
layer_idxsÚim_hÚim_wÚ
short_sider6  Úi_layerÚn_crops_per_sider5  Úcrop_wÚcrop_hrˆ   Úcrop_box_x0Úcrop_box_y0Úx0Úy0Úboxs   &&&                 r   Úgenerate_crop_boxesrG  u  sV  € ð   �
Ø�J€DÜ�T“€Jð ×Ñ�q˜!˜TÐ(Ô)Ø×Ñ�aÔòNô ˜—?ˆØ ¨1¥Õ-ÐÜ�mÕ0°AÐ8HÕ4HÕIÓJˆá˜$°'Ó:ˆÙ˜$°'Ó:ˆä<AÐBRÔ<SÓTÑ<S°q”s˜FÕ,°Õ1Ö2Ñ<SˆÐTÜ<AÐBRÔ<SÓTÑ<S°q”s˜FÕ,°Õ1Ö2Ñ<SˆÐTô ˜k¨;Ö7‰FˆB�Ø�rœ3˜r F�{¨DÓ1´3°r¸Fµ{ÀDÓ3IÐJˆCØ×Ñ˜cÔ"Ø×Ñ˜g¨�kÖ*ô 8ñ #ð  Ð!Ð!ùò UùÚTs   Â!EÃ!Ec                óz   € V ^8„  d   QhR\         P                  R\        \        ,          R\         P                  /# )r   r�   rž   rS   ©r   r   r   r    )r!   s   "r   r#   r#   š  s-   € ÷ ñ œUŸ\™\ð ´T¼#µYð Ä5Ç<Á<ñ r   c                 óü   € Vw  r# p\         P                  ! W#W#..4      P                  4       pVP                  V P                  R R7      p\        V P                  4      ^8X  d   VP                  ^4      pW,           # ©T)r9   Únon_blocking©r   rÉ   Ú
pin_memoryr8   r9   r½   rÓ   Ú	unsqueeze)r�   rž   rD  rE  Ú_r  s   &&    r   r§   r§   š  sk   € Ø�L€BˆAˆqÜ�\Š\˜B BÐ+Ð,Ó-×8Ñ8Ó:€FØ�Y‰Y˜eŸl™l¸ˆYÓ>€Fä
ˆ5�;‰;Ó˜1ÔØ×!Ñ! !Ó$ˆØ�>Ðr   c                óz   € V ^8„  d   QhR\         P                  R\        \        ,          R\         P                  /# )r   r#  rž   rS   rI  )r!   s   "r   r#   r#   ¤  s-   € ÷ ñ œ%Ÿ,™,ð ´$´sµ)ð ÄÇÁñ r   c                 óú   € Vw  r# p\         P                  ! W#..4      P                  4       pVP                  V P                  R R7      p\        V P                  4      ^8X  d   VP                  ^4      pW,           # rK  rM  )r#  rž   rD  rE  rP  r  s   &&    r   Úuncrop_pointsrS  ¤  sg   € Ø�L€BˆAˆqÜ�\Š\˜B˜8˜*Ó%×0Ñ0Ó2€FØ�Y‰Y˜fŸm™m¸$ˆYÓ?€Fä
ˆ6�<‰<Ó˜AÔØ×!Ñ! !Ó$ˆØ�?Ðr   c          
      ó’   € V ^8„  d   QhR\         P                  R\        \        ,          R\        R\        R\         P                  /# )r   r  rž   Úorig_hÚorig_wrS   rI  )r!   s   "r   r#   r#   ®  s@   € ÷ 	8ñ 	8Ü�<‰<ð	8Ü#'¬¥9ð	8Ü69ð	8ÜCFð	8ä
‡\�\ñ	8r   c                 óø   € Vw  rErgV^ 8X  d   V^ 8X  d   Wc8X  d	   Wr8X  d   V # W6V,
          ,
          W'V,
          ,
          r˜WHV,
          WYV,
          3p
\         P                  P                  P                  W
^ R7      # )r   )Úvalue)r   ÚnnÚ
functionalÚpad)r  rž   rU  rV  rD  rE  Úx1Úy1Úpad_xÚpad_yr[  s   &&&&       r   Úuncrop_masksr`  ®  sn   € ð �N€BˆBØ	ˆQ„w�2˜”7˜rœ|°´Øˆà "�WÕ% v°bµÕ'9ˆ5Ø�r�z˜2 r�zÐ
*€CÜ�8‰8×Ñ×"Ñ" 5°QÐ"Ó7Ð7r   c          
      ó’   € V ^8„  d   QhR\         P                  R\        R\        R\        \         P                  \
        3,          /# )r   ræ   Úarea_threshÚmoderS   )rY   rZ   r˜   re   r   r‚   )r!   s   "r   r#   r#   º  s>   € ÷ ñ Ü
�*‰*ðÜ#(ðÜ03ðä
Œ2�:‰:”tÐÕñr   c                ó\  € ^ RI pVR9   g   Q hVR8H  pW@,          P                  \        P                  4      pVP	                  V^4      w  rgr‰VR,          R,          p
\        V
4       UUu. uF  w  r¼WÁ8  g   K  V^,           NK  	  ppp\        V4      ^ 8X  d   V R3# ^ .V,           pV'       gZ   \        V4       Uu. uF  q»V9  g   K  VNK  	  pp\        V4      ^ 8X  d(   \        \        P                  ! V
4      4      ^,           .p\        P                  ! W~4      p V R3# u uppi u upi )z}
Removes small disconnected regions and holes in a mask. Returns the
mask and an indicator of if the mask has been modified.
NÚholesrÍ   FT)re  Úislands)r¦   rÑ   )Úcv2ÚastyperY   Úuint8ÚconnectedComponentsWithStatsrƒ   r½   rÃ   r    ÚargmaxÚisin)ræ   rb  rc  rg  Úcorrect_holesÚworking_maskÚn_labelsÚregionsÚstatsrP  Úsizesrˆ   ÚsÚsmall_regionsÚfill_labelss   &&&            r   Úremove_small_regionsrv  º  s  € ó àÐ'Ô'Ð'Ð'Ø˜G‘O€MØ!Õ(×0Ñ0´·±Ó:€LØ"%×"BÑ"BÀ<ÐQRÓ"SÑ€H�uØ�%�L˜Õ€EÜ'0°Ô'7ÔKÑ'7™t˜q¸1¹?”U�Q˜—U�UÑ'7€MÑKÜ
ˆ=Ó˜QÔØ�Uˆ{ÐØ�#˜Õ%€KßÜ"'¨¤/ÓJ¡/˜Q¸kÑ5I—q�q¡/ˆÐJäˆ{Ó˜qÔ ÜœrŸyšy¨Ó/Ó0°1Õ4Ð5ˆKÜ�7Š7�7Ó(€DØ�ˆ:Ðùó Lùò
 Ks   Á+
D#Á:D#Â=D)Ã
D)c                ót   € V ^8„  d   QhR\         \        \        3,          R\         \        \        3,          /# )r   Úuncompressed_rlerS   )r   re   r   )r!   s   "r   r#   r#   Õ  s*   € ÷ ñ ¤d¬3´¨8¥nð ¼¼cÄ3¸h½ñ r   c                 ó‚   € ^ RI Hp V R,          w  r#VP                  WV4      pVR,          P                  R4      VR&   V# )r   )ræ   r„   rÏ   zutf-8)Úpycocotoolsræ   ÚfrPyObjectsÚdecode)rx  Ú
mask_utilsr   r   rà   s   &    r   Úcoco_encode_rler~  Õ  sA   € Ý.à˜FÕ#�D€AØ
×
 Ñ
 Ð!1°aÓ
8€CØ˜•M×(Ñ(¨Ó1€Cˆ�MØ€Jr   c                óX   € V ^8„  d   QhR\         P                  R\         P                  /# )r   r  rS   ry   )r!   s   "r   r#   r#   à  s"   € ÷ +ñ +œuŸ|™|ð +´·±ñ +r   c                ó¬  € V P                   pVRR w  r#\        V4      ^8”  d   V P                  ^ R4      p MV P                  ^ 4      p \        P
                  ! V RR7      w  rEV\        P                  ! W$P                  R7      R,          ,          p\        P
                  ! VRR7      w  ruWbV( ,          ,           p\        P                  ! VRR7      w  r…\        P
                  ! V RR7      w  r•V	\        P                  ! W9P                  R7      R,          ,          p
\        P
                  ! V
RR7      w  rµW£V	( ,          ,           p
\        P                  ! V
RR7      w  rÅW¼8  Wx8  ,          p\        P                  ! WÈW·.RR7      pWí( P                  R4      ,          p\        V4      ^8”  d   VP                  ! . VRR O^N5!  pV# V^ ,          pV# )z“
Calculates boxes in XYXY format around masks. Return [0,0,0,0] for
an empty mask. For input shape C1xC2x...xHxW, the output shape is C1xC2x...x4.
Nr�   )r9   éþÿÿÿéýÿÿÿrÑ   r¥   )rÓ   r½   rÕ   rO  r   Úmaxr6   r9   r8  r  rä   )r  rÓ   r   r   Ú	in_heightrP  Úin_height_coordsÚbottom_edgesÚ	top_edgesÚin_widthÚin_width_coordsÚright_edgesÚ
left_edgesÚempty_filterrÚ   s   &              r   Úbatched_mask_to_boxr�  à  sŠ  € ð �K‰K€EØ��ˆ:�D€AÜ
ˆ5ƒz�A„~Ø—‘˜a Ó$‰à—‘ Ó"ˆô —9’9˜U¨Ô+�L€IØ ¤5§<¢<°×:JÑ:JÔ#KÈGÕ#TÕTÐÜ—i’iÐ 0°bÔ9�O€LØ'°	¨zÕ*:Õ:ÐÜ—9’9Ð-°2Ô6�L€Iô —)’)˜E rÔ*�K€HØ¤§¢¨a¿¹Ô!HÈÕ!QÕQ€OÜ—Y’Y˜°BÔ7�N€KØ%¨h¨Y­Õ7€OÜ—I’I˜o°2Ô6�M€Jð  Ñ,°Ñ1IÕJ€LÜ
�+Š+�z¨kÐHÈbÔ
Q€CØ
�×)Ñ)¨"Ó-Õ
-€Cô ˆ5ƒz�A„~Ø�kŠkÐ)˜5  "˜:Ð) qÓ)ˆð €Jð �!�fˆà€Jr   )g      4@)+r1  Úcopyr   Údataclassesr   Ú	itertoolsr   Útypingr   r   r	   r
   r   r   r€   rY   r   r   rE   rN   rP   r­   r³   r¸   rÆ   rÝ   rê   rð   rú   r  r	  r  r  r  r$  r+  rG  r§   rS  r`  rv  r~  r�  r%   r   r   Ú<module>r’     sÅ   ðó Ý Ý !Ý ß ?× ?ã Û ð ÷ð ó ðò
WõS÷QBñ QB÷h,÷õõKõõ>õõ,$õ.Tõ6õ*Jõ
$õ"õ.õõ""õJõõ	8õõ6÷+r   