
    sge                        d dl mZ d dlmZ d dlmZ d dlmZ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  ed       G d d             Z	 	 	 	 	 	 	 	 	 	 ddZy)    )annotations)defaultdict)	dataclass)SequenceTYPE_CHECKING)dest)DispatcherSignature)method_with_native_function)BaseTyBaseTypeDispatchKeyNativeFunctionVariant)	concatMapTarget)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	}nt%        d
j
                         t        j
                  j                  j                        t        j
                  j                        k(  rd}d}d|j'                  |gt        j
                  j                        z         d|j'                  j
                  j                  j                  D cg c]  }|j                   c}       d}nt)        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     U/var/www/html/venv/lib/python3.12/site-packages/torchgen/executorch/api/custom_ops.py	<genexpr>z5ComputeNativeFunctionStub.__call__.<locals>.<genexpr>*   s<      66QVV^^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>B   s'      67(6==11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::-!--FF\!&&++*C*C)DAFu
 qvv~~!#H A%vv##66++//277!"!1!1!>!>
  66>>!$))Xfmm-DD-H#8A  !!%%&#affnn*==(KE([MCDW4W)X(Y ZQVV-=-=-A-ABQVVBCD EH  ;<66>>  G5affnn5EFG  'KE([MCDW4W)X(Y ZQVV^^D^DEF GH ,/qvv~~+>+BGH: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`   S   s`   ( ??L 224M)+&CNtCT+ W#O$=$=>EEoVW !< A A C 	9y>Q&*ii,,%++ !$*.8= '
#  	+ 3;b /  / 	*'.  99((!// &*49 !	
   !CCCrG   N)
rU   zSequence[NativeFunction]rV   r   rW   r   rI   boolrB   ztuple[str, str])
__future__r   collectionsr   dataclassesr   typingr   r   torchgenr   torchgen.api.typesr	   torchgen.contextr
   torchgen.modelr   r   r   r   r   torchgen.utilsr   r   torchgen.executorch.modelr   !torchgen.selective_build.selectorr   r   r`   rF   rG   r&   <module>rm      s    " # ! *  3 8 Q Q , 7B
 $7 7 7tBD.BD BD  	BD
 BD BDrG   