o
    2h4                     @   s2  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 dddgZ	G dd dZ
		d0d	d
Zdd Zee jdd dd  e dkrfd dlmZ d dlmZ eedd dd  dd Zeeedd  dd Zd1ddZdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ ZdS )2    N)backend)dmtreeClassRegistrationflatten	unflattenc                   @   s   e Zd Zdd Zdd ZdS )TypeErrorRemappingc                 C   s   d S N )selfr	   r	   U/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/tree/dmtree_impl.py	__enter__"   s   zTypeErrorRemapping.__enter__c                 C   s   |t u rt||dS )NF)	TypeError
ValueErrorwith_traceback)r
   exc_type	exc_value	tracebackr	   r	   r   __exit__%   s   zTypeErrorRemapping.__exit__N)__name__
__module____qualname__r   r   r	   r	   r	   r   r   !   s    r   c                 C   s0   |d u rdd }|d u r| j }t||t| < d S )Nc                 S   s   |   S r   )tree_flattenxr	   r	   r   <lambda>1       z$register_tree_node.<locals>.<lambda>)tree_unflattenr   REGISTERED_CLASSES)clsflatten_funcunflatten_funcr	   r	   r   register_tree_node+   s
   r!   c                 C   s   t |  | S r   )r!   )r   r	   r	   r   register_tree_node_class7   s   r"   c                 C   s   |   t|  |  fS r   )valueslistkeysdr	   r	   r   r   >   s    r   c                 C   s   t t| |S r   )collectionsOrderedDictzipmetadatachildrenr	   r	   r   r   ?   s    
tensorflow)ListWrapper)_DictWrapperc                 C   s   | d fS r   r	   r   r	   r	   r   r   H   r   c                 C   s   t t|S r   )r/   r$   r+   r	   r	   r   r   I   s    c                    s,   t t  } fdd|D }|||fS )Nc                    s   g | ]} | qS r	   r	   ).0kr&   r	   r   
<listcomp>N       z*sorted_keys_and_values.<locals>.<listcomp>)sortedr$   r%   )r'   r%   r#   r	   r&   r   sorted_keys_and_valuesL   s   
r6   c                 C   s   t dd t| |D S )Nc                 S   s   i | ]\}}||qS r	   r	   )r1   keychildr	   r	   r   
<dictcomp>U   s    z<lambda>.<locals>.<dictcomp>)r0   r*   r+   r	   r	   r   r   T   s    c                 C   s   t | tv p
t| S r   )typer   r   	is_nested	structurer	   r	   r   r;   Z      r;   Tc                    sd   t  std  dt  dd  fdd fdd|r.tj|d	d
S |S )N`func` must be callable, got 	 of type c                 S   s   t | tr| jdkr|S | S )NMAP_TO_NONE)
isinstancer:   r   )value	new_valuer	   r	   r   remap_map_to_noned   s   z#traverse.<locals>.remap_map_to_nonec                    sl    | }|d ur|t jS tt| d }|d u rd S || }fddt|d D }||d |S )Nc                    s   g | ]
}t j |d dqS )Ttop_down)r   traverser1   r   )traverse_top_downr	   r   r3   q   s    z7traverse.<locals>.traverse_top_down.<locals>.<listcomp>r      )r   rA   r   getr:   r   r$   r   )sretregistrationflat_meta_sflat_s)funcrE   rJ   r	   r   rJ   i   s   


z#traverse.<locals>.traverse_top_downc                    s   t t d }|d ur'| }fddt|d D }||d |}n1t s/ }n)t t	j
jrI fddt D }t |}nfdd D }t |}|}|d u rb|S |d S )Nc                       g | ]} |qS r	   r	   rI   traverse_bottom_upr	   r   r3   {   r4   z8traverse.<locals>.traverse_bottom_up.<locals>.<listcomp>r   rK   c                    s   g | ]} | qS r	   r	   )r1   r7   )rM   rU   r	   r   r3      s    c                    rS   r	   r	   rI   rT   r	   r   r3      r4   )r   rL   r:   r   r$   r   r   r;   rB   r(   abcMappingr5   _sequence_like)rM   rO   rP   rN   func_ret)rR   rE   rU   )rM   r   rU   w   s   

z$traverse.<locals>.traverse_bottom_upTrF   )callabler   r:   r   rH   )rR   r=   rG   r	   )rR   rE   rU   rJ   r   rH   ^   s   rH   c                    s4   t | s| gS g  fdd tj | dd S )Nc                    sb   t t| d }|d urt|| d }tj |ddS t| s/|  | d u r-tj	S | S d S )Nr   TrF   )
r   rL   r:   r$   r   r   rH   r;   appendrA   )rM   rO   rQ   r   	flattenedr	   r   r      s   
zflatten.<locals>.flatten_funcTrF   )r;   r   rH   r<   r	   r\   r   r      s   
c           	      C   s   t t|d }|d ur8||}|d }t|dkr|d nt }t||D ]\}}t| |f || q(d S t	
|sF|| |f d S t|tjjrat|D ]}t| |f || | qQd S t|D ]\}}t| |f || qed S )Nr         )r   rL   r:   r   len	itertoolscountr*   _recursive_flatten_with_pathr   r;   r[   rB   r(   rV   rW   r5   	enumerate)	pathr=   r]   rO   flat_meta_pathsflatpathsr7   rC   r	   r	   r   rc      s,   

