
    2Vh-                     `    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      Zy)    N)treeconvert_spec_to_tensor)
tensorflow)	torch_xlac                       e Zd Zd Zd Zd Zy)TorchExportArchivec                     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layers     N/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/backend/torch/export.py_track_layerzTorchExportArchive._track_layer   s    !=
 	
    c                     t        d      )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kwargss        r   add_endpointzTorchExportArchive.add_endpoint   s    !C
 	
r   c           
         t        j                  dd       t        j                  dd       t        |t        j                  j
                        st        d| dt        |       d      t        j                  d |      }t        |      }t        j                  j                  ||d d	
      }t        j                  j                  |      }t        j                  j                  ||      }t!        |j"                  j$                  j'                               }	|	D ],  }
d|
vs|j"                  j$                  j)                  |
       . t+        j,                  |j"                        }|j$                  j/                         D 
ci c]  \  }
}|
t1        j2                  |d	|
        c}}
|_        |j4                  D cg c]  }t1        j2                  |d	       c}|_        | j6                  xj8                  t!        |j$                  j;                               |j4                  z   z  c_        d }t1        j<                   ||j"                  j>                  d   |      |      }|S c c}}
w c c}w )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                     t        | d      S )N   )replace_none_numberr   )xs    r   <lambda>z;TorchExportArchive.track_and_add_endpoint.<locals>.<lambda>'   s    ,QAF r   F)dynamic_shapesstrict)override_tracing_argumentslifted)	trainabler   )r%   c                 :     ddl m d d  fd}|S )Nr   )xlac                 p    t        j                   | j                        }| j                  D ]  }d ||<   	 |S N)copyshapedynamic_dims)	signaturer+   is      r   _get_shape_with_dynamiczdTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_function.<locals>._get_shape_with_dynamicP   s7    		)//2"// $A#E!H$r   c                    g }|j                   t        j                  |       } |j                  D ]  }|j                  t
        j                  j                  j                  k(  r)|j                  |j                  |j                            ]|j                  t
        j                  j                  j                  k(  r)|j                  |j                  |j                            |j                  | |j                             |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locs        r   _extract_call_parameterszeTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_function.<locals>._extract_call_parametersV   s    	))5<<-D// =CyyI$7$7$D$D$N$NN!(():):388)DEi&9&9&F&F&O&OO!(("77E "((cll);<= ! r   c                  j   	j                   j                  D cg c]  }|j                   }}	j                   j                  D cg c]
  } |       }} | 	j                         }
j                  t	        |      d||g 	j
                        }t        |      dk(  r|d   }|S c c}w c c}w )N   )versionToutSoutfunction_listmoduler   r   )r>   output_signaturedtypecall_moduletuplebytecodelen)r=   sigToutsSoutsr@   resultsrB   r/   r?   functfxlas         r   innerzRTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_function.<locals>.innere   s    .2ii.H.HIsII  $yy99 ,C0  5T499fM	++)$"$== ,  u:?%ajG! Js   B+B0)!tensorflow.compiler.tf2xla.pythonr'   )rT   r?   rV   rB   r/   rU   s   `` @@@r   make_tf_functionzCTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_functionM   s!    F! & Lr   r   )r   ) warningsfilterwarnings
isinstancetorchnnModule	TypeErrortyper   map_structurerM   exportr   r5   StableHLOExportOptionsexported_program_to_stablehlolist_bundler9   keyspopr*   deepcopyitemstfVariabler;   _tf_trackable	variablesvaluesfunctionstablehlo_funcs)r   r   resourcer   r   sample_inputsexportedoptionsstablehlo_modelstate_dict_keyskr?   vrX   decorated_fns                  r   track_and_add_endpointz)TorchExportArchive.track_and_add_endpoint   sH   2LMI	
 (EHHOO4&&.Zz$x.9IL 
 **F
 m, <<&&mD ' 
 %%<<'4 = 
 $--KKg
 66AAFFHI ! 	:Aq ''2266q9	: 667 ))//1
1 r{{1A66

 6<5P5P'
01BKKU+'
#
 	$$""))+,v/J/JJ	
$
+	Z {{''77:F ,	
 C
'
s   #I4I:N)__name__
__module____qualname__r   r   r{    r   r   r	   r	      s    

gr   r	   )r*   rY   r\   	keras.srcr   keras.src.export.export_utilsr   keras.src.utils.module_utilsr   rk   r   r	   r   r   r   <module>r      s&        @ 9 2t tr   