Ë
    g^(hÏC ã                   óž  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 d dl
Z
 ej                  d«      Z G d„ d«      Z G d„ d«      Z G d„ d	«      Z G d
„ d«      Z G d„ dej"                  «      Zd!d„Zd„ Zd„ Z G d„ de«      Z G d„ dej"                  «      Z G d„ de«      Zd„ Zd„ Zd„ Zd„ Zd„ Z G d„ d«      Zddddœd „Zy)"é    N)Ú
NamedTupleÚOptionalÚnnapi_serializec                   ó@   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZy)ÚNNAPI_OperandCoder   é   é   é   é   é   é   é   é   é	   é
   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚFLOAT32ÚINT32ÚUINT32ÚTENSOR_FLOAT32ÚTENSOR_INT32ÚTENSOR_QUANT8_ASYMMÚBOOLÚTENSOR_QUANT16_SYMMÚTENSOR_FLOAT16ÚTENSOR_BOOL8ÚFLOAT16ÚTENSOR_QUANT8_SYMM_PER_CHANNELÚTENSOR_QUANT16_ASYMM© ó    ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/backends/_nnapi/serializer.pyr   r      sG   „ Ø€GØ€EØ€FØ€NØ€LØÐØ€DØÐØ€NØ€LØ€GØ%'Ð"ØÑr%   r   c                   óˆ  — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWZYdXZZdYZ[dZZ\d[Z]d\Z^d]Z_d^Z`d_Zay`)aÚNNAPI_OperationCoder   r   r	   r
   r   r   r   r   r   r   r   r   r   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é    é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   é@   éA   éB   éC   éD   éE   éF   éG   éH   éI   éJ   éK   éL   éM   éN   éO   éP   éQ   éR   éS   éT   éU   éV   éW   éX   éY   éZ   é[   é\   é]   é^   N)br   r   r   ÚADDÚAVERAGE_POOL_2DÚCONCATENATIONÚCONV_2DÚDEPTHWISE_CONV_2DÚDEPTH_TO_SPACEÚ
DEQUANTIZEÚEMBEDDING_LOOKUPÚFLOORÚFULLY_CONNECTEDÚHASHTABLE_LOOKUPÚL2_NORMALIZATIONÚ
L2_POOL_2DÚLOCAL_RESPONSE_NORMALIZATIONÚLOGISTICÚLSH_PROJECTIONÚLSTMÚMAX_POOL_2DÚMULÚRELUÚRELU1ÚRELU6ÚRESHAPEÚRESIZE_BILINEARÚRNNÚSOFTMAXÚSPACE_TO_DEPTHÚSVDFÚTANHÚBATCH_TO_SPACE_NDÚDIVÚMEANÚPADÚSPACE_TO_BATCH_NDÚSQUEEZEÚSTRIDED_SLICEÚSUBÚ	TRANSPOSEÚABSÚARGMAXÚARGMINÚAXIS_ALIGNED_BBOX_TRANSFORMÚBIDIRECTIONAL_SEQUENCE_LSTMÚBIDIRECTIONAL_SEQUENCE_RNNÚBOX_WITH_NMS_LIMITÚCASTÚCHANNEL_SHUFFLEÚDETECTION_POSTPROCESSINGÚEQUALÚEXPÚEXPAND_DIMSÚGATHERÚGENERATE_PROPOSALSÚGREATERÚGREATER_EQUALÚGROUPED_CONV_2DÚHEATMAP_MAX_KEYPOINTÚINSTANCE_NORMALIZATIONÚLESSÚ
LESS_EQUALÚLOGÚLOGICAL_ANDÚLOGICAL_NOTÚ
LOGICAL_ORÚLOG_SOFTMAXÚMAXIMUMÚMINIMUMÚNEGÚ	NOT_EQUALÚPAD_V2ÚPOWÚPRELUÚQUANTIZEÚQUANTIZED_16BIT_LSTMÚRANDOM_MULTINOMIALÚ
REDUCE_ALLÚ
REDUCE_ANYÚ
REDUCE_MAXÚ
REDUCE_MINÚREDUCE_PRODÚ
REDUCE_SUMÚ	ROI_ALIGNÚROI_POOLINGÚRSQRTÚSELECTÚSINÚSLICEÚSPLITÚSQRTÚTILEÚTOPK_V2ÚTRANSPOSE_CONV_2DÚUNIDIRECTIONAL_SEQUENCE_LSTMÚUNIDIRECTIONAL_SEQUENCE_RNNÚRESIZE_NEAREST_NEIGHBORr$   r%   r&   r(   r(   %   sò  „ Ø
€CØ€OØ€MØ€GØÐØ€NØ€JØÐØ€EØ€OØÐØÐØ€JØ#%Ð Ø€HØ€NØ€DØ€KØ
€CØ€DØ€EØ€EØ€GØ€OØ
€CØ€GØ€NØ€DØ€DØÐØ
€CØ€DØ
€CØÐØ€GØ€MØ
€CØ€IØ
€CØ€FØ€FØ"$ÐØ"$ÐØ!#ÐØÐØ€DØ€OØ!ÐØ€EØ
€CØ€KØ€FØÐØ€GØ€MØ€OØÐØÐØ€DØ€JØ
€CØ€KØ€KØ€JØ€KØ€GØ€GØ
€CØ€IØ€FØ
€CØ€EØ€HØÐØÐØ€JØ€JØ€JØ€JØ€KØ€JØ€IØ€KØ€EØ€FØ
€CØ€EØ€EØ€DØ€DØ€GØÐØ#%Ð Ø"$ÐØ Ñr%   r(   c                   ó   — e Zd ZdZdZdZdZy)ÚNNAPI_FuseCoder   r   r	   r
   N)r   r   r   Ú
FUSED_NONEÚ
FUSED_RELUÚFUSED_RELU1ÚFUSED_RELU6r$   r%   r&   rÛ   rÛ   ‡   s   „ Ø€JØ€JØ€KØ�Kr%   rÛ   c                   ó   — e Zd ZdZdZdZy)ÚOperandValueSourceTyper   r	   r
   N)r   r   r   Ú	IMMEDIATEÚNUMBERED_BUFFERÚNUMBERED_MEMORYr$   r%   r&   rá   rá   Ž   s   „ Ø€IØ€OØ�Or%   rá   c                   ó   — e Zd ZdZy)ÚTorchScalarTypesr)   N)r   r   r   ÚQUINT8r$   r%   r&   ræ   ræ   ˜   s   „ Ø�Fr%   ræ   c                 ó>   — t        | |z
  «      |t        | |«      z  k  S ©N)ÚabsÚmin)ÚlhsÚrhsÚ	tolerances      r&   Úapprox_equalrï   œ   s    € Üˆs�S‰y‹>˜Y¬¨S°#«Ñ6Ñ6Ð6r%   c           
      óÌ   — t         j                  dt         j                  dt         j                  dt         j                  dt         j
                  di}||    }|D ]  }||z  }Œ	 |S )Nr   r   r	   )r   r   r   r   r   r#   )Úop_typeÚdimsÚ
ITEM_SIZESÚsizeÚds        r&   Útensor_sizerö       si   € ä×(Ñ(¨!Ü×&Ñ&¨Ü×-Ñ-¨qÜ×-Ñ-¨qÜ×.Ñ.°ð€Jð �gÑ€DØò ˆØ�‰	‰ðà€Kr%   c                 ó8   — t        | «      }|||<   t        |«      S ré   )ÚlistÚtuple)ÚtupÚindexÚvalueÚlss       r&   Úchange_elementrþ   ®   s   € Ü	ˆc‹€BØ€B€u�IÜ�‹9Ðr%   c                   ó€   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   eed<   eed<   y)ÚConvPoolArgs2dz*Configuration arguments for a convolution.Úkernel_hÚkernel_wÚstride_hÚstride_wÚpad_tÚpad_bÚpad_lÚpad_rÚ
dilation_hÚ
dilation_wÚgroupN)r   r   r   Ú__doc__ÚintÚ__annotations__r$   r%   r&   r   r   ´   s<   … Ù4àƒMØƒMØƒMØƒMØƒJØƒJØƒJØƒJØƒOØƒOØ„Jr%   r   c                   ó   — e Zd ZdZdZdZdZy)ÚDimOrderr   r   r	   iç  N)r   r   r   ÚPRESUMED_CONTIGUOUSÚCHANNELS_LASTÚSCALAR_OR_VECTORÚUNKNOWN_CONSTANTr$   r%   r&   r  r  Ä   s   „ ØÐØ€MØÐØÑr%   r  c                   óT   — e Zd ZU dZeed<   eedf   ed<   eed<   eed<   eed<   d„ Z	y	)
ÚOperandz"Represenation of an NNAPI operand.rñ   .ÚshapeÚ	dim_orderÚscaleÚ
zero_pointc                 óŒ   — | j                   t        j                  u ry| j                   t        j                  u ryt	        d«      ‚)NTFzUnknown dim order)r  r  r  r  Ú	Exception©Úselfs    r&   Úuse_nchwzOperand.use_nchwã   s8   € Ø�>‰>œX×9Ñ9Ñ9ØØ�>‰>œX×3Ñ3Ñ3ØÜÐ+Ó,Ð,r%   N)
r   r   r   r  r  r  rù   r  Úfloatr  r$   r%   r&   r  r  Ë   s5   … Ù,ð ƒLð
 ��c�‰?Óð Óð ƒLØƒOó-r%   r  c                 óâ  — t        | «      dkD  sJ ‚t        |«      dkD  sJ ‚t        | «      }t        |«      }t        |«      t        |«      kD  rt        d«      ‚t        |«      t        |«      kD  rt        d«      ‚g }t        ||«      D ]Z  \  }}|dk(  r|j	                  |«       Œ|dk(  r|j	                  |«       Œ4||k(  r|j	                  |«       ŒKt        d| › d|› �«      ‚ t        |«      S )Nr   z.Non-equal-rank broadcast is not supported yet.r   zCannot broadcast shapes: z and )Úlenrø   r  ÚzipÚappendrù   )Úshape1Úshape2Ús1Ús2ÚretÚd1Úd2s          r&   Úbroadcast_shapesr,  ë   s÷   € Üˆv‹;˜Š?Ðˆ?Üˆv‹;˜Š?Ðˆ?Ü	ˆf‹€BÜ	ˆf‹€Bô ˆ2ƒw”�R“ÒäØ<ó
ð 	
ô ˆ2ƒw”�R“ÒäØ<ó
ð 	
ð €CÜ�b˜"“+ò 
‰ˆˆBØ�Š7Ø�J‰J�r�NØ�1ŠWØ�J‰J�r�NØ�2ŠXØ�J‰J�r�NäØ+¨F¨8°5¸¸ÐAóð ð
ô �‹:Ðr%   c                 ó\  — | \  }}}}|j                   dk7  s|j                  dk7  rt        d«      ‚|rs|dz
  |j                  z  |j                  z   |j
                  z
  |j                  z
  }|dz
  |j                  z  |j                  z   |j                  z
  |j                  z
  }	nr||j                  z
  |j
                  z   |j                  z   |j                  z  dz   }||j                  z
  |j                  z   |j                  z   |j                  z  dz   }	|dk(  rd}|dk(  rd}	||||	f}
|
S )Nr   zDilation not supported yet.r   )r	  r
  r  r  r  r  r  r  r  r  r  )Úimage_shapeÚargsÚout_chÚ	transposeÚbatchÚ_in_cÚin_hÚin_wÚout_hÚout_wÚ	out_shapes              r&   Úget_conv_pool_shaper9    s  € Ø*Ñ€Eˆ5�$˜ð ‡�˜!Ò˜tŸ™°!Ò3ÜÐ5Ó6Ð6áØ˜‘˜TŸ]™]Ñ*¨T¯]©]Ñ:¸T¿Z¹ZÑGÈ$Ï*É*ÑTˆØ˜‘˜TŸ]™]Ñ*¨T¯]©]Ñ:¸T¿Z¹ZÑGÈ$Ï*É*ÑT‰à˜Ÿ™Ñ%¨¯
©
Ñ2°T·Z±ZÑ?ÀDÇMÁMÑQÐTUÑUˆØ˜Ÿ™Ñ%¨¯
©
Ñ2°T·Z±ZÑ?ÀDÇMÁMÑQÐTUÑUˆð ˆq‚yØˆØˆq‚yØˆà˜  uÐ-€IØÐr%   c                 óB  — |t         j                  u r| S |t         j                  u r%t        | d   gt	        | dd  «      z   | d   gz   «      S |t         j
                  u r t        | «      dk(  st        | «      dk(  sJ ‚| S |t         j                  u r| S t        d|›d�«      ‚)Nr   r	   r   zBad dim_order: ú.)	r  r  r  rù   rø   r  r"  r  r  ©r  r  s     r&   Ú	fix_shaper=  $  s¥   € ð ”H×0Ñ0Ñ0ØˆØ”H×*Ñ*Ñ*Ü�e˜A‘h�Z¤$ u¨Q¨R y£/Ñ1°U¸1±X°JÑ>Ó?Ð?Ø”H×-Ñ-Ñ-Ü�5‹z˜QŠ¤# e£*°¢/Ð1Ð1ØˆØ”H×-Ñ-Ñ-àˆÜ
�o i ]°!Ð4Ó
5Ð5r%   c                 ó€   — | t         j                  t         j                  fv r|S | t         j                  u sJ ‚g d¢|   S )N©r   r	   r
   r   )r  r  r  r  )r  rõ   s     r&   Úreverse_map_dimr@  5  s@   € ð
 ”X×1Ñ1´8×3LÑ3LÐMÑMØˆØœ×.Ñ.Ñ.Ð.Ð.Ú˜‰?Ðr%   c                 ó   — d| › d|› �S )NÚs_Ú_r$   )Úop_idÚdims     r&   Ú	flex_namerF  @  s   € ð �ˆw�a˜�uÐÐr%   c                   óB  — e Zd Zd–d„Zd„ Zd„ Zd„ Zd„ Zd„ Ze	j                  fd„Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Ze	j(                  fd„Zd„ Zd„ Zd„ Zd„ Zd—d„Zd—d„Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!	 d˜d„Z"d„ Z#d—d „Z$d!„ Z%e&d"„ «       Z'i d#d$„ “d%d&„ “d'd(„ “d)d*„ “d+d,„ “d-d.„ “d/d0„ “d1d2„ “d3d4„ “d5d6„ “d7d8„ “d9d:„ “d;d<„ “d=d>„ “d?d@„ “dAdB„ “dCdD„ “i dEdF„ “dGdH„ “dIdJ„ “dKdL„ “dMdN„ “dOdP„ “dQdR„ “dSdT„ “dUdV„ “dWdX„ “dYdZ„ “d[d\„ “d]d^„ “d_d`„ “dadb„ “dcdd„ “dedf„ “¥dg„ dh„ di„ dj„ dk„ dl„ dmœ¥Z(dn„ Z)do„ Z*dp„ Z+dq„ Z,dr„ Z-ds„ Z.dt„ Z/du„ Z0dv„ Z1dw„ Z2dx„ Z3dy„ Z4dz„ Z5d{„ Z6d|„ Z7d}„ Z8d~„ Z9ddœd€„Z:d�„ Z;d‚„ Z<dƒ„ Z=d„„ Z>d…„ Z?d†„ Z@d‡„ ZAdˆ„ ZBd‰„ ZCdŠ„ ZDd‹„ ZEdŒ„ ZFd�„ ZGdŽ„ ZHd–d�„ZId�„ ZJd‘„ ZKd’„ ZLd–d“„ZMd”„ ZNd•„ ZOy)™Ú_NnapiSerializerc                 óî   — g | _         g | _        g | _        g | _        g | _        g | _        g | _        g | _        i | _        i | _	        i | _
        i | _        i | _        g | _        d| _        || _        |€i }y y ©Nr   )ÚoperandsÚvaluesÚ
operationsÚ
value_dataÚoperation_argsÚinputsÚoutputsÚ flexible_shape_computation_linesÚmodulesÚ	constantsÚtensor_sequencesÚjitval_operand_mapÚcached_immediatesÚused_weightsÚweight_offsetÚuse_int16_for_qint16)r  ÚconfigrZ  s      r&   Ú__init__z_NnapiSerializer.__init__G  s‰   € ØˆŒØˆŒØˆŒØˆŒØ ˆÔØˆŒØˆŒØ02ˆÔ-àˆŒØˆŒØ "ˆÔØ"$ˆÔØ!#ˆÔØˆÔØˆÔØ$8ˆÔ!àˆ>Ø‰Fð r%   c                 ó,   — t        | j                  «      S ré   )r"  rK  r  s    r&   Úget_next_operand_idz$_NnapiSerializer.get_next_operand_id]  s   € Ü�4—=‘=Ó!Ð!r%   c                 óÖ   — t        |t        «      sJ ‚|| j                  v rt        d|›�«      ‚| j	                  «       }| j
                  j                  |«       || j                  |<   |S )NzDuplicate tensor: )Ú
isinstancer  rV  r  r^  rK  r$  )r  ÚjitvalÚoperÚ
operand_ids       r&   Úadd_tensor_operandz#_NnapiSerializer.add_tensor_operandc  si   € Ü˜$¤Ô(Ð(Ð(Ø�T×,Ñ,Ñ,ÜÐ0°°
Ð;Ó<Ð<à×-Ñ-Ó/ˆ
Ø�‰×Ñ˜TÔ"Ø*4ˆ×Ñ Ñ'ØÐr%   c                 ó€   — t        |t        «      sJ ‚| j                  «       }| j                  j	                  |«       |S ré   )r`  r  r^  rK  r$  )r  rb  rc  s      r&   Úadd_anonymous_tensor_operandz-_NnapiSerializer.add_anonymous_tensor_operandp  s8   € Ü˜$¤Ô(Ð(Ð(Ø×-Ñ-Ó/ˆ
Ø�‰×Ñ˜TÔ"ØÐr%   c                 óú  — t        |j                  «      j                  dd«      }d}d}|dk(  rt        j                  }�n|dk(  rt        j
                  }�n|dk(  r1t        j                  }|j                  «       }|j                  «       }nÌ|dk(  r7t        j
                  }|j                  «       }|j                  «       }|dk(  s’J ‚|d	k(  rr| j                  r[t        |d
d «      }t        j                  t        j                  f}||v r|}|j                  }|j                  }n3t        d|› d�«      ‚t        d«      ‚t        d|j                  › d�«      ‚t!        t#        |j$                  «      ||||¬«      S )Nztorch.Ú ç        r   Úfloat32Úint32Úquint8Úqint32Úint16Únnapi_dtypez `nnapi_type` needs to be one of z for `int16`úy`int16` isn't supported. If you're trying to represent NNAPI qint16 with Pytorch int16, set `use_int16_for_qint16 = True`zCan't handle input with dtype 'ú')r  rñ   r  r  r  )ÚstrÚdtypeÚreplacer   r   r   r   Úq_scaleÚq_zero_pointrZ  Úgetattrr   r#   Únnapi_scaleÚnnapi_zero_pointr  r  rù   r  )	r  Útensorr  rs  r  r  rñ   ro  Úop_codess	            r&   Útorch_tensor_to_operandz(_NnapiSerializer.torch_tensor_to_operandv  s„  € Ü�F—L‘LÓ!×)Ñ)¨(°BÓ7ˆØˆØˆ
Ø�IÒÜ'×6Ñ6ŠGØ�gÒÜ'×4Ñ4ŠGØ�hÒÜ'×;Ñ;ˆGØ—N‘NÓ$ˆEØ×,Ñ,Ó.‰JØ�hÒÜ'×4Ñ4ˆGØ—N‘NÓ$ˆEØ×,Ñ,Ó.ˆJØ ’?Ð"�?Ø�gÒØ×(Ò(Ü% f¨m¸TÓB�ä%×9Ñ9Ü%×:Ñ:ð�ð  (Ñ*Ø)�GØ"×.Ñ.�EØ!'×!8Ñ!8‘Jä#Ø:¸8¸*ÀLÐQóð ô  ðTóð ô
 Ø1°&·,±,°¸qÐAóð ô Ü˜Ÿ™Ó%ØØØØ!ô
