
    Phq                         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 d dlmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZmZ  ed       G d d             Zdee   dededede	eef   f
dZy)    )defaultdict)	dataclass)DictListOptionalSequenceTuple)dest)DispatcherSignature)method_with_native_function)ETKernelIndex)DispatchKeyNativeFunctionVariant)SelectiveBuilder)	concatMapTargetT)frozenc                   ,    e Zd Zededee   fd       Zy)ComputeNativeFunctionStubfreturnc           	      Z   t         j                  j                  vry t        j                  j
                  dj
                  j                  j                   dd      }|J t        j
                  j                        dk(  rd}nt        j
                  j                        dk(  rj
                  j                  j                  r.j
                  j                  j                  d   j                  }n3t        fdj
                  j                  j                  D        d      }|s4t        d	j
                         t        j
                  j                  j                        t        j
                  j                        k(  sQJ d
t        j
                  j                  j                         dt        j
                  j                                d}d}d|j!                  |gt        j
                  j                        z         d|j!                  j
                  j                  j                  D cg c]  }|j                   c}       d}t        j
                  j                        dkD  rd| dnd}d|j#                          d| dS 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ar   s     mC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torchgen/executorch/api/custom_ops.py	<genexpr>z5ComputeNativeFunctionStub.__call__.<locals>.<genexpr>%   s<      !>A66QVV^^A%6%;%;; !>s   AA	zCan't handle this return type zROut variant number of returns need to match the number of out arguments. Got outs z but returns zat::Tensor &, z::std::tuple<z>(
                z
            )zreturn ;
z {
    z
}
    )r   functionvariantsr   from_schemar"   r$   overload_namelenr#   	argumentsoutnextflat_non_out	Exceptionstrjoindefn)selfr   sigret_nametensor_typecommarret_strs    `      r'   __call__z"ComputeNativeFunctionStub.__call__   s?   1::-!--FF\!&&++*C*C)DAFu
 qvv~~!#H A%vv##66++//277!"!1!1!>!>
  "@ IJJqvv''++,AFFNN0CC  !1!1!5!567}SEXDY[C
 )KE([MCDW4W)X(Y ZQVV-=-=-A-AB-AQVV-ABCD EH ,/qvv~~+>+BGH:Q' I  	 Cs   
J(N)__name__
__module____qualname__r   r   r   r6   r@        r'   r   r      s&     (. (Xc] ( !(rE   r   native_functionsselectorkernel_indexrocmr   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)rI   r   class_method_nameskip_dispatcher_op_registrationz
TORCH_LIBRARY_IMPL(r)   z, m) {
z
};)r   CPU_to_backend_indexr   list	namespaceappenditemsr0   r7   r   r
   RegisterDispatchKeyr   REGISTRATIONANONYMOUS_DEFINITION)rF   rG   rH   rI   dispatch_keybackend_index"static_init_dispatch_registrationsns_grouped_native_functionsnative_functionrP   	functionsdispatch_registrations_bodyanonymous_definitions                r'   gen_custom_ops_registrationr^   A   sU   ( ??L 224M)+&CNtCT+#O$=$=>EEoV , !< A A C	9y>Q&*ii,,%++ !$*.8= '
#  	+ 3;b /  / 	*' !D.  99((!// &*49 !	
   !CCCrE   N)collectionsr   dataclassesr   typingr   r   r   r   r	   torchgenr
   torchgen.api.typesr   torchgen.contextr   torchgen.executorch.modelr   torchgen.modelr   r   r   !torchgen.selective_build.selectorr   torchgen.utilsr   r   r   boolr6   r^   rD   rE   r'   <module>rj      s    # ! 8 8  3 8 3 ? ? > ,
 $* * *ZBD~.BD BD  	BD
 BD 38_BDrE   