
    RЦi                         S r SSKrSSKJr  SSKJs  Jr  SSKJr  \R                  " \
5      r " S S\R                  5      rS	S jrg)
zXTest Time Pooling (Average-Max Pool)

Hacked together by / Copyright 2020 Ross Wightman
    N)nn   )adaptive_avgmax_pool2dc                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )TestTimePoolHead   c                 J  > [         TU ]  5         Xl        X l        U R                  R	                  5       n[        U[        R                  5      (       a  X0l        GO,[        R                  " U R                  R                  U R                  R                  SSS9U l        U R                  R                  R                  R                  UR                  R                  R                  U R                  R                  R                  5       5      5        U R                  R                   R                  R                  UR                   R                  R                  U R                  R                   R                  5       5      5        U R                  R#                  S5        g )Nr   T)kernel_sizebiasr   )super__init__baseoriginal_poolget_classifier
isinstancer   Conv2dfcnum_featuresnum_classesweightdatacopy_viewsizer   reset_classifier)selfr   r   base_fc	__class__s       Y/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/layers/test_time_pool.pyr   TestTimePoolHead.__init__   s   	*))**,gryy))Gii		&&		(=(=1SWYDGGGNN%%gnn&9&9&>&>tww~~?R?R?T&UVGGLL##GLL$5$5$:$:477<<;L;L;N$OP		""1%    c                     U R                   R                  U5      n[        R                  " XR                  SS9nU R                  U5      n[        US5      nUR                  UR                  S5      S5      $ )Nr   )r
   strider   )	r   forward_featuresF
avg_pool2dr   r   r   r   r   )r   xs     r   forwardTestTimePoolHead.forward   s^    II&&q)LL(:(:1EGGAJ"1a(vvaffQi$$r!   )r   r   r   )   )__name__
__module____qualname____firstlineno__r   r)   __static_attributes____classcell__)r   s   @r   r   r      s    &% %r!   r   c           
         Sn[        U S5      (       a  U R                  (       d  U S4$ U(       a   SU R                  ;   a  U R                  S   nOU R                  S   nUS   S   US   :  a`  US   S   US   :  aQ  [        R                  S[	        US   SS  5      < S[	        USS  5      < S	35        [        X R                  S
   S9n SnX4$ )NFdefault_cfgtest_input_size
input_sizer$   zTarget input size z > pretrained default z, using test time pooling	pool_size)r   T)hasattrr3   _loggerinfostrr   )modelconfiguse_test_sizetest_time_pooldf_input_sizes        r   apply_test_time_poolrA   '   s    N5-((0A0Ae|*e.?.??))*;<)),7lB-"33|8LR8PS`acSd8d&.rs34c-:L6MO 	P 6G6G6TU  r!   )F)__doc__loggingtorchr   torch.nn.functional
functionalr&   adaptive_avgmax_poolr   	getLoggerr,   r9   Moduler   rA    r!   r   <module>rK      sB   
     8 

H
%%ryy %.!r!   