o
    bi-                     @   sZ   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ	 d dlm
Z
 G dd dZdS )    N)treeconvert_spec_to_tensor)
tensorflow)	torch_xlac                   @   s$   e Zd Zdd Zdd Zdd ZdS )TorchExportArchivec                 C      t d)Nzn`track` is not supported for `Layer`s and `Model`s in the torch backend. Use `track_and_add_endpoint` instead.NotImplementedError)selflayer r   R/home/ubuntu/.local/lib/python3.10/site-packages/keras/src/backend/torch/export.py_track_layer      zTorchExportArchive._track_layerc                 K   r   )Nzu`add_endpoint` is not supported for `Layer`s and `Model`s in the torch backend. Use `track_and_add_endpoint` instead.r	   )r   namefninput_signaturekwargsr   r   r   add_endpoint   r   zTorchExportArchive.add_endpointc                 K   s8  t jddd t jddd t|tjjs"td| dt| dt	dd	 |}t
|}tjj||d d
d}tjj|d}tj||}t|jj }	|	D ]}
d|
vr]|jj|
 qPt|j}dd |j D |_dd |jD |_| j jt|j |j 7  _dd }tj||jjd ||d}|S )Nignorez.*created when tracing.*)messagez).*Unable to find the path of the module.*zH`resource` must be an instance of `torch.nn.Module`. Received: resource=z
 (of type )c                 S   s   t | ddS )N   )replace_none_numberr   )xr   r   r   <lambda>'   s    z;TorchExportArchive.track_and_add_endpoint.<locals>.<lambda>F)dynamic_shapesstrict)override_tracing_argumentsliftedc                 S   s"   i | ]\}}|t j|d |dqS )F)	trainabler   tfVariable).0kvr   r   r   
<dictcomp>?   s    z=TorchExportArchive.track_and_add_endpoint.<locals>.<dictcomp>c                 S   s   g | ]	}t j|d dqS )F)r!   r"   )r%   r'   r   r   r   
<listcomp>C   s    z=TorchExportArchive.track_and_add_endpoint.<locals>.<listcomp>c                    s4   ddl m dd dd   fdd}|S )	Nr   )xlac                 S   s$   t  | j}| jD ]}d ||< q	|S N)copyshapedynamic_dims)	signaturer-   ir   r   r   _get_shape_with_dynamicP   s   

zdTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_function.<locals>._get_shape_with_dynamicc                 S   s   g }|j d urt| } |jD ].}|jtjjjkr#|	|j
|j  q|jtjjjkr5|	|j|j  q|	| |j  q|S r+   )input_pytree_specr   flatteninput_locationstype_r   	stablehloVariableType	PARAMETERappend
state_dictr   CONSTANTadditional_constantsposition)argsmetabundle	call_argslocr   r   r   _extract_call_parametersV   s   



zeTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_function.<locals>._extract_call_parametersc                     sj   dd j jD }fddj jD } | j }jt|d||g jd}t|dkr3|d }|S )Nc                 S   s   g | ]}|j qS r   )dtyper%   sigr   r   r   r)   f   s    zfTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_function.<locals>.inner.<locals>.<listcomp>c                    s   g | ]} |qS r   r   rE   )r1   r   r   r)   g   s       )versionToutSoutfunction_listmoduler   r   )r?   output_signaturecall_moduletuplebytecodelen)r>   ToutsSoutsrA   resultsrC   r1   r@   functfxlar   r   innere   s    
zRTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_function.<locals>.inner)!tensorflow.compiler.tf2xla.pythonr*   )rV   r@   rX   r   rU   r   make_tf_functionM   s
   zCTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_functionr   )r   )warningsfilterwarnings
isinstancetorchnnModule	TypeErrortyper   map_structurerO   exportr   r6   StableHLOExportOptionsexported_program_to_stablehlolist_bundler:   keyspopr,   deepcopyitemsr<   _tf_trackable	variablesvaluesr#   functionstablehlo_funcs)r   r   resourcer   r   sample_inputsexportedoptionsstablehlo_modelstate_dict_keysr&   r@   rZ   decorated_fnr   r   r   track_and_add_endpoint   sb   -z)TorchExportArchive.track_and_add_endpointN)__name__
__module____qualname__r   r   ry   r   r   r   r   r      s    r   )r,   r[   r^   	keras.srcr   keras.src.export.export_utilsr   keras.src.utils.module_utilsr   r#   r   r   r   r   r   r   <module>   s    