Ë
    g^(hŸ  ã                   óŠ   — d dl mZ d dlZd dlmZ d ZdZdZ G d„ dej                  j                  «      Z
dddedfd	„Z	 dd
„Zy)é    )ÚOptionalN)Ú_NnapiSerializeré   é   c                   óÔ  ‡ — e Zd ZU dZeej                  j                  j                     e	d<   e
ej                     e	d<   e
ej                     e	d<   dej                  j                  dej                  de
ej                     de
e   de
e   d	ed
efˆ fd„Zej"                  j$                  de
ej                     fd„«       Zde
ej                     de
ej                     fd„Zˆ xZS )ÚNnapiModulezÏTorch 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         ‰| �  «        || _        || _        || _        || _        || _        g | _        d | _        || _	        || _
        y ©N)ÚsuperÚ__init__r   r   r
   r   r   r   r	   r   r   )	Úselfr   r   r
   r   r   r   r   Ú	__class__s	           €ú[/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/backends/_nnapi/prepare.pyr   zNnapiModule.__init__   sU   ø€ ô 	‰ÑÔØ$8ˆÔ!Ø"ˆŒØˆŒØ(ˆÔØ(ˆÔØˆÔØˆŒ	Ø&<ˆÔ#Ø 0ˆÕó    Úargsc                 ó°  — | j                   �J ‚| j                  j                  | j                  |«      | _        | j
                  D �cg c]  }|j                  «       ‘Œ c}| _        t        j                  j                  j                  «       }|j                  | j                  | j
                  | j                  | j                  «       || _         y c c}w r   )r	   r   Úpreparer   r   r
   Ú
