
    2Vh                         d Z ddlZddlZ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Z G d dej                        Zd	 Zd
 Z	 ddZ	 ddZd Zy)z<JSON utilities for legacy saving formats (h5 and SavedModel)    N)serialization)serialization_lib)
tensorflow_EXTENSION_TYPE_SPECc                   (     e Zd ZdZd Z fdZ xZS )Encoderz>JSON encoder and decoder that handles TensorShapes and tuples.c                     t         j                  r=t        |t         j                        r#|j                  |j                         nd}d|dS t        |      S )zMEncodes objects for types that aren't handled by the default
        encoder.NTensorShape
class_nameitems)tf	available
isinstancer
   rankas_listget_json_type)selfobjr   s      R/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/legacy/saving/json_utils.pydefaultzEncoder.default   sD     <<JsBNN;%(XX%9CKKMtE"/%@@S!!    c                 4    t         |   t        |            S N)superencode_encode_tuple)r   r   	__class__s     r   r   zEncoder.encode   s    w~mC011r   )__name__
__module____qualname____doc__r   r   __classcell__)r   s   @r   r   r      s    H"2 2r   r   c                 2   t        | t              rdt        d | D              dS t        | t              r| D cg c]  }t        |       c}S t        | t              r-| j                         D ci c]  \  }}|t        |       c}}S | S c c}w c c}}w )N	__tuple__c              3   2   K   | ]  }t        |        y wr   )r   .0is     r   	<genexpr>z _encode_tuple.<locals>.<genexpr>$   s     7=+7   r   )r   tuplelistr   dictr   )xr)   keyvalues       r   r   r       s    !U%7Q77
 	
 
At	*+,Qa ,,	At	<=GGIFjc5]5))FF	 -Fs   B2Bc                 8    t        j                  | t              S )Nobject_hook)jsonloads_decode_helper)json_strings    r   decoder9   .   s    ::k~>>r   c           	      f    t        j                  | t        j                  t        d||            S )zFDecodes the JSON and deserializes any Keras objects found in the dict.T)deserializemodule_objectscustom_objectsr3   )r5   r6   	functoolspartialr7   )r8   r<   r=   s      r   decode_and_deserializer@   2   s2     ::%%))	
 r   c           	      D   t        | t              r~d| v ryt        j                  r| d   dk(  rt        j                  | d         S | d   dk(  r5ddlm} |j                  | d         j                  t        | d               S | d   d	k(  r| d
   }g }| d   D ]H  \  }}|j                  t        j                  |t        j                  j                  |                   J t        j                  j                  t        |      |d      S | d   dk(  rt!        d | d   D              S | d   dk(  rt"        S |r9d| v r5	 d| vrt%        j&                  | ||      S t)        j&                  | ||      S | d   dk(  r| d   j-                  d      S | S # t*        $ r Y | S w xY w)aJ  A decoding helper that is TF-object aware.

    Args:
      obj: A decoded dictionary that may represent an object.
      deserialize: Boolean. When True, deserializes any Keras
        objects found in `obj`. Defaults to `False`.
      module_objects: A dictionary of built-in objects to look the name up in.
        Generally, `module_objects` is provided by midlevel library
        implementers.
      custom_objects: A dictionary of custom objects to look the name up in.
        Generally, `custom_objects` is provided by the end user.

    Returns:
      The decoded object.
    r   r
   r   TypeSpecr   type_spec_registry	type_spec
serializedCompositeTensorspectensors)dtypeTexpand_compositesr%   c              3   2   K   | ]  }t        |        y wr   )r7   r'   s     r   r*   z!_decode_helper.<locals>.<genexpr>i   s     Aq*Ar+   __ellipsis____passive_serialization__module)r<   r=   	__bytes__r1   utf-8)r   r.   r   r   r
   tensorflow.python.frameworkrD   lookup_deserializer7   appendconstantdtypesas_dtypenestpack_sequence_asr,   Ellipsisr   deserialize_keras_objectr   
ValueErrorr   )	r   r;   r<   r=   rD   rH   rI   rJ   tensors	            r   r7   r7   A   s   $ #t!4<<< M1~~c'l33\"j0J)00[1ABOO"3|#45  \"&776{%(^ ME6NNF"))2D2DU2KL ww//"4('T 0   |+ACLAAA.0O8C?C'(AA'5'5  -EE'5'5  +-w<&&w//J	   J	s    F F 	FFc           	         t        | d      rt        j                  |       }d|d<   |S t        |       j                  t
        j                  k(  r:t        | t
        j                        r| j                         S | j                         S t        |       r| j                  S t        |       j                  t        j                  k(  r| j                  S t        j                  r:t        | t        j                  j                  j                         r| j"                  S t        j                  r*t        | t        j$                        r| j'                         S t        j                  r&t        | t        j(                        r| j*                  S t        | t,        j.                  j0                        rt3        |       S | t4        u rddiS t        j                  rOt        | t        j6                        r5ddlm} 	 |j=                  t        |             }d|| j?                         d	S t        j                  rt        | t        jB                  jD                        rt        jF                  |       }g }t        jH                  jK                  | d      D ]E  }|jM                  |jN                  j*                  |jQ                         j                         f       G dtS        |      |dS t        | tT        jV                        r| j"                  S t        | tX              rd| j[                  d      dS t]        d
|  dt        |        d      # t@        $ r tA        d
|  dt        |        d      w xY w)zSerializes any object to a JSON-serializable structure.

    Args:
        obj: the object to serialize

    Returns:
        JSON-serializable structure representing `obj`.

    Raises:
        TypeError: if `obj` cannot be serialized.
    
get_configTrO   r   rN   r   rC   rB   )r   rE   rF   zUnable to serialize z% to JSON, because the TypeSpec class z has not been registered.rK   rG   )r   rH   rI   rQ   rR   )r   r1   z to JSON. Unrecognized type .)/hasattrr   serialize_keras_objecttyper    npr   r   ndarraytolistitemcallabler   r   compatv1	Dimensionr1   r
   r   DTypenamecollectionsabcMappingr.   r\   rB   rS   rD   get_name
_serializer^   __internal__rG   type_spec_from_valuerZ   flattenrV   rJ   numpyr   enumEnumbytesr9   	TypeError)r   rF   rD   type_spec_namerH   rI   r_   s          r   r   r      s    sL!"99#>
26
./ Cyr{{*c2::&::<88: }|| CyT]]*||	||
3		(>(>?yy	||
37{{}	||
31xx#{../Cy
hn--
 
||
34B	/88cCN(+!nn.  
||
3(G(GH&&s+ggoocToB 	IFNNFLL--v||~/D/D/FGH	I ,!$'
 	
 #tyy!yy#u)CJJw4GHH

se#?S	{!L -  	&se ,c#<> 	s   8-M %M3)NN)FNN)r"   rp   ry   r>   r5   rx   rf   keras.src.legacy.savingr   keras.src.savingr   keras.src.utils.module_utilsr   r   r   JSONEncoderr   r   r9   r@   r7   r    r   r   <module>r      s`    B      1 . 9- 2d 2?
 6:  AEAHWr   