§
    Û×jü  ã                   ó  — d Z ddlZddlmZ 	 ddlmZ n># eee	f$ r dZY n2e
$ r+Z ee¦  «                             d¦  «        s‚ dZY dZ[ndZ[ww xY w	 ddlmZ n># eee	f$ r dZY n2e
$ r+Z ee¦  «                             d¦  «        s‚ dZY dZ[ndZ[ww xY w	 ddlmZ n># eee	f$ r dZY n2e
$ r+Z ee¦  «                             d¦  «        s‚ dZY dZ[ndZ[ww xY wdxaa G d	„ d
e¦  «        Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„ZdS )aB  Optional Kitchen VAE fusions. The Q/K RMSNorm + RoPE (bit-identical to WanGP's Triton kernel, used when Triton is unavailable) is
more precise than the PyTorch path: both kernel precisions. Fast precision only: group_norm_silu_pad3d (more precise per layer, not
in the encoded latents) and fp16_conv3d (FP16 accumulation).é    N)Úkernel_policy)Úgroup_norm_silu_pad3dzinfer_schema(func):)Úrms_rope_split_half_)Úfp16_conv3dFc                   ó   — e Zd ZdZdS )ÚRotaryEmbeddingzLOrdinary cos/sin pair with per-decode Kitchen operands; no persistent cache.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úDC:\Users\johnn\OneDrive\Documents\AI\shared\kernels\video_kitchen.pyr   r   %   s   € € € € € ØVÐVØ€Dr   r   c                 ó$  — t           j                             ¦   «         sït          �è| j        rát           j                             | j        ¦  «        dk    r¹t          j        ¦   «         r¦t          | |f¦  «        }| dd | j
        d         dz  …f         |dd |j
        d         dz  …f         }} t          j        || ||fd¬¦  «        j        g |j
        ¢d‘d‘R Ž |_        t          j        d| j        t           j        ¬¦  «        |_        |S | |fS )N©é   r   .éÿÿÿÿé   )Údimé@   )ÚdeviceÚdtype)ÚtorchÚcompilerÚis_compilingÚ	_rms_ropeÚis_cudaÚcudaÚget_device_capabilityr   Úis_inference_mode_enabledr   ÚshapeÚstackÚreshapeÚkitchen_tableÚonesÚfloat32Úkitchen_scale)ÚcosÚsinÚpairÚcÚss        r   Úprepare_rotaryr-   *   s  € ÝŒN×'Ò'Ñ)Ô)ð ­iÐ.CÈÌÐ.CÝ”
×0Ò0°´Ñ<Ô<ÀÒGÐGÝÔ/Ñ1Ô1ð Hå  S˜zÑ*Ô*ˆØ�3Ð+˜œ 2œ¨!Ñ+Ð+Ð+Ô,¨c°#Ð7J¸¼	À"¼ÈÑ8JÐ7JÐ2JÔ.Kˆ1ˆØG�Uœ[¨!¨a¨R°°A¨¸BÐ?Ñ?Ô?ÔGÐWÈÌÐWÐRSÐWÐUVÐWÐWÐWˆÔÝ"œZ¨°3´:ÅUÄ]ÐSÑSÔSˆÔØˆØ�ˆ8€Or   c                 ór   — t           d uo.| j        t          j        t          j        fv ot          |d¦  «        S )Nr$   )r   r   r   Úbfloat16Úfloat16Úhasattr)ÚxÚrotarys     r   Úcan_fuse_rms_roper4   6   s4   € Ý˜DÐ Ðt Q¤Wµ´ÅÄÐ0OÐ%OÐtÕT[Ð\bÐdsÑTtÔTtÐtr   c           	      ó’   — t           st          d¦  «         da t          | ||j        |j        ||d         j        d         ¬¦  «        S )Nz>[H3 VAE] Comfy Kitchen fused Q/K RMSNorm + RoPE is being used.Tr   r   )ÚepsilonÚrot_dim)Ú_rms_rope_loggedÚprintr   r$   r'   r!   )ÚqÚkr3   Úepss       r   Úrms_roper=   :   sT   € åð  ÝÐNÑOÔOÐOØÐÝ�Q˜˜6Ô/°Ô1EØ ¨&°¬)¬/¸"Ô*=ð?ñ ?ô ?ð ?r   c                 ó>  — | j         \  }}}}}|\  }}	}
}}t          j        ¦   «         oõt          d uoì| j        oåt
          j                             | j        ¦  «        dk    o½t          j	        ¦   «         oª| j
        t
          j        t
          j        fv o‹|j        j
        | j
        k    ov|j        j
        | j
        k    oa|dz  dk    oXd|dz  z  dk    oL||j        z  dk    o>|j        dk    o3t!          ||	¦  «        |k     ot!          |