rc   c                 C   s&   t | s	d| fgS g }td| | |S )Nr	   )r;   rc   )r=   r]   r	   r	   r   flatten_with_path   s
   
ri   c                    s   t  std  dt   fdd}t|dkr#t||d S t  tj g|R  W  d    S 1 s:w   Y  d S )Nr?   r@   c                    s&   t | rd S  | }|d u rtjS |S r   )r;   r   rA   )rM   rN   rR   r	   r   func_traverse_wrapper   s   z,map_structure.<locals>.func_traverse_wrapperrK   r   )rZ   r   r:   r`   rH   r   r   map_structure)rR   
structuresrk   r	   rj   r   rl      s   $rl   c                 G   s^   t |std| dt| t  tj| |g|R  W  d    S 1 s(w   Y  d S )Nr?   r@   )rZ   r   r:   r   r   map_structure_up_to)shallow_structurerR   rm   r	   r	   r   rn      s   $rn   c              
   C   s  t t| d }t| tjrd }t t|d }t|tjr d }||kr9tdt|  dt| d|  d| d	|d ur|| }||}t|d }t|d }|d |d ksptd|d  d	|d  d|  d| d	t	|t	|krtd
t	|  d	t	| d|  d| d	t
||D ]	\}}	t||	 qd S t| st|rtd|  d| dd S t| ttjtjfrt|ttjtjfstdt| d|  d| dt| }
t|}|
|kstd|
 d| d|  d| d	|
D ]}t| | ||  qd S 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||	 q`d S )Nz*Custom node type mismatch; expected type: z, got type: z while comparing z and .r   rK   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   rL   r:   rB   r(   r)   r   r   r$   r`   r*   assert_same_structurer   r;   dictdefaultdictr5   rV   rW   )aba_registrationb_registrationa_flat_metab_flat_metaa_flatb_flatsub_asub_ba_keysb_keysr7   r	   r	   r   rr      s   



rr   c                 C   s|   t dd t| D }t dd t|D }||kr<d}||}|r*|d| 7 }||}|r8|d| 7 }t|d S )Nc                 S      g | ]\}}|qS r	   r	   r1   re   _r	   r	   r   r3   8  r4   z%assert_same_paths.<locals>.<listcomp>c                 S   r   r	   r	   r   r	   r	   r   r3   9  r4   z&`a` and `b` don't have the same paths.z
Paths in `a` missing in `b`:
z
Paths in `b` missing in `a`:
)setri   
differencer   )ru   rv   a_pathsb_pathsmsga_diffb_diffr	   r	   r   assert_same_paths7  s   

r   c                    s   t | st dkr d S tdt  dt  fddtj| dd}zt\}}td	| d
t  d tyJ   | Y S w )NrK   r   zYIncorrect number of leaves provided by `flat_sequence` for `structure`; expected: 1, got rp   c                    s   t t| d }|d ur%|| }tjt|d dd}||d |S t| sMzt	\}}|d u r9tj
W S |W S  tyL   tdt  dw d S )Nr   TrF   rK   z@Too few leaves provided by `flat_sequence` for `structure`. Got rp   )r   rL   r:   r   r   rH   r$   r   r;   nextrA   StopIterationr   r`   )rM   rO   rP   rQ   r   rC   flat_sequenceflat_sequence_itr    r	   r   r    T  s&   

z(pack_sequence_as.<locals>.unflatten_funcTrF   zGToo many leaves provided by `flat_sequence` for `structure`; expected: rq   )r;   r`   r   rd   r   rH   r   r   )r=   r   rN   indexr   r	   r   r   pack_sequence_asF  s.   r   c                 C   s   dd }t || ddS )Nc                 S   s   t | tr	t| S d S r   )rB   r$   tuple)instancer	   r	   r   list_to_tuples  r>   z&lists_to_tuples.<locals>.list_to_tupleFrF   )rH   )r=   r   r	   r	   r   lists_to_tuplesr  s   r   c                    s:   t  std  dt   fdd}t||ddS )Nr?   r@   c                    sP   t | ttfrtdd | D r | }n
t| rd S  | }|d ur%|S tjS )Nc                 s   s"    | ]}t |ttd fV  qd S r   )rB   intr:   )r1   er	   r	   r   	<genexpr>  s    
z>map_shape_structure.<locals>.map_shape_func.<locals>.<genexpr>)rB   r$   r   allr;   r   rA   )r   rN   rj   r	   r   map_shape_func  s   
z+map_shape_structure.<locals>.map_shape_funcTrF   )rZ   r   r:   rH   )rR   r=   r   r	   rj   r   map_shape_structurey  s   r   )NN)T)r(   collections.abcra   keras.src.backend.configr   keras.src.utils.module_utilsr   r   
namedtupler   r   r!   r"   r)   +tensorflow.python.trackable.data_structuresr/   r0   r6   r;   rH   r   rc   ri   rl   rn   rr   r   r   r   r   r	   r	   r	   r   <module>   sZ    

	
0
S,