ð 	
r%   c           
      óX  — t        |dd«      rt        j                  nt        j                  }| j	                  ||«      }| j                  ||«      }| j                  j                  |«       t        |j                  «      D ]%  \  }}|dk(  sŒ| j                  ||d|› d|› d�«       Œ' |S )NÚ
nnapi_nhwcFr   zargs[z].shape[ú])rw  r  r  r  r|  rd  rP  r$  Ú	enumerater  Úcompute_operand_shape)	r  Úarg_idxra  rz  r  Útoperrc  rE  rô   s	            r&   Úadd_tensor_operand_for_inputz-_NnapiSerializer.add_tensor_operand_for_input§  s°   € ô �v˜|¨UÔ3ô ×"Ò"ä×-Ñ-ð 	ð
 ×,Ñ,¨V°YÓ?ˆØ×,Ñ,¨V°UÓ;ˆ
Ø�‰×Ñ˜:Ô&Ü" 6§<¡<Ó0ò 	‰IˆC�Ø�q‹yØ×*Ñ*Ø  u¨W¨I°X¸c¸UÀ!Ð%Dõð	ð
 Ðr%   c                 ó4  — | j                  ||«      }t        | j                  «      }| j                  j                  |«       t	        |j
                  |j                  «      }| j                  j                  |t        j                  f«       t        | j                  «      }d}| j                  j                  t        j                  d|||«      «       |t        j                  k(  r|j!                  dddd«      }| j                  j                  |«       |S )Nr   Úiiir	   r
   r   )r|  r"  rK  r$  rö   rñ   r  rL  rá   rã   rX  rN  ÚstructÚpackr  r  Úpermute)r  rz  r  rƒ  rc  ÚtsizeÚbuf_numÚoffsets           r&   Úadd_tensor_operand_for_weightz._NnapiSerializer.add_tensor_operand_for_weight·  sÚ   € ð ×,Ñ,¨V°YÓ?ˆÜ˜Ÿ™Ó'ˆ
Ø�‰×Ñ˜UÔ#Ü˜EŸM™M¨5¯;©;Ó7ˆØ�‰×Ñ˜JÔ(>×(NÑ(NÐOÔPÜ�d×'Ñ'Ó(ˆØˆØ�‰×ÑœvŸ{™{¨5°'¸6À5ÓIÔJàœ×.Ñ.Ò.Ø—^‘^ A q¨!¨QÓ/ˆFØ×Ñ× Ñ  Ô(ØÐr%   c           	      ó¨  — t        |t        «      sJ ‚||f}|| j                  vr t        | j                  «      }| j                  j                  t        ||t        j                  dd«      «       | j                  j                  |t        j                  f«       | j                  j                  |«       || j                  |<   | j                  |   S )Nri  r   )r`  rù   rW  r"  rK  r$  r  r  r  rL  rá   râ   rN  )r  Úcoderü   rò   Ú	cache_keyrc  s         r&   Úadd_immediate_operandz&_NnapiSerializer.add_immediate_operandÈ  s¯   € Ü˜$¤Ô&Ð&Ð&Ø˜5�Mˆ	Ø˜D×2Ñ2Ñ2Ü˜TŸ]™]Ó+ˆJØ�M‰M× Ñ ¤¨¨t´X×5NÑ5NÐPSÐUVÓ!WÔXØ�K‰K×Ñ 
Ô,B×,LÑ,LÐMÔNØ�O‰O×"Ñ" 5Ô)Ø0:ˆD×"Ñ" 9Ñ-Ø×%Ñ% iÑ0Ð0r%   c                 ól   — | j                  t        j                  t        j                  d|«      d«      S )NÚir$   )r‘  r   r   r‡  rˆ  ©r  rü   s     r&   Úadd_immediate_int_scalarz)_NnapiSerializer.add_immediate_int_scalarÓ  s-   € Ø×)Ñ)Ü×#Ñ#¤V§[¡[°°eÓ%<¸bó
ð 	
r%   c                 ól   — | j                  t        j                  t        j                  d|«      d«      S )NÚfr$   )r‘  r   r   r‡  rˆ  r”  s     r&   Úadd_immediate_float_scalarz+_NnapiSerializer.add_immediate_float_scalarØ  s-   € Ø×)Ñ)Ü×%Ñ%¤v§{¡{°3¸Ó'>Àó
ð 	
r%   c                 óV   — | j                  t        j                  |rdd«      S dd«      S )Nó   ó    r$   )r‘  r   r   r”  s     r&   Úadd_immediate_bool_scalarz*_NnapiSerializer.add_immediate_bool_scalarÝ  s3   € Ø×)Ñ)Ü×"Ñ"©u GÀ2ó
ð 	
Ø:AÀ2ó
ð 	
r%   c                 óœ   — | j                  t        j                  t        j                  d|«      j	                  «       t        |«      f«      S ©Nr“  )r‘  r   r   ÚarrayÚtobytesr"  r”  s     r&   Úadd_immediate_int_vectorz)_NnapiSerializer.add_immediate_int_vectorâ  s>   € Ø×)Ñ)Ü×*Ñ*Ü�K‰K˜˜UÓ#×+Ñ+Ó-Ü�‹ZˆMó
ð 	
r%   c                 ó   — || j                   v S ré   )rV  )r  ra  s     r&   Úhas_operand_for_jitvalz'_NnapiSerializer.has_operand_for_jitvalé  s   € Ø˜×0Ñ0Ð0Ð0r%   c                 óB   — | j                   |   }|| j                  |   fS ré   )rV  rK  )r  ra  rc  s      r&   Úget_tensor_operand_by_jitvalz-_NnapiSerializer.get_tensor_operand_by_jitvalì  s&   € Ø×,Ñ,¨VÑ4ˆ
Ø˜DŸM™M¨*Ñ5Ð6Ð6r%   c                 ó¬   — | j                  |«      \  }}|j                  D ].  }|dk(  rt        d«      ‚|dk  sŒt        j	                  d|«       Œ0 ||fS )Nr   z0Flexible size is not supported for this operand.z!Operand %s has runtime flex shape)r¥  r  r  r·   Úwarning)r  ra  rD  rb  Úss        r&   Ú'get_tensor_operand_by_jitval_fixed_sizez8_NnapiSerializer.get_tensor_operand_by_jitval_fixed_sizeð  sh   € Ø×7Ñ7¸Ó?‰ˆˆtØ—‘ò 		GˆAØ�AŠvô  ØFóð ð �1‹uä—‘Ð?ÀÕFð		Gð �dˆ{Ðr%   c                 ó¬   — | j                   j                  |«      }|€'| j                  |d«      \  }}| j                  ||«      }|| j                  |   fS ©NÚ
TensorType)rV  ÚgetÚget_constant_valuer�  rK  )r  ra  r  rc  rC  rü   s         r&   Úget_tensor_operand_or_constantz/_NnapiSerializer.get_tensor_operand_or_constantþ  s\   € ð ×,Ñ,×0Ñ0°Ó8ˆ
ØÐØ×.Ñ.¨v°|ÓD‰HˆAˆuØ×;Ñ;¸EÀ9ÓMˆJØ˜DŸM™M¨*Ñ5Ð6Ð6r%   c                 óp   — | j                  |d«      \  }}| j                  |«      }|| j                  |   fS r«  )r®  r�  rK  )r  ra  rC  rü   rc  s        r&   Úget_tensor_operand_for_weightz._NnapiSerializer.get_tensor_operand_for_weight  s<   € Ø×*Ñ*¨6°<Ó@‰ˆˆ5Ø×7Ñ7¸Ó>ˆ
Ø˜DŸM™M¨*Ñ5Ð6Ð6r%   c                 ó    — | j                   j                  |t        |«      t        |«      f«       | j                  j	                  ||z   «       y ré   )rM  r$  r"  rO  Úextend)r  ÚopcoderP  rQ  s       r&   Úadd_operationz_NnapiSerializer.add_operation  s<   € Ø�‰×Ñ ¬¨F«´S¸³\ÐBÔCØ×Ñ×"Ñ" 6¨GÑ#3Õ4r%   c                 óB   — || j                   vsJ ‚|| j                   |<   y ré   )rU  )r  ra  rL  s      r&   Úadd_tensor_sequencez$_NnapiSerializer.add_tensor_sequence  s&   € Ø˜T×2Ñ2Ñ2Ð2Ð2Ø(.ˆ×Ñ˜fÒ%r%   c                 óF   — || j                   vsJ ‚||f| j                   |<   y ré   )rT  ©r  ra  Úctyperü   s       r&   Úadd_constant_valuez#_NnapiSerializer.add_constant_value  s&   € Ø˜TŸ^™^Ñ+Ð+Ð+Ø"'¨ ˆ�‰�vÒr%   Nc           	      óØ   — | j                   j                  |«      }|€t        d|›d�«      ‚|\  }}|�6|j                  «       |k7  r#t        d|› d|j                  «       › d|›d�«      ‚|S )Nz#Could not find constant value for 'z'.z Expected constant value of type z
, but got z for value 'rq  )rT  r­  r  Úkind)r  ra  ÚtypekindÚrecordrº  rC  s         r&   r®  z#_NnapiSerializer.get_constant_value  sˆ   € Ø—‘×#Ñ# FÓ+ˆØˆ>ÜØ5°f°Z¸rÐBóð ð ‰ˆˆqØÐ E§J¡J£L°HÒ$<ÜØ2°8°*¸JÀuÇzÁzÃ|ÀnÐT`ÐagÐ`jÐjkÐlóð ð ˆr%   c                 ó†  — |€|j                   }n#t        |«      t        |j                   «      k(  sJ ‚dg}t        |«      D ]y  \  }}|dkD  r|j                  t	        |«      «       nC|dk(  r|j                  t        ||«      «       n"|dk(  r|j                  d«       nt        d«      ‚|j                  d«       Œ{ |j                  d«       dj                  |«      }|j                  t        j                  k(  rd	|› d
�S |j                  t        j                  k(  rd	|› d�S |j                  t        j                  k(  r d|j                  › d|j                  › d|› d�S |j                  t        j                  t        j                   fv r| j"                  rd	|› d�S t        d«      ‚t        d|j                  › �«      ‚)zHReturn a TorchScript expression to build a template for a given operand.ú(r   éÿÿÿÿÚ0z-Unknown dim value, dimensions should be >= -1ú,ú)rh  ztorch.zeros(z, dtype=torch.float32)z, dtype=torch.int32)z0torch.quantize_per_tensor(torch.zeros(1), scale=z, zero_point=z, dtype=torch.quint8).expand(z).contiguous()z, dtype=torch.int16)rp  z!Unsupported output operand type: )r  r"  r€  r$  rr  rF  r  Újoinrñ   r   r   r   r   r  r  r#   r   rZ  )r  rD  rb  r  Úshape_partsrõ   r¨  Ú
shape_codes           r&   Úoperand_to_template_torchscriptz0_NnapiSerializer.operand_to_template_torchscript%  sÊ  € àˆ=Ø—J‘J‰Eä�u“:¤ T§Z¡Z£Ò0Ð0Ð0à�eˆÜ˜eÓ$ò 	$‰DˆAˆqØ�1Šuà×"Ñ"¤3 q£6Õ*Ø�a’à×"Ñ"¤9¨U°AÓ#6Õ7Ø�b’à×"Ñ" 3Õ'äØCóð ð ×Ñ˜sÕ#ð	$ð 	×Ñ˜3ÔØ—W‘W˜[Ó)ˆ
Ø�<‰<Ô,×;Ñ;Ò;Ø! * Ð-CÐDÐDØ�\‰\Ô.×;Ñ;Ò;Ø! * Ð-AÐBÐBØ�\‰\Ô.×BÑBÒBð)Ø)-¯©¨°MÀ$Ç/Á/ÐARð SØ%˜, nð6ðð
 �\‰\Ü×2Ñ2Ü×1Ñ1ð
ñ 
ð ×(Ò(Ø% j \Ð1EÐFÐFäðTóð ô
 Ø/°·±¨~Ð>ó
ð 	
r%   c                 ó>   — | j                  ||t        ||«      «       y ré   )r�  rF  )r  Ú	out_op_idÚout_dimÚin_op_idÚin_dims        r&   Úforward_operand_shapez&_NnapiSerializer.forward_operand_shapeX  s   € Ø×"Ñ" 9¨g´yÀÈ6Ó7RÕSr%   c                 óX   — | j                   j                  t        ||«      › d|› �«       y )Nz = )rR  r$  rF  )r  rD  rE  Úexprs       r&   r�  z&_NnapiSerializer.compute_operand_shape[  s,   € Ø×-Ñ-×4Ñ4Ü˜ Ó$Ð% S¨¨Ð/õ	
r%   c                 óB  — |j                   dd  dk7  rt        d«      ‚|j                  t        j                  ¬«      }d gdz  }||d<   | j                  g d¢«      |d<   d gdz  }| j                  |«      |d<   | j                  t        j                  ||«       |d   |fS )Nr	   )r   r   z1Automatic transpose only supported for H,W == 1,1)r  r   r?  r   )
r  r  Ú_replacer  r  r¡  rf  rµ  r(   r    )r  Úin_idrb  Úout_operrP  rQ  s         r&   Útranspose_to_nhwcz"_NnapiSerializer.transpose_to_nhwc`  s«   € Ø�:‰:�a�bˆ>˜VÒ#ÜØCóð ð —=‘=¬8×+AÑ+A�=ÓBˆà�˜!‘ˆØˆˆq‰	Ø×1Ñ1²,Ó?ˆˆq‰	à�&˜1‘*ˆØ×6Ñ6°xÓ@ˆ�‰
à×ÑÔ.×8Ñ8¸&À'ÔJà�q‰z˜8Ð#Ð#r%   c                 ó¢  — |j                   |j                   k(  r||||fS |j                   |j                   f}|t        j                  t        j                  fk(  r| j	                  ||«      ||fz   S |t        j                  t        j                  fk(  r||f| j	                  ||«      z   S t        d|j                   ›d|j                   ›�«      ‚)Nz2Automatic transpose not supported for dim_orders: z, )r  r  r  r  rÖ  r  )r  Úin0_idÚin0_operÚin1_idÚin1_operÚorderss         r&   Útranspose_for_broadcastz(_NnapiSerializer.transpose_for_broadcastt  sÖ   € Ø×Ñ ×!3Ñ!3Ò3Ø˜8 V¨XÐ5Ð5ð ×$Ñ$ h×&8Ñ&8Ð9ˆØ”h×2Ñ2´H×4JÑ4JÐKÒKØ×)Ñ)¨&°(Ó;¸vÀxÐ>PÑPÐPØ”h×,Ñ,¬h×.JÑ.JÐKÒKØ˜HÐ%¨×(>Ñ(>¸vÀxÓ(PÑPÐPäØ@À×ASÑASÐ@VÐVXÐYa×YkÑYkÐXnÐoó
ð 	
r%   c                 ó¾   — | j                  |«      \  }}|j                  «       dk(  r%|j                  «       j                  «       dk(  sJ ‚|S t        d|›d|›d�«      ‚)NÚListTypeÚIntTypezCan't handle size arg of type 'z' for 'rq  )r®  r½  ÚgetElementTyper  r¹  s       r&   Úget_size_argz_NnapiSerializer.get_size_argƒ  sh   € Ø×.Ñ.¨vÓ6‰ˆˆuØ�:‰:‹<˜:Ò%Ø×'Ñ'Ó)×.Ñ.Ó0°IÒ=Ð=Ð=ØˆLÜØ-¨e¨Y°g¸f¸ZÀqÐIó
ð 	
r%   c                 ó  — |D �cg c]  }|j                  «       ‘Œ }}|d   dk(  sJ ‚|d   |d   g}|d   |d   g}|d   |d   g}|d   |d	   g}|d
   }	t        |«      dk(  sJ ‚|ddgk(  sJ ‚| j                  |||||	«      S c c}w )Nr   r	   r   r
   r   r   r   r   r   r   r   )Úitemr"  Úget_conv_pool_args_2d_common)
