
    kh                         d Z ddlZddlmZ ddlmc mZ ddlmZ  ej                  e
      Z G d dej                        Zd	dZy)
zY Test Time Pooling (Average-Max Pool)

Hacked together by / Copyright 2020 Ross Wightman
    N)nn   )adaptive_avgmax_pool2dc                   &     e Zd Zd fd	Zd Z xZS )TestTimePoolHeadc                 R   t         t        |           || _        || _        | j                  j                         }t        |t        j                        r	|| _	        n.t        j                  | j                  j                  | j                  j                  dd      | _	        | j                  j                  j                  j                  |j                  j                  j                  | j                  j                  j!                                      | j                  j"                  j                  j                  |j"                  j                  j                  | j                  j"                  j!                                      | j                  j%                  d       y )Nr   T)kernel_sizebiasr   )superr   __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       V/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/layers/test_time_pool.pyr   zTestTimePoolHead.__init__   s   .0	*))**,gryy)DG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                     | j                   j                  |      }t        j                  || j                  d      }| j                  |      }t        |d      }|j                  |j                  d      d      S )Nr   )r	   strider   )	r   forward_featuresF
avg_pool2dr   r   r   r   r   )r   xs     r   forwardzTestTimePoolHead.forward   s`    II&&q)LL(:(:1EGGAJ"1a(vvaffQi$$r   )   )__name__
__module____qualname__r   r'   __classcell__)r   s   @r   r   r      s    &%r   r   c           
         d}t        | d      r| j                  s| dfS |rd| j                  v r| j                  d   }n| j                  d   }|d   d   |d   kD  ra|d   d   |d   kD  rSt        j                  dt	        |d   dd        dt	        |dd        d	       t        | | j                  d
         } d}| |fS )NFdefault_cfgtest_input_size
input_sizer"   zTarget input size z > pretrained default z, using test time pooling	pool_size)r   T)hasattrr.   _loggerinfostrr   )modelconfiguse_test_sizetest_time_pooldf_input_sizes        r   apply_test_time_poolr<   '   s    N5-(0A0Ae|*e.?.??))*;<)),7lB-"33|8LR8PS`acSd8d&.rs34c-:L6MO 	P e6G6G6TU.  r   )F)__doc__loggingtorchr   torch.nn.functional
functionalr$   adaptive_avgmax_poolr   	getLoggerr)   r4   Moduler   r<    r   r   <module>rF      sD   
     8 '

H
%%ryy %.!r   