
    ij                     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e      Z
y)    N)tree)KerasAutoTrackable)tf_utils)trackingc                        e Zd Zd ZddZej                  j                  j                  d fd	       Z	d Z
d	dZed        Z xZS )
TFLayerc                 .    d | _         d | _        g | _        y N)_saved_model_inputs_spec_saved_model_arg_spec_tracked)selfargskwargss      w/var/www/html/emotional.easysim.app/public_html/venv/lib/python3.12/site-packages/keras/src/backend/tensorflow/layer.py__init__zTFLayer.__init__   s    (,%%)"    c                    | j                   yt        j                  t        j                  |      }t        j                  t        j                  |xs g       }i }|j                         D ]h  \  }}t        j                  |      }	|	D 
cg c]  }
t        j                  |
       }}
t        d |D              rPt        j                  ||      ||<   j || _         |gt        |      z   |f| _
        yc c}
w )a  Defines the save spec so that serialization can trace layer calls.

        The TensorSpecs of the call function `inputs`, `args`, and `kwargs` are
        saved into a tuple of `([inputs] + args, kwargs)`.

        Args:
          inputs: possibly nested inputs passed into the call function.
          args: a list of positional arguments passed into call.
          kwargs: a dictionary of keyword arguments passed into call.
        Nc              3   $   K   | ]  }|d u  
 y wr
    ).0ss     r   	<genexpr>z)TFLayer._set_save_spec.<locals>.<genexpr>'   s     1191s   )r   r   map_structurer   get_tensor_specitemsflattenanypack_sequence_aslistr   )r   inputsr   r   inputs_spec	args_speckwargs_speckeykwarg
flat_kwargx
flat_specss               r   _set_save_speczTFLayer._set_save_spec   s     ((4(()A)A6J&&x'?'?L	 ,,. 	HJCe,J?IJ!(2215JJJ1j11#44UJGK	H )4%MDO+&
" Ks   C5c                     |dk(  r<t        | dd       }t        | dd       }t        | dd       }d | _        d | _        d | _        t	        |   |fi |}|dk(  r&| _        | _        | _        | j                  |       |S )N
savedmodeltrain_functiontest_functionpredict_function)getattrr-   r.   r/   super_trackable_children_convert_tracked_collections)r   	save_typer   r-   r.   r/   children	__class__s          r   r2   zTFLayer._trackable_children1   s    $$T+;TBN#D/4@M&t-?F"&D!%D$(D!7.yCFC$"0D!.D$4D! --h7r   c                    | j                   D ]  }t        | |      }t        |t        j                        rt        |      ||<   8t        |t        j                        rt        j                  |      ||<   kt        |t        j                        rt        |      ||<   t        |t        j                        st        |      ||<    y)z8Convert TrackedList/Dict/Set to plain Python structures.N)r   r0   
isinstancer   TrackedListr    TrackedOrderedDictcollectionsOrderedDictTrackedDictdict
TrackedSet)r   r5   tracked_attrtracked_items       r   r3   z$TFLayer._convert_tracked_collectionsI   s     MM 		<L"46L,(<(<=)-l);&L(*E*EF)4)@)@)N&L(*>*>?)-l);&L(*=*=>)-l);&		<r   c                 f    ddl m t        | dd      }|yt        j                  fd|      S )a  Compatibility shim for TensorFlow saving utilities.

        TensorFlow's SavedModel / TFLite export paths (e.g.,
        tf.lite.TFLiteConverter.from_keras_model) expect a `_get_save_spec`
        method on models. This method generates TensorSpec objects
        describing the model's input signature.

        Args:
            dynamic_batch: whether to set the batch dimension to `None`.

        Returns:
            A TensorSpec, list or dict mirroring the model inputs, or
            `None` when specs cannot be inferred.
        r   )make_tf_tensor_specr!   Nc                      |       S )N)dynamic_batchr   )r(   rE   rC   s    r   <lambda>z(TFLayer._get_save_spec.<locals>.<lambda>n   s    )!=I r   )keras.src.export.export_utilsrC   r0   r   r   )r   rE   r!   rC   s    ` @r   _get_save_speczTFLayer._get_save_specV   s:      	F x.>!!I
 	
r   c                     ddl m} ddlm} ddlm} t         |      syd}t         |      r$t         dd       j                  j                  }nt         |      r j                  }|t        j                  d |      f}n,t         fd j                  j                         D              }t        j                   |	       fd
       }|S )z>For SavedModel support: returns the default serving signature.r   )
Functional)Model)
SequentialN_functionalc                 V    t        j                  | j                  | j                        S r
   )tf
TensorSpecshapedtype)r(   s    r   rF   z1TFLayer._default_save_signature.<locals>.<lambda>   s    bmmAGGQWW= r   c              3   P   K   | ]  }t        j                  fd |        yw)c                 D    t        j                  | j                        S r
   )rO   rP   input_dtype)r   r   s    r   rF   z;TFLayer._default_save_signature.<locals>.<genexpr>.<lambda>   s    bmmAt/?/?@ r   N)r   map_shape_structure)r   valuer   s     r   r   z2TFLayer._default_save_signature.<locals>.<genexpr>   s+      $  ((@%$s   #&)input_signaturec                      |       S r
   r   )r!   r   s    r   serving_defaultz8TFLayer._default_save_signature.<locals>.serving_default   s    <r   )keras.src.models.functionalrJ   keras.src.models.modelrK   keras.src.models.sequentialrL   r8   r0   rM   inputr   r   tuple_build_shapes_dictvaluesrO   function)r   rJ   rK   rL   r!   rX   rZ   s   `      r   _default_save_signaturezTFLayer._default_save_signaturer   s     	;0:$&tZ(mT2>%%++Fj)ZZF""=vO $ $ "44;;=	$ O 
_	5	  
6	  r   )NN)
checkpoint)T)__name__
__module____qualname__r   r*   rO   __internal__r    no_automatic_dependency_trackingr2   r3   rH   propertyrc   __classcell__)r6   s   @r   r   r      sO    
> __>> ?.<
8 % %r   r   )r;   
tensorflowrO   	keras.srcr   &keras.src.backend.tensorflow.trackabler   keras.src.utilsr   r   r   r   r   r   <module>rp      s&       E $ $M  Mr   