
    NgN[                     |   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 d dlZd dlmZ d dlmc mZ d dlmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZm Z 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,m-Z-m.Z. de
e/e/f         fdZ0dej1        de
e/e/f         de
e/e/f         fdZ2de/de/de
e/e/f         de
e/e/e/e/f         fdZ3 G d dej4                  Z5 G d dej4                  Z6 G d dej4                  Z7 G d dej4                  Z8d>dZ9 e, e9d d!d"d#$           e9d d!%           e9d&d'%           e9d(d)%           e9d*d+d,d-d./           e9d0d,d12          d3          Z:d?d4Z;d@d6e<d7e=de8fd8Z>e-d@d9            Z?e-d@d:            Z@e-d@d;            ZAe-d@d<            ZBe-d@d=            ZCdS )A    N)deepcopy)partial)CallableDictListOptionalTupleUnion)FinalIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)
PatchEmbedMlpDropPathClNormMlpClassifierHead
LayerScaleget_norm_layerget_act_layerinit_weight_jaxinit_weight_vit	to_2tupleuse_fused_attn   )build_model_with_cfg)feature_take_indices)named_applycheckpoint_seqadapt_input_conv)generate_default_cfgsregister_modelregister_model_deprecationswindow_sizec                 *   | j         \  }}}}|                     |||d         z  |d         ||d         z  |d         |          } |                     dddddd                                                              d|d         |d         |          }|S )aT  
    Partition into non-overlapping windows with padding if needed.
    Args:
        x (tensor): input tokens with [B, H, W, C].
        window_size (int): window size.
    Returns:
        windows: windows after partition with [B * num_windows, window_size, window_size, C].
        (Hp, Wp): padded height and width before partition
    r   r               shapeviewpermute
contiguous)xr#   BHWCwindowss          U/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/hieradet_sam2.pywindow_partitionr6      s     JAq!Q	q!{1~%{1~qKN7JKXYN\]^^Aii1aAq))4466;;BAP[\]P^`abbGN    r4   hwc                 N   |\  }}| j         d         ||z  |d         z  |d         z  z  }|                     |||d         z  ||d         z  |d         |d         d          }|                    dddddd                                                              |||d          }|S )aZ  
    Window unpartition into original sequences and removing padding.
    Args:
        x (tensor): input tokens with [B * num_windows, window_size, window_size, C].
        window_size (int): window size.
        hw (Tuple): original height and width (H, W) before padding.
    Returns:
        x: unpartitioned sequences with [B, H, W, C].
    r   r   r)   r%   r&   r'   r(   r*   )r4   r#   r8   r1   r2   r0   r/   s          r5   window_unpartitionr:   %   s     DAqaQUk!n4AFGAQ[^+Q+a.-@+a.R]^_R`bdeeA			!Q1a##..0055aArBBAHr7   r1   r2   returnc                     |d         | |d         z  z
  |d         z  }|d         ||d         z  z
  |d         z  }| |z   ||z   }}||||fS )Nr   r    )r1   r2   r#   pad_hpad_wHpWps          r5   	_calc_padrB   6   sb    ^a+a.00KNBE^a+a.00KNBEYE	Br5%r7   c            	            e Zd ZU ej        j        e         ed<   	 ddededede	j
        f fdZdej        d	ej        fd
Z xZS )MultiScaleAttention
fused_attnNdimdim_out	num_headsq_poolc                 2   t                                                       || _        || _        || _        ||z  }|dz  | _        t                      | _        || _        t          j
        ||dz            | _        t          j
        ||          | _        d S )Ng      r%   )super__init__rF   rG   rH   scaler   rE   rI   nnLinearqkvproj)selfrF   rG   rH   rI   head_dim	__class__s         r5   rL   zMultiScaleAttention.__init__@   s     	"i'%
(**9S'A+..Igw//			r7   r/   r;   c                    |j         \  }}}}|                     |                              |||z  d| j        d          }t	          j        |d          \  }}}	| j        |                    |||d                              dddd          }|                     |                              dddd          }|j         dd         \  }}|                    |||z  | j        d          }|                    dd          }|                    dd          }|	                    dd          }	| j	        rt          j        |||	          }n>|| j        z  }||                    dd          z  }
|
                    d          }
