o
    åÊiG  ã                   @   sb   d dl mZ d dlmZ d dlZd dlmZ d dlmZ dd„ Z	defd	d
„Z
dd„ Zdd„ ZdS )é    )Úchain©ÚwrapsN)ÚModule©Útree_map_tensorc                 C   s   | d uS ©N© )Úvr	   r	   úM/home/ubuntu/.local/lib/python3.10/site-packages/torch_einops_utils/device.pyÚexists   s   r   Úmc                 C   s*   t t|  ¡ |  ¡ ƒd ƒ}t|ƒsd S |jS r   )Únextr   Ú
parametersÚbuffersr   Údevice)r   Úfirst_param_or_bufferr	   r	   r   Úmodule_device   s   r   c                    s   ‡ fdd„}|S )Nc                    s   t ˆ ƒ‡‡ fdd„ƒ}|S )Nc                     s(   t ‡ fdd„| |fƒ\} }ˆ| i |¤ŽS )Nc                    ó
   |   ˆ ¡S r   ©Úto©Út©r   r	   r   Ú<lambda>    ó   
 zImove_inputs_to_device.<locals>.decorator.<locals>.inner.<locals>.<lambda>r   )ÚargsÚkwargs)r   Úfnr	   r   Úinner   s   z7move_inputs_to_device.<locals>.decorator.<locals>.innerr   ©r   r   r   ©r   r   Ú	decorator   s   z(move_inputs_to_device.<locals>.decoratorr	   )r   r"   r	   r   r   Úmove_inputs_to_device   s   	r#   c                    s   t ˆ ƒ‡ fdd„ƒ}|S )Nc                    s@   t | ƒ‰ tˆ ƒrt‡ fdd„||fƒ\}}ˆ| g|¢R i |¤ŽS )Nc                    r   r   r   r   r   r	   r   r   /   r   z=move_inputs_to_module_device.<locals>.inner.<locals>.<lambda>)r   r   r   )Úselfr   r   r!   r   r   r   *   s   z+move_inputs_to_module_device.<locals>.innerr   r    r	   r!   r   Úmove_inputs_to_module_device(   s   r%   )Ú	itertoolsr   Ú	functoolsr   ÚtorchÚtorch.nnr   Ú%torch_einops_utils.torch_einops_utilsr   r   r   r#   r%   r	   r	   r	   r   Ú<module>   s    