a
    d                     @   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r8|| _	n`t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_poolZget_classifier
isinstancer   ZConv2dfcZnum_featuresZnum_classesZweightdataZcopy_viewsizer   Zreset_classifier)selfr   r   Zbase_fc	__class__ c/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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   Zstrider   )	r   Zforward_featuresFZ
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 |r6d| jv r6| jd }n
| jd }|d d |d kr|d d |d krtdt|d dd  t|dd  f  t| | jd d	} d
}| |fS )NFdefault_cfgZtest_input_sizeZ
input_sizer   zETarget input size %s > pretrained default %s, using test time poolingZ	pool_size)r   T)hasattrr   _loggerinfostrr   )modelconfigZuse_test_sizeZtest_time_poolZdf_input_sizer   r   r   apply_test_time_pool'   s    
("r'   )F)__doc__loggingZtorchr   Ztorch.nn.functionalZ
functionalr   Zadaptive_avgmax_poolr   	getLoggerr   r"   Moduler   r'   r   r   r   r   <module>   s   
