U
    di                     @   sD  d dl mZmZmZmZ ddlmZ d dlmZm	Z	 dZ
dd Zdd	 Zeed
dddddddddg
Zdd e_edde eed
dddddgZdd e_edde eeef eee ef dddZee eeeef ddd Zee eee ef dd!d"Zee eee dd#d$Ze	eee e	eee d%S )&    )AnyDictTupleList   )compatibility)Context_register_pytree_nodezIf you are attempting to modify the kwargs or args of a torch.fx.Node object,
instead create a new copy of it and assign the copy to the node:
    new_args = ... # copy and mutate args
    node.args = new_args
c                 O   s   t dt| j dt d S )N'z$' object does not support mutation. )NotImplementedErrortype__name___help_mutation)selfargskwargs r   B/tmp/pip-unpacked-wheel-ua33x9lu/torch/fx/immutable_collections.py_no_mutation   s    r   c                 C   s.   t d| j | fi }|D ]}t||t q|S )NZ
immutable_)r   r   setattrr   )baseZmutable_functions	containerattrr   r   r   _create_immutable_container   s    r   __delitem____iadd____imul____setitem__appendclearextendinsertpopremovec                 C   s   t tt| ffS N)immutable_listtupleiterr   r   r   r   <lambda>       r)   T)Zis_backward_compatiblepopitemupdatec                 C   s   t t|  ffS r$   )immutable_dictr'   itemsr(   r   r   r   r)      r*   )dreturnc                 C   s   t |  t |  fS r$   )listvalueskeysr/   r   r   r   _immutable_dict_flatten$   s    r5   )r2   contextr0   c                 C   s   t dd t|| D S )Nc                 S   s   i | ]\}}||qS r   r   ).0keyvaluer   r   r   
<dictcomp>(   s      z-_immutable_dict_unflatten.<locals>.<dictcomp>)r-   zipr2   r6   r   r   r   _immutable_dict_unflatten'   s    r=   c                 C   s   | d fS r$   r   r4   r   r   r   _immutable_list_flatten*   s    r>   c                 C   s   t | S r$   )r%   r<   r   r   r   _immutable_list_unflatten-   s    r?   N)typingr   r   r   r   Z_compatibilityr   Ztorch.utils._pytreer   r	   r   r   r   r1   r%   
__reduce__dictr-   r5   r=   r>   r?   r   r   r   r   <module>   s2   
    

$ 