o
    پi                     @   s`   d Z ddlZddlmZ ddlm  mZ ddlmZ e	e
ZG dd dejZdd	d
ZdS )zY Test Time Pooling (Average-Max Pool)

Hacked together by / Copyright 2020 Ross Wightman
    N)nn   )adaptive_avgmax_pool2dc                       s&   e Zd Zd fdd	Zdd Z  ZS )TestTimePoolHead   c                    s   t t|   || _|| _| j }t|tjr|| _	n0tj| jj
| jjd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__ N/home/ubuntu/.local/lib/python3.10/site-packages/timm/layers/test_time_pool.pyr
      s   
""zTestTimePoolHead.__init__c                 C   sD   | j |}tj|| jdd}| |}t|d}||ddS )Nr   )r   strider   )	r   forward_featuresF
avg_pool2dr   r   r   r   r   )r   xr   r   r   forward   s
   

zTestTimePoolHead.forward)r   )__name__
__module____qualname__r
   r%   __classcell__r   r   r   r   r      s    r   Fc                 C   s   d}t | dr
| js| dfS |rd| jv r| jd }n| jd }|d d |d krV|d d |d krVtdt|d dd  t|dd  f  t| | jd d	} d
}| |fS )NFdefault_cfgtest_input_size
input_sizer    zETarget input size %s > pretrained default %s, using test time pooling	pool_size)r   T)hasattrr*   _loggerinfostrr   )modelconfiguse_test_sizetest_time_pooldf_input_sizer   r   r   apply_test_time_pool'   s   
("r8   )F)__doc__loggingtorchr   torch.nn.functional
functionalr"   adaptive_avgmax_poolr   	getLoggerr&   r0   Moduler   r8   r   r   r   r   <module>   s    
