o
    ,hp                     @   sR   d dl Z d dlmZ d dlmZ dgZde jjdee j	df de jjfd	dZ
dS )
    N)constant_fold)freezing_passeslower_pt2e_quantized_to_x86modelexample_inputs.returnc                 C   sL   dd }dd }t jj| |dd|  }|| t|| t| |S )a  Lower a PT2E-qantized model to x86 backend.

    Args:
    * `model` (torch.fx.GraphModule): a model quantized by PT2E quantization flow.
    * `example_inputs` (tuple[torch.Tensor, ...]): example inputs for the model.

    Return:
    A GraphModule lowered to x86 backend.
    c                  S   s4   t j } t|  D ]}t jj|s| |= q| S )N)torchexportdefault_decompositionslistkeys_exportutils
_is_cia_op)decomp_tablek r   ^/var/www/html/scripts/venv/lib/python3.10/site-packages/torch/ao/quantization/pt2e/lowering.py_post_autograd_decomp_table   s   
z@lower_pt2e_quantized_to_x86.<locals>._post_autograd_decomp_tablec              	   S   s   t jj}| j}|jD ]<}|j|jjkrF||& |j	d }ddg}|j
|jj||fd}|| || W d    n1 sAw   Y  q
|  |   d S )Nr      )args)r   opsatengraphnodestargettdefaultinserting_beforer   call_functionpermutereplace_all_uses_with
erase_nodelint	recompile)mr   gnodexdims	perm_noder   r   r   _node_replace$   s   


z2lower_pt2e_quantized_to_x86.<locals>._node_replaceT)strict)r   r	   export_for_trainingrun_decompositionsmoduler   r   )r   r   r   r+   lowered_modelr   r   r   r      s   
)r    torch._inductor.constant_foldingr   +torch._inductor.fx_passes.freezing_patternsr   __all__fxGraphModuletupleTensorr   r   r   r   r   <module>   s    