o
    ZhX                     @   s<  d dl Z d dlmZmZmZ d dlmZmZ d dlm	Z	m
Z
mZ d dlmZmZ d dlmZmZmZ d dlmZ dd	lmZ dd
lmZmZ ddlmZmZ ddlmZ ddgZ		ddede deee!e"ef df deee!e"ef df def
ddZ#dedede!eef de!e"e$eeeee!eef f f fddZ%dS )    N)AnyCallableUnion)BackendConfigget_native_backend_config)get_fuser_method_mapping)get_fusion_pattern_to_extra_inputs_getter&get_fusion_pattern_to_root_node_getter)NodePatternPattern)GraphModulemap_argNode)Graph   )FuseCustomConfig)'_get_fusion_pattern_to_fuse_handler_clsFuseHandler)	_is_matchMatchAllNode)_sorted_patterns_dictfuser   modelis_qatfuse_custom_configbackend_configreturnc                    s  |d u rt  }t|trtjdtdd t |}t|tr+tjdtdd t|}t|  }|d u r8t	 }t
t|}t|}t|}t|}t| | j|}	t }
i   fdd}dd }| jjD ]a}|	|jd	\}}}}}|d ur}||d }nd }||u r|d usJ |||}||}||d }g }|d ur||}||||
||||||	 |j< qd|d u s|tu r|
|| |j< qdt| |
} | S )
NzPassing a fuse_custom_config_dict to fuse is deprecated and will not be supported in a future version. Please pass in a FuseCustomConfig instead.   )
stacklevelzPassing a backend_config_dict to prepare is deprecated and will not be supported in a future version. Please pass in a BackendConfig instead.c                    s   t |  fddS )Nc                    s
    | j  S N)name)nodeenv L/var/www/auris/lib/python3.10/site-packages/torch/ao/quantization/fx/fuse.py<lambda>S   s   
 z(fuse.<locals>.load_arg.<locals>.<lambda>)r   )ar"   r$   r%   load_argR   s   zfuse.<locals>.load_argc                 S   s,   t | d ts| d } t | d tr| d S )N)
isinstancer   )Znode_patternr$   r$   r%   default_root_node_getterU   s   z&fuse.<locals>.default_root_node_getter)NNNNN)r   r*   dictwarningswarnFutureWarning	from_dictr   named_modulesr   r   r   r   r	   r   _find_matchesgraphr   nodesgetr    r   r   Z	node_copyr   )r   r   r   r   r1   Z"fusion_pattern_to_fuse_handler_clsZfuser_method_mappingZ"fusion_pattern_to_root_node_getterZ%fusion_pattern_to_extra_inputs_getterZfusion_pairsZfused_graphr(   r+   r!   Zmaybe_last_nodepatternmatched_node_patternobjnode_to_subpatternZnode_subpatternZroot_node_getter	root_nodeZextra_inputs_getterZextra_inputsr$   r"   r%   r       s   




rootr3   pattern_to_fuse_handler_clsc           	   	      s   t |  }i i } fdd t|jD ]'}|jvr=| D ]\}}g }t|||r< ||||||f||  nq!qS )Nc                    s   t | tr/| ^}}g } ||||| t||jD ]\}}	 ||	||| q|t| d S |jvrR|| | turT| ||< |\}
} }|
| |||f|j< d S d S d S r   )r*   tuplezipargsappendr    r   )r6   r!   matchr7   r9   sr?   Zcurrent_node_pattern
subpatternargr:   handlerapply_matchZ	match_mapr$   r%   rG      s,   




z"_find_matches.<locals>.apply_match)r,   r1   reversedr4   r    itemsr   )	r;   r3   r<   modulesr9   r!   r6   Zfuse_handler_clsr7   r$   rF   r%   r2      s*   

r2   )NN)&r-   typingr   r   r   Z$torch.ao.quantization.backend_configr   r   Z*torch.ao.quantization.backend_config.utilsr   r   r	   Ztorch.ao.quantization.utilsr
   r   Ztorch.fxr   r   r   Ztorch.fx.graphr   Zcustom_configr   Zfuse_handlerr   r   Zmatch_utilsr   r   Zpattern_utilsr   __all__boolr,   strr   r=   r2   r$   r$   r$   r%   <module>   sH   
h
 