|¦  «        |k     o|||z   z  dk    S )Nr   é   r   é   i   iÿÿ  )r!   r   Úallow_approximateÚ_group_norm_silu_pad3dr   r   r   r   r   r    r   r0   r/   ÚweightÚbiasÚ
num_groupsÚmax)r2   ÚnormÚpadÚbatchÚchannelsÚframesÚheightÚwidthÚleftÚrightÚtopÚbottomÚfronts                r   Ú	availablerS   C   s_  € Ø-.¬WÑ*€Eˆ8�V˜V UØ&)Ñ#€Dˆ%��f˜eÝÔ+Ñ-Ô-ð 2Õ2HÐPTÐ2Tð 2ÐYZÔYbð 2Ý”
×0Ò0°´Ñ:Ô:¸gÒEð2åÔ/Ñ1Ô1ð2ð ”�EœM­5¬>Ð:Ð:ð2ð ”Ô! Q¤WÒ,ð	2ð 26´´ÀAÄGÒ1Kð	2ð
 ˜1‘ Ò!ð2ð
 '*¨X¸©]Ñ&;¸qÒ&@ð2ð ˜4œ?Ñ*¨aÒ/ð2ð 59´OÀtÒ4Kð2õ �D˜%Ñ Ô  5Ò(ð2õ .1°°fÑ-=Ô-=ÀÒ-Fð2ð ˜ %™Ñ(¨EÒ1ð3r   c           
      ón   — t          | |j        |j        |j        |j        t          |¦  «        d¦  «        S )NT)rB   rC   rD   rE   r<   Úlist)r2   rG   rH   s      r   r   r   Q   s/   € Ý! ! T¤[°$´)¸T¼_ÈdÌhÕX\Ð]`ÑXaÔXaÐcgÑhÔhÐhr   c                 óx  — t          j        ¦   «         o§t          d uož| j        o—t          j                             | j        ¦  «        dk    oot	          j        ¦   «         o\| j	        t          j
        k    oG|j        j	        t          j
        k    o-|j        d uo$|j        j	        t          j
        k    o
|j        dk    S )Nr   )é   rW   rW   )r   rA   Ú_fp16_conv3dr   r   r   r   r   r    r   r0   rC   rD   Údilation)r2   Úconvs     r   Ú
can_conv3dr[   U   sÅ   € ÝÔ+Ñ-Ô-ð jµ,ÀdÐ2Jð jÈqÌyð jÝ”
×0Ò0°´Ñ:Ô:¸gÒEðjåÔ/Ñ1Ô1ðjð ”�5œ=Ò(ðjð .2¬[Ô->Å%Ä-Ò-Oðjð ”	 Ð%ð	jð +/¬)¬/½U¼]Ò*Jð	jð PTÌ}Ð`iÒOið	kr   c           	      ó�   — t           st          d¦  «         da t          | |j        |j        |t          |j        ¦  «        ¦  «        S )Nz1[H3 VAE] Comfy Kitchen FP16 conv3d is being used.T)Ú_conv3d_loggedr9   rX   rC   rD   rU   Ústride)r2   rZ   Úresiduals      r   Úconv3dr`   ]   sB   € åð ÝÐAÑBÔBÐBØˆÝ˜˜4œ;¨¬	°8½TÀ$Ä+Ñ=NÔ=NÑOÔOÐOr   )N)r   r   Úshared.kernelsr   Úcomfy_kitchenr   rB   ÚImportErrorÚOSErrorÚRuntimeErrorÚ
ValueErrorÚexcÚstrÚ
startswithr   r   r   rX   r8   r]   Útupler   r-   r4   r=   rS   r[   r`   r   r   r   ú<module>rk      s™  ðð@ð @ð €€€Ø (Ð (Ð (Ð (Ð (Ð (ð"ØMÐMÐMÐMÐMÐMÐMøØ�W˜lÐ+ð "ð "ð "Ø!ÐÐÐØð "ð "ð "Øˆ3ˆs‰8Œ8×ÒÐ4Ñ5Ô5ð ØØ!ÐÐÐÐÐÐøøøøð"øøøð
Ø?Ð?Ð?Ð?Ð?Ð?Ð?øØ�W˜lÐ+ð ð ð Ø€I€I€IØð ð ð Øˆ3ˆs‰8Œ8×ÒÐ4Ñ5Ô5ð ØØ€I€I€I€I€I€Iøøøøðøøøð
Ø9Ð9Ð9Ð9Ð9Ð9Ð9øØ�W˜lÐ+ð ð ð Ø€L€L€LØð ð ð Øˆ3ˆs‰8Œ8×ÒÐ4Ñ5Ô5ð ØØ€L€L€L€L€L€Løøøøðøøøð
 %*Ð )Ð �>ð	ð 	ð 	ð 	ð 	�eñ 	ô 	ð 	ð
	ð 	ð 	ðuð uð uð?ð ?ð ?ð3ð 3ð 3ðið ið iðkð kð kðPð Pð Pð Pð Pð PsU   Ž •
A¡A¥!AÁAÁA Á
BÁ'BÁ+!BÂBÂB! Â!
CÂ-CÂ1!CÃC