o
    j9:j                  	   @   sX  U d dl mZ d dlmZ d dl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e f Zeeegef ZeZeZi Zeee ef ed< i Zeee edB f ed< ed	Zed
ZedZ	d*dee dededB 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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   W/home/nk/hobo-godmode/plappi-mvp/.venv/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>F       z&_dict_flatten_spec.<locals>.<listcomp>)contextr(   r   r   r,   r   _dict_flatten_specE   s   r1   c                        fddt |jD S )Nc                    r)   r   r   r*   ir,   r   r   r-   J   r.   z&_list_flatten_spec.<locals>.<listcomp>rangenum_childrenr0   r   r,   r   _list_flatten_specI      r8   .c                    r2   )Nc                    r)   r   r   r3   r,   r   r   r-   N   r.   z'_tuple_flatten_spec.<locals>.<listcomp>r5   r0   r   r,   r   _tuple_flatten_specM   r9   r:   c                    r2   )Nc                    r)   r   r   r3   r,   r   r   r-   R   r.   z,_namedtuple_flatten_spec.<locals>.<listcomp>r5   r0   r   r,   r   _namedtuple_flatten_specQ   r9   r;   c                 C      t | |jkS r   lenr7   r0   r   r   r   _dict_flatten_spec_exact_matchU      r?   c                 C   r<   r   r=   r0   r   r   r   _list_flatten_spec_exact_matchY   r@   rA   c                 C   r<   r   r=   r0   r   r   r   _tuple_flatten_spec_exact_match]   r@   rB   c                 C   r<   r   r=   r0   r   r   r   $_namedtuple_flatten_spec_exact_matcha   r@   rC   r   ),collectionsr   collections.abcr   typingr   r   typing_extensionsr   torch.return_typestorchtorch.utils._pytreer   r   r	   listFlattenFnSpecboolFlattenFnExactMatchSpecFlattenFuncSpecFlattenFuncExactMatchSpecr
   dictr   __annotations__r   r   r   r   r   r   r   r1   r8   tupler:   r;   r?   rA   rB   rC   return_typesall_return_typesreturn_typer   r   r   r   <module>   s~    
	

""