r  Úkernel_sizeÚpacked_configr“  ÚpcÚstridesÚpaddingsÚ	dilationsÚoutput_paddingÚ	group_nums
             r&   Úget_conv_pool_args_2d_from_packz0_NnapiSerializer.get_conv_pool_args_2d_from_packŒ  s½   € Ø -Ö.˜1ˆa�f‰f�hÐ.ˆÐ.Ø�!‰u˜ŠzÐˆzØ�a‘5˜"˜Q™%�.ˆØ�q‘E˜2˜a™5�>ˆØ˜‘U˜B˜q™E�Nˆ	Ø˜Q™%  A¡˜ˆØ�q‘Eˆ	ä�2‹w˜"Š}Ðˆ}Ø ! Q Ò'Ð'Ð'à×0Ñ0Ø˜ (¨I°yó
ð 	
ùò /s   …Bc                 óÔ   — | j                  |«      }| j                  |«      }|€ddg}n| j                  |«      }|�| j                  |d«      \  }	}
nd }
| j                  |||||
«      S )Nr   rà  )râ  r®  rå  )r  ræ  ÚstrideÚpaddingÚdilationr  ré  rê  rë  rC  rí  s              r&   Úget_conv_pool_args_2d_from_jitz/_NnapiSerializer.get_conv_pool_args_2d_from_jitœ  s‚   € ð ×#Ñ# FÓ+ˆØ×$Ñ$ WÓ-ˆØÐØ˜A˜‰Ià×)Ñ)¨(Ó3ˆIØÐØ×2Ñ2°5¸)ÓD‰LˆA‰yàˆIØ×0Ñ0Ø˜ (¨I°yó
ð 	
r%   c                 óØ   — t        |«      }t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚|\  }}||||g}	t        ||z   |	z   |z   |gz   Ž S ©Nr	   )rø   r"  r   )
r  ræ  ré  rê  rë  rí  ÚkernelsÚphÚpwÚreal_paddingss
             r&   rå  z-_NnapiSerializer.get_conv_pool_args_2d_common­  s•   € ô �{Ó#ˆä�7‹|˜qÒ Ð Ð Ü�7‹|˜qÒ Ð Ð Ü�8‹} Ò!Ð!Ð!Ü�9‹~ Ò"Ð"Ð"ð ‰ˆˆBØ˜R  RÐ(ˆäØ˜Ñ -Ñ/°)Ñ;¸y¸kÑIð
ð 	
r%   c                 ó‚  — | j                  d«       | j                  d«       g }g }t        |j                  j                  «       «      }| j	                  ||j                  «       |«       t        t        t        |j                  j                  «       «      dd  |«      «      D ]M  \  }\  }}	| j                  |||	«      }
|j                  | j                  |
   j                  j                  «       ŒO t        |j                  j                  «       «      D ]-  \  }}t        j!                  d||«       | j#                  |«       Œ/ |j                  j%                  «       }|j'                  «       dk(  sJ ‚|j)                  «       dk(  sJ ‚|j+                  d«      }dg}|j                  «       j-                  «       dk(  r|g}d}nX|j                  «       j-                  «       d	k(  r| j.                  |   }t1        |«      }nt3        d
|j                  «       › �«      ‚|�t1        |«      t1        |«      k(  sJ ‚t        |«      D ]œ  \  }}| j4                  |   }
| j6                  j                  |
«       |j                  | j                  |
   j                  j                  «       |r||   nd }|j                  | j9                  |
| j                  |
   |«      dz   «       Œž |j                  d«       g }d}t;        j<                  d|t1        | j                  «      t1        | j>                  «      t1        | j@                  «      t1        | j                  «      t1        | j6                  «      «      }|j                  |«       | jC                  «       \  }}|jE                  d„ | j                  D «       «       |jE                  |«       |jE                  d„ | j@                  D «       «       djG                  |«      g}t1        |d   «      }|dz  dk(  sJ ‚tI        |dz  «      }t        | j                  «      D ]�  \  }
\  }}}}}tK        ||«      }t        |«      D ]F  \  }}|dk(  r7tM        ||«      }| jN                  j                  d|› dtQ        |
|«      › �«       |dz  }ŒH tS        d„ |D «       «      }|j                  | jU                  |«      «       ŒŸ |jE                  |«       |j                  | jU                  | jV                  «      «       |j                  | jU                  | j                  «      «       |j                  | jU                  | j6                  «      «       | jN                  jE                  |«       tY        jX                  ddjG                  |«      «      | jZ                  ||| jN                  |fS )NFTr   zProcessing node #%d: %rr   zreturn [r¬  rÂ  Ú	TupleTypezUnsupported return type: rÄ  r  Úiiiiiic              3   ól   K  — | ],  \  }}}}}t        j                  d |t        |«      ||«      –— Œ. y­w)ÚiifiN)r‡  rˆ  r"  )Ú.0Útrõ   Ú_mr¨  Úzs         r&   ú	<genexpr>z3_NnapiSerializer.serialize_model.<locals>.<genexpr>  s4   è ø€ ò 
Ù5E°a¸¸BÀÀ1ŒF�K‰K˜ ¤3 q£6¨1¨a×0ñ
ùs   ‚24c              3   óH   K  — | ]  }t        j                  d g|¢­Ž –— Œ y­w)r†  N)r‡  rˆ  )rÿ  Úxs     r&   r  z3_NnapiSerializer.serialize_model.<locals>.<genexpr>  s   è ø€ ÒE°”V—[‘[ Ð+¨Ö+ÑEùs   ‚ "r%   r   z
ser_model[z] = c              3   ó.   K  — | ]  }|d k7  r|nd–— Œ y­w)rÂ  r   Nr$   )rÿ  rõ   s     r&   r  z3_NnapiSerializer.serialize_model.<locals>.<genexpr>  s   è ø€ Ò=°!˜q Bšw™!¨AÓ-Ñ=ùó   ‚r“  ).rœ  ÚnextÚgraphrP  r»  Útyper€  r#  rø   r„  r$  rK  r  rü   Únodesr·   ÚdebugÚadd_nodeÚreturn_nodeÚ
inputsSizeÚoutputsSizeÚinputsAtr½  rU  r"  r  rV  rQ  rÉ  r‡  rˆ  rL  rM  Úserialize_valuesr³  rÆ  r  r=  r@  rR  rF  rù   Úserialize_intsrO  rŸ  rX  ) r  ÚmodelrP  Úreturn_shapesÚinp_dim_ordersÚout_dim_ordersÚself_jitvalr‚  Úinput_valueÚinput_tensorrD  ÚidxÚnodeÚretnÚ
retn_inputÚtemplate_return_linesÚreturn_valuesÚretval_countr“  Úvr  ÚversionÚheaderÚserialized_valuesÚserialized_value_dataÚmodel_offsetrC  rò   r  rõ   r¨  Úpt_ds                                    r&   Úserialize_modelz _NnapiSerializer.serialize_model¿  s-  € Ø×&Ñ& uÔ-Ø×&Ñ& tÔ,àˆØˆä˜5Ÿ;™;×-Ñ-Ó/Ó0ˆØ×Ñ ¨[×-=Ñ-=Ó-?ÀÔGä4=Ü”�U—[‘[×'Ñ'Ó)Ó*¨1¨2Ð.°Ó7ó5
ò 	HÑ0ˆGÑ0�k <ð ×5Ñ5Ø˜ lóˆEð ×!Ñ! $§-¡-°Ñ"6×"@Ñ"@×"FÑ"FÕGð	Hô # 5§;¡;×#4Ñ#4Ó#6Ó7ò 	 ‰IˆC�Ü�I‰IÐ/°°dÔ;Ø�M‰M˜$Õð	 ð �{‰{×&Ñ&Ó(ˆØ�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&Ø—]‘] 1Ó%ˆ
Ø!+ ÐØ�?‰?Ó×!Ñ!Ó# |Ò3Ø'˜LˆMØ‰LØ�_‰_Ó×#Ñ#Ó%¨Ò4Ø ×1Ñ1°*Ñ=ˆMÜ˜}Ó-‰LäØ+¨J¯O©OÓ,=Ð+>Ð?óð ð Ð$Ü�}Ó%¬¨]Ó);Ò;Ð;Ð;Ü˜mÓ,ò 	‰DˆAˆqØ×+Ñ+¨AÑ.ˆEØ�L‰L×Ñ Ô&Ø×!Ñ! $§-¡-°Ñ"6×"@Ñ"@×"FÑ"FÔGÙ(5�M !Ò$¸4ˆEØ!×(Ñ(Ø×4Ñ4°U¸D¿M¹MÈ%Ñ<PÐRWÓXØñõð	ð 	×$Ñ$ SÔ)àˆàˆÜ—‘ØØÜ�—‘ÓÜ�—‘ÓÜ�—‘Ó Ü�—‘ÓÜ�—‘Óó
ˆð 	�‰�VÔà37×3HÑ3HÓ3JÑ0ÐÐ0à�‰ñ 
ØIMÏÉô
ô 	
ð 	�‰Ð&Ô'Ø�‰ÑE°T·_±_ÔEÔEð —‘˜%“Ð!ˆÜ˜5 ™8“}ˆð ˜aÑ 1Ò$Ð$Ð$Ü˜<¨!Ñ+Ó,ˆä1:¸4¿=¹=Ó1Iò 	5Ñ-ˆEÑ-�A�t˜Y¨¨1Ü˜d IÓ.ˆEÜ! %Ó(ò "‘��1Ø˜’6Ü*¨9°aÓ8�DØ×9Ñ9×@Ñ@Ø$ \ N°$´yÀÈÓ7MÐ6NÐOôð  Ñ!‘ð"ô Ñ=°uÔ=Ó=ˆEØ�L‰L˜×,Ñ,¨UÓ3Õ4ð	5ð 	�‰Ð*Ô+Ø�‰�T×(Ñ(¨×)<Ñ)<Ó=Ô>Ø�‰�T×(Ñ(¨¯©Ó5Ô6Ø�‰�T×(Ñ(¨¯©Ó6Ô7à×-Ñ-×4Ñ4Ð5JÔKô �K‰K˜˜SŸX™X e›_Ó-Ø×ÑØØØ×1Ñ1Øð
ð 	
r%   c           	      ót  — g }g }t        | j                  «      t        | j                  «      k(  sJ ‚t        | j                  | j                  «      D ]a  \  \  }}}t        |«      }|dz
  dz  dz   }|d||z
  z  z   }|j	                  t        j                  d|||«      «       |j	                  |«       Œc ||fS )Nr   r
   r›  r†  )r"  rL  rN  r#  r$  r‡  rˆ  )	r  r%  r&  Úop_indexÚsource_typeÚdataÚsource_lengthÚphysical_lengthÚpadded_datas	            r&   r  z!_NnapiSerializer.serialize_values/  sÇ   € ØÐØ "ÐÜ�4—;‘;Ó¤3 t§¡Ó#7Ò7Ð7Ð7Ü-0°·±¸d¿o¹oÓ-Nò 
	6Ñ)Ñ#ˆX�{ TÜ ›IˆMð !.°Ñ 1°SÑ8¸AÑ=ˆOØ %¨?¸]Ñ+JÑ"KÑLˆKà×$Ñ$Ü—‘˜E 8¨[¸-ÓHôð "×(Ñ(¨Õ5ð
	6ð !Ð"7Ð7Ð7r%   c                 óJ   — t        j                   d| «      j                  «       S rž  )rŸ  r   )Úintss    r&   r  z_NnapiSerializer.serialize_intsA  s   € ä�{‰{˜3 Ó%×-Ñ-Ó/Ð/r%   zprim::GetAttrc                 ó$   — | j                  |«      S ré   )Úadd_getattr©r  r  s     r&   ú<lambda>z_NnapiSerializer.<lambda>F  ó   € ¨D×,<Ñ,<¸TÓ,B€ r%   zprim::Constantc                 ó$   — | j                  |«      S ré   )Úadd_constant_noder5  s     r&   r6  z_NnapiSerializer.<lambda>G  s   € ¨T×-CÑ-CÀDÓ-I€ r%   zprim::ListConstructc                 ó$   — | j                  |«      S ré   )Úadd_list_constructr5  s     r&   r6  z_NnapiSerializer.<lambda>H  s   € °$×2IÑ2IÈ$Ó2O€ r%   zprim::TupleConstructc                 ó$   — | j                  |«      S ré   )Úadd_tuple_constructr5  s     r&   r6  z_NnapiSerializer.<lambda>I  s   € °4×3KÑ3KÈDÓ3Q€ r%   zaten::unsqueezec                 ó$   — | j                  |«      S ré   )Úadd_unsqueezer5  s     r&   r6  z_NnapiSerializer.<lambda>J  s   € ¨d×.@Ñ.@ÀÓ.F€ r%   zaten::toc                 ó$   — | j                  |«      S ré   )Úadd_tor5  s     r&   r6  z_NnapiSerializer.<lambda>K  s   €  t§{¡{°4Ó'8€ r%   zaten::detachc                 ó$   — | j                  |«      S ré   ©Ú	_identityr5  s     r&   r6  z_NnapiSerializer.<lambda>L  s   € ¨4¯>©>¸$Ó+?€ r%   zaten::reshapec                 ó$   — | j                  |«      S ré   )Úadd_reshaper5  s     r&   r6  z_NnapiSerializer.<lambda>M  r7  r%   zaten::flattenc                 ó$   — | j                  |«      S ré   )Úadd_flattenr5  s     r&   r6  z_NnapiSerializer.<lambda>N  r7  r%   zaten::slicec                 ó$   — | j                  |«      S ré   )Ú	add_slicer5  s     r&   r6  z_NnapiSerializer.<lambda>O  ó   € ¨$¯.©.¸Ó*>€ r%   z
