ó
    qyüi¤i  ã            
       óè  • S r SSKrSSKJr  SSKrSSKrSSKJr	  SSK
Jr  SSKJr  SSKJrJrJr  SS	KJrJrJrJrJrJr  SS
KJrJr  SSKJrJrJr   " S S\SS9r   S#SSS\!\"\"4   S-  S\"S-  4S jjr#S\!\$\"4   S\%\"\"4   4S jr&S\'\RP                     S\'\'\"      S\%\'\RP                     \'\'\"      4   4S jr)S r*S$S jr+   S%S\,S\,S\%\"\"4   S-  4S  jjr-\ " S! S"\5      5       r.S"/r/g)&zImage processor class for EoMT.é    N)ÚUnion)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeature)Úget_size_with_aspect_ratioÚgroup_images_by_shapeÚreorder_images)ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STDÚChannelDimensionÚ
ImageInputÚPILImageResamplingÚSizeDict)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringÚfilter_out_non_signature_kwargsc                   ó4   • \ rS rSr% Sr\\S'   \S-  \S'   Srg)ÚEomtImageProcessorKwargsé*   a[  
do_split_image (`bool`, *optional*, defaults to `self.do_split_image`):
    Whether to split the input images into overlapping patches for semantic segmentation. If set to `True`, the
    input images will be split into patches of size `size["shortest_edge"]` with an overlap between patches.
    Otherwise, the input images will be padded to the target size.
ignore_index (`int`, *optional*, defaults to `self.ignore_index`):
    Label to be assigned to background pixels in segmentation maps. If provided, segmentation map pixels
    denoted with 0 (background) will be replaced with `ignore_index`.
Údo_split_imageNÚignore_index© )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚboolÚ__annotations__ÚintÚ__static_attributes__r   ó    Úk/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/eomt/image_processing_eomt.pyr   r   *   s   ‡ ñð ÓØ˜‘*Ör%   r   F)ÚtotalÚsegmentation_mapútorch.TensorÚinstance_id_to_semantic_idr   c                 ó|  • Ub  [         R                  " U S:H  X S-
  5      n [         R                  " U 5      nUb  X3U:g     nU Vs/ s H  o@U:H  PM	     nnU(       a  [         R                  " USS9nO-[         R                  " S/U R
                  Q7U R                  S9nUbu  [         R                  " UR
                  S   U R                  S9n[        U5       H9  u  pGXb  UR                  5       S-   OUR                  5          nUb  US-
  OUXd'   M;     OUnUR                  5       UR                  5       4$ s  snf )Nr   é   ©Údim©Údevice)ÚtorchÚwhereÚuniqueÚstackÚzerosÚshaper0   Ú	enumerateÚitemÚfloatÚlong)	r(   r*   r   Ú
all_labelsÚiÚbinary_masksÚlabelsÚlabelÚclass_ids	            r&   Ú-convert_segmentation_map_to_binary_masks_fastrA   :   s1  € ð
 ÑÜ Ÿ;š;Ð'7¸1Ñ'<¸lÐ_`ÑL`ÓaÐä—’Ð.Ó/€JàÑØ¨lÑ :Ñ;ˆ
á5?Ó@²Z°¨Ô*±Z€LÐ@ÞÜ—{’{ <°QÑ7‰ä—{’{ AÐ#?Ð(8×(>Ñ(>Ñ#?ÐHX×H_ÑH_Ñ`ˆð "Ñ-Ü—’˜Z×-Ñ-¨aÑ0Ð9I×9PÑ9PÑQˆä! *Ö-‰HˆAØ1ÑG_°5·:±:³<À!Ò3CÐej×eoÑeoÓeqÑsˆHØ(4Ñ(@˜ 1šÀhˆF‹Iò .ð ˆØ×ÑÓ §¡£Ð.Ð.ùò As   ÁD9Ú	size_dictÚreturnc                 ó.   • U S   nU S   =(       d    UnX4$ )z.Returns the height and width from a size dict.Úshortest_edgeÚlongest_edger   )rB   Útarget_heightÚtarget_widths      r&   Úget_target_sizerI   Y   s$   € à˜oÑ.€MØ˜^Ñ,×=°€LàÐ&Ð&r%   ÚpatchesÚoffsetsc                 óŠ   • [        [        X5      5      nUR                  S S9  [        U6 u  p4[        U5      [        U5      4$ )z@Sorts patches and offsets according to the original image index.c                 ó   • U S   S   $ )Nr   r   )Úxs    r&   Ú<lambda>Ú-reorder_patches_and_offsets.<locals>.<lambda>g   s   €   !¡ Q¢r%   )Úkey)ÚlistÚzipÚsort)rJ   rK   ÚcombinedÚsorted_offsetsÚsorted_patchess        r&   Úreorder_patches_and_offsetsrX   a   sC   € ô
 ”C˜Ó)Ó*€HØ‡M�MÑ'€MÑ(Ü%(¨( ^Ñ"€Nä�Ó¤ nÓ!5Ð5Ð5r%   c                 óÆ   • U R                   S   UR                   S   s=:X  a  UR                   S   :X  d  O  [        S5      eUR                  U5      X:„  -  nX   X   X%   4$ )aÅ  
Binarize the given masks using `object_mask_threshold`, it returns the associated values of `masks`, `scores` and
`labels`.

Args:
    masks (`torch.Tensor`):
        A tensor of shape `(num_queries, height, width)`.
    scores (`torch.Tensor`):
        A tensor of shape `(num_queries)`.
    labels (`torch.Tensor`):
        A tensor of shape `(num_queries)`.
    object_mask_threshold (`float`):
        A number between 0 and 1 used to binarize the masks.
Raises:
    `ValueError`: Raised when the first dimension doesn't match in all input tensors.
Returns:
    `tuple[`torch.Tensor`, `torch.Tensor`, `torch.Tensor`]`: The `masks`, `scores` and `labels` without the region
    < `object_mask_threshold`.
r   z1mask, scores and labels must have the same shape!)r6   Ú
ValueErrorÚne)ÚmasksÚscoresr>   Úobject_mask_thresholdÚ
num_labelsÚto_keeps         r&   Úremove_low_and_no_objectsra   m   s^   € ð( �K‰K˜‰N˜fŸl™l¨1™oÕ@°·±¸a±Õ@ÜÐLÓMÐMà�i‰i˜
Ó# vÑ'EÑF€Gà‰>˜6™?¨F©OÐ;Ð;r%   c                 ó  • X:H  nUR                  5       nX   U:¬  nUR                  5       nXW-  n	U	R                  5       n
US:„  =(       a    US:„  =(       a    U
S:„  nU(       a  Xh-  nUR                  5       U:”  d  SnX¹4$ )Nr   F)Úsumr8   )Úmask_labelsÚ
mask_probsÚkÚmask_thresholdÚoverlap_mask_area_thresholdÚmask_kÚmask_k_areaÚoriginal_maskÚoriginal_areaÚ
final_maskÚfinal_mask_areaÚmask_existsÚ
area_ratios                r&   Úcheck_segment_validityrq   ‰   s‹   € àÑ€FØ—*‘*“,€Kð ‘M ^Ñ3€MØ!×%Ñ%Ó'€MàÑ'€JØ —n‘nÓ&€Oà ‘/×O m°aÑ&7×O¸OÈaÑ<O€KæØ Ñ0ˆ
Ø�‰Ó Ð#>Ó>ØˆKàÐ"Ð"r%   rg   rh   Útarget_sizec                 óp  • Uc  U R                   S   OUS   nUc  U R                   S   OUS   n[        R                  " Xx4[        R                  U R                  S9S-
  n	/ n
U R                  5       n US S 2S S 4   U -  R                  S5      nSn0 n[        UR                   S   5       H†  nX.   R                  5       n[        X°XäU5      u  nnU(       d  M.  U(       a  Xó;   a  Xý;   a	  Xß   U	U'   MH  XÍU'   XÉU'   [        X   R                  5       S5      nU
R                  UUUS.5        US-  nMˆ     Xš4$ )Nr,   r   é   )Údtyper0   é   ©ÚidÚlabel_idÚscore)r6   r1   r5   r:   r0   ÚsigmoidÚargmaxÚranger8   rq   ÚroundÚappend)re   Úpred_scoresÚpred_labelsÚstuff_classesrg   rh   rr   ÚheightÚwidthÚsegmentationÚsegmentsrd   Úcurrent_segment_idÚstuff_memory_listrf   Ú
pred_classro   rm   Úsegment_scores                      r&   Úcompute_segmentsr‹   Ÿ   sc  € ð %0Ñ$7ˆZ×Ñ˜aÒ ¸[È¹^€FØ#.Ñ#6ˆJ×Ñ˜QÒ¸KÈ¹N€Eä—;’; ˜´e·j±jÈ×IZÑIZÑ[Ð^_Ñ_€LØ€Hð ×#Ñ#Ó%€JØšq $¨˜}Ñ-°
Ñ:×BÑBÀ1ÓE€Kð ÐØ(*Ðä�;×$Ñ$ QÑ'Ö(ˆØ ‘^×(Ñ(Ó*ˆ
ô #9Ø QÐ8Só#
Ñˆ�Zö Ùæ˜ZÓ8ØÓ.Ø+<Ñ+H�˜ZÑ(Ùà0B *Ñ-à#5�ZÑ Ü˜k™n×1Ñ1Ó3°QÓ7ˆØ�‰à(Ø&Ø&ñô	
ð 	˜aÑÒñ7 )ð8 Ð!Ð!r%   c                   ó  ^ • \ rS rSr\r\R                  r\	r
\rSSS.rSrSrSrSrSrSrSrS\\   4U 4S jjrS	\R0                  S
\S\\   S\\\4   4S jrS	\R0                  S
\S\R0                  4S jr\  S2S	\ S\\R0                     S-  S\!\\4   S-  S\\   S\"4
U 4S jjj5       r# S3S	\ S\ S-  S\!\\4   S-  S\$S\%S\&\'-  S-  S\(\&S4   S-  S\\   S\"4S jjr)S	\S   S\$S
\SSS\$S\*S\$S\$S \$S!\*\\*   -  S-  S"\*\\*   -  S-  S#\$S-  4S$ jr+S%\R0                  S&\\\\\4      S'\\\\4      S
\!\&\4   S\\R0                     4
S( jr,S%\R0                  S'\\\\4      S
\!\&\4   S\\R0                     4S) jr- S3S'\\\\4      S
\!\&\4   S-  S\.R^                  4S* jjr0     S4S'\\\\4      S+\*S,\*S-\*S.\\   S-  S
\!\&\4   S-  4S/ jjr1\2" 5         S5S'\\\\4      S+\*S
\!\&\4   S-  4S0 jj5       r3S1r4U =r5$ )6ÚEomtImageProcessoréÕ   i€  ©rE   rF   FTNÚkwargsc                 ó&   >• [         TU ]  " S0 UD6  g )Nr   )ÚsuperÚ__init__)Úselfr�   Ú	__class__s     €r&   r“   ÚEomtImageProcessor.__init__ä   s   ø€ Ü‰ÒÑ"˜6Ó"r%   ÚimagesÚsizeÚimage_indicesrC   c                 óô  • / / pTUR                   u    pgnUR                  n	[        Xx5      n
[        R                  " X©-  5      nX¹-  U
-
  nUS:”  a  XËS-
  -  OSn[        U5       H�  n[        XéU-
  -  5      nXù-   nXx:”  a  USS2SS2UU2SS24   nOUSS2SS2SS2UU24   n[        [        R                  " USS95       H.  u  nnUR                  U5        UR                  UU   UU/5        M0     M‘     XE4$ )zCSlices an image into overlapping patches for semantic segmentation.r,   r   Nr-   )r6   rE   ÚmaxÚmathÚceilr}   r#   r7   r1   Úunbindr   )r”   r—   r˜   r™   rJ   Úpatch_offsetsÚ_rƒ   r„   Ú
patch_sizeÚlonger_sideÚnum_patchesÚtotal_overlapÚoverlap_per_patchr<   ÚstartÚendÚbatch_patchÚ	batch_idxÚsingles                       r&   Ú_split_imageÚEomtImageProcessor._split_imageç   s  € ð "$ R�à$Ÿl™lÑˆˆ1�eØ×'Ñ'ˆ
ä˜&Ó(ˆÜ—i’i Ñ 8Ó9ˆØ#Ñ0°;Ñ>ˆØALÈqÃ˜M¸1©_Ò=ÐVWÐä�{Ö#ˆAÜ˜Ð*;Ñ;Ñ<Ó=ˆEØÑ$ˆCà‹~Ø$¢Qª¨5°¨9²aÐ%7Ñ8‘à$¢Qªª1¨e°C¨iÐ%7Ñ8�ä%.¬u¯|ª|¸KÈQÑ/OÖ%PÑ!�	˜6Ø—‘˜vÔ&Ø×$Ñ$ m°IÑ&>ÀÀsÐ%KÖLó &Qñ $ð Ð%Ð%r%   c                 ó*  • UR                   u    p4n[        UR                  UR                  =(       d    UR                  S.5      u  pg[	        SXd-
  5      n[	        SXu-
  5      n	SU	SU4n
[
        R                  R                  R                  XSSS9nU$ )z5Pads the image to the target size using zero padding.r�   r   Úconstantg        )ÚmodeÚvalue)	r6   rI   rE   rF   r›   r1   Únnr   Úpad)r”   r—   r˜   r    rƒ   r„   rG   rH   Úpad_hÚpad_wÚpaddingÚpadded_imagess               r&   Ú_padÚEomtImageProcessor._pad  s•   € à$Ÿl™lÑˆˆ1�eä&5Ø"×0Ñ0À$×BSÑBS×BiÐW[×WiÑWiÑjó'
Ñ#ˆô �A�}Ñ-Ó.ˆÜ�A�|Ñ+Ó,ˆØ�e˜Q Ð&ˆäŸ™×+Ñ+×/Ñ/°ÀjÐX[Ð/Ð\ˆØÐr%   Úsegmentation_mapsr*   c                 ó(   >• [         TU ]  " XU40 UD6$ )zÿ
segmentation_maps (`ImageInput`, *optional*):
    The segmentation maps to preprocess for corresponding images.
instance_id_to_semantic_id (`list[dict[int, int]]` or `dict[int, int]`, *optional*):
    A mapping between object instance ids and class ids.
)r’   Ú
preprocess)r”   r—   r¹   r*   r�   r•   s        €r&   r»   ÚEomtImageProcessor.preprocess  s   ø€ ô ‰wÒ! &Ð=WÑbÐ[aÑbÐbr%   Údo_convert_rgbÚinput_data_formatÚreturn_tensorsr0   ztorch.devicec                 ól  • U R                  XXWS9nUR                  SS5      n	UR                  5       n
0 nU R                  " U40 U
D6u  pÍXËS'   XÛS'   UGb  U R                  USS[        R
                  S9nUR                  5       nUR                  SS[        R                  S	.5        U R                  " SS
U0UD6u  nnU Vs/ s H1  nUR                  S5      R                  [        R                  5      PM3     nn/ / nn[        U5       HS  u  nn[        U[        5      (       a  UU   nOUn[!        UUU	S9u  nnUR#                  U5        UR#                  U5        MU     UUS'   UUS'   U(       a*  U Vs/ s H  n[        R$                  " U5      PM     snUS'   ['        UU/ SQS9$ s  snf s  snf )z
Preprocess image-like inputs.
)r—   r½   r¾   r0   r   NÚpixel_valuesrŸ   rt   F)r—   Úexpected_ndimsr½   r¾   )Údo_normalizeÚ
do_rescaleÚresampler—   r   )r   rd   Úclass_labels)rŸ   rd   rÆ   )ÚdataÚtensor_typeÚskip_tensor_conversionr   )Ú_prepare_image_like_inputsÚpopÚcopyÚ_preprocessr   ÚFIRSTÚupdater   ÚNEARESTÚsqueezeÚtor1   Úint64r7   Ú
isinstancerR   rA   r   Útensorr   )r”   r—   r¹   r*   r½   r¾   r¿   r0   r�   r   Úimages_kwargsrÇ   Úprocessed_imagesrŸ   Úprocessed_segmentation_mapsÚsegmentation_maps_kwargsr    r(   rd   rÆ   ÚidxÚinstance_idr\   ÚclassesrK   s                            r&   Ú_preprocess_image_like_inputsÚ0EomtImageProcessor._preprocess_image_like_inputs!  sþ  € ð ×0Ñ0ØÐL]ð 1ð 
ˆð —z‘z .°$Ó7ˆØŸ™›ˆØˆØ*.×*:Ò*:¸6Ñ*SÀ]Ñ*SÑ'ÐØ/ˆ^ÑØ -ˆ_ÑàÒ(Ø*.×*IÑ*IØ(Ø Ø$Ü"2×"8Ñ"8ð	 +Jð +Ð'ð (.§{¡{£}Ð$Ø$×+Ñ+à$)Ø"'ä 2× :Ñ :ñ	ôð .2×-=Ò-=ñ .Ø2ð.Ø6Nñ.Ñ*Ð'¨ñ Upó+ÚToÐ@PÐ ×(Ñ(¨Ó+×.Ñ.¬u¯{©{Ö;ÑToð (ð +ð )+¨B˜ˆKÜ)2Ð3NÖ)OÑ%�Ð%ÜÐ8¼$×?Ñ?Ø"<¸SÑ"A‘Kà"<�Kä!NØ$ØØ!-ñ"‘��wð ×"Ñ" 5Ô)Ø×#Ñ# GÖ,ñ *Pð  #.ˆD�ÑØ#/ˆD�Ñ æÙJWÓ$XÊ-¸w¤U§\¢\°'Ö%:É-Ñ$XˆD�Ñ!äØØ&Ú#Sñ
ð 	
ùò7+ùò2 %Ys   Ã8F,Å9 F1r)   Ú	do_resizerÅ   z7PILImageResampling | tvF.InterpolationMode | int | NonerÄ   Úrescale_factorrÃ   r   Údo_padÚ
image_meanÚ	image_stdÚdisable_groupingc           	      ó^  • / n[        XS9u  nn0 nUR                  5        H"  u  nnU(       a  U R                  UX4S9nUUU'   M$     [        UU5      nU(       a¢  [        XS9u  nn/ / nnUR                  5        Hp  u  nnUR                  5        VVVs/ s H  u  nu  nnUU:X  d  M  UPM     nnnnU R	                  UUU5      u  nnUR                  U5        UR                  U5        Mr     [        UU5      u  pU	(       aN  [        XS9u  nnUR                  5        VVs0 s H  u  nnUU R                  UU5      _M     nnn[        UU5      n[        XS9u  nn0 nUR                  5        H  u  nnU R                  UXVXzU5      nUUU'   M!     [        UU5      nUU4$ s  snnnf s  snnf )z4Preprocesses the input images and masks if provided.)rä   )Úimager˜   rÅ   )	r	   ÚitemsÚresizer
   r«   ÚextendrX   r·   Úrescale_and_normalize)r”   r—   rß   r˜   rÅ   rÄ   rà   rÃ   r   rá   râ   rã   rä   r�   rŸ   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedr6   Ústacked_imagesrJ   Úoriginal_idxÚ	img_shaper    Úoriginal_indicesÚsplit_patchesrK   Úpadded_groupedÚprocessed_images_groupedr×   s                                 r&   rÍ   ÚEomtImageProcessor._preprocesso  sô  € ð" ˆä/DÀVÑ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%§¡°>È Ð!`�Ø,:Ð" 5Ó)ñ &<ô  Ð 6Ð8LÓMˆæÜ3HÈÑ3sÑ0ˆNÐ0Ø%'¨�]ˆGØ)7×)=Ñ)=Ö)?Ñ%��~àEY×E_ÑE_ÔEaõ$ÚEaÑ%A \±>°I¸qÐenÐrwÑew—LÑEað !ò $ð *.×):Ñ):¸>È4ÐQaÓ)bÑ&�˜wØ—‘˜}Ô-Ø×$Ñ$ WÖ-ñ *@ô %@ÀÈÓ$WÑ!ˆFæÜ3HÈÑ3sÑ0ˆNÐ0àTb×ThÑThÔTjôÚTjÑ;P¸5À.��t—y‘y °Ó6Ò6ÑTjð ñ ô $ NÐ4HÓIˆFä/DÀVÑ/oÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ö%;Ñ!ˆE�>Ø!×7Ñ7Ø 
¸LÐV_óˆNð /=Ð$ UÓ+ñ	 &<ô
 *Ð*BÐDXÓYÐà Ð.Ð.ùô1$ùós   ÂF"
Â(F"
Ä" F)Úsegmentation_logitsrŸ   Útarget_sizesc                 ó,  • UR                   S   n/ n/ nU Hw  n[        X„S   US   5      u  pšUR                  [        R                  " XYU
4UR
                  S95        UR                  [        R                  " XYU
4UR
                  S95        My     [        U5       H{  u  nu  pÍnX<   S   X<   S   :”  a2  Xl   SS2XÞ2SS24==   X   -  ss'   X|   SS2XÞ2SS24==   S-  ss'   MK  Xl   SS2SS2XÞ24==   X   -  ss'   X|   SS2SS2XÞ24==   S-  ss'   M}     / n[        [        Xg5      5       H_  u  nu  nnUUR                  SS9-  n[        R                  R                  R                  US   UU   S	S
S9S   nUR                  U5        Ma     U$ )aF  
Reconstructs full-size semantic segmentation logits from patch predictions.

Args:
    segmentation_logits (`torch.Tensor`):
        A tensor of shape `(num_patches, num_classes, patch_height, patch_width)` representing predicted logits
        for each image patch.
    patch_offsets (`list[tuple[int, int, int]]`):
        A list of tuples where each tuple contains:
        - `image_index` (int): Index of the original image this patch belongs to.
        - `start` (int): Start pixel index of the patch along the long dimension (height or width).
        - `end` (int): End pixel index of the patch along the long dimension.
    target_sizes (`list[tuple[int, int]]`):
        list of original (height, width) dimensions for each image before preprocessing.
    size (`dict[str, int]`):
        A size dict which was used to resize.
r,   rE   rF   r/   r   N)Úmin©N.ÚbilinearF©r˜   r¯   Úalign_corners)r6   r   r   r1   r5   r0   r7   rS   Úclampr±   r   Úinterpolate)r”   rö   rŸ   r÷   r˜   Únum_classesÚaggregated_logitsÚpatch_countsÚ
image_sizerƒ   r„   Ú	patch_idxÚ	image_idxÚpatch_startÚ	patch_endÚreconstructed_logitsrÚ   Ú	logit_sumÚcountÚaveraged_logitsÚresized_logitss                        r&   Úmerge_image_patchesÚ&EomtImageProcessor.merge_image_patches¨  sÒ  € ð0 *×/Ñ/°Ñ2ˆØÐØˆã&ˆJÜ6°zÈÑCXÐZ^Ð_mÑZnÓo‰MˆFØ×$Ñ$¤U§[¢[°+ÀuÐ1MÐVi×VpÑVpÑ%qÔrØ×Ñ¤§¢¨[À%Ð,HÐQd×QkÑQkÑ lÖmñ 'ô ?HÈÖ>VÑ:ˆIÑ:˜	°	ØÑ& qÑ)¨LÑ,CÀAÑ,FÓFØ!Ñ,ªQ°Ð0EÂqÐ-HÓIÐM`ÑMkÑkÓIØÑ'ª¨;Ð+@Â!Ð(CÓDÈÑIÕDà!Ñ,ªQ²°;Ð3HÐ-HÓIÐM`ÑMkÑkÓIØÑ'ªª1¨kÐ.CÐ(CÓDÈÑIÕDñ ?Wð  "ÐÜ'0´Ð5FÓ1UÖ'VÑ#ˆCÑ#�)˜UØ'¨%¯+©+¸!¨+Ð*<Ñ<ˆOÜ"ŸX™X×0Ñ0×<Ñ<Ø 	Ñ*Ø! #Ñ&ØØ#ð	 =ð ð
 ñˆNð !×'Ñ'¨Ö7ñ (Wð $Ð#r%   c                 óü   • / n[        U5       Hj  u  pV[        XcS   US   5      u  pxX   SS2SU2SU24   n	[        R                  R                  R                  U	S   USSS9S   n
UR                  U
5        Ml     U$ )	zJRestores panoptic segmentation logits to their original image resolutions.rE   rF   Nrú   rû   Frü   r   )r7   r   r1   r±   r   rÿ   r   )r”   rö   r÷   r˜   r  rÚ   Úoriginal_sizerG   rH   Úcropped_logitsÚupsampled_logitss              r&   Úunpad_imageÚEomtImageProcessor.unpad_imageá  s¥   € ð ˆä"+¨LÖ"9ÑˆCÜ*DØ OÑ4°d¸>Ñ6Jó+Ñ'ˆMð 1Ñ5²a¸¸-¸ÈÈ,ÈÐ6VÑWˆNÜ$Ÿx™x×2Ñ2×>Ñ>Ø˜yÑ)°ÀJÐ^cð  ?ð  àñ Ðð ×!Ñ!Ð"2Ö3ñ #:ð Ðr%   c                 ó¤  • Ub  UOU R                   nUR                  nUR                  nUR                  n[	        U5      n[
        R                  R                  R                  UUSS9nUR                  SS9SSS24   nUR                  5       n	[
        R                  " SX‰5      n
U(       a  U R                  X¦X#5      nOl/ n[        [        U
5      5       HR  n[
        R                  R                  R                  X¬   R                  SS9X,   SS	S
9nUR!                  US   5        MT     U Vs/ s H  oîR#                  SS9PM     nnU$ s  snf )zIPost-processes model outputs into final semantic segmentation prediction.Nrû   ©r˜   r¯   éÿÿÿÿr-   .zbqc, bqhw -> bchwr   Frü   )r˜   Úmasks_queries_logitsÚclass_queries_logitsrŸ   rI   r1   r±   r   rÿ   Úsoftmaxr{   Úeinsumr  r}   ÚlenÚ	unsqueezer   r|   )r”   Úoutputsr÷   r˜   r  r  rŸ   Úoutput_sizeÚmasks_classesÚmasks_probsrö   Úoutput_logitsrÚ   r  ÚlogitÚpredss                   r&   Ú"post_process_semantic_segmentationÚ5EomtImageProcessor.post_process_semantic_segmentationö  s]  € ð Ñ'‰t¨T¯Y©Yˆà&×;Ñ;ÐØ&×;Ñ;ÐØ×-Ñ-ˆä% dÓ+ˆÜ$Ÿx™x×2Ñ2×>Ñ>Ø ØØð  ?ð  
Ðð -×4Ñ4¸Ð4Ð<¸SÀ#À2À#¸XÑFˆØ*×2Ñ2Ó4ˆä#ŸlšlÐ+>ÀÓ[ÐæØ ×4Ñ4Ð5HÐYeÓl‰MàˆMäœSÐ!4Ó5Ö6�Ü!&§¡×!4Ñ!4×!@Ñ!@Ø'Ñ,×6Ñ6¸1Ð6Ð=Ø%Ñ*Ø#Ø"'ð	 "Að "�ð ×$Ñ$ ^°AÑ%6Ö7ñ 7ñ 3@Ó@²-¨—‘ !�Ó$±-ˆÐ@Øˆùò As   Ä1EÚ	thresholdrg   rh   r‚   c                 óÜ  • Ub  UOU R                   nUR                  nUR                  n	U	R                  S   n
U	R                  S   S-
  n[	        U5      n[
        R                  R                  R                  UUSS9nU R                  X‚U5      nU	R                  SS9R                  S5      u  pï/ n[        U
5       Hª  n[        UU   UU   UU   X;5      u  nnnUR                  S   S::  aK  Ub  UU   OUR                  SS u  nn[
        R                  " UU45      S-
  nUR                  U/ S.5        M|  [!        UUUUUUUb  UU   OSS	9u  nnUR                  UUS.5        M¬     U$ )
zIPost-processes model outputs into final panoptic segmentation prediction.Nr   r  r,   rû   r  r-   ©r…   Úsegments_info)re   r€   r�   r‚   rg   rh   rr   )r˜   r  r  r6   rI   r1   r±   r   rÿ   r  r  r›   r}   ra   r5   r   r‹   )r”   r  r÷   r'  rg   rh   r‚   r˜   r  r  Ú
batch_sizer_   r  Úmask_probs_batchÚpred_scores_batchÚpred_labels_batchÚresultsr<   re   r€   r�   rƒ   r„   r…   r†   s                            r&   Ú"post_process_panoptic_segmentationÚ5EomtImageProcessor.post_process_panoptic_segmentation"  s¬  € ð Ñ'‰t¨T¯Y©Yˆà&×;Ñ;ÐØ&×;Ñ;Ðà)×/Ñ/°Ñ2ˆ
Ø)×/Ñ/°Ñ3°aÑ7ˆ
ä% dÓ+ˆÜ$Ÿx™x×2Ñ2×>Ñ>Ø ØØð  ?ð  
Ðð  ×+Ñ+Ð,@ÐPTÓUÐØ/C×/KÑ/KÐPRÐ/KÐ/S×/WÑ/WÐXZÓ/[Ñ,Ðàˆä�zÖ"ˆAÜ3LØ  Ñ#Ð%6°qÑ%9Ð;LÈQÑ;OÐQZó4Ñ0ˆJ˜ [ð
 ×Ñ Ñ" aÓ'Ø3?Ñ3K ¨Q¢ÐQ[×QaÑQaÐbcÐbdÐQe‘�˜Ü$Ÿ{š{¨F°E¨?Ó;¸aÑ?�Ø—‘°ÈrÑRÔSÙä%5Ø%Ø'Ø'Ø+Ø-Ø,GØ/;Ñ/G˜L¨šOÈTñ&Ñ"ˆL˜(ð �N‰N¨LÈ8ÑTÖUñ- #ð. ˆr%   c           
      ól  • Ub  UOU R                   nUR                  nUR                  n[        U5      n[        R
                  R                  R                  UUSS9nU R                  XRU5      nUR                  n	UR                  S   n
UR                  S   n/ n[        U
5       GHˆ  nX�   nXm   nUR                  SS9SSS24   R                  S5      u  nnUS:„  R                  5       nUR                  5       R!                  S	5      UR!                  S	5      -  R#                  S	5      UR!                  S	5      R#                  S	5      S
-   -  nUU-  n[        R$                  " X-   U	S9S	-
  n/ / nnSn[        U5       H•  nUU   R'                  5       n[        R(                  " UU   S:H  5      (       a  M9  UU:¼  d  MA  UUUU   S	:H  '   UR+                  UUU   R'                  5       [-        US5      S.5        US	-  nUR+                  UU   5        M—     UR+                  UUS.5        GM‹     U$ )zDPost-processes model outputs into Instance Segmentation Predictions.Nrû   r  r   éþÿÿÿr  r-   .r,   g�íµ ÷Æ°>r/   rv   rw   r)  )r˜   r  r  rI   r1   r±   r   rÿ   r  r0   r6   r}   r  r›   r9   r{   Úflattenrc   r5   r8   Úallr   r~   )r”   r  r÷   r'  r˜   r  r  r  r,  r0   r+  Únum_queriesr/  r<   Ú	mask_predÚ
mask_classr]   Úpred_classesÚ
pred_masksÚmask_scoresr€   r…   Úinstance_mapsr†   r‡   Újrz   s                              r&   Ú"post_process_instance_segmentationÚ5EomtImageProcessor.post_process_instance_segmentation[  sP  € ð Ñ'‰t¨T¯Y©Yˆà&×;Ñ;ÐØ&×;Ñ;Ðä% dÓ+ˆÜ$Ÿx™x×2Ñ2×>Ñ>Ø ØØð  ?ð  
Ðð  ×+Ñ+Ð,@ÐPTÓUÐà%×,Ñ,ˆØ)×/Ñ/°Ñ2ˆ
Ø*×0Ñ0°Ñ4ˆàˆä�z×"ˆAØ(Ñ+ˆIØ-Ñ0ˆJð $.×#5Ñ#5¸"Ð#5Ð#=¸cÀ3ÀBÀ3¸hÑ#G×#KÑ#KÈBÓ#OÑ ˆF�LØ# a™-×.Ñ.Ó0ˆJð %×,Ñ,Ó.×6Ñ6°qÓ9¸J×<NÑ<NÈqÓ<QÑQ×VÑVÐWXÓYØ×"Ñ" 1Ó%×)Ñ)¨!Ó,¨tÑ3ñˆKð ! ;Ñ.ˆKä Ÿ;š; |¡¸vÑFÈÑJˆLà&(¨"˜8ˆMØ!"ÐÜ˜;Ö'�Ø# A™×+Ñ+Ó-�ä—y’y ¨A¡°!Ñ!3×4Ó4¸À)Õ9KØ7I�L ¨A¡°!Ñ!3Ñ4Ø—O‘Oà"4Ø(4°Q©×(<Ñ(<Ó(>Ü%*¨5°!£_ñôð '¨!Ñ+Ð&Ø!×(Ñ(¨°A©Ö7ñ (ð �N‰N¨LÈ8ÑT×UñC #ðD ˆr%   r   ©NN)N)çš™™™™™é?ç      à?rA  NN)rA  N)6r   r   r   r   r   Úvalid_kwargsr   ÚBILINEARrÅ   r   râ   r   rã   r˜   Údefault_to_squarerß   rÄ   rÃ   r   rá   r   r   r“   r1   ÚTensorr   rR   r#   Útupler«   r·   r   r   Údictr   r»   r!   r   Ústrr   r   rÝ   r9   rÍ   r  r  ÚnpÚndarrayr%  r0  r   r>  r$   Ú__classcell__)r•   s   @r&   r�   r�   Õ   s5  ø† à+€LØ!×*Ñ*€HØ&€JØ$€IØ °#Ñ6€DØÐØ€IØ€JØ€LØ€NØ€FØ€Lð# Ð(@Ñ!A÷ #ð& 5§<¡<ð &°xð &ÐPTÐUXÑPYð &Ð^cÐdhÐjnÐdnÑ^oô &ð8˜5Ÿ<™<ð ¨xð ¸E¿L¹Lô ð ð 8<Ø<@ñ	càðcð   §¡Ñ-°Ñ4ðcð %)¨¨c¨¡N°TÑ$9ð	cð
 Ð1Ñ2ðcð 
÷có ðcð. 59ñL
àðL
ð &¨Ñ,ðL
ð %)¨¨c¨¡N°TÑ$9ð	L
ð
 ðL
ð ,ðL
ð ˜jÑ(¨4Ñ/ðL
ð �c˜>Ð)Ñ*¨TÑ1ðL
ð Ð1Ñ2ðL
ð 
õL
ð\7/à�^Ñ$ð7/ð ð7/ð ð	7/ð
 Lð7/ð ð7/ð ð7/ð ð7/ð ð7/ð ð7/ð ˜D ™KÑ'¨$Ñ.ð7/ð ˜4 ™;Ñ&¨Ñ-ð7/ð  ™+ô7/ðr7$à"Ÿ\™\ð7$ð ˜E # s¨C -Ñ0Ñ1ð7$ð ˜5  c ™?Ñ+ð	7$ð
 �3˜�8‰nð7$ð 
ˆe�l‰lÑ	ô7$ðrà"Ÿ\™\ðð ˜5  c ™?Ñ+ðð �3˜�8‰nð	ð
 
ˆe�l‰lÑ	ôð2 '+ñ	*ð ˜5  c ™?Ñ+ð*ð �3˜�8‰n˜tÑ#ð	*ð
 
�‰õ*ð` Ø #Ø-0Ø*.Ø&*ñ7ð ˜5  c ™?Ñ+ð7ð ð	7ð
 ð7ð &+ð7ð ˜C‘y 4Ñ'ð7ð �3˜�8‰n˜tÑ#õ7ñr %Ó&ð
 Ø&*ñ?ð ˜5  c ™?Ñ+ð?ð ð	?ð
 �3˜�8‰n˜tÑ#ô?ó 'ö?r%   r�   r@  )rB  rA  )rB  rA  N)0r    rœ   Útypingr   ÚnumpyrJ  r1   Útorchvision.transforms.v2r   ÚtvFÚimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r	   r
   Úimage_utilsr   r   r   r   r   r   Úprocessing_utilsr   r   Úutilsr   r   r   r   rH  r#   rA   rI  rG  rI   rR   rF  rX   ra   rq   r9   r‹   r�   Ú__all__r   r%   r&   Ú<module>rX     s`  ðñ &ã Ý ã Û Ý 7å ;Ý 2ß aÑ a÷÷ ÷ 5÷ñ ô˜|°5ò ð$ 9=Ø#ñ/Ø$ð/à $ S¨# X¡°Ñ 5ð/ð ˜‘*õ/ð>'˜t C¨ H™~ð '°%¸¸S¸±/ô 'ð	6Ø�%—,‘,Ñð	6Ø*.¨t°C©y©/ð	6à
ˆ4�—‘Ñ˜t D¨¡I™Ð.Ñ/ô	6ò<ô8#ð6  Ø),Ø*.ñ3"ð
 ð3"ð "'ð3"ð �s˜C�x‘ 4Ñ'õ3"ðl ôEÐ+ó Eó ðEðP  Ð
 �r%   