§
    Ÿ²Åjl  ã                   ó‚   — d dl mZ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dS )é    )ÚListÚ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 | _        || _	        || _
        d S ©N)ÚsuperÚ__init__r   r   r   r   r   r   r
   r   r   )	Úselfr   r   r   r   r   r   r   Ú	__class__s	           €úNC:\Projects\Historical\venv\Lib\site-packages\torch/backends/_nnapi/prepare.pyr   zNnapiModule.__init__   sf   ø€ õ 	‰Œ×ÒÑÔÐØ$8ˆÔ!Ø"ˆŒØˆŒØ(ˆÔØ(ˆÔØˆÔØˆŒ	Ø&<ˆÔ#Ø 0ˆÔÐÐó    Úargsc                 ó:  — | j         �J ‚| j                             | j        |¦  «        | _        d„ | j        D ¦   «         | _        t          j        j         	                    ¦   «         }| 
                    | j        | j        | j        | j        ¦  «         || _         d S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS © )Ú
contiguous)Ú.0Úws     r   ú
<listcomp>z$NnapiModule.init.<locals>.<listcomp>4   s    € Ð=Ð=Ð=¨1˜Ÿš™œÐ=Ð=Ð=r   )r
   r   Úpreparer   r   r   ÚtorchÚclassesÚ_nnapiÚCompilationÚinit2r   r   )r   r   r
   s      r   ÚinitzNnapiModule.init0   s“   € àŒyÐ Ð Ð Ø!Ô6×>Ò>¸t¼~ÈtÑTÔTˆÔØ=Ð=°´Ð=Ñ=Ô=ˆŒÝŒ}Ô#×/Ò/Ñ1Ô1ˆØ�
Š
ØŒNØŒLØÔ'ØÔ!ñ		
ô 	
ð 	
ð ˆŒ	ˆ	ˆ	r   Úreturnc           	      óŠ  — | j         €|                      |¦  «         | j         }|€J ‚d„ | j        D ¦   «         }t          |¦  «        t          | j        ¦  «        k    sJ ‚g }t          t          |¦  «        ¦  «        D ]›}| j        |         }|dk    r.|                     ||                              ¦   «         ¦  «         ŒC|dk    rD|                     ||                              dddd¦  «                             ¦   «         ¦  «         Œ�t          d¦  «        ‚| 
                    ||¦  «         t          |¦  «        t          | j        ¦  «        k    sJ ‚t          t          | j        ¦  «        ¦  «        D ]J}| j        |         }|dv rŒ|dk    r"||                              dddd¦  «        ||<   Œ<t          d¦  «        ‚|S )Nc                 ó6   — g | ]}t          j        |¦  «        ‘ŒS r   )r$   Ú
empty_like)r    Úouts     r   r"   z'NnapiModule.forward.<locals>.<listcomp>D   s#   € ÐDÐDÐD¨#•Ô  Ñ%Ô%ÐDÐDÐDr   r   r   r   é   zInvalid mem_fmt)r   r   )r
   r)   r   Úlenr   ÚrangeÚappendr   ÚpermuteÚ
ValueErrorÚrunr   )r   r   r
   ÚoutsÚ
fixed_argsÚidxÚfmts          r   ÚforwardzNnapiModule.forward?   sË  € ØŒ9ÐØ�IŠI�d‰OŒOˆOØŒyˆØÐÐÐØDÐD°Ô1CÐDÑDÔDˆå�4‰yŒy�C Ô 1Ñ2Ô2Ò2Ð2Ð2Ð2Øˆ
Ý�˜T™œÑ#Ô#ð 		4ð 		4ˆCØÔ# CÔ(ˆCð �aŠxˆxØ×!Ò! $ s¤)×"6Ò"6Ñ"8Ô"8Ñ9Ô9Ð9Ð9Ø˜’�Ø×!Ò! $ s¤)×"3Ò"3°A°q¸!¸QÑ"?Ô"?×"JÒ"JÑ"LÔ"LÑMÔMÐMÐMå Ð!2Ñ3Ô3Ð3Ø�Š�˜TÑ"Ô"Ð"Ý�4‰yŒy�C Ô 1Ñ2Ô2Ò2Ð2Ð2Ð2Ý�˜TÔ/Ñ0Ô0Ñ1Ô1ð 		4ð 		4ˆCØÔ# CÔ(ˆCð �fˆ}ˆ}ØØ˜’�Ø  œI×-Ò-¨a°°A°qÑ9Ô9��S‘	�	å Ð!2Ñ3Ô3Ð3Øˆr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r$   r%   r&   r'   Ú__annotations__r   ÚTensorÚnnÚModuleÚintÚboolr   ÚjitÚexportr)   r:   Ú__classcell__©r   s   @r   r	   r	      sG  ø€ € € € € € ðð ð �5”=Ô'Ô3Ô
4Ð4Ð4Ñ4Ø�%”,ÔÐÐÑØ˜œÔ%Ð%Ð%Ñ%ð1à#œhœoð1ð ”<ð1ð �e”lÔ#ð	1ð
 ˜3”ið1ð ˜3”ið1ð !$ð1ð ð1ð 1ð 1ð 1ð 1ð 1ð* „YÔð˜˜eœlÔ+ð ð ð ñ Ôðð˜D ¤Ô.ð °4¸¼Ô3Eð ð ð ð ð ð ð ð r   r	   Fc           	      ó  — t          | ||||¦  «        \  }}}	}
}}t          |||	|
|||¦  «        } G d„ dt          j        j        ¦  «        } ||¦  «        }t          j                             |¦  «        }d                     d„ t          t          |¦  «        ¦  «        D ¦   «         ¦  «        }|dk     rd}n,d                     d„ t          |¦  «        D ¦   «         ¦  «        }| 
                    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                 óV   •— t          ¦   «                              ¦   «          || _        d S r   )r   r   Úmod)r   rM   r   s     €r   r   z>convert_model_to_nnapi.<locals>.NnapiInterfaceWrapper.__init__ˆ   s$   ø€ Ý‰GŒG×ÒÑÔÐØˆDŒHˆHˆHr   )r;   r<   r=   r>   r   rG   rH   s   @r   ÚNnapiInterfaceWrapperrK      sB   ø€ € € € € ð	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r   rN   z, c              3   ó    K  — | ]	}d |› �V — Œ
