o
    s::j;  ã                   @  sŽ   d dl mZ d dlZd dlmZmZ e dej ¡Ze d¡Z	G dd„ dej
ƒZG dd„ dej
ƒZe ¡ Ze ¡ Ze eeg¡Ze e¡ZdS )	é    )ÚannotationsN)Ú_fusion_utilsÚpatterng       @c                   @  ó   e Zd Zdd„ Zdd„ ZdS )ÚGeluTanhFusionc                 C  sb   |  |d¡}| d|¡}| ||¡}| t|¡}| |¡}| |d¡}| d|¡}	| ||	¡}
|
S )Né   g÷Hmâä¦?é   ç      à?)ÚPowÚMulÚAddÚ_SQRT_TWO_OVER_PIÚTanh)ÚselfÚopÚxÚt1Út2Út3Út4Út5Út6Út7Úresult© r   úk/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/onnxscript/rewriter/ort_fusions/gelu.pyr      s   
zGeluTanhFusion.patternc                 C  ó   |j |ddS ©Nzcom.microsoft)Ú_domain)ÚFastGelu©r   r   r   r   r   r   Úrewrite   ó   zGeluTanhFusion.rewriteN©Ú__name__Ú
__module__Ú__qualname__r   r!   r   r   r   r   r      s    r   c                   @  r   )ÚGeluErfFusionc                 C  s>   |  |t¡}| |¡}| |d¡}| ||¡}| |d¡}|S )Ng      ð?r	   )ÚDivÚ	_SQRT_TWOÚErfr   r   )r   r   r   r   r   r   r   r   r   r   r   r       s   
zGeluErfFusion.patternc                 C  r   r   )ÚGelur    r   r   r   r!   )   r"   zGeluErfFusion.rewriteNr#   r   r   r   r   r'      s    	r'   )Ú
__future__r   ÚmathÚonnxscript.rewriterr   r   ÚsqrtÚpir   r)   ÚRewriteRuleClassBaser   r'   ÚruleÚ
_tanh_ruleÚ	_erf_ruleÚRewriteRuleSetÚ
gelu_rulesÚapply_fusion_rulesÚ	fuse_gelur   r   r   r   Ú<module>   s   
