
    2Vh                     R    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ej
                  j                  j                  dd       Zd f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      R/home/dcms/DCMS/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                  D ]  }t        | |      }t        |t        j                        rt        |      ||<   t        |t        j                        rt        |      ||<   t        |t        j                        szt        |      ||<    |S )N
savedmodeltrain_functiontest_functionpredict_function)getattrr-   r.   r/   super_trackable_childrenr   
isinstancer   TrackedListr    TrackedDictdict
TrackedSet)
r   	save_typer   r-   r.   r/   childrentracked_attrtracked_item	__class__s
            r   r2   zTFLayer._trackable_children0   s	   $$T+;TBN#D/4@M&t-?F"&D!%D$(D!7.yCFC$"0D!.D$4D! $ @&t\:lH,@,@A-1,-?H\*lH,@,@A-1,-?H\*lH,?,?@-1,-?H\*@ 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   <lambda>z1TFLayer._default_save_signature.<locals>.<lambda>c   s    bmmAGGQWW= r   c              3   P   K   | ]  }t        j                  fd |        yw)c                 D    t        j                  | j                        S r
   )rC   rD   input_dtype)r   r   s    r   rG   z;TFLayer._default_save_signature.<locals>.<genexpr>.<lambda>i   s    bmmAt/?/?@ r   N)r   map_shape_structure)r   valuer   s     r   r   z2TFLayer._default_save_signature.<locals>.<genexpr>g   s+      $  ((@%$s   #&)input_signaturec                      |       S r
   r   )r!   r   s    r   serving_defaultz8TFLayer._default_save_signature.<locals>.serving_defaultn   s    <r   )keras.src.models.functionalr>   keras.src.models.modelr?   keras.src.models.sequentialr@   r3   r0   rA   inputr   r   tuple_build_shapes_dictvaluesrC   function)r   r>   r?   r@   r!   rM   rO   s   `      r   _default_save_signaturezTFLayer._default_save_signatureL   s     	;0:$&tZ(mT2>%%++Fj)ZZF""=vO $ $ "44;;=	$ O 
_	5	  
6	  r   )NN)
checkpoint)__name__
__module____qualname__r   rC   __internal__r    no_automatic_dependency_trackingr*   r2   propertyrX   __classcell__)r<   s   @r   r   r   	   sE     __>>
 ?
>8 % %r   r   )

tensorflowrC   	keras.srcr   &keras.src.backend.tensorflow.trackabler   keras.src.utilsr   r   r   r   r   r   <module>re      s#      E $ $i  ir   