
    ij                         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 d dl	m
Z
 d dlmZ d dlmZ  G d	 d
e
      Zy)    N)layers)treeconvert_spec_to_tensor)make_tf_tensor_spec)SavedModelExportArchive)
tensorflow)	torch_xlac                   "    e Zd ZdZd Zd Zd Zy)TorchExportArchivez:Torch backend implementation of SavedModel export archive.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layers     s/var/www/html/emotional.easysim.app/public_html/venv/lib/python3.12/site-packages/keras/src/backend/torch/export.py_backend_track_layerz'TorchExportArchive._backend_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   _backend_add_endpointz(TorchExportArchive._backend_add_endpoint   s    !C
 	
r   c           
         || j                   v rt        d| d      t        |t        j                        st        d| dt        |       d      |j                  st        d      t        j                  t        |      }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      }g }|D ]w  }i }	t'        |j(                        D ]F  \  }
}|	|
dk(  r||	|
<   t        j"                  j%                  dt+        |       d|
 d      |	|
<   H |j-                  |	r|	nd        y t/        |      rt!        |      nd }t        j"                  j#                  |||d      }t0        j2                  j5                  |      }t0        j2                  j7                  ||      }t9        |j:                  j<                  j?                               }|D ],  }d|vs|j:                  j<                  jA                  |       . tC        jD                  |j:                        }|j<                  jG                         D ci c]  \  }}|tI        jJ                  |d|        c}}|_        |jL                  D cg c]  }tI        jJ                  |d       c}|_&        | jN                  xjP                  t9        |j<                  jS                               |jL                  z   z  c_(        d }tI        jT                   ||j:                  jV                  d   |      |      }|| jX                  |<   t[        | jN                  ||       | j                   j-                  |       |S c c}}w c c}w )NzEndpoint name 'z' is already taken.z^Invalid resource type. Expected an instance of a Keras `Layer` or `Model`. Received: resource=z
 (of type )zJThe layer provided has not yet been built. It must be built before export.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=c                     t        | d      S )N   )replace_none_numberr   )xs    r   <lambda>z;TorchExportArchive.track_and_add_endpoint.<locals>.<lambda>=   s    ,QAF r   batch   )minr   dim__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)	signaturer3   is      r   _get_shape_with_dynamiczdTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_function.<locals>._get_shape_with_dynamicv   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 r1   )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_parameters|   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   )rF   output_signaturedtypecall_moduletuplebytecodelen)rE   sigToutsSoutsrH   resultsrJ   r7   rG   functfxlas         r   innerzRTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_function.<locals>.inner   s    .2ii.H.HIsII  $yy99 ,C0  5T499fM	++)$"$== ,  u:?%ajG! Js   B+B0)!tensorflow.compiler.tf2xla.pythonr/   )r\   rG   r^   rJ   r7   r]   s   `` @@@r   make_tf_functionzCTorchExportArchive.track_and_add_endpoint.<locals>.make_tf_functions   s!    F! & Lr   )r   )._endpoint_names
ValueError
isinstancer   Layertypebuiltr   map_structurer   warningsfilterwarningstorchnnModule	TypeErrorrU   exportDim	enumerater3   rW   r@   anyr
   r=   StableHLOExportOptionsexported_program_to_stablehlolist_bundlerA   keyspopr2   deepcopyitemstfVariablerC   _tf_trackable	variablesvaluesfunctionstablehlo_funcs_endpoint_signaturessetattr)r   r   resourcer   r   sample_inputs	batch_dimr)   specdim_specdim_idxdim_valexportedoptionsstablehlo_modelstate_dict_keyskrG   vr`   decorated_fns                        r   track_and_add_endpointz)TorchExportArchive.track_and_add_endpoint   s   4'''tf4GHII(FLL1&&.Zz$x.9IL 
 ~~2 
 ,,
 	2LMI	
 (EHHOO4&&.Zz$x.9IL 
 **F
 m, LL$$W!$4	# 
	BDH$-djj$9  ?!|,5),1LL,<,<"3~#6"7q	B -= -) !!h(DA
	B 36n2E~.4 <<&&mN5 ' 
 %%<<'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 ,	
 +:!!$'""D,7##D)I
'
s   #O/O5N)__name__
__module____qualname____doc__r   r   r    r   r   r   r      s    D

Kr   r   )r2   rh   rj   	keras.srcr   r   keras.src.export.export_utilsr   r   +keras.src.export.saved_model_export_archiver   keras.src.utils.module_utilsr	   rz   r
   r   r   r   r   <module>r      s2         @ = O 9 2Z0 Zr   