contiguousÚtorchÚclassesÚ_nnapiÚCompilationÚinit2r   r   )r   r   Úwr	   s       r   ÚinitzNnapiModule.init0   sŸ   € à�y‰yÐ Ð Ð Ø!×6Ñ6×>Ñ>¸t¿~¹~ÈtÓTˆÔØ04·±Ö=¨1˜Ÿ™�Ò=ˆŒÜ�}‰}×#Ñ#×/Ñ/Ó1ˆØ�
‰
Ø�N‰NØ�L‰LØ×'Ñ'Ø×!Ñ!ô		
ð ˆ�	ùò >s   ÁCÚreturnc           	      ó`  — | j                   €| j                  |«       | j                   }|€J ‚| j                  D �cg c]  }t        j                  |«      ‘Œ }}t        |«      t        | j                  «      k(  sJ ‚g }t        t        |«      «      D ]}  }| j                  |   }|dk(  r#|j                  ||   j                  «       «       Œ:|dk(  r5|j                  ||   j                  dddd«      j                  «       «       Œtt        d«      ‚ |j                  ||«       t        |«      t        | j                  «      k(  sJ ‚t        t        | j                  «      «      D ]@  }| j                  |   }|dv rŒ|dk(  r||   j                  dddd«      ||<   Œ7t        d«      ‚ |S c c}w )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   ÚforwardzNnapiModule.forward?   s£  € Ø�9‰9ÐØ�I‰I�dŒOØ�y‰yˆØÐÐÐØ15×1CÑ1CÖD¨#”× Ñ  Õ%ÐDˆÐDä�4‹yœC × 1Ñ 1Ó2Ò2Ð2Ð2Øˆ
Üœ˜T›Ó#ò 		4ˆCØ×#Ñ# CÑ(ˆCð �aŠxØ×!Ñ! $ s¡)×"6Ñ"6Ó"8Õ9Ø˜’Ø×!Ñ! $ s¡)×"3Ñ"3°A°q¸!¸QÓ"?×"JÑ"JÓ"LÕMä Ð!2Ó3Ð3ð		4ð 	�‰�˜TÔ"Ü�4‹yœC × 1Ñ 1Ó2Ò2Ð2Ð2Üœ˜T×/Ñ/Ó0Ó1ò 		4ˆCØ×#Ñ# CÑ(ˆCð �f‰}ØØ˜’Ø  ™I×-Ñ-¨a°°A°qÓ9��S’	ä Ð!2Ó3Ð3ð		4ð ˆùò5 Es   ¼F+)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r    r!   Ú__annotations__ÚlistÚTensorÚnnÚModuleÚintÚboolr   ÚjitÚexportr$   r4   Ú__classcell__©r   s   @r   r   r      sü   ø… ñð �5—=‘=×'Ñ'×3Ñ3Ñ
4Ó4Ø�%—,‘,ÑÓØ˜Ÿ™Ñ%Ó%ð1à#Ÿh™hŸo™oð1ð —<‘<ð1ð �e—l‘lÑ#ð	1ð
 ˜3‘ið1ð ˜3‘ið1ð !$ð1ð õ1ð* ‡Y�Y×Ñð˜˜eŸl™lÑ+ò ó ðð˜D §¡Ñ.ð °4¸¿¹Ñ3E÷ r   r   Fc           	      óÄ  — t        | ||||«      \  }}}	}
}}t        |||	|
|||«      } G d„ dt        j                  j                  «      } ||«      }t        j
                  j                  |«      }dj                  d„ t        t        |«      «      D «       «      }|dk  rd}n!dj                  d„ t        |«      D «       «      }|j                  d	|› d
|› d|› d�«       |S )Nc                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ú5convert_model_to_nnapi.<locals>.NnapiInterfaceWrappera0  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                 ó0   •— t         ‰| �  «        || _        y r   )r   r   Úmod)r   rH   r   s     €r   r   z>convert_model_to_nnapi.<locals>.NnapiInterfaceWrapper.__init__ˆ   s   ø€ Ü‰GÑÔØˆD�Hr   )r5   r6   r7   r8   r   rB   rC   s   @r   ÚNnapiInterfaceWrapperrF      s   ø„ ñ	÷	ð 	r   rI   z, c              3   ó&   K  — | ]	  }d |› �–— Œ y­w)Úarg_N© ©Ú.0r2   s     r   ú	<genexpr>z)convert_model_to_nnapi.<locals>.<genexpr>�   s   è ø€ ÒD¨#˜4 ˜uœÑDùs   ‚r   z
retvals[0]Ú c              3   ó(   K  — | ]
  }d |› d�–— Œ y­w)zretvals[z], NrL   rM   s     r   rO   z)convert_model_to_nnapi.<locals>.<genexpr>“   s   è ø€ ÒN°3˜X c U¨#Ô.ÑNùs   ‚zdef forward(self, z):
    retvals = self.mod([z])
    return ú
)Úprocess_for_nnapir   r   r<   r=   r@   ÚscriptÚjoinr*   r)   Údefine)ÚmodelÚinputsÚ
serializerÚreturn_shapesÚuse_int16_for_qint16r   r   r   Úser_model_tensorÚused_weightsr   r   Úretval_countÚnnapi_modelrI   Úwrapper_model_pyÚwrapper_modelÚarg_listÚret_exprs                      r   Úconvert_model_to_nnapird   a   s  € ô  	Øˆv�z =Ð2Fó	ñØØØØØØô
 ØØØØØØØó€Kô¤§¡§¡ô ñ -¨[Ó9ÐÜ—I‘I×$Ñ$Ð%5Ó6€Mà�y‰yÑD´´s¸6³{Ó1CÔDÓD€HØ�aÒØ‰à—7‘7ÑN¼%ÀÓ:MÔNÓNˆØ×ÑØ
˜X˜Jð '#Ø#+ *ð -Ø�Z˜rð	#ôð
 Ðr   c                 ó2  — t         j                  j                  | «      } t        |t         j                  «      r|g}|xs t        d |¬«      }|j                  | ||«      \  }}}}}	}
t        j                  |t         j                  ¬«      } G d„ dt         j                  j                  «      }t         j                  j                   |«       «      }dg|	D �cg c]  }d|› d�‘Œ
 c}z   }|j                  dj                  |«      «       ||||||
fS c c}w )	N)Úconfigr[   )Údtypec                   ó   — e Zd ZdZy)ú-process_for_nnapi.<locals>.ShapeComputeModulezÛCode-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.
        N)r5   r6   r7   r8   rL   r   r   ÚShapeComputeModuleri   ³   s   „ ò	r   rj   z\def prepare(self, ser_model: torch.Tensor, args: List[torch.Tensor]) -> List[torch.Tensor]:
z    rR   rP   )r   r@   ÚfreezeÚ
isinstancer;   r   Úserialize_modelÚtensorÚint32r<   r=   rT   rV   rU   )rW   rX   rY   rZ   r[   r   r]   r   r   Úshape_compute_linesr^   r\   rj   r   ÚlineÚreal_shape_compute_liness                   r   rS   rS   œ   s  € ô �I‰I×Ñ˜UÓ#€Eä�&œ%Ÿ,™,Ô'Ø�ˆàò Ô/ØÐ*>ô €Jð 	×"Ñ" 5¨&°-Ó@ñØØØØØØä—|‘| I´U·[±[ÔAÐôœUŸX™XŸ_™_ô ô !Ÿ9™9×+Ñ+Ñ,>Ó,@ÓAÐàgð à%8Ö9˜Tˆ4�ˆv�RŠÒ9ñ :Ðð ×Ñ §¡Ð(@Ó AÔBð 	ØØØØØðð ùò 	:s   ÃD)NNF)Útypingr   r   Ú torch.backends._nnapi.serializerr   Ú ANEURALNETWORKS_PREFER_LOW_POWERÚ)ANEURALNETWORKS_PREFER_FAST_SINGLE_ANSWERÚ&ANEURALNETWORKS_PREFER_SUSTAINED_SPEEDr<   r=   r   rd   rS   rL   r   r   ú<module>rx      s^   ðõ ã Ý =ð $%Ð  Ø,-Ð )Ø)*Ð &ôP�%—(‘(—/‘/ô Pðl ØØØAØó8ðx NSô+r   