
    ڧg                     J   d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZ d dlZd dlZd dlmZ ddlmZmZ ddlmZ ddlmZ d	d
lmZmZmZ d	dlmZ d	dlmZm Z  g dZ!e G d d                      Z"dee#         de#fdZ$dej%        de#de#deej%        e#f         fdZ&dej%        de#de#de#dej%        f
dZ'ej(        )                    d           ej(        )                    d            G d dej*                  Z+dej%        de#dej%        fdZ,d ej%        d!ej%        d"ee#e#e#f         d#ee#e#e#f         d$ej%        d%ej%        d&ej%        dej%        fd'Z-dej%        d(ej%        d)e.fd*Z/ej(        )                    d+           ej(        )                    d,            G d- d.ej*                  Z0 G d/ d0ej*                  Z1 G d1 d2ej*                  Z2 G d3 d4ej*                  Z3d5e	e"         d6e4d7e
e         d8e.d9ede3fd:Z5 G d; d<e          Z6 G d= d>e          Z7 e             e d?e6j8        f@          ddAdBd7e
e6         d8e.d9ede3fdC                        Z9 e             e d?e7j8        f@          ddAdBd7e
e7         d8e.d9ede3fdD                        Z:dS )E    N)	dataclass)partial)AnyCallableDictListOptionalSequenceTuple   )MLPStochasticDepth)VideoClassification)_log_api_usage_once   )register_modelWeightsWeightsEnum)_KINETICS400_CATEGORIES)_ovewrite_named_paramhandle_legacy_interface)MViTMViT_V1_B_Weights	mvit_v1_bMViT_V2_S_Weights	mvit_v2_sc                       e Zd ZU eed<   eed<   eed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   dS )	MSBlockConfig	num_headsinput_channelsoutput_channelskernel_q	kernel_kvstride_q	stride_kvN)__name__
__module____qualname__int__annotations__r        Y/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchvision/models/video/mvit.pyr   r      ss         NNN3iCy3iCyr,   r   sreturnc                     d}| D ]}||z  }|S N   r+   )r.   productvs      r-   _prodr5   &   s&    G  1Nr,   x
target_dim
expand_dimc                     |                                  }||dz
  k    r|                     |          } n||k    rt          d| j                   | |fS )Nr2   zUnsupported input dimension )dim	unsqueeze
ValueErrorshaper6   r7   r8   
tensor_dims       r-   
_unsqueezer@   -   s_    JZ!^##KK
##	z	!	!AAABBBj=r,   r?   c                 B    ||dz
  k    r|                      |          } | S r1   )squeezer>   s       r-   _squeezerC   6   s'    Z!^##IIj!!Hr,   r@   rC   c                        e Zd Z	 	 ddej        deej                 deej                 deddf
 fdZd	ej	        d
e
eeef         de
ej	        e
eeef         f         fdZ xZS )PoolNFpoolnorm
activationnorm_before_poolr/   c                     t                                                       || _        g }||                    |           ||                    |           |rt	          j        | nd | _        || _        d S )N)super__init__rF   appendnn
Sequentialnorm_actrI   )selfrF   rG   rH   rI   layers	__class__s         r-   rL   zPool.__init__A   s}     		MM$!MM*%%%28Bv..d 0r,   r6   thwc                    t          |dd          \  }}t          j        |dd          \  }}|                    dd          }|j        d d         \  }}}|                    ||z  |f|z                                             }| j        r| j        |                     |          }| 	                    |          }|j        dd          \  }}	}
|                    |||d                              dd          }t          j
        ||fd          }| j        s| j        |                     |          }t          |dd|          }|||	|
ffS )	N   r2   r2   r   )indicesr:   r   r:   )r@   torchtensor_split	transposer=   reshape
contiguousrI   rP   rF   catrC   )rQ   r6   rT   r?   class_tokenBNCTHWs              r-   forwardzPool.forwardR   sW   "1a++: +AtCCCQKK1'"1"+1aIIq1uaj3&''2244   	!T]%>a  A IIaLL'!""+1aIIaAr"",,Q22I{A&A...$ 	!)Ba  AQ1j))1a)|r,   )NF)r&   r'   r(   rN   Moduler	   boolrL   r[   Tensorr   r)   rh   __classcell__rS   s   @r-   rE   rE   @   s        
 +/!&1 1i1 ry!1 RY'	1
 1 
