o
    Ti                     @   sX   d dl Z zd dlmZ d dlmZ d dlmZ W n	 ey!   Y nw dd Zdd Z	dS )	    N)FakeTensorMode)unset_fake_temporarily)wrap_to_fake_tensor_and_recordc                 C   sZ   t | dr+tj| j| j| j| j|  | jd}t	| tj
jr)tj
j|| jd} | S |} | S )Nds_id)dtypelayoutdevice
pin_memoryrequires_grad)r
   )hasattrtorchrandds_shaper   r   r   	is_pinnedr
   
isinstancenn	Parameter)tdata r   W/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/compile/patch_fake_tensor.pywrap_if_ds_param   s   
r   c                     s8   t fdd} | tjjj_ tj  fdd}|t_d S )Nc                    sD   t | } |g|R i |}tjj  }r |j||j| < |S N)r   r   _guardsTracingContexttry_gettensor_to_contextpop)r   argskwargsdummy_tensorrettracing_context)'original_wrap_to_fake_tensor_and_recordr   r   &wrap_to_fake_tensor_and_record_wrapper%   s
   zApatch_fake_tensor.<locals>.wrap_to_fake_tensor_and_record_wrapperc                    sF   t    | t|g|R i |W  d    S 1 sw   Y  d S r   )r   r   )selfr   r   r   )original_from_tensorr   r   from_tensor_wrapper1   s   $z.patch_fake_tensor.<locals>.from_tensor_wrapper)r   r   _dynamo	variablesbuilderr   from_tensor)r$   r'   r   )r&   r#   r   patch_fake_tensor    s   
r,   )
r   torch._subclassesr   torch._subclasses.fake_tensorr   torch._dynamo.variables.builderr   ImportErrorr   r,   r   r   r   r   <module>   s   