U
    Jc                     @   sL  d dl mZmZmZmZ ddlmZ d dlmZm	Z	 ddg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_nodeimmutable_listimmutable_dictzIf 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-gikjz4vx/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)r
   tupleiterr   r   r   r   <lambda>       r*   T)Zis_backward_compatiblepopitemupdatec                 C   s   t t|  ffS r&   )r   r(   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	   __all__r   r   r   r1   r
   
__reduce__dictr   r5   r=   r>   r?   r   r   r   r   <module>   s4   
    

$ 