1 1 1 1 1 1" E#sC-,@ U5<Y^_bdgil_lYmKmEn        r,   rE   	embeddingdc                    | j         d         |k    r| S t          j                            |                     dd                              d          |d                              d                              dd          S )Nr   r2   linear)sizemode)r=   rN   
functionalinterpolatepermuter;   rB   )rn   ro   s     r-   _interpolaterw   l   s|    qQ 	!!a##--a00 	" 	
 	

 
	Ar,   attnqq_thwk_thw	rel_pos_h	rel_pos_w	rel_pos_tc                    |\  }}}	|\  }
}}t          dt          ||          z  dz
            }t          dt          |	|          z  dz
            }t          dt          ||
          z  dz
            }t          ||z  d          }t          ||z  d          }t          j        |          d d d f         |z  t          j        |          d d d f         d|z
  z   |z  z
  }t          ||	z  d          }t          |	|z  d          }t          j        |	          d d d f         |z  t          j        |          d d d f         d|z
  z   |z  z
  }t          |
|z  d          }t          ||
z  d          }t          j        |          d d d f         |z  t          j        |
          d d d f         d|
z
  z   |z  z
  }t	          ||          }t	          ||          }t	          ||          }||                                         }||                                         }||                                         }|j        \  }}}}|d d d d dd f                             |||||	|          } t          j        d| |          }!t          j        d| |          }"| 	                    dddddd	                              |||z  |z  |	z  |          } t          j
        | |                    dd                                        dd          }#|#                    ||||	||
          	                    dddddd	          }#|!d d d d d d d d d d d d d d f         |"d d d d d d d d d d d d d d f         z   |#d d d d d d d d d d d d d d f         z                       ||||z  |	z  |
|z  |z            }$| d d d d dd dd fxx         |$z  cc<   | S )
Nr   r2         ?zbythwc,hkc->bythwkzbythwc,wkc->bythwkr   r   rV      )r)   maxr[   arangerw   longr=   r^   einsumrv   matmulr]   view)%rx   ry   rz   r{   r|   r}   r~   q_tq_hq_wk_tk_hk_wdhdwdt	q_h_ratio	k_h_ratiodist_h	q_w_ratio	k_w_ratiodist_w	q_t_ratio	k_t_ratiodist_tRhRwRtrb   n_head_r:   r_qrel_h_qrel_w_qrel_q_trel_poss%                                        r-   _add_rel_posr   {   sJ    MCcMCc	QS#"	#	#B	QS#"	#	#B	QS#"	#	#B C#Is##IC#Is##I\#qqq$w')3u|C7H7Hqqq7QUX[^U^7_cl6llFC#Is##IC#Is##I\#qqq$w')3u|C7H7Hqqq7QUX[^U^7_cl6llFC#Is##IC#Is##I\#qqq$w')3u|C7H7Hqqq7QUX[^U^7_cl6llF Y++IY++IY++I	6;;==	!B	6;;==	!B	6;;==	!BAvq#
AAAqqq!""H+

ac3
<
<Cl/b99Gl/b99G
++aAq!Q
'
'
/
/QZ#5E5KS
Q
QCl3Q 2 233==aCCGll1fc3S99AA!Q1aQRSSG 	111aaaAAAtQQQ,-
!!!QQQ111aaatQQQ.
/	0
!!!QQQ111aaaD$.
/	0 gasS#)c/::	  	AAAqrr122'!Kr,   shortcutresidual_with_cls_embedc           	          |r|                      |           n.| d d d d dd d d fxx         |d d d d dd d d f         z  cc<   | S r1   )add_)r6   r   r   s      r-   _add_shortcutr      so     0	x	!!!QQQAAA+(111aaaQQQ;//Hr,   r   r   c                       e Zd Zdej        fdee         dedededee         dee         dee         d	ee         d
edededede	dej
        f         ddf fdZdej        deeeef         deej        eeeef         f         fdZ xZS )MultiscaleAttention        
