o
    i                  	   @   sP  U d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	 d dl
Zd dlmZmZmZ eeegef Zeeegef Zi Zeee ef ed< i Zeee ee f ed< ed	Zed
ZedZ	d*dee dedee ddfddZdee ddfddZdededee fddZdeeef dedee fddZdee dedee fddZ de!edf dedee fddZ"de	dedee fd d!Z#deeef dedefd"d#Z$dee dedefd$d%Z%de!edf dedefd&d'Z&de	dedefd(d)Z'eeee$ eee e% ee!e"e& ej(j)D ]	Z*ee*e"e& qeee#e' dS )+    )
namedtuple)Callable)AnyOptionalTypeVar)
NamedTupleN)PyTreetree_flattenTreeSpecSUPPORTED_NODESSUPPORTED_NODES_EXACT_MATCH_T_K_Vclsflatten_fn_specflatten_fn_exact_match_specreturnc                 C   s   |t | < |t| < d S Nr   r   )r   r   r    r   R/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/torch/fx/_pytree.pyregister_pytree_flatten_spec   s   r   c                 C   s   t | = t| = d S r   r   )r   r   r   r   _deregister_pytree_flatten_spec   s   
r   pytreespecc           
      C   s   |  r| gS |jtv r/t|j }|| |}g }t|| D ]\}}t||}||7 }q|S t| \}}	||	krGtd|	 d|  d| d|S )Nz
Real spec z of object z! is different from expected spec z_. Please file an issue at https://github.com/pytorch/pytorch/issues/new?template=bug-report.yml)is_leaftyper   zipchildrentree_flatten_specr	   RuntimeError)
r   r   r   child_pytreesresultchild
child_specflatflat_result	real_specr   r   r   r    %   s    




r    dc                    s    fdd|j D S )Nc                       g | ]} | qS r   r   ).0kr)   r   r   
<listcomp>B       z&_dict_flatten_spec.<locals>.<listcomp>)contextr)   r   r   r-   r   _dict_flatten_specA   s   r2   c                        fddt |jD S )Nc                    r*   r   r   r+   ir-   r   r   r.   F   r/   z&_list_flatten_spec.<locals>.<listcomp>rangenum_childrenr1   r   r-   r   _list_flatten_specE      r9   .c                    r3   )Nc                    r*   r   r   r4   r-   r   r   r.   J   r/   z'_tuple_flatten_spec.<locals>.<listcomp>r6   r1   r   r-   r   _tuple_flatten_specI   r:   r;   c                    r3   )Nc                    r*   r   r   r4   r-   r   r   r.   N   r/   z,_namedtuple_flatten_spec.<locals>.<listcomp>r6   r1   r   r-   r   _namedtuple_flatten_specM   r:   r<   c                 C      t | |jkS r   lenr8   r1   r   r   r   _dict_flatten_spec_exact_matchQ      r@   c                 C   r=   r   r>   r1   r   r   r   _list_flatten_spec_exact_matchU   rA   rB   c                 C   r=   r   r>   r1   r   r   r   _tuple_flatten_spec_exact_matchY   rA   rC   c                 C   r=   r   r>   r1   r   r   r   $_namedtuple_flatten_spec_exact_match]   rA   rD   r   )+collectionsr   collections.abcr   typingr   r   r   typing_extensionsr   torch.return_typestorchtorch.utils._pytreer   r	   r
   listFlattenFuncSpecboolFlattenFuncExactMatchSpecr   dictr   __annotations__r   r   r   r   r   r   r    r2   r9   tupler;   r<   r@   rB   rC   rD   return_typesall_return_typesreturn_typer   r   r   r   <module>   sz    
	

""