
    h/                        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     ^/var/www/auris/envauris/lib/python3.13/site-packages/torchvision/models/detection/transform.py_get_shape_onnxr      s    $$$U+BC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XS	'   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)				!	!<<BC 01;;rs# $D$(L-11z!}-99!!##{'>'>'@'@yy*--EMM-BHyy*--EMM-BH#M2O#M2OIIo8/:TUE&&((.u5$zz| 8}H8}H}79QRL!%HH++d!5 ,  	E ~}&gxx""..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$ )"GeneralizedRCNNTransformV   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     	(T5M22 {H  $",$"JJ~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  pxXU'   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                  X5      u  pXU	'   Uc  Mi  Uc  Mn  XU	'   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X4$ 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    "((##(
 57L*,GGIDAG &##D)	 
 #Gs6{#AIE)0)<7:$Lyy{a #ijojujuiv!wxxNN5)E"&++e"BE1I"|'?)
 $ 288#yy~8""6:M:M"N24%JMMJ1$_`j_kl ##Z]JqM$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oodnnEIQd]++s1dD=/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;    
 EKKN++Cs1v?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    
 {{23==  }$$$T]]3D==$D/T]]FTcTcd>= gDa&%++bc*:;w& {+I(FEKK<LMI"+;}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  pX-
  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   vay}}'A5;;/O		!/O#P#S#STYTaTa#bcffglgrgrsJOOJ' (  zz8A;>>%--#@F"JKfTXXY^YdYdezz8A;>>%--#@F"JKfTXXY^YdYde?
 C/28U399=M/NO/NVR/NGO,,00q'!*aQRUVX_`aXb6cdJ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{mh.ay))+q9|))!,-A)CNciilNNciilNNciilNJKQQRU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[        XU5      nXU   S'   SU;   a  US   n	[	        XU5      n	XU   S'   SU;   d  MG  US   n
[        XU5      n
XU   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VK_1`'a#A#FME f5E!&1Ig$W,U6B%*q	'"d" -	,YfE	)2q	+& (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3159ODOO3DF4>>JZZ[\\9$4T]]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	>
 ;> > U38_-> > >, RV'#6l'#-5d4V;L6M-N'#	y(4S&[(9#:;;	<'#R	Bv 	B& 	Bd3i C  /3 c6k*+ 
vxS&[ 122	3	: YY(f (s (TZ ( (*DcO S	 4<  f (T#v+&' 5c?+ #5c?3	
 
d3;	 ,#  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                  " XU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 6IA 	QemmI4D4DE
,,vU]]9;K;K
L	M5  
 G??$Lxx""$$%aAg.8%aAg.8{{NLQRTUWXQXDY#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  ppX-  nX-  n
X-  n	X-  n[        R                  " XX4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 6IA 	QemmELLA
,,vU]]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         ! + 16 1f 1 1 v %   +/,0::: : T#v+&'	:
 sCx): 68Df-../:zGryy GT tCy DQTI Z` $8 8tCy 8DI 8RX 8r   