input_size	embed_dim
output_dimr   r"   r#   r$   r%   residual_poolr   rel_pos_embeddropout
norm_layer.r/   Nc                    t                                                       || _        || _        || _        ||z  | _        dt          j        | j                  z  | _        |	| _	        |
| _
        t          j        |d|z            | _        t          j        ||          g}|dk    r)|                    t          j        |d                     t          j        | | _        d | _        t'          |          dk    st'          |          dk    rWd |D             }t)          t          j        | j        | j        |||| j        d	           || j                            | _        d | _        d | _        t'          |          dk    st'          |          dk    rd
 |D             }t)          t          j        | j        | j        |||| j        d	           || j                            | _        t)          t          j        | j        | j        |||| j        d	           || j                            | _        d | _        d | _        d | _        |rt7          |dd                    }t9          |          dk    r||d         z  n|}t9          |          dk    r||d         z  n|}dt7          ||          z  dz
  }d|d         z  dz
  }t          j        t=          j        || j                            | _        t          j        t=          j        || j                            | _        t          j        t=          j        || j                            | _        t          j         !                    | j        d           t          j         !                    | j        d           t          j         !                    | j        d           d S d S )Nr   r   r   Tinplacer2   c                 2    g | ]}t          |d z            S r   r)   ).0ry   s     r-   
<listcomp>z0MultiscaleAttention.__init__.<locals>.<listcomp>   s"    777Q!V777r,   F)stridepaddinggroupsbiasc                 2    g | ]}t          |d z            S r   r   )r   kvs     r-   r   z0MultiscaleAttention.__init__.<locals>.<listcomp>   s"    ;;;2#bAg,,;;;r,   r   r   {Gz?std)"rK   rL   r   r   r   head_dimmathsqrtscalerr   r   rN   LinearqkvrM   DropoutrO   projectpool_qr5   rE   Conv3dpool_kpool_vr|   r}   r~   r   len	Parameterr[   zerosinittrunc_normal_)rQ   r   r   r   r   r"   r#   r$   r%   r   r   r   r   r   rR   	padding_q
padding_kvrr   q_sizekv_sizespatial_dimtemporal_dimrS   s                         r-   rL   zMultiscaleAttention.__init__   s     	"$""i/DIdm444*'>$9YJ77#%9Z#D#D"ES==MM"*Wd;;;<<<}f-+/??Q%//A"5"577h777I	MM#%=   
4=)) DK ,0+/a5#3#3a#7#7;;;;;J	MM$&=   
4=)) DK 	MM$&=   
4=)) DK 261515 	<z!""~&&D,/MMA,=,=TXa[((4F.1)nnq.@.@dil**dGc&'222Q6Kz!},q0L\%+k4=*Q*QRRDN\%+k4=*Q*QRRDN\%+lDM*R*RSSDNG!!$.d!;;;G!!$.d!;;;G!!$.d!;;;;;	< 	<r,   r6   rT   c           	         |j         \  }}}|                     |                              ||d| j        | j                                      dd                              d          \  }}}| j        |                     ||          \  }}	n|}	| j        |                     ||          d         }| j	        | 	                    ||          \  }}t          j        | j        |z  |                    dd                    }
| j        2| j        +| j        $t!          |
|||	| j        | j        | j                  }
|
                    d          }
t          j        |
|          }| j        rt'          ||| j                   |                    dd                              |d| j                  }|                     |          }||fS )Nr   r2   r   rZ   r   rY   )r=   r   r^   r   r   r]   unbindr   r   r   r[   r   r   r|   r}   r~   r   softmaxr   r   r   r   r   )rQ   r6   rT   rb   rc   rd   ry   kr4   r{   rx   s              r-   rh   zMultiscaleAttention.forward   s   '1a((1++%%aAt~t}MMWWXY[\]]ddijdkk1a;"{{1c**HAuuE;"As##A&A;"[[C((FAs|DK!OQ[[A->->??>%$.*DIc D |||##Lq!! 	>!Q <===KK1%%aT_==LLOO#vr,   )r&   r'   r(   rN   	LayerNormr   r)   rj   floatr   ri   rL   r[   rk   r   rh   rl   rm   s   @r-   r   r      s]        /1|Z< Z<IZ< Z< 	Z<
 Z< s)Z< 9Z< s)Z< 9Z< Z< "&Z< Z< Z< S")^,Z< 
Z< Z< Z< Z< Z< Z<x   E#sC-,@  U5<Y^_bdgil_lYmKmEn                r,   r   c                        e Zd Zddej        fdee         dededededede	d	e	d
e
dej        f         ddf fdZdej        deeeef         deej        eeeef         f         fdZ xZS )MultiscaleBlockr   r   cnfr   r   r   proj_after_attnr   stochastic_depth_probr   .r/   Nc
                 Z   t                                                       || _        d | _        t	          |j                  dk    rLd |j        D             }