aten::sizec                 ó$   — | j                  |«      S ré   )Úadd_sizer5  s     r&   r6  z_NnapiSerializer.<lambda>P  ó   € ¨¯©°tÓ)<€ r%   z	aten::catc                 ó$   — | j                  |«      S ré   )Úadd_catr5  s     r&   r6  z_NnapiSerializer.<lambda>Q  s   € ¨¯©°TÓ(:€ r%   z
aten::meanc                 ó$   — | j                  |«      S ré   )Úadd_meanr5  s     r&   r6  z_NnapiSerializer.<lambda>R  rN  r%   zaten::quantize_per_tensorc                 ó$   — | j                  |«      S ré   )Úadd_quantizer5  s     r&   r6  z_NnapiSerializer.<lambda>S  s   € ¸×8IÑ8IÈ$Ó8O€ r%   zaten::dequantizec                 ó$   — | j                  |«      S ré   )Úadd_dequantizer5  s     r&   r6  z_NnapiSerializer.<lambda>T  ó   € ¨t×/BÑ/BÀ4Ó/H€ r%   z	aten::addc                 ó`   — | j                  |t        j                  t        j                  «      S ré   )Úadd_add_sub_opr(   r{   rÛ   rÜ   r5  s     r&   r6  z_NnapiSerializer.<lambda>U  ó%   € ¨×(;Ñ(;ØÔ%×)Ñ)¬>×+DÑ+Dó)
€ r%   z	aten::subc                 ó`   — | j                  |t        j                  t        j                  «      S ré   )rY  r(   rŸ   rÛ   rÜ   r5  s     r&   r6  z_NnapiSerializer.<lambda>X  rZ  r%   z	aten::mulc                 ó`   — | j                  |t        j                  t        j                  «      S ré   )Ú(add_pointwise_simple_binary_broadcast_opr(   r�   rÛ   rÜ   r5  s     r&   r6  z_NnapiSerializer.<lambda>[  ó%   € ¨×(UÑ(UØÔ%×)Ñ)¬>×+DÑ+Dó)
€ r%   z	aten::divc                 ó`   — | j                  |t        j                  t        j                  «      S ré   )r]  r(   r™   rÛ   rÜ   r5  s     r&   r6  z_NnapiSerializer.<lambda>^  r^  r%   z
aten::reluc                 óB   — | j                  |t        j                  «      S ré   )Úadd_pointwise_simple_unary_opr(   rŽ   r5  s     r&   r6  z_NnapiSerializer.<lambda>a  s   € ¨×)KÑ)KØÔ%×*Ñ*ó*
€ r%   zaten::sigmoidc                 óB   — | j                  |t        j                  «      S ré   )ra  r(   r‰   r5  s     r&   r6  z_NnapiSerializer.<lambda>d  s   € ¨D×,NÑ,NØÔ%×.Ñ.ó-
€ r%   zaten::softmaxc                 ó$   — | j                  |«      S ré   )Úadd_softmaxr5  s     r&   r6  z_NnapiSerializer.<lambda>g  r7  r%   zaten::hardtanhc                 ó$   — | j                  |«      S ré   )Úadd_hardtanhr5  s     r&   r6  z_NnapiSerializer.<lambda>h  s   € ¨T×->Ñ->¸tÓ-D€ r%   zaten::avg_pool2dc                 ó$   — | j                  |«      S ré   )Úadd_avg_pool2dr5  s     r&   r6  z_NnapiSerializer.<lambda>i  rW  r%   zaten::max_pool2dc                 óB   — | j                  |t        j                  «      S ré   )Úadd_pool2d_noder(   rŒ   r5  s     r&   r6  z_NnapiSerializer.<lambda>j  s   € ¨t×/CÑ/CØÔ%×1Ñ1ó0
€ r%   zaten::adaptive_avg_pool2dc                 ó$   — | j                  |«      S ré   )Úadd_adaptive_avg_pool2dr5  s     r&   r6  z_NnapiSerializer.<lambda>m  s   € ¸×8TÑ8TØó9
€ r%   zaten::upsample_nearest2dc                 ó$   — | j                  |«      S ré   )Úadd_upsample_nearest2dr5  s     r&   r6  z_NnapiSerializer.<lambda>p  s   € °t×7RÑ7RØó8
€ r%   zaten::preluc                 ó$   — | j                  |«      S ré   )Úadd_prelu_opr5  s     r&   r6  z_NnapiSerializer.<lambda>s  s   € ¨$×*;Ñ*;¸DÓ*A€ r%   zaten::addmmc                 ó$   — | j                  |«      S ré   )Ú	add_addmmr5  s     r&   r6  z_NnapiSerializer.<lambda>t  rK  r%   zaten::linearc                 ó$   — | j                  |«      S ré   )Ú
add_linearr5  s     r&   r6  z_NnapiSerializer.<lambda>u  ó   € ¨4¯?©?¸4Ó+@€ r%   zaten::_convolutionc                 ó$   — | j                  |«      S ré   )Úadd_conv_underscorer5  s     r&   r6  z_NnapiSerializer.<lambda>v  s   € °×1IÑ1IÈ$Ó1O€ r%   zaten::conv2dc                 ó$   — | j                  |«      S ré   )Ú
add_conv2dr5  s     r&   r6  z_NnapiSerializer.<lambda>w  ru  r%   zaten::log_softmaxc                 ó$   — | j                  |«      S ré   )Úadd_log_softmaxr5  s     r&   r6  z_NnapiSerializer.<lambda>x  s   € °×0DÑ0DÀTÓ0J€ r%   zquantized::linearc                 ó$   — | j                  |«      S ré   )Úadd_qlinearr5  s     r&   r6  z_NnapiSerializer.<lambda>y  s   € °×0@Ñ0@ÀÓ0F€ r%   c                 óB   — | j                  |t        j                  «      S ré   ©Úadd_qconv2drÛ   rÜ   r5  s     r&   r6  z_NnapiSerializer.<lambda>z  s   € °×0@Ñ0@Ø”.×+Ñ+ó1
€ r%   c                 óB   — | j                  |t        j                  «      S ré   )r€  rÛ   rÝ   r5  s     r&   r6  z_NnapiSerializer.<lambda>}  s   € °T×5EÑ5EØ”.×+Ñ+ó6
€ r%   c                 óF   — | j                  |t        j                  d¬«      S )NT)r1  r  r5  s     r&   r6  z_NnapiSerializer.<lambda>€  s$   € ¸$×:JÑ:JØ”.×+Ñ+°tð ;Kó ;
€ r%   c                 ó`   — | j                  |t        j                  t        j                  «      S ré   )Úadd_qaddr(   r{   rÛ   rÜ   r5  s     r&   r6  z_NnapiSerializer.<lambda>ƒ  ó#   € ¨T¯]©]ØÔ%×)Ñ)¬>×+DÑ+Dó.
€ r%   c                 ó`   — | j                  |t        j                  t        j                  «      S ré   )r„  r(   r{   rÛ   rÝ   r5  s     r&   r6  z_NnapiSerializer.<lambda>†  s#   € °$·-±-ØÔ%×)Ñ)¬>×+DÑ+Dó3
€ r%   c                 ó`   — | j                  |t        j                  t        j                  «      S ré   )r„  r(   r�   rÛ   rÜ   r5  s     r&   r6  z_NnapiSerializer.<lambda>‰  r…  r%   )zquantized::conv2dzquantized::conv2d_reluzquantized::conv_transpose2dzquantized::addzquantized::add_reluzquantized::mulc                 óª   — | j                   j                  |j                  «       «      }|st        d|j                  «       ›d|›�«      ‚ || |«       y )NzUnsupported node kind (z
) in node )Ú	ADDER_MAPr­  r½  r  )r  r  Úadders      r&   r  z_NnapiSerializer.add_nodeŽ  sN   € Ø—‘×"Ñ" 4§9¡9£;Ó/ˆÙÜØ)¨$¯)©)«+¨¸
À4À(ÐKóð ñ 	ˆd�DÕr%   c                 óŠ   — | j                  |j                  d«      «      \  }}|j                  d«      }|| j                  |<   y rJ  )r¥  r  Ú	outputsAtrV  )r  r  rÔ  Ú_in_operra  s        r&   rD  z_NnapiSerializer._identity–  s=   € Ø×;Ñ;¸D¿M¹MÈ!Ó<LÓM‰ˆˆxØ—‘ Ó"ˆØ*/ˆ×Ñ Ò'r%   c                 óx  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}t	        |«      j                  d«      sJ ‚|j                  d«      }t        ||«      }|j                  d«      }|j                  «       }| j                  |||«       y )Nr   r   z
__torch__.Úname)r  r  r®  r  rr  Ú
startswithr¨  rw  rŒ  r
  r»  )r  r  Ú	obj_ctypeÚobjr�  rü   Úoutputrº  s           r&   r4  z_NnapiSerializer.add_getattr›  s§   € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&Ø×0Ñ0°·±¸qÓ1AÓB‰ˆ	�3Ü�9‹~×(Ñ(¨Ô6Ð6Ð6Ø�v‰v�f‹~ˆÜ˜˜TÓ"ˆØ—‘ Ó"ˆØ—‘“ˆØ×Ñ ¨¨uÕ5r%   c                 óà   — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  d«      }|j                  «       }|j	                  «       }| j                  |||«       y )Nr   r   )r  r  rŒ  r
  ÚtoIValuer»  )r  r  r“  rº  rü   s        r&   r9  z"_NnapiSerializer.add_constant_node¦  se   € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&Ø—‘ Ó"ˆØ—‘“ˆØ—‘Ó!ˆØ×Ñ ¨¨uÕ5r%   c                 óø  — |j                  «       dk(  sJ ‚|j                  d«      }|j                  «       }g }g }|j                  «       D ]q  }|�4|| j                  v r&| j                  |«      \  }}|j                  |«       nd }|�3|j                  «       j                  «       dk(  r|j                  |«       Œpd }Œs |�| j                  |||«       |�| j                  ||«       |€|€t        d|›�«      ‚y y )Nr   r   r¬  zMUnable to handle ListConstruct node.  Neither all constants nor all tensors. )r  rŒ  r
  rP  rT  r®  r$  r½  r»  r·  r  )	r  r  r“  rº  Ú
const_valsÚtensorsÚinprC  Úvals	            r&   r;  z#_NnapiSerializer.add_list_construct®  s  € Ø×ÑÓ! QÒ&Ð&Ð&Ø—‘ Ó"ˆØ—‘“ˆØ%'ˆ
Ø"$ˆØ—;‘;“=ò 		ˆCØÐ%¨#°·±Ñ*?Ø×0Ñ0°Ó5‘��3Ø×!Ñ! #Õ&à!�
ØÐ" s§x¡x£z§¡Ó'8¸LÒ'HØ—‘˜sÕ#à‘ð		ð Ð!ð ×#Ñ# F¨E°:Ô>ØÐØ×$Ñ$ V¨WÔ5ØÐ ' /ÜØ_Ð`dÐ_gÐhóð ð #2Ðr%   c                 ó¦   — |j                  «       dk(  sJ ‚|j                  d«      }t        |j                  «       «      }| j	                  ||«       y )Nr   r   )r  rŒ  rø   rP  r·  )r  r  r“  rL  s       r&   r=  z$_NnapiSerializer.add_tuple_constructÊ  sG   € Ø×ÑÓ! QÒ&Ð&Ð&Ø—‘ Ó"ˆÜ�d—k‘k“mÓ$ˆØ× Ñ  ¨Õ0r%   c                 óÄ  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}| j	                  |j                  d«      d«      \  }}|j
                  t        j                  k(  sJ ‚|dk\  r|n|t        |j                  «      z   dz   }t        |j                  «      }|j                  |d«       t        |«      }|j                  |¬«      }	d gdz  }
||
d<   | j                  |«      |
d<   d gdz  }| j                  |j!                  d«      |	«      |d<   | j#                  t$        j&                  |
|«       y )Nr	   r   r   rà  ©r  )r  r  r©  r  r®  r  r  r  r"  r  rø   Úinsertrù   rÓ  r•  rd  rŒ  rµ  r(   r­   )r  r  rÔ  Úin_operrC  rE  Úreal_dimÚout_shape_listr8  rÕ  rP  rQ  s               r&   r?  z_NnapiSerializer.add_unsqueezeÐ  sK  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à×EÑEÀdÇmÁmÐTUÓFVÓW‰ˆˆwà×(Ñ(¨¯©°qÓ)9¸9ÓE‰ˆˆ3Ø× Ñ ¤H×$@Ñ$@Ò@Ð@Ð@à š(‘3¨¬c°'·-±-Ó.@Ñ(@À1Ñ(DˆÜ˜gŸm™mÓ,ˆØ×Ñ˜h¨Ô*Ü˜.Ó)ˆ	Ø×#Ñ#¨)Ð#Ó4ˆà�˜!‘ˆØˆˆq‰	Ø×1Ñ1°#Ó6ˆˆq‰	à�&˜1‘*ˆØ×,Ñ,¨T¯^©^¸AÓ->ÀÓIˆ�‰
à×ÑÔ.×:Ñ:¸FÀGÕLr%   c                 ó&   — | j                  |«       y ré   rC  r5  s     r&   rA  z_NnapiSerializer.add_toè  s   € à�‰�tÕr%   c                 ó|  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}| j	                  |j                  d«      «      \  }}|j                  «       dk(  sJ ‚|j                  «       j                  «       dk(  sJ ‚t        |«      dk(  xr |d   dk(  }|j                  t        j                  k7  r|st        d«      ‚t        j                  d«      j                  |j                  «      j!                  |«      j                  }|j#                  |t        j                  ¬«      }d gdz  }	||	d<   | j%                  |«      |	d<   d gdz  }
| j'                  |j)                  d«      |«      |
d<   | j+                  t,        j.                  |	|
«       y )	Nr	   r   r   rß  rà  rÂ  zSCurrently, reshape is only supported on NHWC tensors if the target size is [X, -1].r<  )r  r  r©  r  r®  r½  rá  r"  r  r  r  r  ÚtorchÚzerosÚexpandr  ÚreshaperÓ  r¡  rd  rŒ  rµ  r(   r‘   )r  r  rÔ  rŸ  Úshape_ctyper  Úis_trivial_reshaper8  rÕ  rP  rQ  s              r&   rF  z_NnapiSerializer.add_reshapeì  sŸ  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à×EÑEÀdÇmÁmÐTUÓFVÓW‰ˆˆwà!×4Ñ4°T·]±]À1Ó5EÓFÑˆ�UØ×ÑÓ! ZÒ/Ð/Ð/Ø×)Ñ)Ó+×0Ñ0Ó2°iÒ?Ð?Ð?Ü  ›Z¨1™_Ò?°°q±¸R±Ðà×Ñ¤× <Ñ <Ò<ÑEWÜØeóð ô
 —K‘K “N×)Ñ)¨'¯-©-Ó8×@Ñ@ÀÓG×MÑMˆ	Ø×#Ñ#Ø¤x×'CÑ'Cð $ó 
ˆð �˜!‘ˆØˆˆq‰	Ø×1Ñ1°%Ó8ˆˆq‰	à�&˜1‘*ˆØ×,Ñ,¨T¯^©^¸AÓ->ÀÓIˆ�‰
à×ÑÔ.×6Ñ6¸ÀÕHr%   c           	      óô  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}| j	                  |j                  d«      d«      \  }}| j	                  |j                  d«      d«      \  }}t        |j                  «      dk(  xr: |j                  d   dk(  xs& |j                  d   dk(  xr |j                  d   dk(  }|j                  t        j                  k7  r|st        d«      ‚|dk  r|t        |j                  «      z  }|dk  r|t        |j                  «      z  }|j                  d | t        j                  t        j                  |j                  ||dz    «      fz   |j                  |dz   d  z   }	t        d„ |j                  ||dz    D «       «      rt        d	«      ‚|j                  d | |j                  |dz   d  z   }
|
j!                  d«      dkD  rt        d
«      ‚|j#                  |	t        j                  ¬«      }| j%                  |j'                  d«      |«      }t)        |	«      D ]8  \  }}|dk(  sŒ| j+                  ||||j                  j-                  d«      «       Œ: t/        d„ |	D «       «      }d gdz  }||d<   | j1                  |«      |d<   d gdz  }||d<   | j3                  t4        j6                  ||«       y )Nr
   r   r   rà  r	   r   zGCurrently, flatten is not supported on NHWC tensors unless C=1 or H=W=1c              3   ó&   K  — | ]	  }|d k(  –— Œ y­w)r   Nr$   ©rÿ  rE  s     r&   r  z/_NnapiSerializer.add_flatten.<locals>.<genexpr>(  s   è ø€ ÒJ˜Cˆs�a�xÑJùs   ‚z-Flattening flexible dims is not supported yetzOnly 1 dim can be flexibler<  c              3   ó.   K  — | ]  }|d k7  r|nd–— Œ y­w)r   rÂ  Nr$   r¬  s     r&   r  z/_NnapiSerializer.add_flatten.<locals>.<genexpr>9  s   è ø€ ÒF°S  q¢™¨bÓ0ÑFùr  )r  r  r¥  r  r®  r"  r  r  r  r  r  Ú	functoolsÚreduceÚoperatorÚmulÚanyÚcountrÓ  rd  rŒ  r€  rÏ  rû   rù   r¡  rµ  r(   r‘   )r  r  rÔ  rŸ  Ú_start_ctypeÚ	start_dimÚ
_end_ctypeÚend_dimÚis_trivial_flattenr8  Únon_flattened_dimsrÕ  Úout_idr  rE  Úinputs_1rP  rQ  s                     r&   rH  z_NnapiSerializer.add_flatten  s÷  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à×:Ñ:¸4¿=¹=ÈÓ;KÓL‰ˆˆwà"&×"9Ñ"9¸$¿-¹-ÈÓ:JÈIÓ"VÑˆ�iØ"×5Ñ5°d·m±mÀAÓ6FÈ	ÓRÑˆ
�Gô ! §¡Ó/°1Ñ4ò 
Ø�M‰M˜!Ñ Ñ!ÒV g§m¡m°AÑ&6¸!Ñ&;Ò&UÀÇÁÈaÑ@PÐTUÑ@Uð 	ð ×Ñ¤× <Ñ <Ò<ÑEWÜØYóð ð �qŠ=Øœ˜WŸ]™]Ó+Ñ+ˆIØ�QŠ;Ø”s˜7Ÿ=™=Ó)Ñ)ˆGð �M‰M˜*˜9Ð%Ü×Ñ¤§¡¨g¯m©m¸IÈÐRSÉÐ.TÓUÐWñXà�m‰m˜G a™K˜MÐ*ñ+ð 	ô ÑJ 7§=¡=°¸WÀq¹[Ð#IÔJÔJÜØ?óð ð %Ÿ]™]¨:¨IÐ6¸¿¹ÀwÐQRÁ{À}Ð9UÑUÐØ×#Ñ# AÓ&¨Ò*ÜÐ8Ó9Ð9à×#Ñ#Ø¤x×'CÑ'Cð $ó 
ˆð ×(Ñ(¨¯©¸Ó):¸HÓEˆä! )Ó,ò 	W‰HˆC�Ø�a‹xØ×*Ñ*¨6°3¸¸w¿}¹}×?RÑ?RÐSTÓ?UÕVð	Wô ÑF¸IÔFÓFˆØ�˜!‘ˆØˆˆq‰	Ø×1Ñ1°(Ó;ˆˆq‰	à�&˜1‘*ˆØˆ�‰
à×ÑÔ.×6Ñ6¸ÀÕHr%   c                 ó.  ‡‡— |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}| j	                  |j                  d«      «      \  }Š| j	                  |j                  d«      «      \  }}| j	                  |j                  d«      «      \  }}| j	                  |j                  d«      «      \  }}|€d}|€t
        j                  }|dk  r||j                  ‰   z  }n|t
        j                  k(  rd}|dk(  r%|t
        j                  k(  r| j                  |«       y |j                  ‰   dk(  rt        d«      ‚|dk  r||j                  ‰   z  }n"|t
        j                  k(  r|j                  ‰   }||k\  rt        d«      ‚||z
  |z  Št        ˆˆfd	„t        |j                  «      D «       «      }| j                  |j                  d«      |j                  |¬
«      «      }	d}
t        |«      D ]'  \  }}|dk(  sŒ| j                  |	|||«       |
d|z  z  }
Œ) d gdz  }||d<   | j!                  t#        t%        |j                  «      «      D �cg c]  }|‰k(  r|nd‘Œ c}«      |d<   | j!                  t        |j                  «      D ��cg c]  \  }}|‰k(  r|n|‘Œ c}}«      |d<   | j!                  t#        t%        |j                  «      «      D �cg c]  }|‰k(  r|nd‘Œ c}«      |d<   | j'                  d«      |d<   | j'                  |
«      |d<   | j'                  d«      |d<   d gdz  }|	|d<   | j)                  t*        j,                  ||«       y c c}w c c}}w c c}w )Nr   r   r   r	   r
   r   z#Unable to slice with flexible shapez0Slice start value should be less than stop valuec              3   ó6   •K  — | ]  \  }}|‰k(  r‰n|–— Œ y ­wré   r$   )rÿ  r“  rE  Ú	dim_valueÚout_lens      €€r&   r  z-_NnapiSerializer.add_slice.<locals>.<genexpr>i  s%   øè ø€ ò 
