o
     io
                     @   st   d dl mZmZ d dlZd dlZd dlmZmZmZ d dl	m
Z
 g dZg dZdefdd	Zd
D ]Zee q1dS )    )AnyDictN)TestCasepretty_plotpretty_print)ReversibleSequence))i @      )i      )   i   )   r   r	   backwardc                    s  t d}r	dnd}t jt jfD ]}i }tD ]\}}tD ]t j||j||dt j||j||dt	t j
t j
gg j||dt jd||||d t jd||d ||d fdd	}fd
d}t|d| t|d| fD ]'}	tj|	jd }
d| d| d }||vri ||< |
d|| |	j< qqqt|d| ddd t|d| d| ddd qd S )Ncudaz+bw )devicedtype   )r   r   requires_grad   c                     s@    } t D ]}| |  } | |  } qrt|   | S N)rangetorchnormr   )y_)ar   depthfg X/home/ubuntu/.local/lib/python3.10/site-packages/xformers/benchmarks/benchmark_revnet.pynormal_step+   s   z!bench_revnet.<locals>.normal_stepc                     s    } rt |   | S r   )r   r   r   )r   )br   revseqr   r   reversible_step4   s   z%bench_revnet.<locals>.reversible_stepzresidual - fwzreversible - fwr   zBatch=z, Features=z, Depth=z.2fz
 --- Type: z --- zruntime in ms, lower is better)titleunitsz	RevNet-FW-r   )r$   r%   dash_key)r   r   float16float32SHAPESDEPTHnnLineartor   
ModuleListrandr   tritontestingdo_benchfunctionnamer   r   )r   r   bwr   resultsBKr    r#   testcasetimekeyr   )r   r!   r   r   r   r   r"   r   bench_revnet   sT   
	)
r=   )FT)typingr   r   r   r1   xformers.benchmarks.utilsr   r   r   xformers.components.reversibler   r*   r+   boolr=   r6   r   r   r   r   <module>   s   >
