
    2Vh4                     ^   d dl Z d dlZ d dlZd dlmZ d dlmZ i Z e j                  dddg      Z	 G d d      Z
	 	 d d	Zd
 Z ee j                  d d         e       dk(  r&d dlmZ d dlmZ  eed d        d Z eeed        d Zd!dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)"    N)backend)dmtreeClassRegistrationflatten	unflattenc                       e Zd Zd Zd Zy)TypeErrorRemappingc                      y N )selfs    J/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/tree/dmtree_impl.py	__enter__zTypeErrorRemapping.__enter__"   s        c                 H    |t         u rt        |      j                  |      y)NF)	TypeError
ValueErrorwith_traceback)r   exc_type	exc_value	tracebacks       r   __exit__zTypeErrorRemapping.__exit__%   s#    y Y'66yAAr   N)__name__
__module____qualname__r   r   r   r   r   r	   r	   !   s    r   r	   c                 P    |d }|| j                   }t        ||      t        | <   y )Nc                 "    | j                         S r   )tree_flattenxs    r   <lambda>z$register_tree_node.<locals>.<lambda>1   s    !1 r   )tree_unflattenr   REGISTERED_CLASSES)clsflatten_funcunflatten_funcs      r   register_tree_noder'   +   s2    
 1++/nMsr   c                     t        |        | S r   )r'   )r$   s    r   register_tree_node_classr)   7   s    sJr   c                 r    | j                         t        | j                               | j                         fS r   )valueslistkeys)ds    r   r!   r!   >   s#    qxxz4>16684 r   c                 @    t        j                  t        | |            S r   )collectionsOrderedDictzipmetadatachildrens     r   r!   r!   ?   s    {66s8X7NO r   
tensorflow)ListWrapper)_DictWrapperc                 
    | d fS r   r   r   s    r   r!   r!   H   s
    1d) r   c                 *    t        t        |            S r   )r7   r,   r3   s     r   r!   r!   I   s    ;tH~#> r   c                 ~    t        t        | j                                     }|D cg c]  }| |   	 }}|||fS c c}w r   )sortedr,   r-   )r.   r-   kr+   s       r   sorted_keys_and_valuesr>   L   s?    d1668n% $%1!A$%%tT!! &s   :c                 `    t        t        | |      D ci c]  \  }}||
 c}}      S c c}}w r   )r8   r2   )r4   r5   keychilds       r   r!   r!   T   s+    <*-h*ABJCS%ZB$
 Bs   *
c                 R    t        |       t        v xs t        j                  |       S r   )typer#   r   	is_nested)	structures    r   rD   rD   Z   s"    	?00OF4D4DY4OOr   c                      t               st        d  dt                      d  fd fd|rt        j                  |d      S  |      S )N`func` must be callable, got 	 of type c                 H    t        | t              r| j                  dk(  r|S | S )NMAP_TO_NONE)
isinstancerC   r   )value	new_values     r   remap_map_to_nonez#traverse.<locals>.remap_map_to_noned   s"    eT"u~~'Fr   c                 B    |       }| |t         j                        S t        j                  t	        |       d       }|y |j                  |       }t        |d         D cg c]  }t        j                  |d       }}|j                  |d   |      S c c}w )Nr   Ttop_down   )	r   rJ   r#   getrC   r   r,   traverser   )	sretregistrationflat_meta_sr    flat_sfuncrN   traverse_top_downs	         r   r[   z#traverse.<locals>.traverse_top_downi   s    1g?$S&*<*<==)--d1gt<"**1- +a.)
 OO-q4@
 
 %%k!nf==	
s   &Bc                 \   t         j                  t        |       d       }|H|j                  |       }t	        |d         D cg c]
  } 	|       }}|j                  |d   |      }nt        j                  |       s| }nt        | t        j                  j                        r8t        |       D cg c]  } 	| |          }}t        j                  | |      }n+| D cg c]
  } 	|       }}t        j                  | |      } |      }||S  |d       S c c}w c c}w c c}w )Nr   rR   )r#   rS   rC   r   r,   r   r   rD   rK   r0   abcMappingr<   _sequence_like)
rU   rW   rX   r    rV   r@   func_retrZ   rN   traverse_bottom_ups
          r   ra   z$traverse.<locals>.traverse_bottom_upw   s   )--d1gt<#&..q1K26{1~2FGQ%a(GCG((Q=C!!!$C;??2239?C#%af-CCC''3/C234Q%a(4C4''3/C9&sM,=h,MM H
 D 5s   D4D$#D)TrP   )callabler   rC   r   rT   )rZ   rE   rQ   rN   ra   r[   s   `  @@@r   rT   rT   ^   s_    D>+D64:,G
 	

