§
    ŠŠtj?  ã                   ó~   — 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dS )é    )Ú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	           €ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/backends/_nnapi/prepare.pyr   zNnapiModule.__init__   sf   ø€ õ 	‰Œ×ÒÑÔÐØ$8ˆÔ!Ø"ˆŒØˆŒØ(ˆÔØ(ˆÔØˆÔØˆŒ	Ø&<ˆÔ#Ø 0ˆÔÐÐó    Úargsc                 óT  — | j         �t          d¦  «        ‚| j                             | j        |¦  «        | _        d„ | j        D ¦   «         | _        t          j        j	         
                    ¦   «         }|                     | j        | j        | j        | j        ¦  «         || _         d S )Nz'comp must be None before initializationc                 ó6   — g | ]}|                      ¦   «         ‘ŒS © )Ú
contiguous)Ú.0Úws     r   ú
<listcomp>z$NnapiModule.init.<locals>.<listcomp>6   s    € Ð=Ð=Ð=¨1˜Ÿš™œÐ=Ð=Ð=r   )r	   ÚAssertionErrorr   Úpreparer   r   r
   ÚtorchÚclassesÚ_nnapiÚCompilationÚinit2r   r   )r   r   r	   s      r   ÚinitzNnapiModule.init1   sœ   € àŒ9Ð Ý Ð!JÑKÔKÐKØ!Ô6×>Ò>¸t¼~ÈtÑTÔTˆÔØ=Ð=°´Ð=Ñ=Ô=ˆŒÝŒ}Ô#×/Ò/Ñ1Ô1ˆØ�
Š
ØŒNØŒLØÔ'ØÔ!ñ		
ô 	
ð 	
ð ˆŒ	ˆ	ˆ	r   Úreturnc           	      ól  — | j         €|                      |¦  «         | j         }|€t          d¦  «        ‚d„ | j        D ¦   «         }t	          |¦  «        t	          | j        ¦  «        k    r4t          dt	          |¦  «        › dt	          | j        ¦  «        › �¦  «        ‚g }t          t	          |¦  «        ¦  «        D ]›}| j        |         }|dk    r.|                     ||                              ¦   «         ¦  «         ŒC|dk    rD|                     ||          	                    dddd¦  «                             ¦   «         ¦  «         Œ�t          d	¦  «        ‚|                     ||¦  «         t	          |¦  «        t	          | j        ¦  «        k    r4t          d
t	          |¦  «        › dt	          | j        ¦  «        › �¦  «        ‚t          t	          | j        ¦  «        ¦  «        D ]J}| j        |         }|dv rŒ|dk    r"||          	                    dddd¦  «        ||<   Œ<t          d	¦  «        ‚|S )Nzcomp must not be Nonec                 ó6   — g | ]}t          j        |¦  «        ‘ŒS r   )r$   Ú
empty_like)r   Úouts     r   r!   z'NnapiModule.forward.<locals>.<listcomp>G   s#   € ÐDÐDÐD¨#•Ô  Ñ%Ô%ÐDÐDÐDr   z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   Úlenr   ÚrangeÚappendr   ÚpermuteÚ
ValueErrorÚrunr   )r   r   r	   ÚoutsÚ
fixed_argsÚidxÚfmts          r   ÚforwardzNnapiModule.forwardA   s7  € ØŒ9ÐØ�IŠI�d‰OŒOˆOØŒyˆØˆ<Ý Ð!8Ñ9Ô9Ð9ØDÐD°Ô1CÐDÑDÔDˆåˆt‰9Œ9�˜DÔ-Ñ.Ô.Ò.Ð.Ý ØZ�s 4™yœyÐZÐZÅ#ÀdÔFWÑBXÔBXÐZÐZñô ð ð ˆ
Ý�˜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Ñ"Ô"Ð"Ýˆt‰9Œ9�˜DÔ-Ñ.Ô.Ò.Ð.Ý ØZ�s 4™yœyÐZÐZÅ#ÀdÔFWÑBXÔBXÐZÐZñô ð õ �˜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__ÚlistÚ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   rN   r   s     €r   r   z>convert_model_to_nnapi.<locals>.NnapiInterfaceWrapper.__init__‘   s$   ø€ Ý‰GŒG×ÒÑÔÐØˆDŒHˆHˆHr   )r;   r<   r=   r>   r   rH   rI   s   @r   ÚNnapiInterfaceWrapperrL   ˆ   sB   ø€ € € € € ð	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r   rO   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   rR   s     r   rS   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$   rB   rC   rF   ÚscriptÚjoinr1   r0   Údefine)ÚmodelÚinputsÚ
serializerÚreturn_shapesÚuse_int16_for_qint16r   r   r   Úser_model_tensorÚused_weightsr   r   Úretval_countÚnnapi_modelrO   Úwrapper_model_pyÚwrapper_modelÚarg_listÚret_exprs                      r   Úconvert_model_to_nnapirh   j   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   ÚShapeComputeModulerm   ¼   s   € € € € € ð	ð 	ð 	ð 	r   rn   z\def prepare(self, ser_model: torch.Tensor, args: List[torch.Tensor]) -> List[torch.Tensor]:
c                 ó   — g | ]}d |› d�‘Œ	S )z    rV   r   )r   Úlines     r   r!   z%process_for_nnapi.<locals>.<listcomp>Æ   s    € Ð9Ð9Ð9˜Tˆ�ˆˆˆÐ9Ð9Ð9r   rT   )r$   rF   ÚfreezeÚ
isinstancerA   r   Úserialize_modelÚtensorÚint32rB   rC   rX   rZ   rY   )r[   r\   r]   r^   r_   r   ra   r   r   Úshape_compute_linesrb   r`   rn   r   Úreal_shape_compute_liness                  r   rW   rW   ¥   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$   Ú torch.backends._nnapi.serializerr   Ú ANEURALNETWORKS_PREFER_LOW_POWERÚ)ANEURALNETWORKS_PREFER_FAST_SINGLE_ANSWERÚ&ANEURALNETWORKS_PREFER_SUSTAINED_SPEEDrB   rC   r   rh   rW   r   r   r   ú<module>r}      sÊ   ðð Ð Ð Ð Ð Ð à €€€Ø =Ð =Ð =Ð =Ð =Ð =ð $%Ð  Ø,-Ð )Ø)*Ð &ðXð Xð Xð Xð X�%”(”/ñ Xô Xð Xð| ØØØAØð8ð 8ð 8ð 8ðx NSð+ð +ð +ð +ð +ð +r   