
    2Vh3                        d dl Z d dlZ d dlmZ d Z e       dk(  r?d dlmZ d dlmZ 	  e j                  ed d d	
       d Z	 e j                  ee	d d	
       d ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zy# e
$ r Y *w xY w)    N)backendc                 0    t        j                  | d      S )Nkeras	namespace)optreeregister_pytree_node_class)clss    J/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/tree/optree_impl.pyregister_tree_node_classr      s    ,,SGDD    
tensorflow)ListWrapper)_DictWrapperc                 
    | d fS N xs    r   <lambda>r      s
    q$i r   c                 *    t        t        |            S r   )r   list)metadatachildrens     r   r   r      s    {4>'B r   r   r   c                 ~    t        t        | j                                     }|D cg c]  }| |   	 }}|||fS c c}w r   )sortedr   keys)dr   kvaluess       r   sorted_keys_and_valuesr!      s?    $qvvx.)D$()qad)F)4%% *s   :c                 `    t        t        | |      D ci c]  \  }}||
 c}}      S c c}}w r   )r   zip)r   r   keychilds       r   r   r       s+    |.1(H.EF
UeF( Fs   *
c                 4    t        j                  | dd       S NTr   none_is_leafr   r   tree_is_leaf)	structures    r   	is_nestedr-   )   s!    ""  r   c                       fd}r        }| |       S  |       }  |      }||S t        |t              r|j                  dk(  ry |S )Nc                      t        j                  fddd      \  } }|j                  dk(  r|j                  dk(  rS t        j                  || D cg c]  }t        |       c}      S c c}w )Nc                     | uS r   r   )r   r,   s    r   r   z5traverse.<locals>.traverse_children.<locals>.<lambda>4   s    ay0 r   Tr   is_leafr)   r      top_down)r   tree_flatten	num_nodes
num_leavestree_unflattentraverse)r   treedefcfuncr,   r5   s      r   traverse_childrenz#traverse.<locals>.traverse_children1   sw    "//0	
' !g&8&8A&=((?GH!$H5H Hs   A1
MAP_TO_NONE)
isinstancetype__name__)r=   r,   r5   r>   rettraversed_structures   ```   r   r:   r:   /   s`     9o;$&&/1&';&&#t!>Jr   c                 <    t        j                  | dd      \  }}|S r'   )r   r6   )r,   leaves_s      r   flattenrH   O   s&     ##IFA Mr   c                 d    t        j                  | dd      \  }}}t        t        ||            S r'   )r   tree_flatten_with_pathr   r#   )r,   pathsrF   rG   s       r   flatten_with_pathrL   Y   s4    44E61 E6"##r   c                      |st        d       fd}t        |      dkD  r|n }t        j                  |g|dddS )N#Must provide at least one structurec                  H    t        d | D              st        d       |  S )Nc              3   L   K   | ]  }t        j                  |d d        yw)Tr   r(   Nr*   ).0ss     r   	<genexpr>z9map_structure.<locals>.func_with_check.<locals>.<genexpr>f   s*      
 HH
s   "$0Structures don't have the same nested structure.)all
ValueError)argsr=   s    r   func_with_checkz&map_structure.<locals>.func_with_checke   s0     

 
 OPPT{r   r3   Tr   r(   )rV   lenr   tree_map)r=   
structuresrX   map_funcs   `   r   map_structurer]   `   sQ    >?? #&j/A"54H??,0G r   c                 ^    |st        d      fd}t        j                  || g|dddS )NrN   c                 N    t        j                  |       st        d       | S )NrT   r   r+   rV   )shallowrW   r=   s     r   )func_with_check_without_shallow_structurezFmap_structure_up_to.<locals>.func_with_check_without_shallow_structurez   s'    ""7+OPPT{r   Tr   r(   )rV   r   rZ   )shallow_structurer=   r[   rb   s    `  r   map_structure_up_tord   t   sG    >??
 ??1 
  r   c                 >    d }t        j                  || |dd       y )Nc                 z    t        j                  | dd      rt        j                  |dd      st        d      y )NTr   r(   rT   r`   )a_leafb_leafs     r   checkz$assert_same_structure.<locals>.check   s=    ""
$$
 OPPr   Tr   r(   r   rZ   )abri   s      r   assert_same_structurerm      s     OOE1adgFr   c                    t        t        j                  | dd            }t        t        j                  |dd            }||k7  rCd}|j                  |      }|r|d| z  }|j                  |      }|r|d| z  }t	        |      y )NTr   r(   z&`a` and `b` don't have the same paths.z
Paths in `a` missing in `b`:
z
Paths in `b` missing in `a`:
)setr   
tree_paths
differencerV   )rk   rl   a_pathsb_pathsmsga_diffb_diffs          r   assert_same_pathsrw      s    &##ADGLMG&##ADGLMG'6##G,5fX>>C##G,5fX>>Co r   c                 d    t        j                  | dd      \  }}t        j                  ||      S r'   )r   r6   r9   )r,   flat_sequencerG   treespecs       r   pack_sequence_asr{      s2    %%KAx   =99r   c                 $    d }t        || d      S )Nc                 <    t        | t              rt        |       S d S r   )r@   r   tuple)instances    r   list_to_tuplez&lists_to_tuples.<locals>.list_to_tuple   s    ",Xt"<uXF$Fr   Fr4   )r:   )r,   r   s     r   lists_to_tuplesr      s    G M9u==r   c                 <    d }t        j                  | ||dd      S )Nc                 V    t        | t        t        f      xr t        d | D              S )Nc              3   R   K   | ]  }t        |t        t        d       f       ! y wr   )r@   intrA   )rQ   es     r   rS   z>map_shape_structure.<locals>.is_shape_tuple.<locals>.<genexpr>   s%      4
12Jq3T
+,4
s   %')r@   r   r~   rU   r   s    r   is_shape_tuplez+map_shape_structure.<locals>.is_shape_tuple   s.    !dE]+ 
 4
674
 1
 	
r   Tr   r1   rj   )r=   r,   r   s      r   map_shape_structurer      s)    

 ?? r   )T)r   optree.utilskeras.src.backend.configr   r   +tensorflow.python.trackable.data_structuresr   r   register_pytree_noder!   rV   r-   r:   rH   rL   r]   rd   rm   rw   r{   r   r   r   r   r   <module>r      s      ,E
 9GH###B		
	&
 	$##" 	
@$((
G:>[  s   2A> >BB