o
    §µi`  ã                   @   s4   e ZeZd
dd„Zd ddœdd„Zd dœdd	„Z d S )Nc                 c   s‚    |d ur|| ƒr| V  d S t | ttB ƒr%| D ]} t| |dE d H  qd S t | tƒr<|  ¡ D ]} t| |dE d H  q.d S | V  d S )N©Úis_leaf)Ú
isinstanceÚlistÚtupleÚflattenÚdictÚitems)Úxr   © r
   úI/home/ubuntu/.local/lib/python3.10/site-packages/einx/_src/util/pytree.pyr      s   €
ÿ
ÿ
r   F©r   Úassert_same_structurec                   sÞ  t ˆƒdkr
tdƒ‚ˆd ur-ˆˆd ƒr-t‡fdd„ˆdd … D ƒƒ}ˆ r)|s)J ‚ˆˆŽ S tˆd tƒritdd„ ˆdd … D ƒƒoKt ttt ˆƒƒƒdk}ˆ rS|sRJ ‚n|sYˆˆŽ S ‡ ‡‡fdd„tˆd	d
iŽD ƒS tˆd tƒr§tdd„ ˆdd … D ƒƒo‡t ttt ˆƒƒƒdk}ˆ r|sŽJ ‚n|s•ˆˆŽ S t‡ ‡‡fdd„tˆd	d
iŽD ƒƒS tˆd t	ƒrëˆd  
¡ ‰tdd„ ˆdd … D ƒƒoÏt‡fdd„ˆdd … D ƒƒ}ˆ r×|sÖJ ‚n|sÝˆˆŽ S ‡ ‡‡‡fdd„ˆd D ƒS ˆˆŽ S )Né    zAt least one tree is requiredc                 3   s    | ]}ˆ |ƒV  qd S ©Nr
   ©Ú.0r	   r   r
   r   Ú	<genexpr>   s   € zmap.<locals>.<genexpr>é   c                 s   ó    | ]}t |tƒV  qd S r   )r   r   r   r
   r
   r   r      ó   € c                    s$   g | ]}t ˆg|¢R ˆˆ d œŽ‘qS )r   ©Úmapr   ©r   Úfuncr   r
   r   Ú
<listcomp>    s   $ zmap.<locals>.<listcomp>ÚstrictFc                 s   r   r   )r   r   r   r
   r
   r   r   "   r   c                 3   s(    | ]}t ˆg|¢R ˆˆ d œŽV  qdS )r   Nr   r   r   r
   r   r   '   s   €& c                 s   r   r   )r   r   r   r
   r
   r   r   *   r   c                 3   s    | ]	}|  ¡ ˆ kV  qd S r   ©Úkeysr   r   r
   r   r   *   s   € c                    s4   i | ]‰ ˆ t ˆg‡ fd d„ˆD ƒ¢R ˆˆdœŽ“qS )c                    s   g | ]}|ˆ  ‘qS r
   r
   r   ©Úkr
   r   r   /   s    z"map.<locals>.<dictcomp>.<listcomp>r   r   )r   )r   r   r   Útreesr   r   Ú
<dictcomp>/   s   4 zmap.<locals>.<dictcomp>)ÚlenÚ
ValueErrorÚ_allr   r   ÚsetÚ_mapÚzipr   r   r   )r   r   r   r    Úsame_structurer
   )r   r   r   r   r    r   r      s<   0
 0
$8
r   r   c                G   s"   t | g|¢R d|iŽ}tt|ƒƒS )Nr   )r   r$   r   )Úpredr   r    Ú	bool_treer
   r
   r   Úall4   s   r+   r   )r+   r$   r   r&   r   r
   r
   r
   r   Ú<module>   s
    
"