Ë
    Z^(h†  ã                  óô   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZmZ d d	lmZmZ erd d
lmZ d dlmZ d dlmZ  ed¬«       G d„ d«      «       Z	 	 	 	 	 	 	 	 	 	 dd„Zy)é    )Úannotations)Údefaultdict)Ú	dataclass)ÚTYPE_CHECKING)Údest)ÚDispatcherSignature)Úmethod_with_native_function)ÚBaseTyÚBaseTypeÚDispatchKeyÚNativeFunctionÚVariant)Ú	concatMapÚTarget)ÚSequence)ÚETKernelIndex)ÚSelectiveBuilderT)Úfrozenc                  ó   — e Zd Zedd„«       Zy)ÚComputeNativeFunctionStubc           	     óª  ‡— t         j                  ‰j                  vry t        j                  ‰j
                  d‰j
                  j                  j                  › d�d¬«      }|€J ‚t        ‰j
                  j                  «      dk(  rd}�n}t        ‰j
                  j                  «      dk(  rÝ‰j
                  j                  j                  r.‰j
                  j                  j                  d   j                  }n3t        ˆfd„‰j
                  j                  j                  D «       d«      }|�s×‰j
                  j                  d   j                  t        t         j"                  «      k(  rd	}�n–t%        d
‰j
                  › �«      ‚t        ‰j
                  j                  j                  «      t        ‰j
                  j                  «      k(  rƒd}d}d|j'                  |gt        ‰j
                  j                  «      z  «      › d|j'                  ‰j
                  j                  j                  D �cg c]  }|j                  ‘Œ c}«      › d�}n²t)        d„ ‰j
                  j                  D «       «      sJ d‰j
                  j                  › �«       ‚d}d}d|j'                  |gt        ‰j
                  j                  «      z  «      › d|j'                  ‰j
                  j                  D �cg c]  }d	‘Œ c}«      › d�}t        ‰j
                  j                  «      dkD  rd|› d�nd}d|j+                  «       › d|› d�S c c}w c c}w )NÚwrapper_CPU_Ú_F)ÚprefixÚsymintr   Ú é   c              3  ó–   •K  — | ]@  }|j                   ‰j                  j                  d    j                   k(  r|j                  –— ŒB y­w)r   N)ÚtypeÚfuncÚreturnsÚname)Ú.0ÚaÚfs     €ú`/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torchgen/executorch/api/custom_ops.pyú	<genexpr>z5ComputeNativeFunctionStub.__call__.<locals>.<genexpr>,   s<   øè ø€ ò àØŸ6™6 Q§V¡V§^¡^°AÑ%6×%;Ñ%;Ò;ð Ÿ�ñùs   ƒAA	zat::Tensor()zCan't handle this return type zat::Tensor &ú, z::std::tuple<z>(
                z
            )c              3  óh   K  — | ]*  }|j                   t        t        j                  «      k(  –— Œ, y ­w)N)r   r   r
   ÚTensor)r#   r$   s     r&   r'   z5ComputeNativeFunctionStub.__call__.<locals>.<genexpr>D   s"   è ø€ ÒQ¸Q�q—v‘v¤¬&¯-©-Ó!8Õ8ÑQùs   ‚02z$Only support tensor returns but got z
at::Tensorzreturn ú;ú
z {
    z
}
    )r   ÚfunctionÚvariantsr   Úfrom_schemar    r"   Úoverload_nameÚlenr!   Ú	argumentsÚoutÚnextÚflat_non_outr   r   r
   r*   Ú	ExceptionÚjoinÚallÚdefn)	Úselfr%   ÚsigÚret_nameÚtensor_typeÚcommaÚrr   Úret_strs	    `       r&   Ú__call__z"ComputeNativeFunctionStub.__call__   sÃ  ø€ ä×Ñ 1§:¡:Ñ-Øä!×-Ñ-Ø�F‰F˜\¨!¯&©&¯+©+×*CÑ*CÐ)DÀAÐFÈuô
