a
    5ºDfõ  ã                   @   sº   d dl Z d dlmZ d dlmZ ddd„Zeje je jdœdd„Zdd	d
„Z	ej
e je jdœdd„Zddd„Zeje je jdœdd„Zejdœdd„Zejdœdd„Zejdœdd„ZdS )é    N)ÚPackedSequenceTc                 C   s$   || |  | }|r ||d 7 }|S )Né   © )Ú
input_sizeÚhidden_sizeÚbiasÚ	total_opsr   r   ú[/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/thop/rnn_hooks.pyÚ_count_rnn_cell   s    r
   )ÚmÚxÚyc                 C   sF   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   s    r   c                 C   sl   d}||  | | }|r$||d 7 }||d 7 }|||  | | 7 }|rT||d 7 }||7 }||d 7 }|S )Nr   r   é   r   ©r   r   r   r   Z	state_opsr   r   r	   Ú_count_gru_cell   s    r   c                 C   sF   t | j| j| jƒ}|d  d¡}||9 }|  jt t|ƒg¡7  _d S r   )	r   r   r   r   r   r   r   r   r   r   r   r   r	   Úcount_gru_cell/   s    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   sF   t | j| j| jƒ}|d  d¡}||9 }|  jt t|ƒg¡7  _d S r   )	r   r   r   r   r   r   r   r   r   r   r   r   r	   Úcount_lstm_cellN   s    r   )r   c                 C   s(  | j }| j}| j}| j}t|d tƒrHt |d j¡}|d j 	d¡}n@| j
rl|d  	d¡}|d  	d¡}n|d  	d¡}|d  	d¡}d}	| jr¨|	t|||ƒd 7 }	n|	t|||ƒ7 }	t|d ƒD ]4}
| jrè|	t|d ||ƒd 7 }	qÄ|	t|||ƒ7 }	qÄ|	|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   Z	num_stepsr   Úir   r   r	   Ú	count_rnnW   s.    r(   c                 C   s(  | j }| j}| j}| j}t|d tƒrHt |d j¡}|d j 	d¡}n@| j
rl|d  	d¡}|d  	d¡}n|d  	d¡}|d  	d¡}d}	| jr¨|	t|||ƒd 7 }	n|	t|||ƒ7 }	t|d ƒD ]4}
| jrè|	t|d ||ƒd 7 }	qÄ|	t|||ƒ7 }	qÄ|	|9 }	|	|9 }	|  jt t|	ƒg¡7  _d S r   )r   r   r   r   r    r   r   r!   r"   r   r#   r$   r   r%   r   r   r   r&   r   r   r	   Ú	count_gru|   s.    r)   c                 C   s(  | j }| j}| j}| j}t|d tƒrHt |d j¡}|d j 	d¡}n@| j
rl|d  	d¡}|d  	d¡}n|d  	d¡}|d  	d¡}d}	| jr¨|	t|||ƒd 7 }	n|	t|||ƒ7 }	t|d ƒD ]4}
| jrè|	t|d ||ƒd 7 }	qÄ|	t|||ƒ7 }	qÄ|	|9 }	|	|9 }	|  jt t|	ƒg¡7  _d S r   )r   r   r   r   r    r   r   r!   r"   r   r#   r$   r   r%   r   r   r   r&   r   r   r	   Ú
count_lstm¡   s.    r*   )T)T)T)r   Ztorch.nnÚnnZtorch.nn.utils.rnnr   r
   ZRNNCellZTensorr   r   ZGRUCellr   r   ZLSTMCellr   ZRNNr(   ZGRUr)   ZLSTMr*   r   r   r   r	   Ú<module>   s   
		
	
	%%