
    %`i/                        d dl Z d dlmZmZ d dlZd dlZd dlmZmZ ddlm	Z	 ddl
mZ ej        j        dedefd	            Zej        j        d
edefd            Z	 	 ddedededeeeef                  deeeef                  deeeeeef                  f         fdZ G d dej                  Zdedee         dee         defdZdedee         dee         defdZdS )    N)AnyOptional)nnTensor   )	ImageList)paste_masks_in_imageimagereturnc                 H    ddl m} |                    |           dd          S )Nr   )	operators)
torch.onnxr   shape_as_tensor)r
   r   s     z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchvision/models/detection/transform.py_get_shape_onnxr      s1    $$$$$$$$U++BCC00    vc                     | S N )r   s    r   _fake_cast_onnxr      s	     Hr   self_min_sizeself_max_sizetarget
fixed_sizec                    t          j                    rt          |           }nOt          j                                        r"t          j        | j        dd                    }n| j        dd          }d }d }d }||d         |d         g}n<t          j                                        st          j                    rt          j        |          	                    t          j
                  }	t          j        |          	                    t          j
                  }
t          |          }t          |          }t          j        ||	z  ||
z            }t          j                    rt          |          }nI|                                }n4t          |          }	t          |          }
t          ||	z  ||
z            }d}t          j        j                            | d          ||d|d          d         } || |fS d	|v rm|d	         }t          j        j                            |d d d f                                         |||
          d d df                                         }||d	<   | |fS )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=      sm       $"5))				!	! $<BCC 011;rss# $D$(L-11z!}-9!!## 	S{'>'@'@ 	Sy**--EM-BBHy**--EM-BBH#M22O#M22OIo8/H:TUUE&(( ,.u55$zz|| 8}}H8}}H}x79QRRL!%H++d!5 ,   	E ~f}&gx"..DM!!<`v / 
 

!!Q$ 	 w&=r   c                       e Zd ZdZ	 	 ddededee         dee         ded	eeeef                  d
e	f fdZ
	 d dee         deeeeef                           deeeeeeef                           f         fdZdedefdZdee         defdZ	 d dedeeeef                  deeeeeef                  f         fdZej        j        d!dee         dedefd            Zdeee                  dee         fdZd!dee         dedefdZdeeeef                  deeeef                  deeeef                  deeeef                  fdZdefdZ xZS )"GeneralizedRCNNTransformah  
    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
        Nr7   r8   
image_mean	image_stdsize_divisibler   kwargsc                    t                                                       t          |t          t          f          s|f}|| _        || _        || _        || _        || _	        || _
        |                    dd          | _        d S )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   z!GeneralizedRCNNTransform.__init__b   s     	(T5M22 	# {H  $",$"JJ~u==r   imagestargetsr   c                    d |D             }|?g }|D ]8}i }|                                 D ]
\  }}|||<   |                    |           9|}t          t          |                    D ]}||         }	|||         nd }
|	                                dk    rt          d|	j                   |                     |	          }	|                     |	|
          \  }	}
|	||<   ||
|
||<   d |D             }| 	                    || j
                  }g }|D ]N}t          j        t          |          dk    d|            |                    |d         |d	         f           Ot          ||          }||fS )