|
|	z  }|                    dd                              |||d          }|                     |          }|S )Nr%   r)   r&   r   r   )rF   )r+   rP   reshaperH   torchunbindrI   r-   	transposerE   Fscaled_dot_product_attentionrM   softmaxrQ   )rR   r/   r0   r1   r2   _rP   qkvattns              r5   forwardzMultiScaleAttention.forwardS   s   W
1a hhqkk!!!QUAt~rBB ,sA&&1a ;"		!Q2&&..q!Q::AA&&q!Q22A71Q3<DAq		!QUDNB77A KK1KK1KK1? 	.q!Q77AADJAq{{2r***D<<B<''DqA KK1%%aAr22IIaLLr7   N)__name__
__module____qualname__rX   jitr   bool__annotations__intrN   ModulerL   Tensorrc   __classcell__rT   s   @r5   rD   rD   =   s         	%%%% !0 00 0 	0
 	0 0 0 0 0 0&   %,                r7   rD   c                        e Zd Z	 	 	 	 	 	 	 ddeded	ed
edeeeef                  deej	        e
f         deej	        e
f         dedee         def fdZdej        dej        fdZ xZS )MultiScaleBlock      @N	LayerNormGELUr           rF   rG   rH   	mlp_ratioq_stride
norm_layer	act_layerr#   init_values	drop_pathc                    t                                                       t          |          }t          |          }t	          |          | _        t          | j                  | _        || _        || _	        || _
        ||k    rt          j        ||          | _        nt          j                    | _        d | _        | j
        rt          j        ||d          | _         ||          | _        t%          |||t'          | j                            | _        |	t+          ||	          nt          j                    | _        |
dk    rt/          |
          nt          j                    | _         ||          | _        t5          |t7          ||z            |          | _        |	t+          ||	          nt          j                    | _        |
dk    rt/          |
          nt          j                    | _        d S )NF)kernel_sizestride	ceil_mode)rH   rI   ru   )ry   )rK   rL   r   r   r   r#   anyis_windowedrF   rG   rw   rN   rO   rQ   Identitypool	MaxPool2dnorm1rD   r   rb   r   ls1r   
drop_path1norm2r   rk   mlpls2
drop_path2)rR   rF   rG   rH   rv   rw   rx   ry   r#   rz   r{   rT   s              r5   rL   zMultiScaleBlock.__init__w   s    	#J//
!),,	$[11t/00 '>>	#w//DIIDI	= 	$  DI  Z__
'DI&&	
 
 
	 8C7N:g{333TVT_TaTa1:S(9---bkmmZ((
)#$$
 
 

 8C7N:g{333TVT_TaTa1:S(9---bkmmr7   r/   r;   c           
      H   |}|                      |          }| j        | j        k    r_|                     |          }| j        C|                    dddd          }|                     |                              dddd          }| j        }|j        dd         \  }}||}}| j        rAt          |||          \  }}}}	t          j        |ddd|	d|f          }t          ||          }|                     |          }| j        ^| j        d         | j        d         z  | j        d         | j        d         z  f}|j        dd         \  }}t          |||          \  }}}}	| j        r9t          ||||f          }|d d d |d |d d f                                         }||                     |                     |                    z   }||                     |                     |                     |                     |                                        z   }|S )Nr   r%   r   r&   )r   rF   rG   rQ   r   r-   r#   r+   r   rB   r[   padr6   rb   rw   r:   r.   r   r   r   r   r   r   )
rR   r/   shortcutr#   r1   r2   r@   rA   r>   r?   s
             r5   rc   zMultiScaleBlock.forward   s   JJqMM 8t|##yy||Hy$#++Aq!Q7799X..66q!QBB &wqs|1AB 	1#,Q;#?#? BE5a!Q5!U344A K00A IIaLL=$+A.$-2BBDDTUVDW[_[hij[kDklK>!A#&DAq#,Q;#?#? BE5  	-"1kB8<<A!!!RaR!QQQ,**,,Attxx{{333$**Q--)@)@ A ABBBr7   )rr   Nrs   rt   r   Nru   )re   rf   rg   rk   floatr   r	   r
   rN   rl   strrL   rX   rm   rc   rn   ro   s   @r5   rq   rq   v   s        .2,7+1'+4T 4T4T 4T 	4T
 4T 5c?+4T ")S.)4T C(4T 4T e_4T 4T 4T 4T 4T 4T 4Tl# #%, # # # # # # # #r7   rq   c                        e Zd ZdZ	 	 	 	 	 ddeedf         d	eedf         d