>N" 0)dKK!),,r   c                 f    t        |       s| gS g fdt        j                  | d       S )Nc                    t         j                  t        |       d       }|5t        |j	                  |       d         }t        j                  |d      S t        |       s%j                  |        | t
        j                  S | S y )Nr   TrP   )
r#   rS   rC   r,   r   r   rT   rD   appendrJ   )rU   rW   rY   r%   	flatteneds      r   r%   zflatten.<locals>.flatten_func   sy    )--d1gt<#,..q1!45F??<$GG|Q)*6%%99r   TrP   )rD   r   rT   )rE   r%   rf   s    @@r   r   r      s5    Y{I OOL)d;r   c                 8   t         j                  t        |      d       }|c|j                  |      }|d   }t	        |      dk\  r|d   nt        j                         }t        ||      D ]  \  }}t        | |fz   ||        y t        j                  |      s|j                  | |f       y t        |t        j                  j                        r%t!        |      D ]  }t        | |fz   ||   |        y t#        |      D ]  \  }}t        | |fz   ||        y )Nr         )r#   rS   rC   r   len	itertoolscountr2   _recursive_flatten_with_pathr   rD   re   rK   r0   r]   r^   r<   	enumerate)	pathrE   rf   rW   flat_meta_pathsflatpathsr@   rL   s	            r   rm   rm      s    %))$y/4@L&..y9q! ?#q( A" 	
 eT* 	JJC(yI	Ji($	*+	I{66	7)$ 	C(vy~y	
 $I. 	JJC(yI	Jr   c                 D    t        |       sd| fgS g }t        d| |       |S )Nr   )rD   rm   )rE   rf   s     r   flatten_with_pathrt      s0    YY   I Y	:r   c                      t               st        d  dt                       fd}t        |      dk(  rt	        ||d         S t               5  t        j                   g| cd d d        S # 1 sw Y   y xY w)NrG   rH   c                 T    t        |       ry  |       }|t        j                  S |S r   )rD   r   rJ   )rU   rV   rZ   s     r   func_traverse_wrapperz,map_structure.<locals>.func_traverse_wrapper   s,    Q<1g;%%%
r   rR   r   )rb   r   rC   rj   rT   r	   r   map_structure)rZ   
structuresrw   s   `  r   rx   rx      s~    D>+D64:,G
 	
 :!-z!}==		 7##D6:67 7 7s   A33A<c                     t        |      st        d| dt        |             t               5  t	        j
                  | |g| cd d d        S # 1 sw Y   y xY w)NrG   rH   )rb   r   rC   r	   r   map_structure_up_to)shallow_structurerZ   ry   s      r   r{   r{      sa    D>+D64:,G
 	
 
	 P))*;TOJOP P Ps   AAc                    t         j                  t        |       d       }t        | t        j
                        rd }t         j                  t        |      d       }t        |t        j
                        rd }||k7  r*t        dt        |        dt        |       d|  d| d	      ||j                  |       }|j                  |      }t        |d         }t        |d         }|d   |d   k(  st        d|d    d	|d    d|  d| d	      t        |      t        |      k7  r*t        d
t        |        d	t        |       d|  d| d	      t        ||      D ]  \  }}	t        ||	        y t        j                  |       s(t        j                  |      rt        d|  d| d      y t        | t        t        j
                  t        j                  f      rt        |t        t        j
                  t        j                  f      st        dt        |       d|  d| d      t!        |       }
t!        |      }|
|k(  st        d|
 d| d|  d| d	      |
D ]  }t        | |   ||           y t        | t        j"                  j$                        rt        dt        |        d|  d| d      t        |       t        |      ur*t        dt        |        dt        |       d|  d| d	      t        |       t        |      k(  s*t        d
t        |        d	t        |       d|  d| d	      t        | |      D ]  \  }}	t        ||	        y )Nz*Custom node type mismatch; expected type: z, got type: z while comparing z and .r   rR   z%Mismatch custom node data; expected: z, got: zArity mismatch; expected: z1Structures don't have the same nested structure: z, zWExpected an instance of dict, collections.OrderedDict, or collections.defaultdict, got z*Dictionary key mismatch; expected key(s): z, got key(s): z7Encountered unregistered collections.abc.Mapping type: zExpected an instance of , got )r#   rS   rC   rK   r0   r1   r   r   r,   rj   r2   assert_same_structurer   rD   dictdefaultdictr<   r]   r^   )aba_registrationb_registrationa_flat_metab_flat_metaa_flatb_flatsub_asub_ba_keysb_keysr@   s                r   r   r      s   
 (++DGT:N![,,-'++DGT:N![,,-'"1gYl47) < cqc,
 	

 !$,,Q/$,,Q/k!n%k!n%1~Q/(^,GKN3C D##$#U1#Q0 
 v;#f+%,SVHGCF8 D##$#U1#Q0   / 	0LE5!%/	0a ACA3b1M   
	D+));+B+BC
 k--{/F/FG
 004Qy 9##$#U1#Q0 
 $$*8>& B##$#U1#Q0 
  	2C!!C&!C&1	2	A{..	/Ed1gY O cqc,
 	

 7$q'!*47)6$q' C##$#U1#Q0  1vQ,SVHGCF8 D##$#U1#Q0   1I 	0LE5!%/	0r   c                 H   t        t        |       D cg c]  \  }}|	 c}}      }t        t        |      D cg c]  \  }}|	 c}}      }||k7  rCd}|j                  |      }|r|d| z  }|j                  |      }|r|d| z  }t        |      y c c}}w c c}}w )Nz&`a` and `b` don't have the same paths.z
Paths in `a` missing in `b`:
z
Paths in `b` missing in `a`:
)setrt   
differencer   )	r   r   ro   _a_pathsb_pathsmsga_diffb_diffs	            r   assert_same_pathsr   7  s    '8';<GD!4<=G'8';<GD!4<=G'6##G,5fX>>C##G,5fX>>Co  =<s
   B
B
c                 >   t        |       s+t              dk(  rd   S t        dt               d      t              fdt	        j
                  | d      }	 t              \  }}t        d| d	t               d      # t        $ r |cY S w xY w)
NrR   r   zYIncorrect number of leaves provided by `flat_sequence` for `structure`; expected: 1, got r~   c                    t         j                  t        |       d       }|J|j                  |       }t	        j
                  t        |d         d      }|j                  |d   |      S t	        j                  |       s#	 t              \  }}|t        j                  S |S y # t        $ r t        dt               d      w xY w)Nr   TrP   rR   z@Too few leaves provided by `flat_sequence` for `structure`. Got r~   )r#   rS   rC   r   r   rT   r,   r   rD   nextrJ   StopIterationr   rj   )	rU   rW   rX   rY   r   rL   flat_sequenceflat_sequence_itr&   s	         r   r&   z(pack_sequence_as.<locals>.unflatten_funcT  s    )--d1gt<#&..q1K__[^ 4tF  ))+a.&AA!!!$ 015-2]v))EE  !  ((+M(:';1> s   B& #B& &"CTrP   zGToo many leaves provided by `flat_sequence` for `structure`; expected: r   )rD   rj   r   rn   r   rT   r   r   )rE   r   rV   indexr   r   r&   s    `   @@r   pack_sequence_asr   F  s     Y}" ##114]1C0DAG 
 !/& //.)d
