a
    ECCf,                     @   s@  d dl Z d dlZd dlmZ d dlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZ dd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Z d$d% Z!d&d' Z"d(d) Z#d*d+ Z$d,d- Z%d.d/ Z&d0d1 Z'eeeeeeeeeeeeeee e!e$e"e#e%e&e'dd2Z(dS )3    N)numpy_helper)zero_ops   )
counter_matmulcalculate_zero_opscalculate_convcounter_mulcalculate_normcounter_powcounter_sqrtcounter_divcalculate_softmaxcalculate_avgpoolc           	      C   sb   |j d }|j d }| | }| | }t|dd |d }|jd }t||dd  }|||fS )Nr   r   )inputnpappendoutputr   )	dictionnodeZinput1Zinput2Z
input1_dimZ
input2_dimout_sizeoutput_namemacs r   T/var/www/html/django/DPS/env/lib/python3.9/site-packages/thop/vision/onnx_counter.pyonnx_counter_matmul   s    


r   c                 C   sd   t | |jd  jt | |jd  jkr<| |jd  }n| |jd  }|jd }t }|||fS Nr   r   )r   arrayr   sizer   r   )r   r   r   r   r   r   r   r   onnx_counter_add   s    ,
r    c                 C   s  d}d}|j D ]}|d7 }q|dkr8d}| |j d  }n| |j d  }|jD ]T}|jdkr`|j}|jdkrp|j}|jdkr|j}	|jdkr|j}
|jdkrL|j}qL| |j d  }t|dt|j d  |d }t|t|j d  }t	|jD ]D}t
|| d	|	|   |
| || d   d ||  d ||< qt||}t|t|t||d |}|jd }|||fS )
Nr   r      kernel_shapestridespads	dilationsgroup   )r   	attributenameintsir   r   r   r   rangeintr   prodr   )r   r   Zdim_biasZinput_countr+   
dim_weightattr
dim_kernel
dim_stridedim_paddim_dilr&   	dim_inputoutput_sizehwr   r   r   r   r   onnx_counter_conv*   sL    







*

r8   c                 C   s    t  }|jd }dg}|||fS Nr   r   )r   r   )r   r   r   r   r6   r   r   r   onnx_counter_constantY   s    
r:   c                 C   sz   t | |jd  jt | |jd  jkr<| |jd  }n| |jd  }tt |}| |jd  }|jd }|||fS r   )r   r   r   r   r   r.   r   )r   r   
input_sizer   r6   r   r   r   r   onnx_counter_mulb   s    ,
r<   c                 C   s4   | |j d  }tt|}|jd }|}|||fS Nr   r   r	   r   r.   r   r   r   r;   r   r   r6   r   r   r   onnx_counter_bnm   s
    
r@   c                 C   s,   | |j d  }t }|jd }|}|||fS r=   r   r   r   r?   r   r   r   onnx_counter_reluu   s
    
rB   c           	      C   sz   d}|j D ],}d|jv r&t|j}q
d|jv r
|j}q
| |jd  }t }|jd }|dkrd|}nt	||}|||fS )Nr   ZaxesZkeepdimsr   )
r(   r)   r   r   r*   r+   r   r   r   delete)	r   r   Zkeep_dimr0   Zdim_axisr;   r   r   r6   r   r   r   onnx_counter_reducemean   s    



rD   c                 C   s,   | |j d  }t }|jd }|}|||fS r=   rA   r?   r   r   r   onnx_counter_sub   s
    
rE   c                 C   sp   t | |jd  jt | |jd  jkr<| |jd  }n| |jd  }tt |}|jd }|}|||fS r   )r   r   r   r   r
   r.   r   r?   r   r   r   onnx_counter_pow   s    ,
rF   c                 C   s4   | |j d  }tt|}|jd }|}|||fS r=   )r   r   r   r.   r   r?   r   r   r   onnx_counter_sqrt   s
    
rG   c                 C   sp   t | |jd  jt | |jd  jkr<| |jd  }n| |jd  }tt |}|jd }|}|||fS r   )r   r   r   r   r   r.   r   r?   r   r   r   onnx_counter_div   s    ,
rH   c                 C   s4   | |j d  }tt|}|jd }|}|||fS r=   r>   r?   r   r   r   onnx_counter_instance   s
    
rI   c           	      C   sR   | |j d  }|jd j}|| }t|| }t||}|jd }|}|||fS r=   )r   r(   r+   r   r.   r   r   )	r   r   r;   dimZ	nfeaturesZ
batch_sizer   r   r6   r   r   r   onnx_counter_softmax   s    

rK   c                 C   s,   | |j d  }t }|jd }|}|||fS r=   rA   r?   r   r   r   onnx_counter_pad   s
    
rL   c                 C   sd  t t| |jd  }|jd }d }|jD ]J}|jdkrB|j}q,|jdkrT|j}q,|jdkrf|j}q,|jdkr,|j}q,| |jd  }	|	t|j	 d  }
|d urt
|
j	D ]4}t|
| d||   ||  ||  d |
|< qt|	dt|j	  |
}nTt
|
j	D ]*}t|
| ||  ||  d |
|< qt|	dt|j	  |
}|||fS Nr   r"   r#   r$   r%   r'   r   )r   r   r.   r   r   r(   r)   r*   r   r   r,   r-   r   r   r   r   r   r3   r0   r1   r2   r4   r5   r7   r+   r6   r   r   r   onnx_counter_averagepool   s,    






2 (rO   c                 C   sV   t  }|jd }|jd j}| |jd  }t||d  t||d  }|||fS r9   )r   r   r(   r+   r   r   r   r.   )r   r   r   r   axisr;   r6   r   r   r   onnx_counter_flatten   s    
"rQ   c                 C   sb   | |j d  }| |j d  }t||d  |d  }t|dd |d }|jd }|||fS )Nr   r   r   )r   r   r.   r   r   )r   r   r;   r/   r   r6   r   r   r   r   onnx_counter_gemm  s    
rR   c                 C   sN  t  }|jd }d }|jD ]J}|jdkr0|j}q|jdkrB|j}q|jdkrT|j}q|jdkr|j}q| |jd  }	|	t|j d  }
|d urt	|
jD ]4}t
|
| d||   ||  ||  d |
|< qt|	dt|j  |
}nRt	|
jD ](}t
|
| ||  ||  d |
|< qt|	dt|j  |
}|||fS rM   )r   r   r(   r)   r*   r   r   r   r   r,   r-   r   rN   r   r   r   onnx_counter_maxpool  s,    





2 &rS   c                 C   s,   t  }|jd }| |jd  }|}|||fS r=   r   r   r   r   r   r   r   r;   r6   r   r   r   onnx_counter_globalaveragepool/  s
    
rV   c           	      C   sX   |j d j}| |jd  }|jD ]}| | | }q |}|||< |jd }t }|||fS r=   )r(   r+   r   r   r   )	r   r   rP   r;   r+   Z
dim_concatr6   r   r   r   r   r   onnx_counter_concat7  s    

rW   c                 C   s,   t  }|jd }| |jd  }|}|||fS r=   rT   rU   r   r   r   onnx_counter_clipE  s
    
rX   )ZMatMulAddZConvZMulConstantZBatchNormalizationZReluZ
ReduceMeanSubPowZSqrtDivZInstanceNormalizationZSoftmaxZPadZAveragePoolZMaxPoolZFlattenZGemmZGlobalAveragePoolZConcatZClipN))Ztorchnumpyr   Zonnxr   Zthop.vision.basic_hooksr   Z	calc_funcr   r   r   r   r	   r
   r   r   r   r   r   r    r8   r:   r<   r@   rB   rD   rE   rF   rG   rH   rI   rK   rL   rO   rQ   rR   rS   rV   rW   rX   Zonnx_operatorsr   r   r   r   <module>   sd   0/		