eedf         dedef
 fdZdej        dej        fdZ	 xZ
S )HieraPatchEmbedz#
    Image to Patch Embedding.
       r   r'   r'   r%   r%   r%      r}   .r~   paddingin_chans	embed_dimc                     t                                                       t          j        |||||          | _        dS )ab  
        Args:
            kernel_size (Tuple): kernel size of the projection layer.
            stride (Tuple): stride of the projection layer.
            padding (Tuple): padding size of the projection layer.
            in_chans (int): Number of input image channels.
            embed_dim (int):  embed_dim (int): Patch embedding dimension.
        )r}   r~   r   N)rK   rL   rN   Conv2drQ   )rR   r}   r~   r   r   r   rT   s         r5   rL   zHieraPatchEmbed.__init__   sC      	Ii[QX
 
 
			r7   r/   r;   c                 `    |                      |          }|                    dddd          }|S )Nr   r&   r%   r   )rQ   r-   rR   r/   s     r5   rc   zHieraPatchEmbed.forward   s-    IIaLLIIaAq!!r7   )r   r   r   r%   r   )re   rf   rg   __doc__r	   rk   rL   rX   rm   rc   rn   ro   s   @r5   r   r      s          (."(#)
 
38_
 c3h
 sCx	

 
 
 
 
 
 
 
* %,        r7   r   c            5           e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dLdedededededeedf         deedf         deedf         deeedf                  d ed!eeef         d"eedf         d#ed$ed%eeef         d&eedf         d'eedf         d(ee         d)ed*e	d+ed,ed-ed.e
ej        ef         d/e
ej        ef         f2 fd0Zd1ej        d2ej        fd3Zd4 Zej        j        d5             Zej        j        dMd7e	d2efd8            Zej        j        dNd9e	d2d
fd:            Zej        j        d;             ZdOdedee         d<e	fd=Z	 	 	 	 	 	 dPd1ej        d?ee
eee         f                  d@e	dAe	dBedCe	d7e	d2e
eej                 eej        eej                 f         f         fdDZ	 	 	 	 dQd?e
eee         f         dEe	dFe	d7e	fdGZd1ej        d2ej        fdHZdMdIe	d2ej        fdJZd1ej        d2ej        fdKZ xZ S )RHieraDetz5
    Reference: https://arxiv.org/abs/2306.00989
    r%     avg`   r   r   r   r   Nr&   r&   r&   r%      r%          @   r'      r      r       TMbP?ru   rs   rt   r   num_classesglobal_poolr   rH   patch_kernel.patch_stridepatch_padding
patch_sizerI   rw   stagesdim_mulhead_mulglobal_pos_sizewindow_specglobal_att_blocksrz   weight_initfix_inithead_init_scale	drop_ratedrop_path_raterx   ry   c                    t                                                       t          |          }t          |          }t	                    t	          |          k    sJ || _        || _        d| _        t                    }|| _	        fdt          dt	                    dz             D             | _        d|
cxk    r t	          | j        d d                   k    sn J d | j        d d         D             d |
         | _        |	t          d |	||dd          | _        nt          |||||	          | _        || _        || _        t%          j        t)          j        d|g| j        R            | _        t%          j        t)          j        d|| j        d         | j        d                             | _        d
 t)          j        d||          D             }d}t%          j                    | _        g | _        t          |          D ]}|}| j        |         }| j        || j        v rdn|}|dz
  | j        v r)t9          ||z            }t9          ||z            }|dz  }t;          |||||         || j        v r| j	        nd |||          } |}| j                            |            || j        v r5| xj        t?          |d|dz   z  d| j        |                    gz  c_        |x| _         | _!        tE          |||||          | _#        | j        &t$          j$        %                    | j        d           | j        &t$          j$        %                    | j        d           |dk    r5|dk    rtL          ntN          }!tQ          |!d          }!tS          |!|            |r| *                                 tW          | j#        tD                    rxtW          | j#        j,        t$          j-                  rV| j#        j,        j.        j/        0                    |           | j#        j,        j1        j/        0                    |           d S d S d S )NNHWCc                 D    g | ]}t          d |                   dz
  S )Nr   )sum).0ir   s     r5   
