
    kh.              
       ^   d dl mZmZmZmZ d dlZd dlmZmZ ddee   dedefdZ	dee   defd	Z
deeee   f   fd
Z	 ddej                  deee      deee   ee   f   fdZdedefdZdedefdZdej                  dej                  deej                  ej                  f   fdZy)    )ListOptionalTupleUnionN)nnTensortensorsdimreturnc                 T    t        |       dk(  r| d   S t        j                  | |      S )zg
    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     R/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/ops/_utils.py_catr      s+     7|qqz99Wc""    boxesc           	         t        | D cg c]  }| c}d      }g }t        |       D ]3  \  }}|j                  t        j                  |d d d df   |             5 t        |d      }t        j
                  ||gd      }|S c c}w )Nr   r
   r   )r   	enumerateappendr   	full_liker   )r   bconcat_boxestempiidsroiss          r   convert_boxes_to_roi_formatr       s    E*q*2LD%  21EOOAa!eHa012
t
C99c<(a0DK +s   	Bc                 B   t        | t        t        f      r0| D ]*  }t        j                  |j                  d      dk(  d       , y t        | t        j                        r)t        j                  | j                  d      dk(  d       y t        j                  dd       y )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                    |sut         j                  j                  j                  t         j                  t         j
                  t         j                  j                  j                  t         j                  g}|D ]+  }t        |t         j                        rt        d| d       t        |      }g }g }| j                         D ]  }t        |j                         d       r)|j                  d |j!                  d      D               Ft#        ||      r'|j                  d |j!                         D               y|j                  d |j!                         D                ||fS )NzClass z  is not a subclass of nn.Module.c              3   :   K   | ]  }|j                   s|  y wNrequires_grad.0ps     r   	<genexpr>z-split_normalization_params.<locals>.<genexpr>@   s     _aq_   F)recursec              3   :   K   | ]  }|j                   s|  y wr/   r0   r2   s     r   r5   z-split_normalization_params.<locals>.<genexpr>B   s     QQqQr6   c              3   :   K   | ]  }|j                   s|  y wr/   r0   r2   s     r   r5   z-split_normalization_params.<locals>.<genexpr>D   s     Ra!//Rr6   )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_paramsrN   )   s2    JJ  ++LLLLJJ##11  
  K!RYY'vaS(HIJJK L!GKL--/ S!4(_6+<+<U+<+K__(Q&*;*;*=QQR6+<+<+>RRS $$r   rI   c                    | j                         r>| j                  t        j                  t        j                  fv r| S | j                         S | j                  t        j                  t        j                  fv r| S | j                         S r/   )	is_floating_pointdtyper   float32float64floatint32int64intrI   s    r   _upcastrY   H   s`    GGu}}==qL1779LGGU[[99qFquuwFr   c                 ~    | j                   t        j                  t        j                  fvr| j	                         S | S r/   )rQ   r   rR   rS   rT   rX   s    r   _upcast_non_floatr[   P   s,    wwu}}emm44wwyHr   boxes1boxes2c                    | j                  d      \  }}}}|j                  d      \  }}}}	t        j                  ||      }
t        j                  ||      }t        j                  ||      }t        j                  ||	      }t        j                  |      }||kD  ||
kD  z  }||   |
|   z
  ||   ||   z
  z  ||<   ||z
  ||z
  z  ||z
  |	|z
  z  z   |z
  }||fS )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_unionrs   W   s    
 ]]r]*NBB2.Cc3 IIb#EIIb#EIIb#EIIb#Er"GEMeem,D4[5;.5;t3LMGDM2g"r'"cCiC#I%>>HFF?r   )r   r/   )typingr   r   r   r   r   r   r   rW   r   r    r*   rC   typerN   rY   r[   rs    r   r   <module>rw      s   / /  #$v, #S # #tF|  
vtF|';!< 
 <@%99%$,T$Z$8%
4<f%&%>Gv G& G F LLLL 5<<%&r   