d |
D             }t          t          j        |
|j        |          d           | _        |r|j	        n|j
        } |	|j
                  | _         |	|          | _        t          | j        t          j                  | _        t!          ||j
        ||j        |j        |j        |j        |j        |||||	          | _        t-          |d|z  |j	        gt          j        |d           | _        t3          |d          | _        d | _        |j
        |j	        k    r&t          j        |j
        |j	                  | _        d S d S )	Nr2   c                 (    g | ]}|d k    r|d z   n|S rW   r+   )r   r.   s     r-   r   z,MultiscaleBlock.__init__.<locals>.<listcomp>U  s(    GGGQAEE1q55qGGGr,   c                 2    g | ]}t          |d z            S r   r   )r   r   s     r-   r   z,MultiscaleBlock.__init__.<locals>.<listcomp>V  s"    ===ACQKK===r,   )r   r   )	r"   r#   r$   r%   r   r   r   r   r   rV   )activation_layerr   r   row)rK   rL   r   	pool_skipr5   r$   rE   rN   	MaxPool3dr!   r    norm1norm2
isinstanceBatchNorm1dneeds_transposalr   r   r"   r#   r%   rx   r   GELUmlpr   stochastic_depthr   r   )rQ   r   r   r   r   r   r   r   r   r   kernel_skippadding_skipattn_dimrS   s                r-   rL   zMultiscaleBlock.__init__D  s    	..2""GG#,GGGK=====L![|TTTVZ DN +:Q3&&s?QZ 233
Z))
 *4:r~ F F'M\m\m''$;!
 
 
	 \3./W
 
 
 !00Eu M M,0!4449S%79LMMDLLL 54r,   r6   rT   c                     | j         r=|                     |                    dd                                        dd          n|                     |          }|                     ||          \  }}| j        | j        s|n|                     |          }| j        |n|                     ||          d         }||                     |          z   }| j         r=|                     |                    dd                                        dd          n|                     |          }| j        | j        r|n|                     |          }||                     | 	                    |                    z   |fS )Nr2   r   r   )
