U
    9%ef                     @   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/Darija-Ai-API/env/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    $