dS )Úarg_Nr   ©r    r8   s     r   ú	<genexpr>z)convert_model_to_nnapi.<locals>.<genexpr>�   s(   è è € ÐDÐD¨#˜ ˜˜ÐDÐDÐDÐDÐDÐDr   r   z
retvals[0]Ú c              3   ó"   K  — | ]
}d |› d�V — ŒdS )zretvals[z], Nr   rQ   s     r   rR   z)convert_model_to_nnapi.<locals>.<genexpr>“   s.   è è € ÐNÐN°3Ð. cÐ.Ð.Ð.ÐNÐNÐNÐNÐNÐNr   zdef forward(self, z):
    retvals = self.mod([z])
    return ú
)Úprocess_for_nnapir	   r$   rA   rB   rE   ÚscriptÚjoinr1   r0   Údefine)ÚmodelÚinputsÚ
serializerÚreturn_shapesÚuse_int16_for_qint16r   r   r   Úser_model_tensorÚused_weightsr   r   Úretval_countÚnnapi_modelrN   Úwrapper_model_pyÚwrapper_modelÚarg_listÚret_exprs                      r   Úconvert_model_to_nnapirg   a   si  € õ  	Øˆv�z =Ð2Fñ	ô 	ñØØØØØØõ
 ØØØØØØØñô €Kðð ð ð ð ¥¤¤ñ ô ð ð -Ð,¨[Ñ9Ô9ÐÝ”I×$Ò$Ð%5Ñ6Ô6€Mà�yŠyÐDÐDµµs¸6±{´{Ñ1CÔ1CÐDÑDÔDÑDÔD€HØ�aÒÐØˆˆà—7’7ÐNÐN½%ÀÑ:MÔ:MÐNÑNÔNÑNÔNˆØ×Òð	#˜Xð 	#ð 	#Ø#+ð	#ð 	#àð	#ð 	#ð 	#ñô ð ð
 Ðr   c                 ó$  — t           j                             | ¦  «        } t          |t           j        ¦  «        r|g}|pt          d |¬¦  «        }|                     | ||¦  «        \  }}}}}	}
t          j        |t           j        ¬¦  «        } G d„ dt           j	        j
        ¦  «        }t           j                              |¦   «         ¦  «        }dgd„ |	D ¦   «         z   }|                     d                     |¦  «        ¦  «         ||||||
fS )N)Úconfigr^   )Údtypec                   ó   — e Zd ZdZdS )ú-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)r;   r<   r=   r>   r   r   r   ÚShapeComputeModulerl   ³   s   € € € € € ð	ð 	ð 	ð 	r   rm   z\def prepare(self, ser_model: torch.Tensor, args: List[torch.Tensor]) -> List[torch.Tensor]:
c                 ó   — g | ]}d |› d�‘Œ	S )z    rU   r   )r    Úlines     r   r"   z%process_for_nnapi.<locals>.<listcomp>½   s    € Ð9Ð9Ð9˜Tˆ�ˆˆˆÐ9Ð9Ð9r   rS   )r$   rE   ÚfreezeÚ
isinstancer@   r   Úserialize_modelÚtensorÚint32rA   rB   rW   rY   rX   )rZ   r[   r\   r]   r^   r   r`   r   r   Úshape_compute_linesra   r_   rm   r   Úreal_shape_compute_liness                  r   rV   rV   œ   sN  € õ ŒI×Ò˜UÑ#Ô#€Eå�&�%œ,Ñ'Ô'ð Ø�ˆàð Õ/ØÐ*>ð ñ  ô  €Jð 	×"Ò" 5¨&°-Ñ@Ô@ñØØØØØØå”| IµU´[ÐAÑAÔAÐðð ð ð ð �UœXœ_ñ ô ð õ !œ9×+Ò+Ð,>Ð,>Ñ,@Ô,@ÑAÔAÐàgð à9Ð9Ð%8Ð9Ñ9Ô9ñ :Ðð ×Ò §¢Ð(@Ñ AÔ AÑBÔBÐBð 	ØØØØØðð r   )NNF)Útypingr   r   r$   Ú torch.backends._nnapi.serializerr   Ú ANEURALNETWORKS_PREFER_LOW_POWERÚ)ANEURALNETWORKS_PREFER_FAST_SINGLE_ANSWERÚ&ANEURALNETWORKS_PREFER_SUSTAINED_SPEEDrA   rB   r	   rg   rV   r   r   r   ú<module>r|      sÐ   ðð "Ð !Ð !Ð !Ð !Ð !Ð !Ð !à €€€Ø =Ð =Ð =Ð =Ð =Ð =ð $%Ð  Ø,-Ð )Ø)*Ð &ðPð Pð Pð Pð P�%”(”/ñ Pô Pð Pðl ØØØAØð8ð 8ð 8ð 8ðx NSð+ð +ð +ð +ð +ð +r   