
    QЦi.              
       p   S SK JrJrJrJr  S SKrS SKJrJr  SS\\   S\S\4S jjr	S\\   S\4S	 jr
S\\\\   4   4S
 jr SS\R                  S\\\      S\\\   \\   4   4S jjrS\S\4S jrS\S\4S jrS\R                  S\R                  S\\R                  \R                  4   4S jrg)    )ListOptionalTupleUnionN)nnTensortensorsdimreturnc                 V    [        U 5      S:X  a  U S   $ [        R                  " X5      $ )z_
Efficient version of torch.cat that avoids a copy if there is only a single element in a list
   r   )lentorchcat)r	   r
   s     U/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torchvision/ops/_utils.py_catr      s)     7|qqz99W""    boxesc           	         [        U  Vs/ s H  oPM     snSS9n/ n[        U 5       H4  u  pAUR                  [        R                  " US S 2S S24   U5      5        M6     [        USS9n[        R
                  " XR/SS9nU$ s  snf )Nr   r
   r   )r   	enumerateappendr   	full_liker   )r   bconcat_boxestempiidsroiss          r   convert_boxes_to_roi_formatr       s    E*EqE*2LD% EOOAa!eHa01 !
t
C99c(a0DK +s   Bc                 `   [        U [        [        45      (       a3  U  H,  n[        R                  " UR                  S5      S:H  S5        M.     g [        U [        R                  5      (       a*  [        R                  " U R                  S5      S:H  S5        g [        R                  " SS5        g )Nr      zNThe shape of the tensor in the boxes list is not correct as List[Tensor[L, 4]]   z5The boxes tensor shape is not correct as Tensor[K, 5]Fz>boxes is expected to be a Tensor[L, 5] or a List[Tensor[K, 4]])
isinstancelisttupler   _assertsizer   )r   _tensors     r   check_roi_boxes_shaper*      s    %$''GMMQ1$&v  	 
E5<<	(	(ejjmq(*ab  	e]^
r   modelnorm_classesc                    U(       du  [         R                  R                  R                  [         R                  [         R
                  [         R                  R                  R                  [         R                  /nU H1  n[        U[         R                  5      (       a  M$  [        SU S35      e   [        U5      n/ n/ nU R                  5        H  n[        UR                  5       S 5      (       a'  UR                  S UR!                  SS9 5       5        MI  [#        Xc5      (       a(  UR                  S UR!                  5        5       5        M  UR                  S UR!                  5        5       5        M     XE4$ )NzClass z  is not a subclass of nn.Module.c              3   J   #    U  H  oR                   (       d  M  Uv   M     g 7fNrequires_grad.0ps     r   	<genexpr>-split_normalization_params.<locals>.<genexpr>@   s     _+Ka+K   #	#F)recursec              3   J   #    U  H  oR                   (       d  M  Uv   M     g 7fr/   r0   r2   s     r   r5   r6   B   s     Q*=Qqq*=r7   c              3   J   #    U  H  oR                   (       d  M  Uv   M     g 7fr/   r0   r2   s     r   r5   r6   D   s     R+>a//+>r7   )r   modules	batchnorm
_BatchNorm	LayerNorm	GroupNorminstancenorm_InstanceNormLocalResponseNorm
issubclassModule
ValueErrorr&   nextchildrenextend
parametersr$   )r+   r,   tclassesnorm_paramsother_paramsmodules          r   split_normalization_paramsrO   )   s)    JJ  ++LLLLJJ##11  
 !RYY''vaS(HIJJ  L!GKL--/!4((_6+<+<U+<+K__((Q&*;*;*=QQR6+<+<+>RR " $$r   rJ   c                 ,   U R                  5       (       a@  U R                  [        R                  [        R                  4;   a  U $ U R                  5       $ U R                  [        R                  [        R                  4;   a  U $ U R                  5       $ r/   )	is_floating_pointdtyper   float32float64floatint32int64intrJ   s    r   _upcastrZ   H   sc    GGu}}==qL1779LGGU[[99qFquuwFr   c                     U R                   [        R                  [        R                  4;  a  U R	                  5       $ U $ r/   )rR   r   rS   rT   rU   rY   s    r   _upcast_non_floatr\   P   s,    wwu}}emm44wwyHr   boxes1boxes2c                    U R                  SS9u  p#pEUR                  SS9u  pgp[        R                  " X&5      n
[        R                  " X75      n[        R                  " XH5      n[        R                  " XY5      n[        R                  " U5      nX:  X:  -  nX   X   -
  X   X   -
  -  X'   XB-
  XS-
  -  X-
  X-
  -  -   U-
  nUU4$ )Nr   )unbindr   maxmin
zeros_like)r]   r^   x1y1x2y2x1gy1gx2gy2gxkis1ykis1xkis2ykis2intsctkmaskunionks                    r   _loss_inter_unionrt   W   s    
 ]]r]*NBB2.Cc IIbEIIbEIIbEIIbEr"GMem,D[5;.5;3LMGMg"'"ciCI%>>HFF?r   )r   r/   )typingr   r   r   r   r   r   r   rX   r   r    r*   rD   typerO   rZ   r\   rt    r   r   <module>rx      s   / /  #$v, #S # #tF|  
vtF|';!< 
 <@%99%$,T$Z$8%
4<f%&%>Gv G& G F LLLL 5<<%&r   