ˆð ˆÐˆÜˆq�v‰v�~‰~Ó !Ò#ØŠHÜ�—‘—‘Ó  AÒ%Ø�v‰v×Ñ×#Ò#ØŸ6™6×+Ñ+×/Ñ/°Ñ2×7Ñ7‘äóà!"§¡×!1Ñ!1×!>Ñ!>ôð
 ó�ò à—6‘6—>‘> !Ñ$×)Ñ)¬X´f·m±mÓ-DÒDà-’Hä#Ø8¸¿¹¸ÐAóð ô �—‘×!Ñ!×%Ñ%Ó&¬#¨a¯f©f¯n©nÓ*=Ò=à(ˆKØˆEØ(¨¯©°[°MÄCÈÏÉÏÉÓDWÑ4WÓ)XÐ(Yð ZØ—‘¨Q¯V©V×-=Ñ-=×-AÑ-AÖB¨˜QŸV›VÒBÓCÐDð Eð‰Hô ÑQÀ!Ç&Á&Ç.Á.ÔQÔQð Ø6°q·v±v·~±~Ð6FÐGóÐQð 'ˆKØˆEØ(¨¯©°[°MÄCÈÏÉÏÉÓDWÑ4WÓ)XÐ(Yð ZØ—‘°Q·V±V·^±^ÖD°š^ÒDÓEÐFð GðˆHô ,/¨q¯v©v¯~©~Ó+>ÀÒ+B�G˜H˜: QÑ'ÈˆðØ‡�ƒ€ð Ø€Ið ðð 	ùò Cùò Es   È:MË7	MN)r%   r   Úreturnz
str | None)Ú__name__Ú
__module__Ú__qualname__r	   rA   © ó    r&   r   r      s   „ à ò5ó !ñ5rG   r   c                óR  — t         j                  }|j                  «       }d}t        t        «      }| D ]   }||j
                     j                  |«       Œ" |j                  «       D ]o  \  }	}
t        |
«      dk(  rŒdj                  t	        t        t        j                  |t        j                  ||ddd¬«      |
«      «      «      }|d|	› d|› d	|› d
�z  }Œq dj                  t	        t        t        j                  |t        j                  ||ddd¬«      | «      «      «      }||fS )ad  
    Generate custom ops registration code for dest.RegisterDispatchKey.

    :param native_functions: a sequence of `NativeFunction`
    :param selector: for selective build.
    :param kernel_index: kernels for all the ops.
    :param rocm: bool for dest.RegisterDispatchKey.
    :return: generated C++ code to register custom operators into PyTorch
    r   r   r,   FN)Úrocmr   Úclass_method_nameÚskip_dispatcher_op_registrationz
TORCH_LIBRARY_IMPL(r(   z, m) {
z
})r   ÚCPUÚ_to_backend_indexr   ÚlistÚ	namespaceÚappendÚitemsr1   r7   r   r   ÚRegisterDispatchKeyr   ÚREGISTRATIONÚANONYMOUS_DEFINITION)Únative_functionsÚselectorÚkernel_indexrI   Údispatch_keyÚbackend_indexÚ"static_init_dispatch_registrationsÚns_grouped_native_functionsÚnative_functionrO   Ú	functionsÚdispatch_registrations_bodyÚanonymous_definitions                r&   Úgen_custom_ops_registrationr`   U   s`  € ô( —?‘?€LØ ×2Ñ2Ó4€MØ)+Ð&ÜCNÌtÓCTÐØ+ò WˆØ# O×$=Ñ$=Ñ>×EÑEÀoÕVðWð !<× AÑ AÓ Cò Ñˆ	�9Üˆy‹>˜QÒØØ&*§i¡iÜÜÜ×,Ñ,Ø%Ü×+Ñ+Ø Ø!Ø$Ø*.Ø8=ôð óóó'
Ð#ð  	+ð 3Ø�;˜b  ð /ØÐ ð ð/ñ 	Ñ*ð'ð.  Ÿ9™9ÜÜÜ×(Ñ(Ø!Ü×/Ñ/ØØØ Ø&*Ø49ôð !óó	
óÐð   Ð!CÐCÐCrG   N)
rU   zSequence[NativeFunction]rV   r   rW   r   rI   ÚboolrB   ztuple[str, str])Ú
__future__r   Úcollectionsr   Údataclassesr   Útypingr   Útorchgenr   Útorchgen.api.typesr   Útorchgen.contextr	   Útorchgen.modelr
   r   r   r   r   Útorchgen.utilsr   r   Úcollections.abcr   Útorchgen.executorch.modelr   Ú!torchgen.selective_build.selectorr   r   r`   rF   rG   r&   ú<module>rn      s“   ðÝ "å #Ý !Ý  å õ 3Ý 8ß QÕ Qß ,ñ Ý(å7ÝBñ
 �$Ô÷7ð 7ó ð7ðtBDà.ðBDð ðBDð  ð	BDð
 ðBDð ôBDrG   