r   r   r]   rx   r   r   r   r   r   r   )	rQ   r6   rT   x_norm1x_attnthw_newx_skipx_norm2x_projs	            r-   rh   zMultiscaleBlock.forward~  s`   CGCXk$**Q[[A..//99!Q???^b^h^hij^k^k))GS11%T-A%AAt||T[G\G\n,$..C2H2H2KT**6222CGCXk$**Q[[A..//99!Q???^b^h^hij^k^kl*d.B*U\H]H]--dhhw.?.?@@@'IIr,   )r&   r'   r(   rN   r   r   r)   r   rj   r   r   ri   rL   r[   rk   r   rh   rl   rm   s   @r-   r   r   C  s/        '*/1|8N 8NI8N 8N 	8N
 "&8N 8N 8N 8N  %8N S")^,8N 
8N 8N 8N 8N 8N 8Nt
J 
JE#sC-,@ 
JU5<Y^_bdgil_lYmKmEn 
J 
J 
J 
J 
J 
J 
J 
Jr,   r   c            
       h     e Zd Zdedeeef         dededdf
 fdZdej        dej        fd	Z	 xZ
S )
PositionalEncoding
embed_sizespatial_sizetemporal_sizer   r/   Nc                 .   t                                                       || _        || _        t	          j        t          j        |                    | _        d | _	        d | _
        d | _        |st	          j        t          j        | j        d         | j        d         z  |                    | _	        t	          j        t          j        | j        |                    | _
        t	          j        t          j        |                    | _        d S d S )Nr   r2   )rK   rL   r  r  rN   r   r[   r   ra   spatial_postemporal_pos	class_pos)rQ   r  r  r  r   rS   s        r-   rL   zPositionalEncoding.__init__  s    (*<J(?(?@@374815 	C!|EK8I!8LtO`abOc8ceo,p,pqqD "U[9KZ-X-X Y YD\%+j*A*ABBDNNN	C 	Cr,   r6   c                    | j                             |                    d          d                              d          }t	          j        ||fd          }| j        | j        | j        | j        j	        \  }}t	          j
        | j        |d          }|                    | j                            d                              | j        dd                              d|                     t	          j        | j                            d          |fd                              d          }|                    |           |S )Nr   rY   r2   rZ   )ra   expandrr   r;   r[   r`   r  r  r  r=   repeat_interleaver   r  r^   )rQ   r6   ra   hw_sizer  pos_embeddings         r-   rh   zPositionalEncoding.forward  s,   &--affQii<<FFqIII{A&A...'D,=,IdnNh"&"2"8GZ!3D4EwTUVVVMt/99!<<CCDDVXZ\^__gghjlvwwxxx!It~'?'?'B'BM&RXYZZZddefggMFF=!!!r,   )r&   r'   r(   r)   r   rj   rL   r[   rk   rh   rl   rm   s   @r-   r  r    s        C3 CeCHo CVY Cjn Csw C C C C C C %,        r,   r  c            $       :    e Zd Z	 	 	 	 	 	 	 	 	 ddeeef         d	ed
ee         dedededededededede	e
dej        f                  de	e
dej        f                  deeeef         deeeef         deeeef         ddf" fdZdej        dej        fdZ xZS )r         ?r     Nr      r  r   rV   rV   r2   r   r   r  r  block_settingr   r   r   r   r   attention_dropoutr   num_classesblock.r   patch_embed_kernelpatch_embed_stridepatch_embed_paddingr/   c                    t                                                       t          |            t          |          }|dk    rt	          d          |t
          }|t          t          j        d          }t          j	        d|d         j
        |||          | _        d t          |f|z   | j        j                  D             }t          |d         j
        |d	         |d
         f|d         |          | _        t          j                    | _        t%          |          D ]s\  }}|
|z  |dz
  z  }| j                             ||||||||	||	  	                   t          |j                  dk    rd t          ||j                  D             }t ||d         j                  | _        t          j        t          j        |d          t          j        |d         j        |                    | _        |                                 D ]J}t9          |t          j                  rmt          j                            |j        d           t9          |t          j                  r,|j         %t          j        !                    |j         d           t9          |t          j                  rY|j        %t          j        !                    |j        d           |j         %t          j        !                    |j         d           t9          |t                    r8|"                                D ]#}t          j                            |d           $LdS )a  
        MViT main class.

        Args:
            spatial_size (tuple of ints): The spacial size of the input as ``(H, W)``.
            temporal_size (int): The temporal size ``T`` of the input.
            block_setting (sequence of MSBlockConfig): The Network structure.
            residual_pool (bool): If True, use MViTv2 pooling residual connection.
            residual_with_cls_embed (bool): If True, the addition on the residual connection will include
                the class embedding.
            rel_pos_embed (bool): If True, use MViTv2's relative positional embeddings.
            proj_after_attn (bool): If True, apply the projection after the attention.
            dropout (float): Dropout rate. Default: 0.0.
            attention_dropout (float): Attention dropout rate. Default: 0.0.
            stochastic_depth_prob: (float): Stochastic depth rate. Default: 0.0.
            num_classes (int): The number of classes.
            block (callable, optional): Module specifying the layer which consists of the attention and mlp.
            norm_layer (callable, optional): Module specifying the normalization layer to use.
            patch_embed_kernel (tuple of ints): The kernel of the convolution that patchifies the input.
            patch_embed_stride (tuple of ints): The stride of the convolution that patchifies the input.
            patch_embed_padding (tuple of ints): The padding of the convolution that patchifies the input.
        r   z+The configuration parameter can't be empty.Ngư>)epsr   )in_channelsout_channelskernel_sizer   r   c                     g | ]
\  }}||z  S r+   r+   r   rr   r   s      r-   r   z!MViT.__init__.<locals>.<listcomp>  s     uuuvdfnuuur,   r2   r   )r  r  r  r   r   )	r   r   r   r   r   r   r   r   r   c                     g | ]
\  }}||z  S r+   r+   r"  s      r-   r   z!MViT.__init__.<locals>.<listcomp>
  s     ___vdfn___r,   rY   Tr   r   r   r   )#rK   rL   r   r   r<   r   r   rN   r   r   r    	conv_projzipr   r  pos_encoding
ModuleListblocks	enumeraterM   r$   r!   rG   rO   r   r   headmodulesr   r   r   weightr   	constant_
parameters)rQ   r  r  r  r   r   r   r   r   r  r   r  r  r   r  r  r  total_stage_blocksr   stage_block_idr   sd_probmweightsrS   s                           r-   rL   zMViT.__init__  s_   R 	
 	D!!! //""JKKK=#E 4888J &q)8*%'
 
 
 vum=MP\=\^b^l^s9t9tuuu
 /$Q'6$Q-A7$Q-'	
 
 
 moo#,]#;#; 	` 	`NC+n<@RUX@XYGK)"/,C"/$3-*1)
 
 
   3<  1$$__ZQTQ]A^A^___
J}R0@AA	 MJw---ImB'7EE
 
	
  	= 	=A!RY'' =%%ahD%999a++ 30BG%%afc222Ar|,, =8'G%%ah4446%G%%afc222A122 = ||~~ = =GG))'t)<<<<	= 	=r,   r6   c                    t          |dd          d         }|                     |          }|                    d                              dd          }|                     |          }| j        j        f| j        j        z   }| j        D ]} |||          \  }}|                     |          }|d d df         }| 	                    |          }|S )Nr   r   r   r2   )
r@   r$  flattenr]   r&  r  r  r(  rG   r*  )rQ   r6   rT   r  s       r-   rh   zMViT.forward!  s    q!Q"NN1IIaLL""1a(( a    .043D3QQ[ 	# 	#EU1c]]FAssIIaLL aaadGIIaLLr,   )	r  r   r   r  NNr  r  r  )r&   r'   r(   r   r)   r
   r   rj   r   r	   r   rN   ri   rL   r[   rk   rh   rl   rm   s   @r-   r   r     s        #&'*489=3<3<4=#v= v=CHov= v=  .	v=
 v= "&v= v= v= v= !v=  %v= v= bi01v= Xc29n56v= "#sC-0v=  "#sC-0!v=" #3S=1#v=$ 
%v= v= v= v= v= v=p %,        r,   r   r  r   r3  progresskwargsc                    |t          |dt          |j        d                              |j        d         d         |j        d         d         k    sJ t          |d|j        d                    t          |d|j        d                    |                    dd	          }|                    dd
          }t	          d||| |                    dd          |                    dd          |                    dd          |                    dd          |d|}|*|                    |                    |d                     |S )Nr  
categoriesmin_sizer   r2   r  r  min_temporal_size   r=     r   Fr   Tr   r   )r  r  r  r   r   r   r   r   )r6  
check_hashr+   )r   r   metapopr   load_state_dictget_state_dict)r  r   r3  r6  r7  r  r  models           r-   _mvitrE  8  sW    fmSl9S5T5TUUU|J'*gl:.Fq.IIIIIfngl:6NOOOfow|DW7XYYY::nj99LJJ33M 
!##jj%88 &

+Dd K Kjj%88

#4e<<3
 
 
 
E g44hSW4XXYYYLr,   c                   h    e Zd Z ed eedddd          ddedd	d
ddddiddd	          ZeZdS )r   z:https://download.pytorch.org/models/mvit_v1_b-dbeb1030.pthr<     ?rJ  rJ  ?rL  rL  	crop_sizeresize_sizemeanr   r>  zShttps://github.com/facebookresearch/pytorchvideo/blob/main/docs/source/model_zoo.mdThe weights were ported from the paper. The accuracies are estimated on video-level with parameters `frame_rate=7.5`, `clips_per_video=5`, and `clip_len=16`ip.Kinetics-400gJ+S@gh|?eW@zacc@1zacc@5guVQ@g rxa@	r:  r;  r9  recipe_docs
num_params_metrics_ops
_file_sizeurl
transformsr@  N	r&   r'   r(   r   r   r   r   KINETICS400_V1DEFAULTr+   r,   r-   r   r   Y  s        WH7 #%
 
 
 #!#1k[ ###! ! !#
 
  N: GGGr,   r   c                   h    e Zd Z ed eedddd          ddedd	d
ddddiddd	          ZeZdS )r   z:https://download.pytorch.org/models/mvit_v2_s-ae3be167.pthr<  rG  rI  rK  rM  r>  zChttps://github.com/facebookresearch/SlowFast/blob/main/MODEL_ZOO.mdrQ  irR  g r0T@g(\W@rS  guVP@g?5^I|`@rT  r[  Nr^  r+   r,   r-   r   r   z  s        WH7 #%
 
 
 #!#1[[ ###! ! !#
 
  N: GGGr,   r   
pretrained)r3  T)r3  r6  c                    t                               |           } g dg dg dg g dg g dg g g g g g g g g g g dg gg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgg g dg g dg g g g g g g g g g g dg gg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgd	}g }t          t          |d
                             D ]}|                    t          |d
         |         |d         |         |d         |         |d         |         |d         |         |d         |         |d         |         	                     t          ddd|dd|                    dd          | |d|S )a  
    Constructs a base MViTV1 architecture from
    `Multiscale Vision Transformers <https://arxiv.org/abs/2104.11227>`__.

    .. betastatus:: video module

    Args:
        weights (:class:`~torchvision.models.video.MViT_V1_B_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.video.MViT_V1_B_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.video.MViT``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/video/mvit.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.video.MViT_V1_B_Weights
        :members:
    r2   r   r   rV   rV   rV   rV   rV   rV   rV   rV   rV   rV   rV      re  `      rh    ri  ri  ri  ri  ri  ri  ri  ri  ri  ri     rj  )rh  rh  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  rj  rj  rj  r   r   r   r2   r   r   r2   re  re  r2   rV   rV   r2   r2   r2   r   r    r!   r"   r#   r$   r%   r   r    r!   r"   r#   r$   r%   r<  r>  Fr   皙?)r  r  r  r   r   r   r3  r6  r+   )r   verifyranger   rM   r   rE  rA  r3  r6  r7  configr  is         r-   r   r     s   2  &&w//G FEEiiikkkB			2r2r2r2rSUWY[d[d[dfhiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII!