Ù39°1°c�q˜I’~‰G¨3Ó.ñ
ùó   ƒr�  r   r   )r  r  r¥  r  r®  ÚsysÚmaxsizer  rD  r  rù   r€  rd  rŒ  rÓ  rÏ  r¡  Úranger"  r•  rµ  r(   rž   )r  r  rÔ  rŸ  rC  Ústart_valueÚ
stop_valueÚ
step_valuer8  rº  Úend_maskr  rE  rP  r“  rQ  r¾  r¿  s                   @@r&   rJ  z_NnapiSerializer.add_sliceC  s‡  ù€ Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à×:Ñ:¸4¿=¹=ÈÓ;KÓL‰ˆˆwØ×.Ñ.¨t¯}©}¸QÓ/?Ó@‰ˆˆ9Ø×0Ñ0°·±¸qÓ1AÓB‰ˆˆ;Ø×/Ñ/°·±¸aÓ0@ÓA‰ˆˆ:Ø×/Ñ/°·±¸aÓ0@ÓA‰ˆˆ:àÐØˆKØÐÜŸ™ˆJà˜Š?Ø˜7Ÿ=™=¨Ñ3Ñ3‰KØœCŸK™KÒ'ØˆKà˜!Ò 
¬c¯k©kÒ 9Ø�N‰N˜4Ô Øà�=‰=˜Ñ# qÒ(ÜÐAÓBÐBà˜Š>Ø˜'Ÿ-™-¨	Ñ2Ñ2‰JØœ3Ÿ;™;Ò&Ø Ÿ™ yÑ1ˆJà˜*Ò$ÜØBóð ð  Ñ+°
Ñ:ˆÜô 
Ü=FÀwÇ}Á}Ó=Uô
ó 
ˆ	ð ×(Ñ(Ø�N‰N˜1Ó˜w×/Ñ/°iÐ/Ó@ó
ˆð
 ˆÜ! )Ó,ò 	%‰HˆC�Ø�a‹xØ×*Ñ*¨6°3¸¸sÔCØ˜A ™HÑ$‘ð	%ð
 �˜!‘ˆØˆˆq‰	Ø×1Ñ1Ü;@ÄÀWÇ]Á]ÓASÓ;TÖU°a˜A šN‰[°Ñ1ÒUó
ˆˆq‰	ð ×1Ñ1ô (¨¯©Ó6÷á�A�sð   9šn‘
°#Ñ5óó
ˆˆq‰	ð ×1Ñ1Ü:?ÄÀGÇMÁMÓ@RÓ:SÖT°Q˜1 	š>‰Z¨qÑ0ÒTó
ˆˆq‰	ð ×1Ñ1°!Ó4ˆˆq‰	Ø×1Ñ1°(Ó;ˆˆq‰	Ø×1Ñ1°!Ó4ˆˆq‰	à�&˜1‘*ˆØˆ�‰
à×ÑÔ.×<Ñ<¸fÀgÕNùò% Vùóùò Us   É>NÊ;N
ÌNc                 ób  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}| j                  |j                  d«         \  }}|j
                  |   }|j                  d«      }| j                  ||j                  «       |«       y )Nr	   r   r   )	r  r  r©  r  rT  r  rŒ  r»  r
  )r  r  rC  rŸ  rü   Úresr“  s          r&   rM  z_NnapiSerializer.add_sizeŽ  s›   € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à×AÑAÀ$Ç-Á-ÐPQÓBRÓS‰
ˆˆ7Ø—>‘> $§-¡-°Ó"2Ñ3‰ˆˆ5Ø�m‰m˜EÑ"ˆØ—‘ Ó"ˆØ×Ñ ¨¯©«°sÕ;r%   c                 ó   ‡— |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«         }| j	                  |j                  d«      d«      \  }Št        |«      dkD  sJ ‚g }d }d}|D ]Ë  }| j                  |«      \  }}	|€)t        |	j                  ‰d«      }
|	j                  |
¬«      }|	j                  |j                  k(  sJ ‚|	j                  |j                  k(  sJ ‚t        |	j                  ‰d«      t        |j                  ‰d«      k(  sJ ‚|j                  |«       ||	j                  ‰   z  }ŒÍ |€J ‚|j                  t        |j                  ‰|«      ¬«      }	j                  t        j                  k(  r"t        |j                  «      dk(  sJ ‚g d¢‰   }n‰}| j                  |j!                  d«      |«      }t#        |j                  «      D ]U  \  }}|dk(  sŒ|‰k(  r.d	j%                  ˆfd
„|D «       «      }| j'                  |||«       Œ?| j)                  |||d   |«       ŒW || j+                  |«      gz   }d gdz  }||d<   | j-                  t.        j0                  ||«       y )Nr	   r   r   rà  rÂ  r�  r   ©r   r
   r   r	   ú + c              3   ó6   •K  — | ]  }t        |‰«      –— Œ y ­wré   )rF  )rÿ  Úip_idrE  s     €r&   r  z+_NnapiSerializer.add_cat.<locals>.<genexpr>Á  s   øè ø€ Ò&QÀ¤y°¸×'<Ñ&QùrÀ  )r  r  rU  r  r®  r"  r¥  rþ   r  rÓ  rñ   r  r$  r  r  rd  rŒ  r€  rÆ  r�  rÏ  r•  rµ  r(   r}   )r  r  r˜  rC  Úin_idsrÕ  Úout_dim_sizer™  rÔ  rŸ  r8  Ú	nnapi_dimrº  r  rõ   r  rP  rQ  rE  s                     @r&   rP  z_NnapiSerializer.add_cat˜  s•  ø€ Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à×'Ñ'¨¯©°aÓ(8Ñ9ˆØ×(Ñ(¨¯©°qÓ)9¸9ÓE‰ˆˆ3ä�7‹|˜aÒÐÐØˆØˆØˆØò 	/ˆCØ!×>Ñ>¸sÓC‰NˆE�7ØÐÜ*¨7¯=©=¸#¸rÓB�	Ø"×+Ñ+°)Ð+Ó<�Ø—?‘? h×&6Ñ&6Ò6Ð6Ð6Ø×$Ñ$¨×(:Ñ(:Ò:Ð:Ð:Ü! '§-¡-°°bÓ9¼^Ø—‘  Ró>ò ð ð ð �M‰M˜%Ô à˜GŸM™M¨#Ñ.Ñ.‰Lð	/ð Ð#Ð#Ð#Ø×$Ñ$Ü  §¡°°lÓCð %ó 
ˆð ×Ñ¤× 6Ñ 6Ò6Ü�x—~‘~Ó&¨!Ò+Ð+Ð+Ú$ SÑ)‰IàˆIà×(Ñ(¨¯©¸Ó):¸HÓEˆÜ §¡Ó/ò 	L‰FˆC�Ø�A‹vØ˜#’:Ø!ŸJ™JÓ&QÈ&Ô&QÓQ�EØ×.Ñ.¨v°s¸EÕBà×.Ñ.¨v°s¸FÀ1¹IÀsÕKð	Lð ˜4×8Ñ8¸ÓCÐDÑDˆà�&˜1‘*ˆØˆ�‰
à×ÑÔ.×<Ñ<¸fÀgÕNr%   c                 óX  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}| j	                  |j                  d«      «      \  }}|j                  «       dk(  sJ ‚|j                  «       j                  «       dk(  sJ ‚| j	                  |j                  d«      d«      \  }}| j	                  |j                  d«      d	«       |j                  t        j                  k(  r/t        |j                  «      dk(  sJ ‚|D �cg c]	  }g d
¢|   ‘Œ }	}n|}	t        «       }
|D ]0  }|dk  r|t        |j                  «      z  }|
j                  |«       Œ2 |j                  t        j                  k(  r(|s&|
j                  ddh«      sJ ‚t        j                  }n|j                  }g }t!        |j                  «      D ]/  \  }}||
vr|j#                  |«       Œ|sŒ|j#                  d«       Œ1 |j%                  ||¬«      }d gdz  }||d<   | j'                  |	«      |d<   | j)                  |«      |d<   d gdz  }| j+                  |j-                  d«      |«      |d<   | j/                  t0        j2                  ||«       y c c}w )Nr   r   r   rß  rà  r	   ÚBoolTyper
   ÚNoneTyperË  r<  )r  r  r©  r  r®  r½  rá  r  r  r  r"  r  ÚsetÚaddÚ
issupersetr  r€  r$  rÓ  r¡  r•  rd  rŒ  rµ  r(   rš   )r  r  rÔ  rŸ  Ú	dim_ctyperE  rC  Úkeep_dimrõ   rÑ  Úcollapsed_dimsÚout_dim_orderr8  r“  r¨  rÕ  rP  rQ  s                     r&   rR  z_NnapiSerializer.add_meanÍ  s…  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à×EÑEÀdÇmÁmÐTUÓFVÓW‰ˆˆwØ×0Ñ0°·±¸qÓ1AÓB‰ˆ	�3Ø�~‰~Ó :Ò-Ð-Ð-Ø×'Ñ'Ó)×.Ñ.Ó0°IÒ=Ð=Ð=Ø×-Ñ-¨d¯m©m¸AÓ.>À
ÓK‰ˆˆ8à×Ñ §¡¨aÓ 0°*Ô=à×Ñ¤× 6Ñ 6Ò6Ü�w—}‘}Ó%¨Ò*Ð*Ð*Ø25Ö6¨Qš a›Ð6ˆIÑ6àˆIä›ˆØò 	"ˆAØ�1ŠuØ”S˜Ÿ™Ó'Ñ'�Ø×Ñ˜qÕ!ð	"ð
 ×Ñ¤× 6Ñ 6Ò6¹xØ!×,Ñ,¨a°¨VÔ4Ð4Ð4Ü$×8Ñ8‰Mà#×-Ñ-ˆMàˆ	Ü˜gŸm™mÓ,ò 	$‰DˆAˆqØ˜Ñ&Ø× Ñ  Õ#ÚØ× Ñ  Õ#ð		$ð ×#Ñ#¨)¸}Ð#ÓMˆà�˜!‘ˆØˆˆq‰	Ø×1Ñ1°)Ó<ˆˆq‰	Ø×1Ñ1°(Ó;ˆˆq‰	à�&˜1‘*ˆØ×,Ñ,¨T¯^©^¸AÓ->ÀÓIˆ�‰
à×ÑÔ.×3Ñ3°V¸WÕEùòC 7s   Ä)J'c                 ó
  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}|j                  t
        j                  k7  rt        d«      ‚| j                  |j                  d«      d«      \  }}| j                  |j                  d«      d«      \  }}| j                  |j                  d«      d«      \  }}|t        j                  j                  k7  rt        d	«      ‚t        j                  }|j                  |||¬
«      }	d gdz  }
||
d<   d gdz  }| j                  |j!                  d«      |	«      |d<   | j#                  t$        j&                  |
|«       y )Nr   r   r   zqMost hardware backends prefer NHWC quantized tensors.  Try setting `t.nnapi_nhwc = True` on your tensor inputs.  Ú	FloatTyper	   rà  r
   zKPyTorch NNAPI export only supports quantized tensors with the quint8 dtype.©rñ   r  r  )r  r  r©  r  r  r  r  r  r®  ræ   rç   rü   r   r   rÓ  rd  rŒ  rµ  r(   rÃ   )r  r  rÔ  rŸ  rC  r  r  Úscalar_typerñ   rÕ  rP  rQ  s               r&   rT  z_NnapiSerializer.add_quantizeþ  s}  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à×EÑEÀdÇmÁmÐTUÓFVÓW‰ˆˆwØ×Ñ¤× 6Ñ 6Ò6ÜðMóð ð ×*Ñ*¨4¯=©=¸Ó+;¸[ÓI‰ˆˆ5Ø×/Ñ/°·±¸aÓ0@À)ÓL‰ˆˆ:Ø×0Ñ0°·±¸qÓ1AÀ9ÓM‰ˆˆ;ØÔ*×1Ñ1×7Ñ7Ò7Üð)óð ô $×7Ñ7ˆà×#Ñ#ØØØ!ð $ó 
ˆð �˜!‘ˆØˆˆq‰	à�&˜1‘*ˆØ×,Ñ,¨T¯^©^¸AÓ->ÀÓIˆ�‰
à×ÑÔ.×7Ñ7¸ÀÕIr%   c                 óŽ  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}|j	                  t
        j                  dd¬«      }d gdz  }||d<   d gdz  }| j                  |j                  d«      |«      |d<   | j                  t        j                  ||«       y )Nr   r   ri  rÞ  )r  r  r©  r  rÓ  r   r   rd  rŒ  rµ  r(   r�   )r  r  rÔ  rŸ  rÕ  rP  rQ  s          r&   rV  z_NnapiSerializer.add_dequantize   sÉ   € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à×EÑEÀdÇmÁmÐTUÓFVÓW‰ˆˆwØ×#Ñ#Ü%×4Ñ4ØØð $ó 
ˆð �˜!‘ˆØˆˆq‰	à�&˜1‘*ˆØ×,Ñ,¨T¯^©^¸AÓ->ÀÓIˆ�‰
à×ÑÔ.×9Ñ9¸6À7ÕKr%   c                 ó*  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}|}|t        j
                  k(  r0|j                  t        j                  k(  r|j                  dd¬«      }| j                  |j                  d«      |«      }t        |j                  «      D ]  \  }}|dk(  sŒ| j                  ||||«       Œ! d gdz  }	||	d<   d gdz  }
||
d<   | j                  ||	|
«       y )Nr   r   g      p?)r  r  )r  r  r¥  r  r(   r‰   rñ   r   r   rÓ  rd  rŒ  r€  r  rÏ  rµ  )r  r  r´  rÔ  rŸ  rÕ  rº  r  rE  rP  rQ  s              r&   ra  z._NnapiSerializer.add_pointwise_simple_unary_op3  s  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à×:Ñ:¸4¿=¹=ÈÓ;KÓL‰ˆˆwàˆØÔ(×1Ñ1Ò1ð �‰Ô"3×"GÑ"GÒGØ"×+Ñ+°qÀ	Ð+ÓJ�à×(Ñ(¨¯©¸Ó):¸HÓEˆä! '§-¡-Ó0ò 	D‰HˆC�Ø�a‹xØ×*Ñ*¨6°3¸¸sÕCð	Dð �˜!‘ˆØˆˆq‰	à�&˜1‘*ˆØˆ�‰
à×Ñ˜6 6¨7Õ3r%   ©Úqparamsc          
      ó0  — |j                  «       dk(  sJ ‚|j                  d«      j                  «       j                  «       dk(  sJ ‚|j                  d«      j                  «       j                  «       dk(  sJ ‚| j	                  |j                  d«      «      rR| j                  |j                  d«      «      \  }}| j                  |j                  d«      |j                  «      \  }}n�| j	                  |j                  d«      «      rR| j                  |j                  d«      «      \  }}| j                  |j                  d«      |j                  «      \  }}nt        d|› d�«      ‚|j                  |j                  k(  sJ ‚| j                  ||||«      \  }}}}t        |j                  |j                  «      }	|j                  |	¬«      }
|�|\  }}|
j                  ||¬«      }
| j                  |j                  d«      |
«      }t!        t#        |j                  |j                  «      «      D ]›  \  }\  }}|dk(  r|dk(  r| j%                  ||||«       Œ(|dk(  r|dk(  r| j%                  ||||«       ŒG|dk(  sŒM|dk(  sŒS| j&                  j)                  d	t+        ||«      › d
t+        ||«      › �«       | j%                  ||||«       Œ� dgdz  }||d<   ||d<   | j-                  |«      |d<   dgdz  }||d<   | j/                  |||«       y)zFHelper for pointwise binary broadcast ops with superfluous extra args.r   r   r¬  zCan't do a NNAPI binary op: z on two constantsr�  N©r  r  zassert z == r
   r	   )r  r  r
  r½  r£  r¥  r¯  r  r  rñ   rÝ  r,  r  rÓ  rd  rŒ  r€  r#  rÏ  rR  r$  rF  r•  rµ  )r  r  r´  Ú	fuse_coderã  rØ  rÙ  rÚ  rÛ  r8  rÕ  r  Úzprº  r  Úd0r*  rP  rQ  s                      r&   Ú_do_add_binaryz_NnapiSerializer._do_add_binaryO  s
  € à×ÑÓ! QÒ&Ð&Ð&à�}‰}˜QÓ×$Ñ$Ó&×+Ñ+Ó-°Ò=Ð=Ð=Ø�}‰}˜QÓ×$Ñ$Ó&×+Ñ+Ó-°Ò=Ð=Ð=à×&Ñ& t§}¡}°QÓ'7Ô8Ø#×@Ñ@ÀÇÁÈqÓAQÓRÑˆF�HØ#×BÑBØ—‘˜aÓ  (×"4Ñ"4ó ÑˆF‘Hð ×(Ñ(¨¯©°qÓ)9Ô:Ø#×@Ñ@ÀÇÁÈqÓAQÓRÑˆF�HØ#×BÑBØ—‘˜aÓ  (×"4Ñ"4ó ÑˆF‘Hô Ø.¨v¨hÐ6GÐHóð ð ×Ñ 8×#3Ñ#3Ò3Ð3Ð3Ø-1×-IÑ-IØ�H˜f hó.
