
    [Th                         S SK Jr  S SKrS SKJr  S rSrSr " S S\R                  R                  5      r
SSS\S4S	 jr SS
 jrg)    )OptionalN)_NnapiSerializer      c                     ^  \ rS rSr% Sr\\R                  R                  R                     \
S'   \\R                     \
S'   \\R                     \
S'   S\R                  R                  S\R                  S\\R                     S\\   S	\\   S
\S\4U 4S jjr\R$                  R&                  S\\R                     4S j5       rS\\R                     S\\R                     4S jrSrU =r$ )NnapiModule   zTorch Module that wraps an NNAPI Compilation.

This module handles preparing the weights, initializing the
NNAPI TorchBind object, and adjusting the memory formats
of all inputs and outputs.
compweightsout_templatesshape_compute_module	ser_modelinp_mem_fmtsout_mem_fmtscompilation_preferencerelax_f32_to_f16c                    > [         TU ]  5         Xl        X l        X0l        X@l        XPl        / U l        S U l        X`l	        Xpl
        g N)super__init__r   r   r   r   r   r   r
   r   r   )	selfr   r   r   r   r   r   r   	__class__s	           U/var/www/auris/envauris/lib/python3.13/site-packages/torch/backends/_nnapi/prepare.pyr   NnapiModule.__init__   sG     	$8!"((	&<# 0    argsc                    U R                   b   eU R                  R                  U R                  U5      U l        U R
                   Vs/ s H  o"R                  5       PM     snU l        [        R                  R                  R                  5       nUR                  U R                  U R
                  U R                  U R                  5        X0l         g s  snf r   )r
   r   preparer   r   r   
contiguoustorchclasses_nnapiCompilationinit2r   r   )r   r   wr
   s       r   initNnapiModule.init0   s    yy   !66>>t~~tT04=1=}}##//1

NNLL''!!		
 	 >s   	Creturnc           	      |   U R                   c  U R                  U5        U R                   nUc   eU R                   Vs/ s H  n[        R                  " U5      PM     nn[        U5      [        U R                  5      :X  d   e/ n[        [        U5      5       H  nU R                  U   nUS:X  a#  UR                  X   R                  5       5        M;  US:X  a5  UR                  X   R                  SSSS5      R                  5       5        Mv  [        S5      e   UR                  XT5        [        U5      [        U R                  5      :X  d   e[        [        U R                  5      5       HC  nU R                  U   nUS;   a  M  US:X  a  XF   R                  SSSS5      XF'   M:  [        S5      e   U$ s  snf )Nr   r   r      zInvalid mem_fmt)r   r   )r
   r&   r   r    
empty_likelenr   rangeappendr   permute
ValueErrorrunr   )r   r   r
   outouts
fixed_argsidxfmts           r   forwardNnapiModule.forward?   s   99IIdOyy151C1CD1C#  %1CD4yC 1 12222
T#C##C(C ax!!$)"6"6"89!!$)"3"3Aq!Q"?"J"J"LM !233 $ 	"4yC 1 12222T//01C##C(C f} I--aAq9	 !233 2 5 Es    F9)	r
   r   r   r   r   r   r   r   r   )__name__
__module____qualname____firstlineno____doc__r   r    r!   r"   r#   __annotations__listTensornnModuleintboolr   jitexportr&   r7   __static_attributes____classcell__r   s   @r   r   r      s    5==''33
44%,,%%1#hhoo1 <<1 ell#	1
 3i1 3i1 !$1 1* YYell+  D. 43E  r   r   Fc           	         [        XX#U5      u  nnn	n
nn[        UUU	U
UUU5      n " S S[        R                  R                  5      nU" U5      n[        R
                  R                  U5      nSR                  S [        [        U5      5       5       5      nUS:  a  SnO!SR                  S [        U5       5       5      nUR                  S	U S
U SU S35        U$ )Nc                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )5convert_model_to_nnapi.<locals>.NnapiInterfaceWrapper   a  NNAPI list-ifying and de-list-ifying wrapper.

NNAPI always expects a list of inputs and provides a list of outputs.
This module allows us to accept inputs as separate arguments.
It returns results as either a single tensor or tuple,
matching the original module.
c                 .   > [         TU ]  5         Xl        g r   )r   r   mod)r   rO   r   s     r   r   >convert_model_to_nnapi.<locals>.NnapiInterfaceWrapper.__init__   s    GHr   )rO   )r9   r:   r;   r<   r=   r   rG   rH   rI   s   @r   NnapiInterfaceWrapperrL      s    		 	r   rQ   z, c              3   ,   #    U  H
  nS U 3v   M     g7f)arg_N .0r5   s     r   	<genexpr>)convert_model_to_nnapi.<locals>.<genexpr>   s     D1C#4u1Cs   r   z
retvals[0] c              3   .   #    U  H  nS U S3v   M     g7f)zretvals[z], NrT   rU   s     r   rW   rX      s     N:M3XcU#.:Ms   zdef forward(self, z):
    retvals = self.mod([z])
    return 
)process_for_nnapir   r    rA   rB   rE   scriptjoinr-   r,   define)modelinputs
serializerreturn_shapesuse_int16_for_qint16r   r   r   ser_model_tensorused_weightsr   r   retval_countnnapi_modelrQ   wrapper_model_pywrapper_modelarg_listret_exprs                      r   convert_model_to_nnapirm   a   s      	z2F	
 K  -[9II$$%56MyyDs6{1CDDHa77N%:MNN
XJ '##+* -Zr	#
 r   c                 @   [         R                  R                  U 5      n [        U[         R                  5      (       a  U/nU=(       d
    [        S US9nUR                  XU5      u  nnnnn	n
[         R                  " U[         R                  S9n " S S[         R                  R                  5      n[         R                  R                  U" 5       5      nS/U	 Vs/ s H	  nSU S3PM     sn-   nUR                  SR                  U5      5        UUUUUU
4$ s  snf )	N)configrd   )dtypec                       \ rS rSrSrSrg)-process_for_nnapi.<locals>.ShapeComputeModule   zCode-gen-ed module for tensor shape computation.

module.prepare will mutate ser_model according to the computed operand
shapes, based on the shapes of args.  Returns a list of output templates.
rT   N)r9   r:   r;   r<   r=   rG   rT   r   r   ShapeComputeModulerr      s    	r   rt   z\def prepare(self, ser_model: torch.Tensor, args: List[torch.Tensor]) -> List[torch.Tensor]:
z    r[   rY   )r    rE   freeze
isinstancer@   r   serialize_modeltensorint32rA   rB   r]   r_   r^   )r`   ra   rb   rc   rd   r   rf   r   r   shape_compute_linesrg   re   rt   r   linereal_shape_compute_liness                   r   r\   r\      s    IIU#E&%,,'' /*> J 	""5-@||IU[[AUXX__  !99++,>,@Ag %89%8T4vR%89 : (@ AB 	  	:s   D)NNF)typingr   r     torch.backends._nnapi.serializerr    ANEURALNETWORKS_PREFER_LOW_POWER)ANEURALNETWORKS_PREFER_FAST_SINGLE_ANSWER&ANEURALNETWORKS_PREFER_SUSTAINED_SPEEDrA   rB   r   rm   r\   rT   r   r   <module>r      s^      = $%  ,- ))* &P%((// Pl A8x NS+r   