U
    ©Ê¹jf  ã                   @   s*  U d dl mZmZmZmZmZmZmZ d dlm	Z	m
Z
mZ d dlmZ ee	e
gef Zi Zeee ef ed< 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 e
ee dœdd„Zee
ee dœdd„Zeeeƒ eeeƒ eeeƒ eeeƒ dS )é    )ÚCallableÚAnyÚTupleÚListÚDictÚTypeÚ
NamedTuple)ÚPyTreeÚTreeSpecÚLeafSpec)Ú
namedtupleÚSUPPORTED_NODESN)ÚtypÚflatten_fn_specÚreturnc                 C   s   |t | < d S )N)r   )r   r   © r   úO/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/fx/_pytree.pyÚregister_pytree_flatten_spec   s    r   )ÚpytreeÚspecr   c                 C   sp   t |tƒr| gS |jtkr,tt| ƒ› d�ƒ‚t|j }|| |ƒ}g }t||jƒD ]\}}t||ƒ}||7 }qP|S )Nzê does not have a flatten_fn_spec associated with it. Please register one with torch.fx._pytree.register_pytree_flatten_spec.  If you have serialized your model, make sure that any custom pytrees have been registered before loading it.)Ú
isinstancer   Útyper   ÚRuntimeErrorÚzipÚchildren_specsÚtree_flatten_spec)r   r   r   Zchild_pytreesÚresultÚchildZ
child_specZflatr   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>   s     z&_dict_flatten_spec.<locals>.<listcomp>)Úcontext©r   r   r   r!   r   Ú_dict_flatten_spec   s    r%   c                    s   ‡ fdd„t t|jƒƒD ƒS )Nc                    s   g | ]}ˆ | ‘qS r   r   ©r   Úir!   r   r   r"      s     z&_list_flatten_spec.<locals>.<listcomp>©ÚrangeÚlenr   r$   r   r!   r   Ú_list_flatten_spec   s    r+   c                    s   ‡ fdd„t t|jƒƒD ƒS )Nc                    s   g | ]}ˆ | ‘qS r   r   r&   r!   r   r   r"   "   s     z'_tuple_flatten_spec.<locals>.<listcomp>r(   r$   r   r!   r   Ú_tuple_flatten_spec!   s    r,   c                    s   ‡ fdd„t t|jƒƒD ƒS )Nc                    s   g | ]}ˆ | ‘qS r   r   r&   r!   r   r   r"   %   s     z,_namedtuple_flatten_spec.<locals>.<listcomp>r(   r$   r   r!   r   Ú_namedtuple_flatten_spec$   s    r-   )Útypingr   r   r   r   r   r   r   Ztorch.utils._pytreer	   r
   r   Úcollectionsr   ZFlattenFuncSpecr   Ú__annotations__r   r   r%   r+   r,   r-   ÚdictÚlistÚtupler   r   r   r   Ú<module>   s    $


