
    N j/                         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	           n/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/torch/backends/_nnapi/prepare.pyr   NnapiModule.__init__   sG     	$8!"((	&<# 0    argsc                    U R                   b  [        S5      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 )Nz'comp must be None before initialization)r
   AssertionErrorr   preparer   r   r   
contiguoustorchclasses_nnapiCompilationinit2r   r   )r   r   wr
   s       r   initNnapiModule.init0   s    99  !JKK!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  [        S5      eU R                   Vs/ s H  n[        R
                  " U5      PM     nn[        U5      [        U R                  5      :w  a-  [        S[        U5       S[        U R                  5       35      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      :w  a-  [        S	[        U5       S
[        U R                  5       35      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 )Nzcomp must not be Nonezargs length z != inp_mem_fmts length r   r   r      zInvalid mem_fmtzouts length z != out_mem_fmts length )r   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< !899151C1CD1C#  %1CDt9D--.. s4yk)A#dFWFWBXAYZ  
T#C##C(C ax!!$)"6"6"89!!$)"3"3Aq!Q"?"J"J"LM !233 $ 	"t9D--.. s4yk)A#dFWFWBXAYZ  T//01C##C(C f} I--aAq9	 !233 2 A Es    H)	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'   r8   __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   rP   r   s     r   r   >convert_model_to_nnapi.<locals>.NnapiInterfaceWrapper.__init__   s    GHr   )rP   )r:   r;   r<   r=   r>   r   rH   rI   rJ   s   @r   NnapiInterfaceWrapperrM      s    		 	r   rR   z, c              3   ,   #    U  H
  nS U 3v   M     g7f)arg_N .0r6   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], NrU   rV   s     r   rX   rY      s     N:M3XcU#.:Ms   zdef forward(self, z):
    retvals = self.mod([z])
    return 
)process_for_nnapir   r!   rB   rC   rF   scriptjoinr.   r-   define)modelinputs
serializerreturn_shapesuse_int16_for_qint16r   r   r   ser_model_tensorused_weightsr   r   retval_countnnapi_modelrR   wrapper_model_pywrapper_modelarg_listret_exprs                      r   convert_model_to_nnapirn   i   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)configre   )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.
rU   N)r:   r;   r<   r=   r>   rH   rU   r   r   ShapeComputeModulers      s    	r   ru   z\def prepare(self, ser_model: torch.Tensor, args: List[torch.Tensor]) -> List[torch.Tensor]:
z    r\   rZ   )r!   rF   freeze
isinstancerA   r   serialize_modeltensorint32rB   rC   r^   r`   r_   )ra   rb   rc   rd   re   r   rg   r   r   shape_compute_linesrh   rf   ru   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_SPEEDrB   rC   r   rn   r]   rU   r   r   <module>r      s^      = $%  ,- ))* &X%((// X| A8x NS+r   