
    Ng                         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dS )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 )TestTimePoolHead   c                    t          t          |                                            || _        || _        | j                                        }t          |t          j                  r|| _	        nt          j        | j        j
        | j        j        dd          | _	        | j	        j        j                            |j        j                            | j	        j                                                             | j	        j        j                            |j        j                            | j	        j                                                             | j                            d           d S )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/html/ai-engine/env/lib/python3.11/site-packages/timm/layers/test_time_pool.pyr   zTestTimePoolHead.__init__   s'   %%..000	*)**,,gry)) 	QDGGi	&	(=1SWY Y YDGGN%%gn&9&>&>tw~?R?R?T?T&U&UVVVGL##GL$5$:$:47<;L;L;N;N$O$OPPP	""1%%%%%    c                 
   | j                             |          }t          j        || j        d          }|                     |          }t          |d          }|                    |                    d          d          S )Nr   )r
   strider   )	r   forward_featuresF
avg_pool2dr   r   r   r   r   )r   xs     r   forwardzTestTimePoolHead.forward   sl    I&&q))L(:1EEEGGAJJ"1a((vvaffQii$$$r    )r   )__name__
__module____qualname__r   r(   __classcell__)r   s   @r   r   r      sL        & & & & & &% % % % % % %r    r   Fc           
         d}t          | d          r| j        s| dfS |rd| j        v r| j        d         }n| j        d         }|d         d         |d         k    r|d         d         |d         k    rot                              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-(( 0A e| 8*e.???)*;<),7lB-"333|8LR8PS`acSd8d8d&.rss34444c-:L6M6M6M6MO 	P 	P 	P e6G6TUUU.  r    )F)__doc__loggingtorchr   torch.nn.functional
functionalr%   adaptive_avgmax_poolr   	getLoggerr)   r4   Moduler   r<    r    r   <module>rF      s    
                 8 8 8 8 8 8 '
H
%
%% % % % %ry % % %.! ! ! ! ! !r    