Ñ*ˆ�˜& (ô % X§^¡^°X·^±^ÓDˆ	Ø×$Ñ$¨9Ð$Ó5ˆØÐØ‰IˆE�2Ø×(Ñ(¨uÀÐ(ÓDˆHà×(Ñ(¨¯©¸Ó):¸HÓEˆÜ&¤s¨8¯>©>¸8¿>¹>Ó'JÓKò 		E‰MˆC‘�"�bØ�QŠw˜2 š7Ø×*Ñ*¨6°3¸ÀÕDØ�q’˜R 1šWØ×*Ñ*¨6°3¸ÀÕDØ�q“˜R 1›WØ×5Ñ5×<Ñ<Øœi¨°Ó4Ð5°T¼)ÀFÈCÓ:PÐ9QÐRôð ×*Ñ*¨6°3¸ÀÕDð		Eð �˜!‘ˆØˆˆq‰	Øˆˆq‰	Ø×1Ñ1°)Ó<ˆˆq‰	à�&˜1‘*ˆØˆ�‰
à×Ñ˜6 6¨7Õ3r%   c                 óT   — |j                  «       dk(  sJ ‚| j                  |||«       y rõ  )r  ré  )r  r  r´  ræ  s       r&   r]  z9_NnapiSerializer.add_pointwise_simple_binary_broadcast_op†  s)   € Ø�‰Ó  AÒ%Ð%Ð%Ø×Ñ˜D &¨)Õ4r%   c                 ó¼   — |j                  «       dk(  sJ ‚| j                  |j                  d«      d«      \  }}|dk7  rt        d«      ‚| j	                  |||«       y )Nr
   r	   rà  r   z*NNAPI does not support add/sub with alpha.)r  r®  r  r  ré  )r  r  r´  ræ  rC  Úalphas         r&   rY  z_NnapiSerializer.add_add_sub_opŠ  sa   € Ø�‰Ó  AÒ%Ð%Ð%à×*Ñ*¨4¯=©=¸Ó+;¸YÓG‰ˆˆ5Ø�AŠ:ÜØ<óð ð 	×Ñ˜D &¨)Õ4r%   c                 óì   — |j                  «       dk(  sJ ‚| j                  |j                  d«      d«      \  }}| j                  |j                  d«      d«      \  }}| j                  |||||f¬«       y )Nr   r	   rÝ  r
   rà  râ  )r  r®  r  ré  )r  r  r´  ræ  rC  r  r  s          r&   r„  z_NnapiSerializer.add_qadd•  sq   € Ø�‰Ó  AÒ%Ð%Ð%à×*Ñ*¨4¯=©=¸Ó+;¸[ÓI‰ˆˆ5Ø×/Ñ/°·±¸aÓ0@À)ÓL‰ˆˆ:à×Ñ˜D &¨)¸eÀZÐ=PÐÕQr%   c                 ó*  — |j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}| j                  |j                  d«      d«      \  }}| j	                  |j                  d«      |«      }t        |j                  «      D ]  \  }}|dk(  sŒ| j                  ||||«       Œ! d gdz  }	||	d<   | j                  d«      |	d<   | j                  |«      |	d<   d gdz  }
||
d<   | j                  t        j                  |	|
«       y )Nr
   r   r   rà  g      ð?r	   )r  r¥  r  r®  rd  rŒ  r€  r  rÏ  r˜  r•  rµ  r(   r”   )r  r  rÔ  rŸ  rC  Úsoftmax_dimrº  rE  rô   rP  rQ  s              r&   rd  z_NnapiSerializer.add_softmax�  s  € Ø�‰Ó  AÒ%Ð%Ð%Ø×:Ñ:¸4¿=¹=ÈÓ;KÓL‰ˆˆwà×0Ñ0°·±¸qÓ1AÀ9ÓM‰ˆˆ;à×(Ñ(¨¯©¸Ó):¸GÓDˆÜ" 7§=¡=Ó1ò 	D‰IˆC�Ø�q‹yØ×*Ñ*¨6°3¸¸sÕCð	Dð �˜!‘ˆØˆˆq‰	Ø×3Ñ3Øó
ˆˆq‰	ð ×1Ñ1°+Ó>ˆˆq‰	à�&˜1‘*ˆØˆ�‰
à×ÑÔ.×6Ñ6¸ÀÕHr%   c                 ó@  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}| j	                  |j                  d«      d«      \  }}| j	                  |j                  d«      d«      \  }}t
        j                  t
        j                  dœ}|j                  ||f«      }|€t        d«      ‚d gdz  }	||	d<   d gdz  }
| j                  |j                  d«      |«      |
d<   | j                  ||	|
«       y )Nr
   r   r   rÝ  r	   ))rÂ  r   )r   r   z9NNAPI only supports hardtanh with args (-1, 1) or (0, 6).)r  r  r©  r  r®  r(   r�   r�   r­  r  rd  rŒ  rµ  )r  r  rÔ  rŸ  rC  Úmin_valÚmax_valÚop_mapr´  rP  rQ  s              r&   rf  z_NnapiSerializer.add_hardtanh´  s!  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à×EÑEÀdÇmÁmÐTUÓFVÓW‰ˆˆwØ×,Ñ,¨T¯]©]¸1Ó-=¸{ÓK‰
ˆˆ7Ø×,Ñ,¨T¯]©]¸1Ó-=¸{ÓK‰
ˆˆ7ô )×.Ñ.Ü'×-Ñ-ñ
ˆð
 —‘˜W gÐ.Ó/ˆØˆ>ÜØKóð ð �˜!‘ˆØˆˆq‰	à�&˜1‘*ˆØ×,Ñ,¨T¯^©^¸AÓ->ÀÓHˆ�‰
à×Ñ˜6 6¨7Õ3r%   c                 óª  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  d«      j                  «       j	                  «       dk(  sJ ‚|j                  d«      j                  «       j	                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}| j                  |j                  d«      «      \  }}t        |j                  «      dk(  sJ ‚|j                  d   dkD  sJ ‚|j                  d   dkD  r|j                  «       rt        d«      ‚| j                  |j                  d«      |«      }t        |j                  «      D ]/  \  }}|dkD  rŒ|dk  rt        d«      ‚| j                  ||||«       Œ1 d gdz  }	||	d<   ||	d<   d gdz  }
||
d<   | j                  t         j"                  |	|
«       y )Nr	   r   r   r¬  z8Per-channel PReLU only supports channels_last right now.z.PReLU requires fixed size for dim 0 and dim 1.)r  r  r  r
  r½  r¥  r±  r"  r  r  r  rd  rŒ  r€  rÏ  rµ  r(   rÂ   )r  r  rÔ  rŸ  Úw_idÚw_operrº  rE  rô   rP  rQ  s              r&   rp  z_NnapiSerializer.add_prelu_opÏ  sÑ  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à�}‰}˜QÓ×$Ñ$Ó&×+Ñ+Ó-°Ò=Ð=Ð=Ø�}‰}˜QÓ×$Ñ$Ó&×+Ñ+Ó-°Ò=Ð=Ð=à×:Ñ:¸4¿=¹=ÈÓ;KÓL‰ˆˆwØ×9Ñ9¸$¿-¹-ÈÓ:JÓK‰ˆˆfÜ�6—<‘<Ó  AÒ%Ð%Ð%Ø�|‰|˜A‰ Ò"Ð"Ð"Ø�<‰<˜‰?˜QÒØ×ÑÔ!äØNóð ð ×(Ñ(¨¯©¸Ó):¸GÓDˆÜ" 7§=¡=Ó1ò 	D‰IˆC�Ø�aŠxØØ˜’ÜØDóð ð ×*Ñ*¨6°3¸¸sÕCð	Dð �˜!‘ˆØˆˆq‰	Øˆˆq‰	à�&˜1‘*ˆØˆ�‰
à×ÑÔ.×4Ñ4°f¸gÕFr%   c                 óì  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  «       \  }}}}}}|xs |}| j                  | j	                  |«      |||«      }	|	j
                  dk7  s|	j                  dk7  rt        d«      ‚| j                  |«      \  }
}t        |j                  «      dk(  sJ ‚t        |j                  |	|j                  d   d«      }|j                  «       }d gdz  }|
|d<   | j                  |	j                  «      |d<   | j                  |	j                  «      |d<   | j                  |	j                   «      |d	<   | j                  |	j"                  «      |d<   | j                  |	j$                  «      |d
<   | j                  |	j&                  «      |d<   | j                  |	j(                  «      |d<   | j                  |	j*                  «      |d<   | j                  t,        j.                  «      |d<   | j1                  |«      |d<   d gdz  }| j3                  |j5                  d«      |j7                  |¬«      «      |d<   | j9                  |||«       y )Nr   r   z'NNAPI does not support dilated pooling.r   Fr   r   r	   r
   r   r   r   r   r   r�  )r  r  rP  ró  râ  r	  r
  r  r©  r"  r  r9  r  r•  r  r  r  r  r  r  r  r  rÛ   rÜ   rœ  rd  rŒ  rÓ  rµ  )r  r  r´  ÚimageÚkernelrð  rñ  rò  Ú
_ceil_moder/  Úimage_idÚ
image_operr8  r  rP  rQ  s                   r&   rj  z _NnapiSerializer.add_pool2d_nodeõ  sN  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&Ø?C¿{¹{»}Ñ<ˆˆv�v˜w¨°*àÒ!˜6ˆð ×2Ñ2Ø×Ñ˜fÓ% v¨w¸ó
ˆð �?‰?˜aÒ 4§?¡?°aÒ#7ÜÐEÓFÐFà#×KÑKÈEÓRÑˆ�*Ü�:×#Ñ#Ó$¨Ò)Ð)Ð)ä'Ø×Ñ˜d J×$4Ñ$4°QÑ$7¸ó
ˆ	ð ×&Ñ&Ó(ˆà�˜"‘ˆØˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·-±-Ó@ˆˆq‰	Ø×1Ñ1°$·-±-Ó@ˆˆq‰	Ø×1Ñ1°$·-±-Ó@ˆˆq‰	Ø×1Ñ1°$·-±-Ó@ˆˆq‰	Ø×1Ñ1´.×2KÑ2KÓLˆˆq‰	Ø×3Ñ3°HÓ=ˆˆr‰
à�&˜1‘*ˆØ×,Ñ,Ø�N‰N˜1Ó˜z×2Ñ2¸Ð2ÓCó
ˆ�‰
ð 	×Ñ˜6 6¨7Õ3r%   c                 óD  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  «       \  }}}}}}}| j                  |«      \  }	}
| j                  |«      \  }	}|
r|rt	        d«      ‚| j                  | j                  |«      ||«      }| j                  |«      \  }}t        |j                  «      dk(  sJ ‚t        |j                  ||j                  d   d«      }|j                  «       }d gdz  }||d<   | j                  |j                  «      |d<   | j                  |j                  «      |d<   | j                  |j                  «      |d	<   | j                  |j                   «      |d<   | j                  |j"                  «      |d
<   | j                  |j$                  «      |d<   | j                  |j&                  «      |d<   | j                  |j(                  «      |d<   | j                  t*        j,                  «      |d<   | j/                  |«      |d<   d gdz  }| j1                  |j3                  d«      |j5                  |¬«      «      }| j7                  |||d«       ||d<   | j9                  t:        j<                  ||«       y )Nr   r   zANNAPI doesn't support count_include_pad=False or divisor_overrider   Fr   r   r	   r
   r   r   r   r   r   r�  )r  r  rP  r®  r  ró  râ  r¥  r"  r  r9  r  r•  r  r  r  r  r  r  r  r  rÛ   rÜ   rœ  rd  rŒ  rÓ  Ú _handle_conv_pool_flexible_inputrµ  r(   r|   )r  r  rø  rù  rð  rñ  rú  Úcount_include_padÚdivisor_overriderC  Úcount_include_pad_valueÚdivisor_override_valuer/  rû  rü  r8  r  rP  rQ  rº  s                       r&   rh  z_NnapiSerializer.add_avg_pool2d   s’  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&ð �K‰K‹Mñ	
ØØØØØØØð &*×%<Ñ%<Ð=NÓ%OÑ"ˆÐ"Ø$(×$;Ñ$;Ð<LÓ$MÑ!ˆÐ!Ù&Ñ*@ÜØSóð ð ×2Ñ2Ø×Ñ˜fÓ% v¨wó
ˆð  $×@Ñ@ÀÓGÑˆ�*Ü�:×#Ñ#Ó$¨Ò)Ð)Ð)ä'Ø×Ñ˜d J×$4Ñ$4°QÑ$7¸ó
ˆ	ð ×&Ñ&Ó(ˆà�˜"‘ˆØˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·-±-Ó@ˆˆq‰	Ø×1Ñ1°$·-±-Ó@ˆˆq‰	Ø×1Ñ1°$·-±-Ó@ˆˆq‰	Ø×1Ñ1°$·-±-Ó@ˆˆq‰	Ø×1Ñ1´.×2KÑ2KÓLˆˆq‰	Ø×3Ñ3°HÓ=ˆˆr‰
à�&˜1‘*ˆØ×(Ñ(Ø�N‰N˜1Ó˜z×2Ñ2¸Ð2ÓCó
ˆð 	×-Ñ-¨f°e¸TÀ5ÔIØˆ�‰
à×ÑÔ.×>Ñ>ÀÈÕPr%   c                 ó®  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚| j                  |j                  d«      «      \  }}t	        |j
                  «      dk(  sJ ‚| j                  |j                  d«      «      \  }}|j                  «       dk(  sJ ‚|j                  «       j                  «       dk(  sJ ‚|ddgk7  rt        d«      ‚|j
                  dd t        |«      z   }|j                  «       }d gdz  }||d<   | j                  d«      |d<   | j                  d«      |d<   | j                  d«      |d	<   | j                  d«      |d<   | j                  d«      |d
<   | j                  d«      |d<   | j                  |j
                  d	   «      |d<   | j                  |j
                  d   «      |d<   | j                  t        j                  «      |d<   | j                  |«      |d<   d gdz  }	| j!                  |j#                  d«      |j%                  |¬«      «      |	d<   | j'                  t(        j*                  ||	«       y )Nr	   r   r   r   rß  rà  z@NNAPI only supports adaptive_avg_pool2d with output size (1, 1).r   r
   r   r   r   r   r   r   r�  )r  r  r©  r  r"  r  r®  r½  rá  r  rù   r  r•  rÛ   rÜ   rœ  rd  rŒ  rÓ  rµ  r(   r|   )
r  r  rû  rü  Ú
size_ctypeÚsize_argr8  r  rP  rQ  s
             r&   rl  z(_NnapiSerializer.add_adaptive_avg_pool2dV  sR  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à#×KÑKØ�M‰M˜!Óó 
Ñˆ�*ô �:×#Ñ#Ó$¨Ò)Ð)Ð)à#×6Ñ6°t·}±}ÀQÓ7GÓHÑˆ
�HØ�‰Ó  JÒ.Ð.Ð.Ø×(Ñ(Ó*×/Ñ/Ó1°YÒ>Ð>Ð>Ø˜˜1�vÒÜØRóð ð ×$Ñ$ Q qÐ)¬E°(«OÑ;ˆ	Ø×&Ñ&Ó(ˆà�˜"‘ˆØˆˆq‰	Ø×1Ñ1°!Ó4ˆˆq‰	Ø×1Ñ1°!Ó4ˆˆq‰	Ø×1Ñ1°!Ó4ˆˆq‰	Ø×1Ñ1°!Ó4ˆˆq‰	Ø×1Ñ1°!Ó4ˆˆq‰	Ø×1Ñ1°!Ó4ˆˆq‰	Ø×1Ñ1°*×2BÑ2BÀ1Ñ2EÓFˆˆq‰	Ø×1Ñ1°*×2BÑ2BÀ1Ñ2EÓFˆˆq‰	Ø×1Ñ1´.×2KÑ2KÓLˆˆq‰	Ø×3Ñ3°HÓ=ˆˆr‰
à�&˜1‘*ˆØ×,Ñ,Ø�N‰N˜1Ó˜z×2Ñ2¸Ð2ÓCó
ˆ�‰
ð 	×ÑÔ.×>Ñ>ÀÈÕPr%   c                 óÄ	  — |j                  «       dk(  s|j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  «       dk(  r|j                  «       \  }}}n|j                  «       \  }}}}| j                  |«      \  }}|j                  «       dk(  r| j                  «      \  }	}
nV| j                  «      \  }}| j                  «      \  }}|j	                  «       dk(  sJ ‚|j	                  «       dk(  sJ ‚|}	|}
| j                  |«      \  }}t        |j                  «      dk(  sJ ‚|j	                  «       dk7  r|	j	                  «       dk7  rt        d«      ‚|j	                  «       dk7  rÌ|j	                  «       dk(  sJ ‚|j                  «       j	                  «       dk(  sJ ‚|	j	                  «       dk(  sJ ‚|
�J ‚t        |t        «      sJ ‚|sJ ‚t        d„ |D «       «      sJ ‚t        |«      dk(  r|d	z  }t        |«      d	k(  sJ ‚|d
   }|d   }| j                  |«      }| j                  |«      }�n"|	j	                  «       dk7  �r|	j	                  «       dk(  sJ ‚|	j                  «       j	                  «       dk(  sJ ‚|j	                  «       dk(  sJ ‚|�J ‚t        |
t        «      sJ ‚|
sJ ‚t        d„ |
D «       «      sJ ‚t        |
«      dk(  r|
d	z  }
t        |
«      d	k(  sJ ‚t        |
d
   |j                  d	   z  «      }t        |
d   |j                  d   z  «      }| j                  |
d
   «      }| j                  |
