o
    ‹ÄŽiõ  ã                   @   sÆ   d dl Z d dlmZ d dlmZ ddd„Zdejde jde jfd	d
„Zddd„Z	dej
de jde jfdd„Zddd„Zdejde jde jfdd„Zdejfdd„Zdejfdd„Zdejfdd„ZdS )é    N)ÚPackedSequenceTc                 C   s$   || |  | }|r||d 7 }|S )Né   © )Ú
input_sizeÚhidden_sizeÚbiasÚ	total_opsr   r   úJ/home/jeff/fluffinator/venv/lib/python3.10/site-packages/thop/rnn_hooks.pyÚ_count_rnn_cell   s   r
   ÚmÚxÚyc                 C   óF   t | j| j| jƒ}|d  d¡}||9 }|  jt t|ƒg¡7  _d S ©Nr   )	r
   r   r   r   Úsizer   ÚtorchÚDoubleTensorÚint©r   r   r   r   Ú
batch_sizer   r   r	   Úcount_rnn_cell   ó   r   c                 C   sl   d}||  | | }|r||d 7 }||d 7 }|||  | | 7 }|r*||d 7 }||7 }||d 7 }|S )Nr   r   é   r   ©r   r   r   r   Ú	state_opsr   r   r	   Ú_count_gru_cell   s   r   c                 C   r   r   )	r   r   r   r   r   r   r   r   r   r   r   r   r	   Úcount_gru_cell/   r   r   c                 C   sH   d}| | | | }|r||d 7 }||d 7 }||d 7 }||7 }|S )Nr   r   é   r   r   r   r   r   r	   Ú_count_lstm_cell8   s   r   c                 C   r   r   )	r   r   r   r   r   r   r   r   r   r   r   r   r	   Úcount_lstm_cellN   r   r   c                 C   ó(  | j }| j}| j}| j}t|d tƒr$t |d j¡}|d j 	d¡}n | j
r6|d  	d¡}|d  	d¡}n|d  	d¡}|d  	d¡}d}	| jrT|	t|||ƒd 7 }	n|	t|||ƒ7 }	t|d ƒD ]}
| jrt|	t|d ||ƒd 7 }	qb|	t|||ƒ7 }	qb|	|9 }	|	|9 }	|  jt t|	ƒg¡7  _d S ©Nr   é   r   )r   r   r   Ú
num_layersÚ
isinstancer   r   ÚmaxÚbatch_sizesr   Úbatch_firstÚbidirectionalr
   Úranger   r   r   ©r   r   r   r   r   r   r#   r   Ú	num_stepsr   Úir   r   r	   Ú	count_rnnW   ó.   r-   c                 C   r    r!   )r   r   r   r#   r$   r   r   r%   r&   r   r'   r(   r   r)   r   r   r   r*   r   r   r	   Ú	count_gru|   r.   r/   c                 C   r    r!   )r   r   r   r#   r$   r   r   r%   r&   r   r'   r(   r   r)   r   r   r   r*   r   r   r	   Ú
count_lstm¡   r.   r0   )T)r   Útorch.nnÚnnÚtorch.nn.utils.rnnr   r
   ÚRNNCellÚTensorr   r   ÚGRUCellr   r   ÚLSTMCellr   ÚRNNr-   ÚGRUr/   ÚLSTMr0   r   r   r   r	   Ú<module>   s    
	
	
		%%