$ B			2r2r2r2rSUWY[d[d[dfhiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII!
1* *FX M3vk*++,, 
 
 -a0%&67: &'8 9! <
+A. -a0
+A. -a0  
	
 
	
 
	
 
	
  
# %$jj)@#FF
 
 
 
 
r,   c                 t   t                               |           } g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgd	}g }t          t          |d
                             D ]}|                    t          |d
         |         |d         |         |d         |         |d         |         |d         |         |d         |         |d         |         	                     t          ddd|dddd|                    dd          | |d
|S )aC  Constructs a small MViTV2 architecture from
    `Multiscale Vision Transformers <https://arxiv.org/abs/2104.11227>`__ and
    `MViTv2: Improved Multiscale Vision Transformers for Classification
    and Detection <https://arxiv.org/abs/2112.01526>`__.

    .. betastatus:: video module

    Args:
        weights (:class:`~torchvision.models.video.MViT_V2_S_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.video.MViT_V2_S_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.video.MViT``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/video/mvit.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.video.MViT_V2_S_Weights
            :members:
    rd  )rg  rg  rh  rh  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  rj  rf  rk  ro  rl  rm  rn  rp  r   r    r!   r"   r#   r$   r%   r<  r>  TFr   rq  )
r  r  r  r   r   r   r   r   r3  r6  r+   )r   rr  rs  r   rM   r   rE  rA  rt  s         r-   r   r     s+   4  &&w//G FEEhhhjjjIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII!
& IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII!
& IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII!
& IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII!
uL LF\ M3vk*++,, 
 
 -a0%&67: &'8 9! <
+A. -a0
+A. -a0  
	
 
	
 
	
 
	
  # %$jj)@#FF    r,   );r   dataclassesr   	functoolsr   typingr   r   r   r   r	   r
   r   r[   torch.fxtorch.nnrN   opsr   r   transforms._presetsr   utilsr   _apir   r   r   _metar   _utilsr   r   __all__r   r)   r5   rk   r@   rC   fxwrapri   rE   rw   r   rj   r   r   r   r  r   r   rE  r   r   r_  r   r   r+   r,   r-   <module>r     s    ! ! ! ! ! !       G G G G G G G G G G G G G G G G G G         ' ' ' ' ' ' ' ' 6 6 6 6 6 6 ( ( ( ( ( ( 7 7 7 7 7 7 7 7 7 7 + + + + + + C C C C C C C C          Xc] s    %, C S U5<Y\K\E]     # 3 C TYT`     l    j   ) ) ) ) )29 ) ) )XEL S U\    9
,9|9 c39 c3	9
 |9 |9 |9 \9 9 9 9xU\ U\ TX     n    o   } } } } }") } } }@EJ EJ EJ EJ EJbi EJ EJ EJP       :M M M M M29 M M M`&  k" 	
  
   B       B       B ,0A0P!QRRR8<t ] ] ](#45 ] ]_b ]gk ] ] ] SR ]@ ,0A0P!QRRR8<t B B B(#45 B B_b Bgk B B B SR B B Br,   