<listcomp>z%HieraDet.__init__.<locals>.<listcomp>*  s,    RRR13vbqbz??Q.RRRr7   r   r   r)   c                     g | ]}|d z   S )r   r=   r   r/   s     r5   r   z%HieraDet.__init__.<locals>.<listcomp>,  s    BBBa!eBBBr7   T)img_sizer   r   r   
output_fmtdynamic_img_pad)r}   r~   r   r   r   c                 6    g | ]}|                                 S r=   )itemr   s     r5   r   z%HieraDet.__init__.<locals>.<listcomp>H  s     JJJAqvvxxJJJr7   )rF   rG   rH   r{   rw   r#   rx   ry   r&   zblocks.)num_chs	reductionmodule)	pool_typer   rx   g{Gz?)stdskipjaxhead.fc)classifier_name)2rK   rL   r   r   lenr   r   r   r   rw   range
stage_endsq_pool_blocksr   patch_embedr   r   r   rN   	ParameterrX   zeros	pos_embedpos_embed_windowlinspace
Sequentialblocksfeature_infork   rq   appenddictnum_featureshead_hidden_sizer   headinittrunc_normal_r   r   r   r   fix_init_weight
isinstancefcrO   weightdatamul_bias)#rR   r   r   r   r   rH   r   r   r   r   rI   rw   r   r   r   r   r   r   rz   r   r   r   r   r   rx   ry   depthdpr	cur_stager   rG   r#   blockinit_fnrT   s#               `                     r5   rL   zHieraDet.__init__   s   N 	#J//
!),,	6{{c+......&& F RRRRaVq8Q8QRRRF7777c$/#2#"677777777BBT_SbS-ABBB7F7K!)%!#! $     D  /(#%!#     D "3  /ek!Y&VAU&V&V&VWW "U[ItGWXYGZ\`\lmn\o-p-p q qJJ>5!I!IJJJ	moou 	v 	vAG *95K%1#$(>#>#>aaK1u''i'122	H 455	Q	##a&*+t/A*A*At'%#	 	 	E  IKu%%%DO##!!A	!4DMsW[WfgpWqMsMsttt&v v!! 5>=D1+!!
 
 
	 >%G!!$.d!;;; ,G!!$"7T!BBB&  )4)=)=oo?GgyAAAG&&& 	#  """di!899 	9jWYW`>a>a 	9IL$))/:::IL"''88888	9 	9 	9 	9r7   r/   r;   c                 J   |j         dd         \  }}| j        }t          j        | j        ||fd          }|j         d         |j         d         z  }|j         d         |j         d         z  }||                    ||f          z   }|                    dddd          }||z   S )	Nr   r%   bicubic)sizemoderV   r)   r   r&   )r+   r   r[   interpolater   tiler-   )rR   r/   hwwindow_embedr   tile_htile_ws           r5   
_pos_embedzHieraDet._pos_embed  s    wqs|1,M$.1vINNN	$(:2(>>$(:2(>> 1 1662B C CC	%%aAq11	9}r7   c                     d }t          | j                  D ]K\  }} ||j        j        j        j        |dz               ||j        j        j        j        |dz              Ld S )Nc                 Z    |                      t          j        d|z                       d S )Nr   )div_mathsqrt)param	_layer_ids     r5   rescalez)HieraDet.fix_init_weight.<locals>.rescale  s(    JJtyy1122222r7   r   )	enumerater   rb   rQ   r   r   r   fc2)rR   r  layer_idlayers       r5   r   zHieraDet.fix_init_weight  s}    	3 	3 	3  )55 	= 	=OHeGEJO*/A>>>GEIM(-x!|<<<<	= 	=r7   c                 
    ddgS )Nr   r   r=   rR   s    r5   no_weight_decayzHieraDet.no_weight_decay  s    /00r7   Fcoarsec                 &    t          ddg          S )Nz'^pos_embed|pos_embed_window|patch_embed)z^blocks\.(\d+)N)stemr   )r   )rR   r  s     r5   group_matcherzHieraDet.group_matcher  s"    ;-.
 
 
 	
r7   enablec                     || _         d S rd   )grad_checkpointing)rR   r  s     r5   set_grad_checkpointingzHieraDet.set_grad_checkpointing  s    "(r7   c                     | j         j        S rd   )r   r   r  s    r5   get_classifierzHieraDet.get_classifier  s    y|r7   reset_otherc                 N    || _         | j                            |||           d S )N)r   r  )r   r   reset)rR   r   r   r  s       r5   reset_classifierzHieraDet.reset_classifier  s*    &	{TTTTTr7   NCHWindicesnorm
stop_earlyr   intermediates_onlyc                     |r
J d            |dv s
J d            |rAt          t           j                  |          \  }}	 fd|D             } j        |	         }	n%t          t           j                  |          \  }}	                     |          }                     |          }g }
t          j                                        s|s j        }n j        d|	dz            }t          |          D ]I\  }} ||          }||v r5|dk    r|
                    dd	dd
          n|}|
                    |           J|r|
S ||
fS )aE   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to all intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
            coarse: Take coarse features (stage ends) if true, otherwise all block featrures
        Returns:

        z'normalization of features not supported)r"  r   z(Output format must be one of NCHW, NHWC.c                 *    g | ]}j         |         S r=   )r   )r   r   rR   s     r5   r   z2HieraDet.forward_intermediates.<locals>.<listcomp>  s     EEE1DOA.EEEr7   Nr   r"  r   r%   r&   )r   r   r   r   r   r  rX   rh   is_scriptingr  r-   r   )rR   r/   r#  r$  r%  r   r&  r  take_indices	max_indexintermediatesr   r   blkx_outs   `              r5   forward_intermediateszHieraDet.forward_intermediates  s   . BBBBBB----/Y--- 	V&:3t;O;OQX&Y&Y#L)EEEEEEEL	2II&:3t{;K;KW&U&U#L)QOOA9!!## 	1: 	1[FF[)a-0F'' 	, 	,FAsAAL  1;v1E1E		!Q1---1$$U+++ 	!  -r7   
prune_norm
prune_headc                 $   |r3t          t          | j                  |          \  }}| j        |         }n%t          t          | j                  |          \  }}| j        d|dz            | _        |r| j                            d|           |S )z@ Prune layers not required for specified intermediates.
        Nr   r   )r  )r   r   r   r   r   r   )rR   r#  r0  r1  r  r*  r+  s          r5   prune_intermediate_layersz"HieraDet.prune_intermediate_layers  s      	V&:3t;O;OQX&Y&Y#L)	2II&:3t{;K;KW&U&U#L)k.9q=.1 	7IOOA:O666r7   c                     |                      |          }|                     |          }t          | j                  D ]\  }} ||          }|S rd   )r   r  r  r   )rR   r/   r   r-  s       r5   forward_featureszHieraDet.forward_features  sW    QOOA,, 	 	FAsAAAr7   