d   «      }nt        d«      ‚|j                  d
   |j                  d   ||f}|j!                  «       }| j#                  |j%                  d
«      |j'                  |¬«      «      }|j                  d
   d
k(  s|j                  d   d
k(  rt        d«      ‚dD ]Š  }|j                  |   d
k(  sŒ|j	                  «       dk7  r| j)                  ||||d	z
     «       ŒC|	j	                  «       dk7  r+| j)                  ||d|
|d	z
     › dt+        ||«      › d�«       Œ�t        d«      ‚ d gdz  }||d
<   ||d<   ||d	<   | j-                  |«      |d<   d gdz  }||d
<   | j/                  t0        j2                  ||«       y )Nr
   r   r   rÔ  z'Size and scale cannot both be non-None.rß  rà  c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wré   )r`  r  ©rÿ  rš  s     r&   r  z:_NnapiSerializer.add_upsample_nearest2d.<locals>.<genexpr>¢  s   è ø€ Ò@°”z #¤s×+Ñ@ùó   ‚r	   r   rÝ  c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wré   )r`  r   r  s     r&   r  z:_NnapiSerializer.add_upsample_nearest2d.<locals>.<genexpr>±  s   è ø€ ÒC°#”z #¤u×-ÑCùr	  z#Size and scale cannot both be None.r�  z(Flexible batch or channels not supported)r	   r
   zint(z * rÅ  )r  r  rP  r®  r½  r¥  r"  r  r  rá  r`  rø   Úallr•  r  r˜  r  rd  rŒ  rÓ  r�  rF  rœ  rµ  r(   rÙ   )r  r  rø  Úsize_jitÚ	scale_jitÚscale_h_jitÚscale_w_jitr  r  Úscale_ctypeÚ	scale_argÚscale_h_ctypeÚscale_h_argÚscale_w_ctypeÚ_scale_w_argrû  rü  r6  r7  Úarg_hÚarg_wr8  r  rº  rE  rP  rQ  s                              r&   rn  z'_NnapiSerializer.add_upsample_nearest2d~  s"  € Ø�‰Ó  AÒ%¨¯©Ó):¸aÒ)?Ð?Ð?Ø×ÑÓ! QÒ&Ð&Ð&Ø�?‰?Ó Ò!Ø)-¯©«Ñ&ˆE�8™Yà8<¿¹»Ñ5ˆE�8˜[¨+Ø#×6Ñ6°xÓ@Ñˆ
�Hà�?‰?Ó Ò!Ø%)×%<Ñ%<¸YÓ%GÑ"ˆK™à)-×)@Ñ)@ÀÓ)MÑ&ˆM˜;Ø*.×*AÑ*AÀ+Ó*NÑ'ˆM˜<ð
 !×%Ñ%Ó'¨:Ò5Ð5Ð5Ø ×%Ñ%Ó'¨:Ò5Ð5Ð5à'ˆKØ#ˆIà#×@Ñ@ÀÓGÑˆ�*Ü�:×#Ñ#Ó$¨Ò)Ð)Ð)à�?‰?Ó 
Ò*¨{×/?Ñ/?Ó/AÀZÒ/OÜÐEÓFÐFØ�_‰_Ó *Ò,Ø—?‘?Ó$¨
Ò2Ð2Ð2Ø×,Ñ,Ó.×3Ñ3Ó5¸ÒBÐBÐBØ×#Ñ#Ó%¨Ò3Ð3Ð3ØÐ$Ð$Ð$Ü˜h¬Ô-Ð-Ð-ÙˆO�8ÜÑ@°xÔ@Ô@Ð@Ð@Ü�8‹} Ò!Ø# a™<�Ü�x“= AÒ%Ð%Ð%Ø˜Q‘KˆEØ˜Q‘KˆEØ×1Ñ1°%Ó8ˆEØ×1Ñ1°%Ó8ŠEØ×ÑÓ :Ó-Ø×#Ñ#Ó%¨Ò3Ð3Ð3Ø×-Ñ-Ó/×4Ñ4Ó6¸+ÒEÐEÐEØ—?‘?Ó$¨
Ò2Ð2Ð2ØÐ#Ð#Ð#Ü˜i¬Ô.Ð.Ð.ÙÐ�9ÜÑC¸ÔCÔCÐCÐCÜ�9‹~ Ò"Ø%¨™M�	Ü�y“> QÒ&Ð&Ð&Ü˜	 !™ z×'7Ñ'7¸Ñ':Ñ:Ó;ˆEÜ˜	 !™ z×'7Ñ'7¸Ñ':Ñ:Ó;ˆEØ×3Ñ3°I¸a±LÓAˆEØ×3Ñ3°I¸a±LÓA‰EäÐAÓBÐBà×%Ñ% aÑ(¨*×*:Ñ*:¸1Ñ*=¸uÀeÐLˆ	Ø×&Ñ&Ó(ˆØ×(Ñ(Ø�N‰N˜1Ó˜z×2Ñ2¸Ð2ÓCó
ˆð ×Ñ˜AÑ !Ò# z×'7Ñ'7¸Ñ':¸aÒ'?ÜÐFÓGÐGð ò 	ˆCØ×Ñ Ñ$¨Ó)Ø—?‘?Ó$¨
Ò2Ø×.Ñ.¨v°s¸HÀSÈ1ÁWÑ<MÕNØ ×%Ñ%Ó'¨:Ò5Ø×.Ñ.ØØØ˜y¨¨q©Ñ1Ð2°#´iÀÈ#Ó6NÐ5OÈqÐQõô $Ø=óð ð	ð �˜!‘ˆØˆˆq‰	Øˆˆq‰	Øˆˆq‰	Ø×2Ñ2°8Ó<ˆˆq‰	à�&˜1‘*ˆØˆ�‰
à×ÑÔ.×FÑFÈÐPWÕXr%   c                 ó0  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  «       \  }}}}}||fD ]:  }| j                  |«      \  }}	|j	                  «       dv sJ ‚|	dk7  sŒ1t        d«      ‚ | j                  |d|||«       y )Nr   r   )rà  rÝ  z6NNAPI Fully-Connected does not support alpha and beta.T)r  r  rP  r®  r½  r  Úadd_addmm_or_linear)
r  r  Újit_biasÚ	jit_inputÚ
jit_weightÚjit_betaÚ	jit_alphara  r  Úscale_values
             r&   rr  z_NnapiSerializer.add_addmmà  sµ   € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&Ø?C¿{¹{»}Ñ<ˆ�)˜Z¨°9à Ð+ò 	ˆFØ'+×'>Ñ'>¸vÓ'FÑ$ˆK˜Ø×#Ñ#Ó%Ð)AÑAÐAÐAØ˜aÓÜØLóð ð		ð 	× Ñ   t¨Y¸
ÀHÕMr%   c                 óª   — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  «       \  }}}| j                  |d|||«       y )Nr
   r   F)r  r  rP  r  )r  r  r  r  r  s        r&   rt  z_NnapiSerializer.add_linearï  sV   € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&Ø*.¯+©+«-Ñ'ˆ	�:˜xà× Ñ   u¨i¸ÀXÕNr%   c                 ól  — | j                  |«      \  }}| j                  |«      \  }}	t        |j                  «      dk(  sJ ‚t        |	j                  «      dk(  sJ ‚| j	                  |d«      \  }
}t        |j                  «      dk(  sJ ‚|r|j                  «       j                  «       }n|j                  «       }| j                  |«      }| j                  |   }|j                  d   |j                  d   f}| j                  |j                  d«      |j                  |¬«      «      }|j                  d   dk(  r| j                  |d|d«       d gdz  }||d<   ||d<   ||d<   | j                  t        j                  «      |d<   d gdz  }||d<   | j!                  t"        j$                  ||«       y )Nr	   r   r¬  r   r�  r   r
   )r¥  r±  r"  r  r®  r   Ú
contiguousr�  rK  rd  rŒ  rÓ  rÏ  r•  rÛ   rÜ   rµ  r(   r„   )r  r  Útranspose_weightr  r  r  Úinput_idÚ
input_operÚbias_idÚ	bias_operrC  Úweight_tensorÚnnapi_weight_tensorÚ	weight_idÚweight_operr8  rº  rP  rQ  s                      r&   r  z$_NnapiSerializer.add_addmm_or_linearö  s¹  € ð  $×@Ñ@ÀÓKÑˆ�*Ø!×?Ñ?ÀÓIÑˆ�ä�:×#Ñ#Ó$¨Ò)Ð)Ð)Ü�9—?‘?Ó# qÒ(Ð(Ð(ð  ×2Ñ2°:¸|ÓLÑˆˆ=Ü�=×&Ñ&Ó'¨1Ò,Ð,Ð,ÙØ"/§/¡/Ó"3×">Ñ">Ó"@Ñà"/×":Ñ":Ó"<ÐØ×6Ñ6Ð7JÓKˆ	Ø—m‘m IÑ.ˆà×%Ñ% aÑ(¨+×*;Ñ*;¸AÑ*>Ð?ˆ	Ø×(Ñ(Ø�N‰N˜1Ó˜z×2Ñ2¸Ð2ÓCó
ˆð ×Ñ˜AÑ !Ò#Ø×&Ñ& v¨q°(¸AÔ>à�˜!‘ˆØˆˆq‰	Øˆˆq‰	Øˆˆq‰	Ø×1Ñ1´.×2KÑ2KÓLˆˆq‰	à�&˜1‘*ˆØˆ�‰
à×ÑÔ.×>Ñ>ÀÈÕPr%   c                 ó  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  «       \  }}}}| j                  |«      \  }}t	        |j
                  «      dk(  sJ ‚| j                  |d«      \  }}	| j                  |d«      \  }}
| j                  |«      \  }}|j                  «       dk(  sJ ‚|j                  «       d   \  }}|€J ‚t	        |j
                  «      dk(  sJ ‚t	        |j
                  «      dk(  sJ ‚|j
                  d   |j
                  d   k(  sJ ‚|j
                  d   |j
                  d   k(  sJ ‚|j                  «       t        j                  k(  sJ ‚|j                  t        j                  k(  r|}n’|j                  t        j                  k(  sJ ‚t        j                  |j!                  «       j#                  «       dz   j%                  t        j&                  «      |j)                  «       |j+                  «       dz   ¬	«      }|j)                  «       }|j,                  |z  }t        j.                  ||dt        j0                  «      }| j3                  |«      }|j,                  |z  |	z  }|dkD  sJ ‚|dk\  rt5        d
«      ‚|j7                  «       }| j3                  |«      }| j8                  |   }|j
                  d   |j
                  d   f}|j;                  ||	|
¬«      }d gdz  }||d<   ||d<   ||d<   | j=                  t>        j@                  «      |d<   d gdz  }| jC                  |jE                  d«      |«      |d<   | jG                  tH        jJ                  ||«       y )Nr   r   r	   rÝ  rà  ÚLinearPackedParamsBaser   é€   rå  ú°Quantized convolution multiplier is greater than 1.  This is supported by NNAPI, but not by most hardware backends.  Try training a model without quantization-aware training.  ©r  r  r  r
   )&r  r  rP  r©  r"  r  r®  r�  Ú__getstate__Úqschemer¤  Úper_tensor_affiners  rl  Úqint8Ú!_make_per_tensor_quantized_tensorÚint_reprr  ÚtoÚuint8ru  rv  r  Úquantize_per_tensorrm  r�  r  r"  rK  rÓ  r•  rÛ   rÜ   rd  rŒ  rµ  r(   r„   )r  r  r  Újit_packed_weightÚ	jit_scaleÚjit_zero_pointr$  r%  rC  Ú	out_scaleÚout_zero_pointÚweight_ctypeÚpacked_weightÚ
raw_weightÚraw_biasÚunsigned_weightÚweight_scaleÚ
bias_scaleÚint_biasr&  Ú
multiplierr)  r*  r+  r8  rÕ  rP  rQ  s                               r&   r}  z_NnapiSerializer.add_qlinear  s‰  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&ð �K‰K‹Mñ	
ØØØØð  $×KÑKÈIÓVÑˆ�*ä�:×#Ñ#Ó$¨Ò)Ð)Ð)à×.Ñ.¨y¸+ÓF‰ˆˆ9Ø ×3Ñ3°NÀIÓNÑˆˆ>Ø&*×&=Ñ&=Ð>OÓ&PÑ#ˆ�mØ× Ñ Ó"Ð&>Ò>Ð>Ð>Ø,×9Ñ9Ó;¸AÑ>Ñˆ
�HØÐ#Ð#Ð#ä�:×#Ñ#Ó$¨Ò)Ð)Ð)Ü�8—>‘>Ó" aÒ'Ð'Ð'Ø�~‰~˜aÑ  J×$4Ñ$4°QÑ$7Ò7Ð7Ð7Ø×Ñ Ñ" j×&6Ñ&6°qÑ&9Ò9Ð9Ð9à×!Ñ!Ó#¤u×'>Ñ'>Ò>Ð>Ð>Ø×ÑœuŸ|™|Ò+Ø(‰Oà×#Ñ#¤u§{¡{Ò2Ð2Ð2Ü#×EÑEØ×$Ñ$Ó&×*Ñ*Ó,¨sÑ2×6Ñ6´u·{±{ÓCØ ×(Ñ(Ó*Ø%×2Ñ2Ó4°sÑ:ôˆOð
 '×.Ñ.Ó0ˆØ×%Ñ%¨Ñ4ˆ
Ü×,Ñ,¨X°zÀ1ÄeÇlÁlÓSˆØ×4Ñ4°XÓ>ˆà×%Ñ%¨Ñ4°yÑ@ˆ
Ø˜AŠ~Ðˆ~Ø˜Š?ÜðNóð ð .×8Ñ8Ó:ÐØ×6Ñ6Ð7JÓKˆ	Ø—m‘m IÑ.ˆà×%Ñ% aÑ(¨+×*;Ñ*;¸AÑ*>Ð?ˆ	Ø×&Ñ&ØØØ%ð 'ó 
ˆð �˜!‘ˆØˆˆq‰	Øˆˆq‰	Øˆˆq‰	Ø×1Ñ1´.×2KÑ2KÓLˆˆq‰	à�&˜1‘*ˆØ×,Ñ,¨T¯^©^¸AÓ->ÀÓIˆ�‰
à×ÑÔ.×>Ñ>ÀÈÕPr%   c                 ó*  — | j                  |«      \  }}|j                  «       dk(  r\|rdnd}t        j                  |j	                  «       |   |j
                  ¬«      }| j                  |«      }| j                  |   }	||	fS | j                  |«      S )NrÔ  r   r   )rs  )	r®  r½  r¤  r¥  rô   rs  r�  rK  r±  )
r  r  r(  r1  rº  Ú_valueÚbias_idxÚnnapi_bias_tensorr&  r'  s
             r&   Úget_optional_biasz"_NnapiSerializer.get_optional_biase  s’   € Ø×/Ñ/°Ó9‰ˆˆvØ�:‰:‹<˜:Ò%Ù%‘q¨1ˆHÜ %§¡Ø×"Ñ"Ó$ XÑ.°m×6IÑ6Iô!Ðð ×8Ñ8Ð9JÓKˆGØŸ™ gÑ.ˆIØ˜IÐ%Ð%à×5Ñ5°hÓ?Ð?r%   c                 óŠ  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  «       \  }}}}}}}| j                  |d«      \  }	}
| j	                  ||
«      \  }}| j                  |
j                  dd ||||«      }| j                  |j                  d«      dd||
||dt        j                  «	      S )	Nr   r   r¬  r	   r   r   ri  F©r  r  rP  r®  rL  ró  r  Úadd_conv2d_commonrŒ  rÛ   rÜ   )r  r  Ú	jit_imager  r  Ú
jit_strideÚjit_padÚjit_dilationÚ
jit_groupsrC  r(  r&  Ú
_bias_operr/  s                 r&   ry  z_NnapiSerializer.add_conv2dr  sê   € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&ð �K‰K‹Mñ	
ØØØØØØØð  ×2Ñ2°:¸|ÓLÑˆˆ=Ø"×4Ñ4°X¸}ÓMÑˆ�Ø×2Ñ2Ø×Ñ  !Ð$ j°'¸<Èó
ˆð ×%Ñ%Ø�N‰N˜1ÓØØØØØØØÜ×%Ñ%ó

ð 
	
r%   c                 óÀ  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  «       \  }}}}}}}}	}
}	}	}	}	| j                  |d«      \  }	}| j                  |«      \  }	}| j	                  |||«      \  }}| j                  |j                  dd ||||
«      }| j                  |j                  d«      dd|||||t        j                  «	      S )Nr)   r   r¬  r	   r   r   ri  rN  )r  r  rP  r  r  rQ  rR  rS  Újit_transposerC  rT  r(  r1  r&  rU  r/  s                   r&   rw  z$_NnapiSerializer.add_conv_underscore’  s  € Ø�‰Ó  BÒ&Ð&Ð&Ø×ÑÓ! QÒ&Ð&Ð&ð  �K‰K‹Mñ	
ØØØØØØØØØØØØØð  ×2Ñ2°:¸|ÓLÑˆˆ=Ø×.Ñ.¨}Ó=‰ˆˆ9Ø"×4Ñ4°X¸}ÈiÓXÑˆ�Ø×2Ñ2Ø×Ñ  !Ð$ j°'¸<Èó
ˆð ×%Ñ%Ø�N‰N˜1ÓØØØØØØØÜ×%Ñ%ó

