a
    h                     @   s  U d dl mZ d dlmZ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&ee eee ddddZee ddddZeeee dddZeeef eee dddZee eee dddZe edf eee dddZ!eeee dddZ"eeef eedddZ#ee eedd d!Z$e edf eedd"d#Z%eeedd$d%Z&eeee# eeee$ ee e!e% e
j'j(D ]Z)ee)e!e% qeee"e& dS )'    )
namedtuple)AnyCallable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   >/var/www/auris/lib/python3.9/site-packages/torch/fx/_pytree.pyregister_pytree_flatten_spec   s    r   )r   r   c                 C   s   t | = t| = d S r   r   )r   r   r   r   _deregister_pytree_flatten_spec   s    r   )pytreespecr   c           
      C   s   |  r| gS |jtv r\t|j }|| |}g }t||jD ]\}}t||}||7 }q<|S t| \}}	||	krt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)Zis_leaftyper   zipZchildren_specstree_flatten_specr	   RuntimeError)
r   r   r   Zchild_pytreesresultchildZ
child_specZflatZflat_resultZ	real_specr   r   r   r   $   s     




r   )dr   r   c                    s    fdd|j D S )Nc                    s   g | ]} | qS r   r   ).0kr"   r   r   
<listcomp>A       z&_dict_flatten_spec.<locals>.<listcomp>)contextr"   r   r   r%   r   _dict_flatten_spec@   s    r*   c                    s    fddt |jD S )Nc                    s   g | ]} | qS r   r   r#   ir%   r   r   r&   E   r'   z&_list_flatten_spec.<locals>.<listcomp>rangenum_childrenr)   r   r%   r   _list_flatten_specD   s    r0   .c                    s    fddt |jD S )Nc                    s   g | ]} | qS r   r   r+   r%   r   r   r&   I   r'   z'_tuple_flatten_spec.<locals>.<listcomp>r-   r)   r   r%   r   _tuple_flatten_specH   s    r1   c                    s    fddt |jD S )Nc                    s   g | ]} | qS r   r   r+   r%   r   r   r&   M   r'   z,_namedtuple_flatten_spec.<locals>.<listcomp>r-   r)   r   r%   r   _namedtuple_flatten_specL   s    r2   c                 C   s   t | |jkS r   lenr/   r)   r   r   r   _dict_flatten_spec_exact_matchP   s    r5   c                 C   s   t | |jkS r   r3   r)   r   r   r   _list_flatten_spec_exact_matchT   s    r6   c                 C   s   t | |jkS r   r3   r)   r   r   r   _tuple_flatten_spec_exact_matchX   s    r7   c                 C   s   t | |jkS r   r3   r)   r   r   r   $_namedtuple_flatten_spec_exact_match\   s    r8   )N)*collectionsr   typingr   r   r   r   Ztyping_extensionsr   Ztorch.return_typesZtorchZtorch.utils._pytreer   r	   r
   listZFlattenFuncSpecboolZFlattenFuncExactMatchSpecr   dictr   __annotations__r   r   r   r   r   r   r   r*   r0   tupler1   r2   r5   r6   r7   r8   Zreturn_typesZall_return_typesreturn_typer   r   r   r   <module>   sf    