CC()qvc-&8%9<
 	
  
s   %)B BBc                 $    d }t        || d      S )Nc                 <    t        | t              rt        |       S d S r   )rK   r,   tuple)instances    r   list_to_tuplez&lists_to_tuples.<locals>.list_to_tuples  s    ",Xt"<uXF$Fr   FrP   )rT   )rE   r   s     r   lists_to_tuplesr   r  s    G M9u==r   c                 t     t               st        d  dt                       fd}t        ||d      S )NrG   rH   c                     t        | t        t        f      rt        d | D              r	 |       }nt	        |       ry  |       }||S t
        j                  S )Nc              3   R   K   | ]  }t        |t        t        d       f       ! y wr   )rK   intrC   ).0es     r   	<genexpr>z>map_shape_structure.<locals>.map_shape_func.<locals>.<genexpr>  s%      0
12Jq3T
+,0
s   %')rK   r,   r   allrD   r   rJ   )r    rV   rZ   s     r   map_shape_funcz+map_shape_structure.<locals>.map_shape_func  sX    a$'C 0
670
 -
 q'Cq\q'Cos=6+=+==r   TrP   )rb   r   rC   rT   )rZ   rE   r   s   `  r   map_shape_structurer   y  sA    D>+D64:,G
 	
	> NI==r   )NN)T)r0   collections.abcrk   keras.src.backend.configr   keras.src.utils.module_utilsr   r#   
namedtupler   r	   r'   r)   r1   +tensorflow.python.trackable.data_structuresr7   r8   r>   rD   rT   r   rm   rt   rx   r{   r   r   r   r   r   r   r   r   <module>r      s       , /(  *K**)[1 
  	N
 4O 9GH>"
 	
P--`(J07*PP0f)X>>r   