ð 
	
r%   c                 ó  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  «       \  }}}| j                  |«      \  }}| j	                  |d«      \  }}|j
                  }	d gdz  }
||
d<   | j                  d«      |
d<   | j                  |«      |
d<   d gdz  }| j                  |j                  d«      |j                  |	¬«      «      |d<   | j                  t        j                  |
|«       y )Nr
   r   rà  r   r	   r�  )r  r  rP  r©  r®  r  r˜  r•  rd  rŒ  rÓ  rµ  r(   r»   )r  r  r  Újit_dimÚ_jit_half_to_floatr$  r%  rC  rE  r8  rP  rQ  s               r&   r{  z _NnapiSerializer.add_log_softmax¹  s	  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&à15·±³Ñ.ˆ	�7Ð.Ø#×KÑKÈIÓVÑˆ�*Ø×(Ñ(¨°)Ó<‰ˆˆ3à×$Ñ$ˆ	à�˜!‘ˆØˆˆq‰	à×3Ñ3°AÓ6ˆˆq‰	Ø×1Ñ1°#Ó6ˆˆq‰	à�&˜1‘*ˆØ×,Ñ,Ø�N‰N˜1Ó˜z×2Ñ2¸Ð2ÓCó
ˆ�‰
ð 	×ÑÔ.×:Ñ:¸FÀGÕLr%   c                 óÚ  — |j                  «       dk(  sJ ‚|j                  «       dk(  sJ ‚|j                  «       \  }}}}| j                  |d«      \  }}	| j                  |d«      \  }}
| j                  |«      \  }}|j	                  «       dk(  sJ ‚|j                  «       d   \  }}}|dk(  sJ ‚|\  }}|\  }|€J ‚| j                  |j                  dd |«      }|j                  «       t        j                  k(  sJ ‚|j                  t        j                  k(  r|}n’|j                  t        j                  k(  sJ ‚t        j                  |j                  «       j!                  «       d	z   j#                  t        j$                  «      |j'                  «       |j)                  «       d	z   ¬
«      }|j'                  «       }| j+                  |«      \  }}|j,                  |z  }t        j.                  ||dt        j0                  «      }| j3                  |«      }|j,                  |z  |	z  }|dkD  sJ ‚|dk\  rt5        d«      ‚| j7                  |j9                  d«      |	|
||||||«	      S )Nr   r   rÝ  rà  ÚConv2dPackedParamsBaser   Ú2r	   r.  rå  r/  )r  r  rP  r®  r�  r1  rî  r  r2  r¤  r3  rs  rl  r4  r5  r6  r  r7  r8  ru  rv  r¥  r  r9  rm  r�  r  rO  rŒ  )r  r  ræ  r1  rP  r:  r;  r<  rC  r=  r>  r?  r@  Úpack_versionr˜  Úopt_tensorsrç  rA  rB  r/  rC  rD  rü  rE  rF  r&  rG  s                              r&   r€  z_NnapiSerializer.add_qconv2dÏ  s‹  € Ø�‰Ó  AÒ%Ð%Ð%Ø×ÑÓ! QÒ&Ð&Ð&ð �K‰K‹Mñ	
ØØØØð ×.Ñ.¨y¸+ÓF‰ˆˆ9Ø ×3Ñ3°NÀIÓNÑˆˆ>Ø&*×&=Ñ&=Ð>OÓ&PÑ#ˆ�mØ× Ñ Ó"Ð&>Ò>Ð>Ð>ð
 ×&Ñ&Ó(¨Ñ+ñ		
ØØØà˜sÒ"Ð"Ð"Ø$+Ñ!ˆ�zØ!‰ˆØÐ#Ð#Ð#Ø×3Ñ3Ø×Ñ˜Q˜qÐ! =ó
ˆð ×!Ñ!Ó#¤u×'>Ñ'>Ò>Ð>Ð>Ø×ÑœuŸ|™|Ò+Ø(‰Oà×#Ñ#¤u§{¡{Ò2Ð2Ð2Ü#×EÑEØ×$Ñ$Ó&×*Ñ*Ó,¨sÑ2×6Ñ6´u·{±{ÓCØ ×(Ñ(Ó*Ø%×2Ñ2Ó4°sÑ:ôˆOð
 '×.Ñ.Ó0ˆØ×9Ñ9¸)ÓD‰ˆˆ:Ø×%Ñ%¨Ñ4ˆ
Ü×,Ñ,¨X°zÀ1ÄeÇlÁlÓSˆØ×4Ñ4°XÓ>ˆà×%Ñ%¨Ñ4°yÑ@ˆ
Ø˜AŠ~Ðˆ~Ø˜Š?ÜðNóð ð ×%Ñ%Ø�N‰N˜1ÓØØØØØØØØó

ð 
	
r%   c
                 ó¤  — | j                  |«      \  }
}|j                  d   }|j                  dk(  r
d}|rd}n"d}n|j                  |k(  rd}d}nt        d«      ‚ |j                  |Ž j                  «       }| j                  |«      }| j                  |   }| j                  |   }|j                  t        j                  k(  r>|j                  t        j                  k(  sJ ‚|j                  t        j                  k(  sµJ ‚|j                  t        j                  k(  r~|j                  t        j                  k(  sJ ‚|j                  t        j                  k(  sJ ‚t        |j                  |j                  z  |j                  «      sJ ‚|j                  dk(  sJ ‚t        d|j                  › �«      ‚t!        |j                  «      d	k(  sJ ‚t!        |j                  «      d	k(  sJ ‚t!        |j                  «      dk(  sJ ‚|r5|j                  \  }}}}|dk(  sJ ‚||z  dk(  sJ ‚||z  }|dk(  sJ ‚||k(  sJ ‚|j                  \  }}}}||k(  sJ ‚||j                  d   k(  sJ ‚|j#                  «       }|rd
}t$        j&                  }n%d}|rt$        j(                  }nt$        j*                  }d g|z  }|
|d<   ||d<   ||d<   | j-                  |j.                  «      |d<   | j-                  |j0                  «      |d	<   | j-                  |j2                  «      |d<   | j-                  |j4                  «      |d<   | j-                  |j6                  «      |d<   | j-                  |j8                  «      |d<   |r=| j-                  d«      |d<   | j-                  |	«      |d<   | j;                  |«      |d<   n(| j-                  |	«      |d<   | j;                  |«      |d<   d gdz  }t=        |j                  |||«      }|j?                  |||¬«      }| jA                  ||«      } | jC                  | |||«       | |d<   | jE                  |||«       y )Nr   F)r   r	   r
   r   r?  Tz$Group convolution not supported yet.r   z#Unsupported input type for conv2d: r   r   r   r	   r
   r   r   r   r   r   r   r0  )#r¥  r  r  r  r‰  r"  r�  rK  rñ   r   r   r   r   rï   r  r  r"  r  r(   r   rÖ   r~   r•  r  r  r  r  r  r  rœ  r9  rÓ  rd  rþ  rµ  )!r  Újit_outr=  r>  rP  r(  r&  r/  r1  ræ  rû  rü  Úin_cÚ	depthwiseÚweight_permutationr)  r*  r+  r'  ÚoneÚ_kern_hÚ_kern_wÚout_cÚchannel_multiplierÚkern_dr  Únum_argsr´  rP  rQ  r8  rÕ  rº  s!                                    r&   rO  z"_NnapiSerializer.add_conv2d_common  s_  € ð  $×@Ñ@ÀÓKÑˆ�*Ø×Ñ Ñ"ˆà�:‰:˜Š?àˆIÙØ%1Ñ"à%1Ñ"Ø�Z‰Z˜4ÒàˆIØ!-ÑäÐBÓCÐCð 4˜m×3Ñ3Ð5GÐH×SÑSÓUÐØ×6Ñ6Ð7JÓKˆ	Ø—m‘m IÑ.ˆà—M‘M 'Ñ*ˆ	à×ÑÔ!2×!AÑ!AÒAØ×&Ñ&Ô*;×*JÑ*JÒJÐJÐJØ×$Ñ$Ô(9×(HÑ(HÒHÐHÐHØ×ÑÔ#4×#HÑ#HÒHØ×&Ñ&Ô*;×*OÑ*OÒOÐOÐOØ×$Ñ$Ô(9×(FÑ(FÒFÐFÐFÜ 
× 0Ñ 0°;×3DÑ3DÑ DÀiÇoÁoÔVÐVÐVØ×'Ñ'¨1Ò,Ð,Ð,äØ5°j×6HÑ6HÐ5IÐJóð ô �:×#Ñ#Ó$¨Ò)Ð)Ð)Ü�;×$Ñ$Ó%¨Ò*Ð*Ð*Ü�9—?‘?Ó# qÒ(Ð(Ð(áà+6×+<Ñ+<Ñ(ˆC�˜' 5Ø˜!’8ˆO�8Ø˜4‘< 1Ò$Ð$Ð$Ø!&¨$¡ÐØ%¨Ò*Ð*Ð*Ø˜D’=Ð �=ð /:×.?Ñ.?Ñ+ˆE�7˜G VØ˜T’>Ð!�>à˜	Ÿ™¨Ñ*Ò*Ð*Ð*à×&Ñ&Ó(ˆáØˆHÜ(×:Ñ:‰FàˆHÙÜ,×>Ñ>‘ä,×4Ñ4�à�˜(Ñ"ˆØˆˆq‰	Øˆˆq‰	Øˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·*±*Ó=ˆˆq‰	Ø×1Ñ1°$·-±-Ó@ˆˆq‰	Ø×1Ñ1°$·-±-Ó@ˆˆq‰	ÙØ×5Ñ5°aÓ8ˆF�1‰IØ×6Ñ6°yÓAˆF�2‰JØ×7Ñ7¸ÓAˆF�2ŠJà×5Ñ5°iÓ@ˆF�1‰IØ×7Ñ7¸ÓAˆF�2‰Jà�&˜1‘*ˆÜ'¨
×(8Ñ(8¸$ÀÀyÓQˆ	Ø×&Ñ&ØØØ%ð 'ó 
ˆð
 ×(Ñ(¨°(Ó;ˆØ×-Ñ-¨f°iÀÀyÔQàˆ�‰
Ø×Ñ˜6 6¨7Õ3r%   c                 óv  — | j                  |«      \  }}|j                  \  }}}	}
|dk(  r| j                  |d|d«       |dk(  rt        d«      ‚|r´|	dk(  rT| j	                  |ddt        |d«      › d|j                  › d|j                  › d|j                  › d|j                  › �
«       |
dk(  rU| j	                  |ddt        |d«      › d|j                  › d|j                  › d|j                  › d|j                  › �
«       y y |	dk(  rU| j	                  |ddt        |d«      › d|j                  › d|j                  › d|j                  › d	|j                  › d
�«       |
dk(  rV| j	                  |ddt        |d«      › d|j                  › d|j                  › d|j                  › d	|j                  › d
�«       y y )Nr   z Input channels can't be flexibler	   rÁ  z - 1) * rÌ  z - r
   z) // z + 1)r¥  r  rÏ  r  r�  rF  r  r  r  r  r  r  r  r  )r  rº  rP  r/  r1  rû  rü  r2  Úin_chr4  r5  s              r&   rþ  z1_NnapiSerializer._handle_conv_pool_flexible_input  sî  € Ø#×@Ñ@ÀÓKÑˆ�*Ø#-×#3Ñ#3Ñ ˆˆu�d˜Dà�AŠ:Ø×&Ñ& v¨q°(¸AÔ>Ø�AŠ:ÜÐ>Ó?Ð?áØ�qŠyØ×*Ñ*ØØØœ	 (¨AÓ.Ð/¨x¸¿¹°ÀcÈ$Ï-É-ÈÐX[Ð\`×\fÑ\fÐ[gÐgjÐko×kuÑkuÐjvÐwôð
 �qŠyØ×*Ñ*ØØØœ	 (¨AÓ.Ð/¨x¸¿¹°ÀcÈ$Ï-É-ÈÐX[Ð\`×\fÑ\fÐ[gÐgjÐko×kuÑkuÐjvÐwõð ð �qŠyØ×*Ñ*ØØØœ	 (¨AÓ.Ð/¨s°4·=±=°/ÀÀTÇZÁZÀLÐPSÐTX×T^ÑT^ÐS_Ð_dÐei×erÑerÐdsÐswÐxôð
 �qŠyØ×*Ñ*ØØØœ	 (¨AÓ.Ð/¨s°4·=±=°/ÀÀTÇZÁZÀLÐPSÐTX×T^ÑT^ÐS_Ð_dÐei×erÑerÐdsÐswÐxõð r%   )Fré   )NN)Pr   r   r   r\  r^  rd  rf  r|  r„  r  r  r�  r‘  r•  r˜  rœ  r¡  r£  r¥  r©  r  r¯  r±  rµ  r·  r»  r®  rÉ  rÏ  r�  rÖ  rÝ  râ  rî  ró  rå  r)  r  Ústaticmethodr  r‰  r  rD  r4  r9  r;  r=  r?  rA  rF  rH  rJ  rM  rP  rR  rT  rV  ra  ré  r]  rY  r„  rd  rf  rp  rj  rh  rl  rn  rr  rt  r  r}  rL  ry  rw  r{  r€  rO  rþ  r$   r%   r&   rH  rH  F  sþ  „ óò,"òòò/
òbð" !)× 9Ñ 9óò"	1ò
ò

ò

ò

ò1ò7òð !)× <Ñ <ó7ò7ò
5ò/ò0óó1
òfTò
ò
$ò(
ò
ò
ð" BFó
ò"
ó$n
ò`8ð$ ñ0ó ð0ðGØÑBðGàÑIðGð 	ÑOðGð 	Ñ Qð	Gð
 	ÑFðGð 	Ñ8ðGð 	Ñ?ðGð 	ÑBðGð 	ÑBðGð 	Ñ>ðGð 	Ñ<ðGð 	Ñ:ðGð 	Ñ<ðGð 	$Ñ%OðGð 	ÑHðGð  	ñ 
ð!Gð& 	ñ 
ñ'Gð, 	ñ 
ð-Gð2 	ñ 
ð3Gð8 	ñ 
ð9Gð> 	ñ 
ð?GðD 	ÑBðEGðF 	ÑDðGGðH 	ÑHðIGðJ 	ñ 
ðKGðP 	$ñ &
ðQGðV 	#ñ %
ðWGð\ 	ÑAð]Gð^ 	Ñ>ð_Gð` 	Ñ@ðaGðb 	ÑOðcGðd 	Ñ@ðeGðf 	ÑJðgGðh 	ÑFñiGñj
ñ#
ñ(
ñ
ñ 
ñ
òIG€IòRò0ò
	6ò6òò81òMò0òIò>6IòpIOòV<ò3Oòj/Fòb JòDLò&4ð8 BFô 54òn5ò	5òRòIò.4ò6$GòL)4òV4Qòl&QòP`YòDNòOò$QòLGQóR@ò
ò@%
òNMó,?
òBm4ó^"r%   rH  F)r[  r  rZ  c                ó<   — t        ||«      j                  | ||«      S )aô  Convert to NNAPI and serialize torchscript module.

    Parameters:
        module: Torchscript module to convert
        inputs: Tensors used to specify input details for NNAPI
        config (optional): Optional config to attach to module
        return_shapes (optional): Specify shape of outputs if
            your module uses runtime flexible shapes to set output
            buffer size for NNAPI
        use_int16_for_qint16 (optional): Use Pytorch int16 to represent NNAPI qint16 values
    )rH  r)  )ÚmodulerP  r[  r  rZ  s        r&   r)  r)  ¤  s&   € ô ˜FÐ$8Ó9×IÑIØ�˜óð r%   )g�íµ ÷Æ°>) rŸ  Úenumr®  Úloggingr°  r‡  rÁ  Útypingr   r   r¤  Ú	getLoggerr·   r   r(   rÛ   rá   ÚEnumræ   rï   rö   rþ   r   r  r  r,  r9  r=  r@  rF  rH  r)  r$   r%   r&   ú<module>rv     sÝ   ðã Û Û Û Û Û Û 
ß 'ã ð €g×ÑÐ)Ó*€÷ñ ÷ _!ñ _!÷Dñ ÷ñ ô�t—y‘yô ó7òòô�Zô ô ˆt�y‰yô ô-ˆjô -ò@òBò06ò"ò÷[ñ [ð~: #°$ÈUõr%   