pre_logitsc                 b    |r|                      ||          n|                      |          }|S )N)r6  )r   )rR   r/   r6  s      r5   forward_headzHieraDet.forward_head  s0    3=ODIIaJI///499Q<<r7   c                 Z    |                      |          }|                     |          }|S rd   )r5  r8  r   s     r5   rc   zHieraDet.forward  s-    !!!$$a  r7   )r%   r   r   r   r   r   r   r   Nr%   r   r   r   r   r   r   r   Nr   Tr   ru   ru   rs   rt   F)T)NF)NFTr"  FT)r   FTT)!re   rf   rg   r   rk   r   r	   r   r   ri   r
   rN   rl   rL   rX   rm   r  r   rh   ignorer  r   r  r  r  r!  r   r/  r3  r5  r8  rc   rn   ro   s   @r5   r   r      s         #$,2,2-348(.&3 !/5,2
 ,0!!%*"$'0;/5KM9 M9M9 M9 	M9
 M9 M9  S/M9  S/M9 !c?M9 !sCx1M9 M9 CHoM9 #s(OM9 M9 M9  #38_!M9$ sCx%M92  %S#X3M9< "%=M9> ?M9@ AM9B #CM9D EM9F "GM9H bin-IM9J RY^,KM9 M9 M9 M9 M9 M9^EL U\    = = = Y1 1 1 Y
 
D 
T 
 
 
 
 Y) )T )T ) ) ) ) Y  U UC Uhsm Uae U U U U 8<#$',1  1 |1  eCcN341  	1 
 1  1  !%1  1  
tEL!5tEL7I)I#JJ	K1  1  1  1 j ./$# 3S	>*  	
    &%, 5<     $ 5<     %,        r7   r   r   c                 6    | ddddddt           t          ddd	|S )