Nc                     g | ]}|S r   r   .0imgs     r   
<listcomp>z4GeneralizedRCNNTransform.forward.<locals>.<listcomp>z   s    (((##(((r      zFimages is expected to be a list of 3d tensors of shape [C, H, W], got c                 ,    g | ]}|j         d d         S )r   Nr,   rS   s     r   rV   z4GeneralizedRCNNTransform.forward.<locals>.<listcomp>   s"    888#sy~888r   )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   rO   rP   targets_copytdatakr   ir
   target_indeximage_sizesimage_sizes_list
image_size
image_lists                  r   forwardz GeneralizedRCNNTransform.forwardw   s    )((((
 57L * **,GGII    DAqDGG##D))))"Gs6{{## 
	* 
	*A1IE)0)<71::$Lyy{{a !wjoju!w!wxxxNN5))E"&++e\"B"BE<F1I"|'?)
88888""6$:M"NN24% 	D 	DJMJ1$l`jll   ##Z]JqM$BCCCCv'788
7""r   r
   c                 "   |                                 st          d|j         d          |j        |j        }}t	          j        | j        ||          }t	          j        | j        ||          }||d d d d f         z
  |d d d d f         z  S )NzOExpected input images to be of floating type (in range [0, 1]), but found type z insteadr   device)is_floating_point	TypeErrorr   rr   r(   	as_tensorrA   rB   )rM   r
   r   rr   meanstds         r   ra   z"GeneralizedRCNNTransform.normalize   s    &&(( 	8"'+8 8 8   U\vteFKKKodnE&IIIQQQd]++s111dD=/AAAr   rh   c           
          t          t          j        d                              dt	          t          |                                                                        }||         S )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   r^   r2   )rM   rh   indexs      r   torch_choicez%GeneralizedRCNNTransform.torch_choice   sJ    
 EKNN++Cs1vv??DDFFGGxr   r   c                    |j         dd          \  }}| j        r&| j        r||fS |                     | j                  }n| j        d         }t          ||| j        || j                  \  }}|||fS |d         }t          |||f|j         dd                    }||d<   d|v r-|d         }t          |||f|j         dd                    }||d<   ||fS )Nr   boxes	keypoints)
r,   trainingrF   r}   r7   r=   r8   r   resize_boxesresize_keypoints)rM   r
   r   hwr    bboxr   s           r   rb   zGeneralizedRCNNTransform.resize   s   
 {2331= 	%  %f}$$$T]33DD=$D/tT]FTXTcddv>&= gD1a&%+bcc*:;;w&  {+I(QFEK<LMMI"+F;f}r   c                 &  
 g }t          |d                                                   D ]
t          j        t          j        
fd|D                                           t          j                                                t          j                  }|                    |           |}t          j	        |d                             t          j                  |z            |z                      t          j                  |d<   t          j	        |d                             t          j                  |z            |z                      t          j                  |d<   t          |          }g }|D ]}d t          |t          |j                            D             }t          j        j                            |d|d         d|d         d|d         f          }	|                    |	           t          j        |          S )Nr   c                 *    g | ]}|j                  S r   rY   )rT   rU   ri   s     r   rV   z?GeneralizedRCNNTransform._onnx_batch_images.<locals>.<listcomp>   s    /O/O/O	!/O/O/Or   r   rZ   c                     g | ]
\  }}||z
  S r   r   )rT   s1s2s      r   rV   z?GeneralizedRCNNTransform._onnx_batch_images.<locals>.<listcomp>   s     OOOVRROOOr   )r]   r_   r(   r0   stackr.   r/   int64r\   ceilrK   zipr,   r   r3   pad)rM   rO   rC   r8   
