o
    Xi                     @  sV   d dl mZ d dlZd dlmZmZmZ ddd	Zd
ddddZ	d
ddddZ
dS )    )annotationsN)_gqa_rms_normalization_rotary_embeddingmodelir.Modelreturn
int | Nonec                 C  sN   | j d}| j d}|dur#|dur#||kr#td| d| d|p&|S )z1Get the ONNX opset version imported by the model. zai.onnxNz$Model imports multiple onnx opsets: z and .)opset_importsget
ValueError)r   model_version1model_version2 r   b/home/ubuntu/.local/lib/python3.10/site-packages/onnxscript/rewriter/onnx_fusions/_onnx_fusions.py_get_onnx_opset_version
   s   r   Fdebugr   booldict[str, int]c                C  s>   i }t j| |d|d< tj| |d|d< tj| |d|d< |S )z&Apply fusions targeting ONNX opset 23.r   RMSNormalizationRotaryEmbeddingGQA)r   fuse_rms_normalizationr   fuse_rotary_embeddingr   fuse_gqa)r   r   countsr   r   r   _opset_23_fuse   s
   r   c                C  s    t | }|dkrt| |dS i S )z!Apply fusions targeting ONNX ops.   r   )r   r   )r   r   model_opset_versionr   r   r   fuse   s   r"   )r   r   r   r	   )r   r   r   r   r   r   )
__future__r   onnx_irir onnxscript.rewriter.rules.fusionr   r   r   r   r   r"   r   r   r   r   <module>   s   
	