Nr   )r%     r=  )   r>  g      ?r   r%      r@  zpatch_embed.projr   )urlr   
input_size	pool_sizecrop_pctinterpolationmin_input_sizemeanr   
first_conv
classifierr   )rA  kwargss     r5   _cfgrK  	  s7    H)}%.B(	   r7   zfacebook/sam2-hiera-tinyzsam2_hiera_tiny.ptr?  r   )	hf_hub_idhf_hub_filenamerB  rC  )rL  rM  zfacebook/sam2-hiera-smallzsam2_hiera_small.ptzfacebook/sam2-hiera-base-pluszsam2_hiera_base_plus.ptzfacebook/sam2-hiera-largezsam2_hiera_large.pt)r%      rN  )r%      rO  )    rP  )rL  rM  rF  rB  rC  r   )r   r   )r   rB  rC  )zsam2_hiera_tiny.r224zsam2_hiera_tiny.r896sam2_hiera_smallsam2_hiera_base_plussam2_hiera_largezhieradet_small.untrainedc                 &   |                      d|           } i }|                                 D ]c\  }}|                    |          r|                    |d          }n2|                    dd          }|                    dd          }|||<   d|S )Nmodelr   zmlp.layers.0zmlp.fc1zmlp.layers.1zmlp.fc2)getitems
startswithreplace)
state_dictrU  prefixoutputr`   ra   s         r5   checkpoint_filter_fnr]  3  s    44JF  ""  1<< 			&"%%AAIIni00IIni00q		Mr7   Fvariant
pretrainedc                     |                     dd          }d}d| v r|                    dd           d}t          t          | |ft	          t
          |          t          |d	
          d|S )Nout_indicesr'   r   sam2pretrained_strictFzimage_encoder.trunk.)r[  getter)ra  feature_cls)pretrained_filter_fnfeature_cfg)pop
setdefaultr   r   r   r]  r   )r^  r_  rJ  ra  checkpoint_prefixs        r5   _create_hiera_detrk  B  s    **]A..K 	-u5552 %%9BSTTT[hGGG    r7   c           	      V    t          dd          }t          dd| it          |fi |S )N)r   r&   r   r&   )r(   r   	   r   r   sam2_hiera_tinyr_  )ro  r   rk  r_  rJ  
model_argss      r5   ro  ro  T  s>    \YGGGJdd:djIcIc\bIcIcdddr7   c           	      V    t          dd          }t          dd| it          |fi |S )Nr   r&      r&   r   
      rn  rQ  r_  )rQ  rp  rq  s      r5   rQ  rQ  Z  s>    ]kJJJJeeJe$zJdJd]cJdJdeeer7   c           	      X    t          ddd          }t          dd| it          |fi |S )Np   r&   )r   r   )r   rH   r   rR  r_  )rR  rp  rq  s      r5   rR  rR  `  sA    q(KKKJii
idS]NhNhagNhNhiiir7   c           	      \    t          ddddd          }t          d	d| it          |fi |S )
N   r&   )r&      $   r'   )   !   +   r   r'   r   r   )r   rH   r   r   r   rS  r_  )rS  rp  rq  s      r5   rS  rS  f  sQ    &!  J eeJe$zJdJd]cJdJdeeer7   c           	      Z    t          dddd          }t          dd| it          |fi |S )	Nrt  rv  r  gh㈵>)r   r   r   rz   hieradet_smallr_  )r  rp  rq  s      r5   r  r  r  sD    ]kWdrvwwwJcc*cZHbHb[aHbHbcccr7   )r   )Nr   r:  )Dr  copyr   	functoolsr   typingr   r   r   r   r	   r
   rX   torch.nnrN   torch.nn.functional
functionalr[   	torch.jitr   	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   r   r   r   _builderr   	_featuresr   _manipulater   r   r   	_registryr    r!   r"   rk   r6   rm   r:   rB   rl   rD   rq   r   r   rK  default_cfgsr]  r   ri   rk  ro  rQ  rR  rS  r  r=   r7   r5   <module>r     s                ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?                       A A A A A A A A_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + * * * * * + + + + + + F F F F F F F F F F Y Y Y Y Y Y Y Y Y YU38_      5c? PUVY[^V^P_    "     5c?  uS#sTWEW?X        6 6 6 6 6") 6 6 6rZ Z Z Z Zbi Z Z Zz    bi   BQ Q Q Q Qry Q Q Qj    %$ D,, F  
 !D,,   --   !D11   --$"h	   !% F! ! !1& &  >    s  8    $ e e e e
 f f f f
 j j j j
 f f f f d d d d d dr7   