ó
    EñiŠ/  ã                   ó¶  • S SK r S SKJrJr  S SKrS SKrS SKJrJr  SSKJ	r	  SSK
Jr  \R                  R                  S\S\4S	 j5       r\R                  R                  S
\S\4S j5       r  SS\S\S\S\\\\4      S\\\\4      S\\\\\\4      4   4S jjr " S S\R,                  5      rS\S\\   S\\   S\4S jrS\S\\   S\\   S\4S jrg)é    N)ÚAnyÚOptional)ÚnnÚTensoré   )Ú	ImageList)Úpaste_masks_in_imageÚimageÚreturnc                 ó6   • SSK Jn  UR                  U 5      SS  $ )Nr   )Ú	operatorséþÿÿÿ)Ú
torch.onnxr   Úshape_as_tensor)r
   r   s     Úc/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/detection/transform.pyÚ_get_shape_onnxr      s   € å$à×$Ñ$ UÓ+¨B¨CÐ0Ð0ó    Úvc                 ó   • U $ ©N© )r   s    r   Ú_fake_cast_onnxr      s	   € ð €Hr   Úself_min_sizeÚself_max_sizeÚtargetÚ
fixed_sizec           	      ó¼  • [         R                  " 5       (       a  [        U 5      nOV[        R                  R                  5       (       a$  [        R                  " U R                  SS  5      nOU R                  SS  nS nS nS nUb  US   US   /nGO/[        R                  R                  5       (       d  [         R                  " 5       (       aÊ  [        R                  " U5      R                  [        R                  S9n	[        R                  " U5      R                  [        R                  S9n
[        U5      n[        U5      n[        R                  " X¹-  XÊ-  5      n[         R                  " 5       (       a  [        U5      nO7UR                  5       nO&[        U5      n	[        U5      n
[        X-  X*-  5      nSn[        R                  R                   R#                  U S    UUSUSS9S   n Uc  X4$ S	U;   a\  US	   n[        R                  R                   R#                  US S 2S 4   R                  5       XgUS
9S S 2S4   R%                  5       nXãS	'   X4$ )Nr   r   r   )ÚdtypeTÚbilinearF)ÚsizeÚscale_factorÚmodeÚrecompute_scale_factorÚalign_cornersÚmasks)r    r!   r#   )ÚtorchvisionÚ_is_tracingr   ÚtorchÚjitÚis_scriptingÚtensorÚshapeÚminÚtoÚfloat32ÚmaxÚfloatr   Úitemr   Ú
functionalÚinterpolateÚbyte)r
   r   r   r   r   Úim_shaper    r!   r#   Úmin_sizeÚmax_sizeÚself_min_size_fÚself_max_size_fÚscaleÚmasks                  r   Ú_resize_image_and_masksr=      s  € ô ×Ò× Ñ Ü" 5Ó)‰Ü	�‰×	Ñ	×	!Ñ	!Ü—<’< §¡¨B¨CÐ 0Ó1‰à—;‘;˜r˜sÐ#ˆà $€DØ$(€LØ-1ÐØÑØ˜1‘˜z¨!™}Ð-Šä�9‰9×!Ñ!×#Ñ#¤{×'>Ò'>×'@Ñ'@Ü—y’y Ó*×-Ñ-´E·M±MÐ-ÐBˆHÜ—y’y Ó*×-Ñ-´E·M±MÐ-ÐBˆHÜ# MÓ2ˆOÜ# MÓ2ˆOÜ—I’I˜oÑ8¸/Ñ:TÓUˆEä×&Ò&×(Ñ(Ü.¨uÓ5‘à$Ÿz™z›|‘ô ˜8“}ˆHÜ˜8“}ˆHÜ˜}Ñ7¸Ñ9QÓRˆLà!%Ðä�H‰H×Ñ×+Ñ+Øˆd‰ØØ!ØØ5Øð ,ð ð ñ	€Eð �~Øˆ}Ðà�&ÓØ�g‰ˆÜ�x‰x×"Ñ"×.Ñ.Ø’�D�‰M×ÑÓ!¨Ð`vð /ð 
â
ˆQˆ$ñç‘“ð 	ð ˆw‰Øˆ=Ðr   c                   ó6  ^ • \ rS rSrSr  SS\S\S\\   S\\   S\S\\	\\4      S	\
4U 4S
 jjjr S S\\   S\\\\\4         S\	\\\\\\4         4   4S jjrS\S\4S jrS\\   S\4S jr S S\S\\\\4      S\	\\\\\4      4   4S jjr\R*                  R,                  S!S\\   S\S\4S jj5       rS\\\      S\\   4S jrS!S\\   S\S\4S jjrS\\\\4      S\\	\\4      S\\	\\4      S\\\\4      4S jrS\4S jrSrU =r$ )"ÚGeneralizedRCNNTransforméV   aL  
Performs input / target transformation before feeding the data to a GeneralizedRCNN
model.

The transformations it performs are:
    - input normalization (mean subtraction and std division)
    - input / target resizing to match min_size / max_size

It returns a ImageList for the inputs, and a List[Dict[Tensor]] for the targets
r7   r8   Ú
image_meanÚ	image_stdÚsize_divisibler   Úkwargsc                 óÔ   >• [         TU ]  5         [        U[        [        45      (       d  U4nXl        X l        X0l        X@l        XPl	        X`l
        UR                  SS5      U l        g )NÚ_skip_resizeF)ÚsuperÚ__init__Ú
isinstanceÚlistÚtupler7   r8   rA   rB   rC   r   ÚpoprF   )	Úselfr7   r8   rA   rB   rC   r   rD   Ú	__class__s	           €r   rH   Ú!GeneralizedRCNNTransform.__init__b   sZ   ø€ ô 	‰ÑÔÜ˜(¤T¬5 M×2Ñ2Ø �{ˆHØ ŒØ ŒØ$ŒØ"ŒØ,ÔØ$ŒØ"ŸJ™J ~°uÓ=ˆÕr   ÚimagesÚtargetsr   c                 óê  • U Vs/ s H  o3PM     nnUb=  / nU H3  n0 nUR                  5        H	  u  pxX†U'   M     UR                  U5        M5     Un[        [        U5      5       Hr  n	X   n
Ub  X)   OS nU
R	                  5       S:w  a  [        SU
R                   35      eU R                  U
5      n
U R                  X«5      u  p«X¡U	'   Uc  Mi  Uc  Mn  X²U	'   Mt     U Vs/ s H  o3R                  SS  PM     nnU R                  XR                  S9n/ nU HB  n[        R                  " [        U5      S:H  SU 35        UR                  US   US   45        MD     [        X5      nXò4$ s  snf s  snf )	Né   zFimages is expected to be a list of 3d tensors of shape [C, H, W], got r   )rC   é   zMInput tensors expected to have in the last two elements H and W, instead got r   r   )ÚitemsÚappendÚrangeÚlenÚdimÚ
ValueErrorr,   Ú	normalizeÚresizeÚbatch_imagesrC   r(   Ú_assertr   )rM   rP   rQ   ÚimgÚtargets_copyÚtÚdataÚkr   Úir
   Útarget_indexÚimage_sizesÚimage_sizes_listÚ
image_sizeÚ
image_lists                   r   ÚforwardÚ GeneralizedRCNNTransform.forwardw   s“  € ñ "(Ó(¢˜#’#¡ˆÐ(ØÑð
 57ˆLÛ�Ø*,�ØŸG™GžI‘D�AØ˜“Gñ &à×#Ñ# DÖ)ñ	 ð
 #ˆGÜ”s˜6“{Ö#ˆAØ‘IˆEØ)0Ñ)<˜7š:À$ˆLà�y‰y‹{˜aÓÜ Ð#iÐjo×juÑjuÐivÐ!wÓxÐxØ—N‘N 5Ó)ˆEØ"&§+¡+¨eÓ"BÑˆEØ�1‰IØÓ" |Ó'?Ø)˜“
ñ $ñ 28Ó8²¨#—y‘y  “~±ˆÐ8Ø×"Ñ" 6×:MÑ:MÐ"ÐNˆØ24ÐÛ%ˆJÜ�MŠMÜ�J“ 1Ñ$Ø_Ð`jÐ_kÐlôð ×#Ñ# Z°¡]°J¸q±MÐ$BÖCñ &ô ˜vÓ8ˆ
ØÐ"Ð"ùòI )ùò2 9s   …E+Ã E0r
   c                 ó6  • UR                  5       (       d  [        SUR                   S35      eUR                  UR                  p2[        R
                  " U R                  X#S9n[        R
                  " U R                  X#S9nXS S 2S S 4   -
  US S 2S S 4   -  $ )NzOExpected input images to be of floating type (in range [0, 1]), but found type z instead©r   Údevice)Úis_floating_pointÚ	TypeErrorr   rn   r(   Ú	as_tensorrA   rB   )rM   r
   r   rn   ÚmeanÚstds         r   r[   Ú"GeneralizedRCNNTransform.normalize    s�   € Ø×&Ñ&×(Ñ(Üð"Ø"'§+¡+ ¨hð8óð ð Ÿ™ U§\¡\ˆvÜ�Š˜tŸ™°eÑKˆÜ�oŠo˜dŸn™n°EÑIˆØšQ  d˜]Ñ+Ñ+¨s²1°d¸D°=Ñ/AÑAÐAr   rc   c           
      ó¨   • [        [        R                  " S5      R                  S[	        [        U5      5      5      R                  5       5      nX   $ )z|
Implements `random.choice` via torch ops, so it can be compiled with
TorchScript and we use PyTorch's RNG (not native RNG)
r   g        )Úintr(   ÚemptyÚuniform_r1   rX   r2   )rM   rc   Úindexs      r   Útorch_choiceÚ%GeneralizedRCNNTransform.torch_choice«   s;   € ô
 ”E—K’K “N×+Ñ+¨C´´s¸1³v³Ó?×DÑDÓFÓGˆØ‰xˆr   r   c                 ó¸  • UR                   SS  u  p4U R                  (       a0  U R                  (       a  X4$ U R                  U R                  5      nOU R                  S   n[        XU R                  X R                  5      u  pUc  X4$ US   n[        XcU4UR                   SS  5      nXbS'   SU;   a$  US   n[        XsU4UR                   SS  5      nXrS'   X4$ )Nr   éÿÿÿÿÚboxesÚ	keypoints)
r,   ÚtrainingrF   rz   r7   r=   r8   r   Úresize_boxesÚresize_keypoints)rM   r
   r   ÚhÚwr    Úbboxr   s           r   r\   ÚGeneralizedRCNNTransform.resize³   sß   € ð
 �{‰{˜2˜3Ð‰ˆØ�=�=Ø× × Ø�}Ð$Ø×$Ñ$ T§]¡]Ó3‰Dà—=‘= Ñ$ˆDÜ/°¸T¿]¹]ÈF×TcÑTcÓd‰ˆà‰>Ø�=Ð à�g‰ˆÜ˜D a &¨%¯+©+°b°cÐ*:Ó;ˆØˆw‰à˜&Ó Ø˜{Ñ+ˆIÜ(¨¸°F¸E¿K¹KÈÈÐ<LÓMˆIØ"+�;ÑØˆ}Ðr   c                 óP  • / n[        US   R                  5       5       H•  n[        R                  " [        R                  " U Vs/ s H  oUR
                  U   PM     sn5      R                  [        R                  5      5      R                  [        R                  5      nUR                  U5        M—     Un[        R                  " US   R                  [        R                  5      U-  5      U-  R                  [        R                  5      US'   [        R                  " US   R                  [        R                  5      U-  5      U-  R                  [        R                  5      US'   [        U5      n/ nU H‚  n[        U[        UR
                  5      5       V	V
s/ s H	  u  pšXš-
  PM     nn	n
[        R                  R                  R                  USUS   SUS   SUS   45      nUR                  U5        M„     [        R                  " U5      $ s  snf s  sn
n	f )Nr   r   rT   )rW   rY   r(   r0   Ústackr,   r.   r/   Úint64rV   ÚceilrK   Úzipr   r3   Úpad)rM   rP   rC   r8   rd   r_   Ú
max_size_iÚstrideÚpadded_imgsÚs1Ús2ÚpaddingÚ
padded_imgs                r   Ú_onnx_batch_imagesÚ+GeneralizedRCNNTransform._onnx_batch_imagesÐ   sª  € àˆÜ�v˜a‘y—}‘}“Ö'ˆAÜŸš¤5§;¢;ÉÓ/OÊÀ·	±	¸!´ÉÑ/OÓ#P×#SÑ#SÔTY×TaÑTaÓ#bÓc×fÑfÔgl×grÑgrÓsˆJØ�O‰O˜JÖ'ñ (ð  ˆÜ—z’z 8¨A¡;§>¡>´%·-±-Ó#@ÀFÑ"JÓKÈfÑT×XÑXÔY^×YdÑYdÓeˆ�‰Ü—z’z 8¨A¡;§>¡>´%·-±-Ó#@ÀFÑ"JÓKÈfÑT×XÑXÔY^×YdÑYdÓeˆ�‰Ü˜“?ˆð
 ˆÛˆCÜ/2°8¼UÀ3Ç9Á9Ó=MÔ/NÔOÒ/N¡V R˜œÑ/NˆGÑOÜŸ™×,Ñ,×0Ñ0°°q¸'À!¹*ÀaÈÐQRÉÐUVÐX_Ð`aÑXbÐ6cÓdˆJØ×Ñ˜zÖ*ñ ô
 �{Š{˜;Ó'Ð'ùò! 0Pùó Ps   ÁHÆ&H"Úthe_listc                 óp   • US   nUSS   H'  n[        U5       H  u  pE[        X$   U5      X$'   M     M)     U$ )Nr   r   )Ú	enumerater0   )rM   r–   ÚmaxesÚsublistry   r2   s         r   Úmax_by_axisÚ$GeneralizedRCNNTransform.max_by_axisæ   sC   € Ø˜‘ˆØ  “|ˆGÜ(¨Ö1‘�Ü" 5¡<°Ó6�“ó  2ñ $ð ˆr   c                 óâ  • [         R                  " 5       (       a  U R                  X5      $ U R                  U Vs/ s H  n[	        UR
                  5      PM     sn5      n[        U5      n[	        U5      n[        [        R                  " [        US   5      U-  5      U-  5      US'   [        [        R                  " [        US   5      U-  5      U-  5      US'   [        U5      /U-   nUS   R                  US5      n[        UR
                  S   5       HK  nX   nXxS UR
                  S   2S UR
                  S   2S UR
                  S   24   R                  U5        MM     U$ s  snf )Nr   rT   r   )r&   r'   r”   r›   rJ   r,   r1   rv   ÚmathrŠ   rX   Únew_fullrW   Úcopy_)	rM   rP   rC   r_   r8   rŽ   Úbatch_shapeÚbatched_imgsrd   s	            r   r]   Ú%GeneralizedRCNNTransform.batch_imagesí   sF  € Ü×"Ò"×$Ñ$ð ×*Ñ*¨6ÓBÐBà×#Ñ#ÁÓ$GÂ¸¤T¨#¯)©)¦_ÁÑ$GÓHˆÜ�~Ó&ˆÜ˜“>ˆÜœ$Ÿ)š)¤E¨(°1©+Ó$6¸Ñ$?Ó@À6ÑIÓJˆ�‰Üœ$Ÿ)š)¤E¨(°1©+Ó$6¸Ñ$?Ó@À6ÑIÓJˆ�‰ä˜6“{�m hÑ.ˆØ˜a‘y×)Ñ)¨+°qÓ9ˆÜ�|×)Ñ)¨!Ñ,Ö-ˆAØ‘)ˆCØ˜N˜cŸi™i¨™l˜N¨N¨c¯i©i¸©l¨N¸N¸c¿i¹iÈ¹l¸NÐJÑK×QÑQÐRUÖVñ .ð Ðùò %Hs   »E,ÚresultÚimage_shapesÚoriginal_image_sizesc                 ó  • U R                   (       a  U$ [        [        XU5      5       H_  u  nu  pVnUS   n[        X†U5      nX�U   S'   SU;   a  US   n	[	        X˜U5      n	X‘U   S'   SU;   d  MG  US   n
[        X¦U5      n
X¡U   S'   Ma     U$ )Nr~   r%   r   )r€   r˜   r‹   r�   r	   r‚   )rM   r¤   r¥   r¦   rd   ÚpredÚim_sÚo_im_sr~   r%   r   s              r   ÚpostprocessÚ$GeneralizedRCNNTransform.postprocess  s¬   € ð �=�=ØˆMÜ'0´°VÐK_Ó1`Ö'aÑ#ˆAÑ#�˜FØ˜‘MˆEÜ  ¨fÓ5ˆEØ!&�1‰I�gÑØ˜$‹Ø˜W™�Ü,¨U¸6ÓB�Ø%*�q‘	˜'Ñ"Ø˜dÕ"Ø  Ñ-�	Ü,¨Y¸fÓE�	Ø)2�q‘	˜+Ó&ñ (bð ˆr   c                 óÊ   • U R                   R                   S3nSnX SU R                   SU R                   S3-  nX SU R                   SU R
                   S3-  nUS	-  nU$ )
NÚ(z
    zNormalize(mean=z, std=Ú)zResize(min_size=z, max_size=z, mode='bilinear')z
))rN   Ú__name__rA   rB   r7   r8   )rM   Úformat_stringÚ_indents      r   Ú__repr__Ú!GeneralizedRCNNTransform.__repr__  sy   € ØŸ>™>×2Ñ2Ð3°1Ð5ˆØˆØ˜9 O°D·O±OÐ3DÀFÈ4Ï>É>ÐJZÐZ[Ð\Ñ\ˆØ˜9Ð$4°T·]±]°OÀ;ÈtÏ}É}ÈoÐ]oÐpÑpˆØ˜ÑˆØÐr   )rF   r   rA   rB   r8   r7   rC   )é    Nr   )rµ   )r°   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rv   rJ   r1   r   rK   r   rH   r   ÚdictÚstrr   rj   r[   rz   r\   r(   r)   Úunusedr”   r›   r]   r«   r³   Ú__static_attributes__Ú__classcell__)rN   s   @r   r?   r?   V   s,  ø† ñ	ð" !Ø04ñ>àð>ð ð>ð ˜‘Kð	>ð
 ˜‘;ð>ð ð>ð ˜U 3¨ 8™_Ñ-ð>ð ÷>ð >ð, RVñ'#Ø˜6‘lð'#Ø-5°d¸4ÀÀVÀÑ;LÑ6MÑ-Nð'#à	ˆy˜( 4¨¨S°&¨[Ñ(9Ñ#:Ñ;Ð;Ñ	<õ'#ðR	B˜vð 	B¨&ô 	Bð˜d 3™ið ¨Cô ð /3ñàðð ˜˜c 6˜kÑ*Ñ+ðð 
ˆv�x  S¨& [Ñ 1Ñ2Ð2Ñ	3õ	ð: ‡Y�Y×Ññ(¨¨f©ð (Àsð (ÐTZô (ó ð(ð* D¨¨c©¡Oð ¸¸S¹	ô ñ 4¨¡<ð Àð Èfõ ð(à�T˜#˜v˜+Ñ&Ñ'ðð ˜5  c ™?Ñ+ðð # 5¨¨c¨¡?Ñ3ð	ð
 
ˆd�3˜�;ÑÑ	 ôð,˜#÷ ò r   r?   r   Úoriginal_sizeÚnew_sizec                 ó*  • [        X!5       VVs/ s Hb  u  p4[        R                  " U[        R                  U R                  S9[        R                  " U[        R                  U R                  S9-  PMd     nnnUu  pgU R                  5       n[        R                  R                  5       (       aA  US S 2S S 2S4   U-  n	US S 2S S 2S4   U-  n
[        R                  " XšUS S 2S S 2S4   4SS9nU$ US==   U-  ss'   US==   U-  ss'   U$ s  snnf )Nrm   r   r   rT   ©rY   ).r   ).r   )	r‹   r(   r+   r/   rn   ÚcloneÚ_CÚ_get_tracing_staterˆ   )r   r¿   rÀ   ÚsÚs_origÚratiosÚratio_hÚratio_wÚresized_dataÚresized_data_0Úresized_data_1s              r   r‚   r‚      s  € ô ˜XÔ5ôò 6‰IˆAô 	�Š�QœeŸm™m°I×4DÑ4DÑEÜ
�,Š,�v¤U§]¡]¸9×;KÑ;KÑ
Lô	Má5ð ñ ð
 Ñ€GØ—?‘?Ó$€LÜ‡x�x×"Ñ"×$Ñ$Ø%¢aª¨A gÑ.°Ñ8ˆØ%¢aª¨A gÑ.°Ñ8ˆÜ—{’{ NÀLÒQRÒTUÐWXÐQXÑDYÐ#ZÐ`aÑbˆð Ðð 	�VÓ Ñ'ÓØ�VÓ Ñ'ÓØÐùós   �A)Dr~   c                 ó€  • [        X!5       VVs/ s Hb  u  p4[        R                  " U[        R                  U R                  S9[        R                  " U[        R                  U R                  S9-  PMd     nnnUu  pgU R                  S5      u  p‰p«X‡-  nX§-  n
X–-  n	X¶-  n[        R                  " X‰X«4SS9$ s  snnf )Nrm   r   rÂ   )r‹   r(   r+   r/   rn   Úunbindrˆ   )r~   r¿   rÀ   rÆ   rÇ   rÈ   Úratio_heightÚratio_widthÚxminÚyminÚxmaxÚymaxs               r   r�   r�   2  s·   € ô ˜XÔ5ôò 6‰IˆAô 	�Š�QœeŸm™m°E·L±LÑAÜ
�,Š,�v¤U§]¡]¸5¿<¹<Ñ
Hô	Iá5ð ñ ð
 !'Ñ€LØ"Ÿ\™\¨!›_Ñ€D�àÑ€DØÑ€DØÑ€DØÑ€DÜ�;Š;˜ DÐ/°QÑ7Ð7ùós   �A)B:)NN)rž   Útypingr   r   r(   r&   r   r   ri   r   Ú	roi_headsr	   r)   r¼   r   r1   r   rv   rº   r»   rK   r=   ÚModuler?   rJ   r‚   r�   r   r   r   Ú<module>rÙ      sS  ðÛ ß  ã Û ß å !Ý +ð ‡�×Ñð1˜6ð 1 fó 1ó ð1ð ‡�×Ñð�vð  %ó ó ðð +/Ø,0ñ:Øð:àð:ð ð:ð �T˜#˜v˜+Ñ&Ñ'ð	:ð
 ˜˜s C˜x™Ñ)ð:ð ˆ6�8˜D  f Ñ-Ñ.Ð.Ñ/õ:ôzG˜rŸy™yô GðT ð °t¸C±yð ÈDÐQTÉIð ÐZ`ô ð$8˜ð 8¨t°C©yð 8ÀDÈÁIð 8ÐRXõ 8r   