max_size_istridepadded_imgsrU   padding
padded_imgri   s             @r   _onnx_batch_imagesz+GeneralizedRCNNTransform._onnx_batch_images   s   vay}}'' 	( 	(A5;/O/O/O/O/O/O/O#P#P#S#STYTa#b#bccffglgrssJOOJ''''z8A;>>%-#@#@F"JKKfTXXY^Ydeez8A;>>%-#@#@F"JKKfTXXY^Ydee??
  	+ 	+COOs8U39=M=M/N/NOOOG,00q'!*aQRUVX_`aXb6cddJz****{;'''r   the_listc                     |d         }|dd          D ]0}t          |          D ]\  }}t          ||         |          ||<   1|S )Nr   r   )	enumerater0   )rM   r   maxessublistr|   r2   s         r   max_by_axisz$GeneralizedRCNNTransform.max_by_axis   s`    | 	7 	7G(11 7 7t"5<66e7r   c                    t          j                    r|                     ||          S |                     d |D                       }t	          |          }t          |          }t          t          j        t	          |d                   |z            |z            |d<   t          t          j        t	          |d                   |z            |z            |d<   t          |          g|z   }|d         
                    |d          }t          |j        d                   D ]P}||         }||d |j        d         d |j        d         d |j        d         f                             |           Q|S )Nc                 6    g | ]}t          |j                  S r   )rJ   r,   rS   s     r   rV   z9GeneralizedRCNNTransform.batch_images.<locals>.<listcomp>   s     $G$G$GT#)__$G$G$Gr   r   rZ   r   )r&   r'   r   r   r1   rJ   ry   mathr   r^   new_fullr]   r,   copy_)	rM   rO   rC   r8   r   batch_shapebatched_imgsri   rU   s	            r   rc   z%GeneralizedRCNNTransform.batch_images   sg   "$$ 	C **6>BBB##$G$G$G$G$GHH~&&>>$)E(1+$6$6$?@@6IJJ$)E(1+$6$6$?@@6IJJ6{{mh.ay))+q99|)!,-- 	W 	WA)CNcilNNcilNNcilNJKQQRUVVVVr   resultimage_shapesoriginal_image_sizesc                 P   | j         r|S t          t          |||                    D ]}\  }\  }}}|d         }t          |||          }|||         d<   d|v r$|d         }	t	          |	||          }	|	||         d<   d|v r$|d         }
t          |
||          }
|
||         d<   ~|S )Nr   r%   r   )r   r   r   r   r	   r   )rM   r   r   r   ri   predim_so_im_sr   r%   r   s              r   postprocessz$GeneralizedRCNNTransform.postprocess  s     = 	M'0V\K_1`1`'a'a 	3 	3#A#dFME f55E!&F1Ig$W,UE6BB%*q	'"d"" -	,YfEE	)2q	+&r   c                     | j         j         d}d}|| d| j         d| j         dz  }|| d| j         d| j         dz  }|d	z  }|S )
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__z!GeneralizedRCNNTransform.__repr__  sx    >2555G\\DO\\4>\\\\GppT]ppt}ppppr   )r@   Nr   )r@   )r   
__module____qualname____doc__ry   rJ   r1   r   rK   r   rH   r   dictstrr   ro   ra   r}   rb   r(   r)   unusedr   r   rc   r   r   __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 	B 	B 	Bd3i C     /3  c6k*+ 
vxS&[ 122	3	   : Y( (f (s (TZ ( ( ( (*DcO S	     4<  f    (T#v+&' 5c?+ #5c?3	
 
d3;	    ,#        r   r?   r   original_sizenew_sizec                      fdt          ||          D             }|\  }}                                 }t          j                                        rK|d d d d df         |z  }|d d d d df         |z  }t          j        |||d d d d df         fd          }n |dxx         |z  cc<   |dxx         |z  cc<   |S )Nc                     g | ]R\  }}t          j        |t           j        j                   t          j        |t           j        j                   z  SS rq   r(   r+   r/   rr   )rT   ss_origr   s      r   rV   z$resize_keypoints.<locals>.<listcomp>!  sd        Av 	QemI4DEEE
,vU]9;K
L
L
L	M  r   r   r   rZ   r_   ).r   ).r   )r   cloner(   _C_get_tracing_stater   )	r   r   r   ratiosratio_hratio_wresized_dataresized_data_0resized_data_1s	   `        r   r   r      s       X}55  F
 GW??$$Lx""$$ (%aaaAg.8%aaaAg.8{NNLQRQRQRTUTUTUWXQXDY#Z`abbbV'V'r   r   c                       fdt          ||          D             }|\  }}                     d          \  }}}}	||z  }||z  }||z  }|	|z  }	t          j        ||||	fd          S )Nc                     g | ]R\  }}t          j        |t           j        j                   t          j        |t           j        j                   z  SS r   r   )rT   r   r   r   s      r   rV   z resize_boxes.<locals>.<listcomp>3  sb        Av 	QemELAAA
,vU]5<
H
H
H	I  r   r   r   )r   unbindr(   r   )
r   r   r   r   ratio_heightratio_widthxminyminxmaxymaxs
   `         r   r   r   2  s        X}55  F
 !'L+"\\!__D$d+D+D,D,D;dD$/Q7777r   )NN)r   typingr   r   r(   r&   r   r   rn   r   	roi_headsr	   r)   r   r   r1   r   ry   r   r   rK   r=   Moduler?   rJ   r   r   r   r   r   <module>r      s                                 ! ! ! ! ! ! + + + + + + 16 1f 1 1 1 1 v %     +/,0: ::: : T#v+&'	:
 sCx): 68Df-../: : : :zG G G G Gry G G GT tCy DQTI Z`    $8 8tCy 8DI 8RX 8 8 8 8 8 8r   