o
    )i.                  
   @   s   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dZ	d	ee defd
dZ
d	eeee f fddZ	ddejdeee  deee ee f fddZdedefddZdedefddZdejdejdeejejf fddZdS )    )ListOptionalTupleUnionN)nnTensortensorsdimreturnc                 C   s    t | dkr
| d S t| |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	    r   e/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torchvision/ops/_utils.py_cat   s   r   boxesc              	   C   sp   t dd | D dd}g }t| D ]\}}|t|d d d df | qt |dd}tj||gdd}|S )Nc                 S   s   g | ]}|qS r   r   ).0br   r   r   
<listcomp>   s    z/convert_boxes_to_roi_format.<locals>.<listcomp>r   r	   r   )r   	enumerateappendr   Z	full_liker   )r   Zconcat_boxestempir   ZidsZroisr   r   r   convert_boxes_to_roi_format   s   $r   c                 C   sh   t | ttfr| D ]}t|ddkd q	d S t | tjr,t| ddkd d S tdd d S )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   Z_assertsizer   )r   Z_tensorr   r   r   check_roi_boxes_shape   s   r"   modelnorm_classesc                 C   s   |st jjjt jt jt jjjt jg}|D ]}t	|t j
s$td| dqt|}g }g }|  D ]6}t| d rI|dd |jddD  q1t||r[|dd | D  q1|dd | D  q1||fS )	NzClass z  is not a subclass of nn.Module.c                 s       | ]}|j r|V  qd S NZrequires_gradr   pr   r   r   	<genexpr>@       z-split_normalization_params.<locals>.<genexpr>F)recursec                 s   r%   r&   r'   r(   r   r   r   r*   B   r+   c                 s   r%   r&   r'   r(   r   r   r   r*   D   r+   )r   modulesZ	batchnormZ
_BatchNormZ	LayerNormZ	GroupNormZinstancenormZ_InstanceNormZLocalResponseNorm
issubclassModule
ValueErrorr    nextchildrenextend
parametersr   )r#   r$   tclassesZnorm_paramsZother_paramsmoduler   r   r   split_normalization_params)   s*   
r8   r5   c                 C   sD   |   r| jtjtjfv r| S |  S | jtjtjfv r| S |  S r&   )	Zis_floating_pointdtyper   float32float64floatZint32Zint64intr5   r   r   r   _upcastH   s   r?   c                 C   s   | j tjtjfvr|  S | S r&   )r9   r   r:   r;   r<   r>   r   r   r   _upcast_non_floatP   s   r@   boxes1boxes2c                 C   s   | j dd\}}}}|j dd\}}}}	t||}
t||}t||}t||	}t|}||k||
k@ }|| |
|  || ||   ||< || ||  || |	|   | }||fS )Nr   )Zunbindr   maxminZ
zeros_like)rA   rB   x1y1Zx2y2Zx1gZy1gZx2gZy2gZxkis1Zykis1Zxkis2Zykis2ZintsctkmaskZunionkr   r   r   _loss_inter_unionW   s   
$$rJ   )r   r&   )typingr   r   r   r   r   r   r   r=   r   r   r"   r/   typer8   r?   r@   rJ   r   r   r   r   <module>   s.    


