Ë
    L²júŽ ã                   óš  — 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 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Ú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/html/ia-enhanced/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#Representation 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                 ó6  — t        | «      dk  rt        dt        | «      › �«      ‚t        |«      dk  rt        dt        |«      › �«      ‚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!shape1 must have length > 0, got z!shape2 must have length > 0, got z.Non-equal-rank broadcast is not supported yet.r   zCannot broadcast shapes: z and )ÚlenÚAssertionErrorr÷   r  ÚzipÚappendrø   )Úshape1Úshape2Ús1Ús2ÚretÚd1Úd2s          r%   Úbroadcast_shapesr,  ë   s  € Ü
ˆ6ƒ{�aÒÜÐ@ÄÀVÃÀÐNÓOÐOÜ
ˆ6ƒ{�aÒÜÐ@ÄÀVÃÀÐNÓOÐOÜ	ˆ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                 ól  — |t         j                  u r| S |t         j                  u r%t        | d   gt	        | dd  «      z   | d   gz   «      S |t         j
                  u r5t        | «      dk(  s%t        | «      dk(  st        dt        | «      › �«      ‚| S |t         j                  u r| S t        d|›d�«      ‚)Nr   r   r   z4SCALAR_OR_VECTOR requires len(shape) == 0 or 1, got zBad dim_order: ú.)
r  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×-Ñ-Ñ-Ü�E“
˜a’¤3 u£:°¢?Ü ØFÄsÈ5ÃzÀlÐSóð ð ˆØ”H×-Ñ-Ñ-àˆÜ
�o i ]°!Ð4Ó
5Ð5r$   c                 ó˜   — | t         j                  t         j                  fv r|S | t         j                  u rg d¢|   S t	        d| › �«      ‚)N©r   r   r	   r   z%expected DimOrder.CHANNELS_LAST, got )r  r  r  r  r"  )r  rô   s     r%   Úreverse_map_dimr@  :  sM   € ð
 ”X×1Ñ1´8×3LÑ3LÐMÑMØˆØ”H×*Ñ*Ñ*Ú˜A‰ÐÜ
Ð@ÀÀÐLÓ
MÐMr$   c                 ó   — d| › d|› �S )NÚs_Ú_r#   )Úop_idÚdims     r%   Ú	flex_namerF  F  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__M  s‰   € ØˆŒØˆŒØˆŒØˆŒØ ˆÔØˆŒØˆŒØ02ˆÔ-àˆŒØˆŒØ "ˆÔØ"$ˆÔØ!#ˆÔØˆÔØˆÔØ$8ˆÔ!àˆ>Ø‰Fð r$   c                 ó,   — t        | j                  «      S rè   )r!  rK  r  s    r%   Úget_next_operand_idz$_NnapiSerializer.get_next_operand_idc  s   € Ü�4—=‘=Ó!Ð!r$   c                 ó   — t        |t        «      st        dt        |«      › �«      ‚|| j                  v rt        d|›�«      ‚| j                  «       }| j                  j                  |«       || j                  |<   |S )Núexpected Operand, got zDuplicate tensor: )	Ú
isinstancer  r"  ÚtyperV  r  r^  rK  r$  )r  ÚjitvalÚoperÚ
operand_ids       r%   Úadd_tensor_operandz#_NnapiSerializer.add_tensor_operandi  sz   € Ü˜$¤Ô(Ü Ð#9¼$¸t»*¸Ð!FÓGÐGØ�T×,Ñ,Ñ,ÜÐ0°°
Ð;Ó<Ð<à×-Ñ-Ó/ˆ
Ø�‰×Ñ˜TÔ"Ø*4ˆ×Ñ Ñ'ØÐr$   c                 óª   — t        |t        «      st        dt        |«      › �«      ‚| j	                  «       }| j
                  j                  |«       |S )Nr`  )ra  r  r"  rb  r^  rK  r$  )r  rd  re  s      r%   Úadd_anonymous_tensor_operandz-_NnapiSerializer.add_anonymous_tensor_operandw  sI   € Ü˜$¤Ô(Ü Ð#9¼$¸t»*¸Ð!FÓGÐGØ×-Ñ-Ó/ˆ
Ø�‰×Ñ˜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(  rCt        j
                  }|j                  «       }|j                  «       }|dk7  ržt        d	|› �«      ‚|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Úqint32z!qint32 zero_point must be 0, got Ú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_pointr"  rZ  Úgetattrr   r"   Únnapi_scaleÚnnapi_zero_pointr  r  rø   r  )	r  Útensorr  ru  r  r  rð   rq  Úop_codess	            r%   Útorch_tensor_to_operandz(_NnapiSerializer.torch_tensor_to_operand~  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Ø˜QŠÜ$Ð'HÈÈÐ%UÓVÐVØ�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[ú])ry  r  r  r  r~  rf  rP  r$  Ú	enumerater  Úcompute_operand_shape)	r  Úarg_idxrc  r|  r  Útoperre  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  r|  r  r…  re  Ú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t        dt        |«      › �«      ‚||f}|| j                  vr t        | j                  «      }| j                  j                  t        ||t        j                  dd«      «       | j                  j                  |t        j                  f«       | j                  j                  |«       || j                  |<   | j                  |   S )Nzdims must be a tuple, got rk  r   )ra  rø   r"  rb  rW  r!  rK  r$  r  r  r  rL  rà   rá   rN  )r  Úcoderû   rñ   Ú	cache_keyre  s         r%   Úadd_immediate_operandz&_NnapiSerializer.add_immediate_operandÒ  sÀ   € Ü˜$¤Ô&Ü Ð#=¼dÀ4»j¸\Ð!JÓKÐKØ˜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  rc  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  rc  re  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  rc  rD  rd  Ú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  rc  r  re  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  rc  rC  rû   re  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                 ó\   — || j                   v rt        d|›d�«      ‚|| j                   |<   y )Nújitval z already in tensor_sequences)rU  r"  )r  rc  rL  s      r%   Úadd_tensor_sequencez$_NnapiSerializer.add_tensor_sequence  s5   € Ø�T×*Ñ*Ñ*Ü  7¨6¨*Ð4PÐ!QÓRÐRØ(.ˆ×Ñ˜fÒ%r$   c                 ó`   — || j                   v rt        d|›d�«      ‚||f| j                   |<   y )Nr¹  z already in constants)rT  r"  ©r  rc  Úctyperû   s       r%   Úadd_constant_valuez#_NnapiSerializer.add_constant_value   s5   € Ø�T—^‘^Ñ#Ü  7¨6¨*Ð4IÐ!JÓKÐKØ"'¨ ˆ�‰�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 'rs  )rT  r¯  r  Úkind)r  rc  Ú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                   }nNt        |«      t        |j                   «      k7  r-t        dt        |«      › dt        |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.zshape length z != oper.shape length ú(r   éÿÿÿÿÚ0z-Unknown dim value, dimensions should be >= -1ú,ú)rj  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)rr  z!Unsupported output operand type: )r  r!  r"  r‚  r$  rt  rF  r  Újoinrð   r   r   r   r   r  r  r"   r   rZ  )r  rD  rd  r  Úshape_partsrô   rª  Ú
shape_codes           r%   Úoperand_to_template_torchscriptz0_NnapiSerializer.operand_to_template_torchscript2  sñ  € àˆ=Ø—J‘J‰Eä�5‹zœS §¡›_Ò,Ü$Ø#¤C¨£J <Ð/EÄcÈ$Ï*É*ÃoÐEVÐWóð ð �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_shapeh  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_shapek  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£  rh  r·  r'   rŸ   )r  Úin_idrd  Úout_operrP  rQ  s         r%   Útranspose_to_nhwcz"_NnapiSerializer.transpose_to_nhwcp  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_broadcast„  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(  rM|j                  «       j                  «       dk7  r*t        d|j                  «       j                  «       › �«      ‚|S t	        d|›d|›d�«      ‚)NÚListTypeÚIntTypez"expected ListType of IntType, got zCan't handle size arg of type 'z' for 'rs  )r°  rÀ  ÚgetElementTyper"  r  r¼  s       r%   Úget_size_argz_NnapiSerializer.get_size_arg“  sŽ   € Ø×.Ñ.¨vÓ6‰ˆˆuØ�:‰:‹<˜:Ò%Ø×#Ñ#Ó%×*Ñ*Ó,°	Ò9Ü$Ø8¸×9MÑ9MÓ9O×9TÑ9TÓ9VÐ8WÐXóð ð ˆLÜØ-¨e¨Y°g¸f¸ZÀqÐIó
ð 	
r$   c                 óp  — |D �cg c]  }|j                  «       ‘Œ }}|d   dk7  rt        d|d   › �«      ‚|d   |d   g}|d   |d   g}|d   |d   g}|d	   |d
   g}|d   }	t        |«      dk7  rt        dt        |«      › �«      ‚|ddgk7  rt        d|› �«      ‚| j                  |||||	«      S c c}w )Nr   r   zexpected pc[0] == 2, got r   r	   r
   r   r   r   r   r   r   zexpected len(pc) == 11, got z'expected output_padding == [0, 0], got )Úitemr"  r!  Ú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Ð.ˆÐ.Øˆa‰5�AŠ:Ü Ð#<¸RÀ¹U¸GÐ!DÓEÐEØ�a‘5˜"˜Q™%�.ˆØ�q‘E˜2˜a™5�>ˆØ˜‘U˜B˜q™E�Nˆ	Ø˜Q™%  A¡˜ˆØ�q‘Eˆ	äˆr‹7�bŠ=Ü Ð#?ÄÀBÃ¸yÐ!IÓJÐJØ˜a ˜VÒ#Ü Ø9¸.Ð9IÐJóð ð ×0Ñ0Ø˜ (¨I°yó
ð 	
ùò! /s   …B3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k7  rt        dt        |«      › �«      ‚t        |«      dk7  rt        dt        |«      › �«      ‚t        |«      dk7  rt        dt        |«      › �«      ‚t        |«      dk7  rt        dt        |«      › �«      ‚|\  }}||||g}	t        ||z   |	z   |z   |gz   Ž S )Nr   z expected len(kernels) == 2, got z expected len(strides) == 2, got z!expected len(paddings) == 2, got z"expected len(dilations) == 2, got )r÷   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Ú   € ô �{Ó#ˆäˆw‹<˜1ÒÜ Ð#CÄCÈÃLÀ>Ð!RÓSÐSÜˆw‹<˜1ÒÜ Ð#CÄCÈÃLÀ>Ð!RÓSÐSÜˆx‹=˜AÒÜ Ð#DÄSÈÃ]ÀOÐ!TÓUÐUÜˆy‹>˜QÒÜ Ð#EÄcÈ)ÃnÐEUÐ!VÓWÐWð ‰ˆˆBØ˜R  RÐ(ˆäØ˜Ñ -Ñ/°)Ñ;¸y¸kÑIð
ð 	
r$   c                 óD  — | 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k7  rt)        d|j'                  «       › �«      ‚|j+                  «       dk7  rt)        d|j+                  «       › �«      ‚|j-                  d«      }dg}|j                  «       j/                  «       d	k(  r|g}d
}nX|j                  «       j/                  «       dk(  r| j0                  |   }t3        |«      }nt5        d|j                  «       › �«      ‚|�:t3        |«      t3        |«      k7  r#t)        dt3        |«      › dt3        |«      › �«      ‚t        |«      D ]œ  \  }}| j6                  |   }
| j8                  j                  |
«       |j                  | j                  |
   j                  j                  «       |r||   nd }|j                  | j;                  |
| j                  |
   |«      dz   «       Œž |j                  d«       g }d}t=        j>                  d|t3        | j                  «      t3        | j@                  «      t3        | jB                  «      t3        | j                  «      t3        | j8                  «      «      }|j                  |«       | jE                  «       \  }}|jG                  d„ | j                  D «       «       |jG                  |«       |jG                  d„ | jB                  D «       «       djI                  |«      g}t3        |d   «      }|dz  dk7  rt)        d|› �«      ‚tK        |dz  «      }t        | j                  «      D ]�  \  }
\  }}}}}tM        ||«      }t        |«      D ]F  \  }}|dk(  r7tO        ||«      }| jP                  j                  d|› dtS        |
|«      › �«       |dz  }ŒH tU        d„ |D «       «      }|j                  | jW                  |«      «       ŒŸ |jG                  |«       |j                  | jW                  | jX                  «      «       |j                  | jW                  | j                  «      «       |j                  | jW                  | j8                  «      «       | jP                  jG                  |«       t[        jZ                  ddjI                  |«      «      | j\                  ||| jP                  |fS )NFTr   zProcessing node #%d: %rz%expected retn.inputsSize() == 1, got r   z&expected retn.outputsSize() == 0, got zreturn [r®  rÅ  Ú	TupleTypezUnsupported return type: zreturn_shapes length z != return_values length 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)model_offset must be divisible by 4, got 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>D  s   è ø€ Ò=°!˜q Bšw™!¨AÓ-Ñ=ùó   ‚r•  )/rž  ÚnextÚgraphrP  r¾  rb  r‚  r#  r÷   r†  r$  rK  r  rû   Únodesr¶   ÚdebugÚadd_nodeÚreturn_nodeÚ
inputsSizer"  Ú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˜$Õð	 ð �{‰{×&Ñ&Ó(ˆØ�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð —]‘] 1Ó%ˆ
Ø!+ ÐØ�?‰?Ó×!Ñ!Ó# |Ò3Ø'˜LˆMØ‰LØ�_‰_Ó×#Ñ#Ó%¨Ò4Ø ×1Ñ1°*Ñ=ˆMÜ˜}Ó-‰LäØ+¨J¯O©OÓ,=Ð+>Ð?óð ð Ð$Ü�=Ó!¤S¨Ó%7Ò7Ü$Ø+¬C°Ó,>Ð+?Ð?XÔY\Ð]jÓYkÐXlÐmóð ô ˜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“}ˆð ˜!Ñ˜qÒ Ü Ø;¸L¸>ÐJóð ô ˜<¨!Ñ+Ó,ˆä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           	      óÞ  — g }g }t        | j                  «      t        | j                  «      k7  r7t        dt        | j                  «      › dt        | 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 )Nzvalues length z != value_data length r   r	   r�  rˆ  )r!  rL  rN  r"  r#  r$  r‰  rŠ  )	r  r&  r'  Úop_indexÚsource_typeÚdataÚsource_lengthÚphysical_lengthÚpadded_datas	            r%   r  z!_NnapiSerializer.serialize_valuesW  sõ   € ØÐØ "ÐÜˆt�{‰{Óœs 4§?¡?Ó3Ò3Ü Ø ¤ T§[¡[Ó!1Ð 2Ð2HÌÈTÏ_É_ÓI]ÐH^Ð_óð ô .1°·±¸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_intsl  s   € ä�{‰{˜3 Ó%×-Ñ-Ó/Ð/r$   zprim::GetAttrc                 ó$   — | j                  |«      S rè   )Úadd_getattr©r  r  s     r%   ú<lambda>z_NnapiSerializer.<lambda>q  ó   € ¨D×,<Ñ,<¸TÓ,B€ r$   zprim::Constantc                 ó$   — | j                  |«      S rè   )Úadd_constant_noder6  s     r%   r7  z_NnapiSerializer.<lambda>r  s   € ¨T×-CÑ-CÀDÓ-I€ r$   zprim::ListConstructc                 ó$   — | j                  |«      S rè   )Úadd_list_constructr6  s     r%   r7  z_NnapiSerializer.<lambda>s  s   € °$×2IÑ2IÈ$Ó2O€ r$   zprim::TupleConstructc                 ó$   — | j                  |«      S rè   )Úadd_tuple_constructr6  s     r%   r7  z_NnapiSerializer.<lambda>t  s   € °4×3KÑ3KÈDÓ3Q€ r$   zaten::unsqueezec                 ó$   — | j                  |«      S rè   )Úadd_unsqueezer6  s     r%   r7  z_NnapiSerializer.<lambda>u  s   € ¨d×.@Ñ.@ÀÓ.F€ r$   zaten::toc                 ó$   — | j                  |«      S rè   )Úadd_tor6  s     r%   r7  z_NnapiSerializer.<lambda>v  s   €  t§{¡{°4Ó'8€ r$   zaten::detachc                 ó$   — | j                  |«      S rè   ©Ú	_identityr6  s     r%   r7  z_NnapiSerializer.<lambda>w  s   € ¨4¯>©>¸$Ó+?€ r$   zaten::reshapec                 ó$   — | j                  |«      S rè   )Úadd_reshaper6  s     r%   r7  z_NnapiSerializer.<lambda>x  r8  r$   zaten::flattenc                 ó$   — | j                  |«      S rè   )Úadd_flattenr6  s     r%   r7  z_NnapiSerializer.<lambda>y  r8  r$   zaten::slicec                 ó$   — | j                  |«      S rè   )Ú	add_slicer6  s     r%   r7  z_NnapiSerializer.<lambda>z  ó   € ¨$¯.©.¸Ó*>€ r$   z
aten::sizec                 ó$   — | j                  |«      S rè   )Úadd_sizer6  s     r%   r7  z_NnapiSerializer.<lambda>{  ó   € ¨¯©°tÓ)<€ r$   z	aten::catc                 ó$   — | j                  |«      S rè   )Úadd_catr6  s     r%   r7  z_NnapiSerializer.<lambda>|  s   € ¨¯©°TÓ(:€ r$   z
aten::meanc                 ó$   — | j                  |«      S rè   )Úadd_meanr6  s     r%   r7  z_NnapiSerializer.<lambda>}  rO  r$   zaten::quantize_per_tensorc                 ó$   — | j                  |«      S rè   )Úadd_quantizer6  s     r%   r7  z_NnapiSerializer.<lambda>~  s   € ¸×8IÑ8IÈ$Ó8O€ r$   zaten::dequantizec                 ó$   — | j                  |«      S rè   )Úadd_dequantizer6  s     r%   r7  z_NnapiSerializer.<lambda>  ó   € ¨t×/BÑ/BÀ4Ó/H€ r$   z	aten::addc                 ó`   — | j                  |t        j                  t        j                  «      S rè   )Úadd_add_sub_opr'   rz   rÚ   rÛ   r6  s     r%   r7  z_NnapiSerializer.<lambda>€  ó%   € ¨×(;Ñ(;ØÔ%×)Ñ)¬>×+DÑ+Dó)
€ r$   z	aten::subc                 ó`   — | j                  |t        j                  t        j                  «      S rè   )rZ  r'   rž   rÚ   rÛ   r6  s     r%   r7  z_NnapiSerializer.<lambda>ƒ  r[  r$   z	aten::mulc                 ó`   — | j                  |t        j                  t        j                  «      S rè   )Ú(add_pointwise_simple_binary_broadcast_opr'   rŒ   rÚ   rÛ   r6  s     r%   r7  z_NnapiSerializer.<lambda>†  ó%   € ¨×(UÑ(UØÔ%×)Ñ)¬>×+DÑ+Dó)
€ r$   z	aten::divc                 ó`   — | j                  |t        j                  t        j                  «      S rè   )r^  r'   r˜   rÚ   rÛ   r6  s     r%   r7  z_NnapiSerializer.<lambda>‰  r_  r$   z
aten::reluc                 óB   — | j                  |t        j                  «      S rè   )Úadd_pointwise_simple_unary_opr'   r�   r6  s     r%   r7  z_NnapiSerializer.<lambda>Œ  s   € ¨×)KÑ)KØÔ%×*Ñ*ó*
€ r$   zaten::sigmoidc                 óB   — | j                  |t        j                  «      S rè   )rb  r'   rˆ   r6  s     r%   r7  z_NnapiSerializer.<lambda>�  s   € ¨D×,NÑ,NØÔ%×.Ñ.ó-
€ r$   zaten::softmaxc                 ó$   — | j                  |«      S rè   )Úadd_softmaxr6  s     r%   r7  z_NnapiSerializer.<lambda>’  r8  r$   zaten::hardtanhc                 ó$   — | j                  |«      S rè   )Úadd_hardtanhr6  s     r%   r7  z_NnapiSerializer.<lambda>“  s   € ¨T×->Ñ->¸tÓ-D€ r$   zaten::avg_pool2dc                 ó$   — | j                  |«      S rè   )Úadd_avg_pool2dr6  s     r%   r7  z_NnapiSerializer.<lambda>”  rX  r$   zaten::max_pool2dc                 óB   — | j                  |t        j                  «      S rè   )Úadd_pool2d_noder'   r‹   r6  s     r%   r7  z_NnapiSerializer.<lambda>•  s   € ¨t×/CÑ/CØÔ%×1Ñ1ó0
€ r$   zaten::adaptive_avg_pool2dc                 ó$   — | j                  |«      S rè   )Úadd_adaptive_avg_pool2dr6  s     r%   r7  z_NnapiSerializer.<lambda>˜  s   € ¸×8TÑ8TØó9
€ r$   zaten::upsample_nearest2dc                 ó$   — | j                  |«      S rè   )Úadd_upsample_nearest2dr6  s     r%   r7  z_NnapiSerializer.<lambda>›  s   € °t×7RÑ7RØó8
€ r$   zaten::preluc                 ó$   — | j                  |«      S rè   )Úadd_prelu_opr6  s     r%   r7  z_NnapiSerializer.<lambda>ž  s   € ¨$×*;Ñ*;¸DÓ*A€ r$   zaten::addmmc                 ó$   — | j                  |«      S rè   )Ú	add_addmmr6  s     r%   r7  z_NnapiSerializer.<lambda>Ÿ  rL  r$   zaten::linearc                 ó$   — | j                  |«      S rè   )Ú
add_linearr6  s     r%   r7  z_NnapiSerializer.<lambda>   ó   € ¨4¯?©?¸4Ó+@€ r$   zaten::_convolutionc                 ó$   — | j                  |«      S rè   )Úadd_conv_underscorer6  s     r%   r7  z_NnapiSerializer.<lambda>¡  s   € °×1IÑ1IÈ$Ó1O€ r$   zaten::conv2dc                 ó$   — | j                  |«      S rè   )Ú
add_conv2dr6  s     r%   r7  z_NnapiSerializer.<lambda>¢  rv  r$   zaten::log_softmaxc                 ó$   — | j                  |«      S rè   )Úadd_log_softmaxr6  s     r%   r7  z_NnapiSerializer.<lambda>£  s   € °×0DÑ0DÀTÓ0J€ r$   zquantized::linearc                 ó$   — | j                  |«      S rè   )Úadd_qlinearr6  s     r%   r7  z_NnapiSerializer.<lambda>¤  s   € °×0@Ñ0@ÀÓ0F€ r$   c                 óB   — | j                  |t        j                  «      S rè   ©Úadd_qconv2drÚ   rÛ   r6  s     r%   r7  z_NnapiSerializer.<lambda>¥  s   € °×0@Ñ0@Ø”.×+Ñ+ó1
€ r$   c                 óB   — | j                  |t        j                  «      S rè   )r�  rÚ   rÜ   r6  s     r%   r7  z_NnapiSerializer.<lambda>¨  s   € °T×5EÑ5EØ”.×+Ñ+ó6
€ r$   c                 óF   — | j                  |t        j                  d¬«      S )NT)r1  r€  r6  s     r%   r7  z_NnapiSerializer.<lambda>«  s$   € ¸$×:JÑ:JØ”.×+Ñ+°tð ;Kó ;
€ r$   c                 ó`   — | j                  |t        j                  t        j                  «      S rè   )Úadd_qaddr'   rz   rÚ   rÛ   r6  s     r%   r7  z_NnapiSerializer.<lambda>®  ó#   € ¨T¯]©]ØÔ%×)Ñ)¬>×+DÑ+Dó.
€ r$   c                 ó`   — | j                  |t        j                  t        j                  «      S rè   )r…  r'   rz   rÚ   rÜ   r6  s     r%   r7  z_NnapiSerializer.<lambda>±  s#   € °$·-±-ØÔ%×)Ñ)¬>×+DÑ+Dó3
€ r$   c                 ó`   — | j                  |t        j                  t        j                  «      S rè   )r…  r'   rŒ   rÚ   rÛ   r6  s     r%   r7  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_operrc  s        r%   rE  z_NnapiSerializer._identityÁ  s=   € Ø×;Ñ;¸D¿M¹MÈ!Ó<LÓM‰ˆˆxØ—‘ Ó"ˆØ*/ˆ×Ñ Ò'r$   c                 óø  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚| j                  |j	                  d«      «      \  }}t        |«      j                  d«      st        d|› �«      ‚|j                  d«      }t        ||«      }|j                  d«      }|j                  «       }| j                  |||«       y )Nr   ú%expected node.inputsSize() == 1, got ú&expected node.outputsSize() == 1, got r   z
__torch__.z3expected obj_ctype to start with '__torch__.', got Úname)r  r"  r  r°  r  rt  Ú
startswithrª  ry  r�  rb  r¾  )r  r  Ú	obj_ctypeÚobjr’  rû   Úoutputr½  s           r%   r5  z_NnapiSerializer.add_getattrÆ  sò   € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×0Ñ0°·±¸qÓ1AÓB‰ˆ	�3Ü�9‹~×(Ñ(¨Ô6Ü ØEÀiÀ[ÐQóð ð �v‰v�f‹~ˆÜ˜˜TÓ"ˆØ—‘ Ó"ˆØ—‘“ˆØ×Ñ ¨¨uÕ5r$   c                 óH  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  d«      }|j	                  «       }|j                  «       }| j                  |||«       y )Nr   z%expected node.inputsSize() == 0, got r   r‘  )r  r"  r  r�  rb  ÚtoIValuer¾  )r  r  r–  r½  rû   s        r%   r:  z"_NnapiSerializer.add_constant_nodeÚ  s�   € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð —‘ Ó"ˆØ—‘“ˆØ—‘Ó!ˆØ×Ñ ¨¨uÕ5r$   c                 ó,  — |j                  «       dk7  rt        d|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   r®  zMUnable to handle ListConstruct node.  Neither all constants nor all tensors. )r  r"  r�  rb  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.  € Ø×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð —‘ Ó"ˆØ—‘“ˆØ"$ˆ
Ø!ˆØ—;‘;“=ò 		ˆ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k7  rt        d|j                  «       › �«      ‚|j                  d«      }t        |j	                  «       «      }| j                  ||«       y )Nr   r‘  r   )r  r"  r�  r÷   rP  rº  )r  r  r–  rL  s       r%   r>  z$_NnapiSerializer.add_tuple_construct  sd   € Ø×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð —‘ Ó"ˆÜ�d—k‘k“mÓ$ˆØ× Ñ  ¨Õ0r$   c                 óX  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚| j                  |j	                  d«      «      \  }}| j                  |j	                  d«      d«      \  }}|j                  t        j                  k7  rt        d|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   ú%expected node.inputsSize() == 2, got r   r‘  r   rã  z,expected dim_order PRESUMED_CONTIGUOUS, got ©r  )r  r"  r  r«  r  r°  r  r  r  r!  r  r÷   Úinsertrø   rÖ  r—  rf  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  s�  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×EÑEÀdÇmÁmÐTUÓFVÓW‰ˆˆwà×(Ñ(¨¯©°qÓ)9¸9ÓE‰ˆˆ3Ø×Ñ¤× <Ñ <Ò<Ü Ø>¸w×?PÑ?PÐ>QÐRóð ð  š(‘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è   rD  r6  s     r%   rB  z_NnapiSerializer.add_to1  s   € à�‰�tÕr$   c                 óh  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚| j                  |j	                  d«      «      \  }}| j                  |j	                  d«      «      \  }}|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       j                  «       dk7  r*t        d	|j                  «       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.        j0                  |	|
«       y )Nr   r   r   r‘  r   râ  z#expected shape_ctype ListType, got rã  z)expected shape element type IntType, got 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  r  ÚtorchÚzerosÚexpandr  ÚreshaperÖ  r£  rf  r�  r·  r'   r�   )r  r  r×  r£  Úshape_ctyper  Úis_trivial_reshaper8  rØ  rP  rQ  s              r%   rG  z_NnapiSerializer.add_reshape5  s  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×EÑEÀdÇmÁmÐTUÓFVÓW‰ˆˆwà!×4Ñ4°T·]±]À1Ó5EÓFÑˆ�UØ×ÑÓ Ò+Ü Ø5°k×6FÑ6FÓ6HÐ5IÐJóð ð ×%Ñ%Ó'×,Ñ,Ó.°)Ò;Ü Ø;¸K×<VÑ<VÓ<X×<]Ñ<]Ó<_Ð;`Ðaóð ô ! ›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k7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|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«      «       Œ: t1        d„ |	D «       «      }d gdz  }||d<   | j3                  |«      |d<   d gdz  }||d<   | j5                  t6        j8                  ||«       y )Nr	   ú%expected node.inputsSize() == 3, got r   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>”  s   è ø€ ÒF°S  q¢™¨bÓ0ÑFùr	  )r  r"  r  r§  r  r°  r!  r  r  r  r  r  Ú	functoolsÚreduceÚoperatorÚmulÚanyÚcountrÖ  rf  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%   rI  z_NnapiSerializer.add_flatten`  s/  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×:Ñ:¸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k7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|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   ú%expected node.inputsSize() == 5, got r   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>Ê  s%   øè ø€ ò 
Ù39°1°c�q˜I’~‰G¨3Ó.ñ
ùó   ƒr¡  r   r   )r  r"  r  r§  r  r°  ÚsysÚmaxsizer  rE  r  rø   r‚  rf  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%   rK  z_NnapiSerializer.add_slicež  s¿  ù€ Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×:Ñ:¸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   Ê2N;Ë/O 
Ì8Oc                 óÊ  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚| j                  |j	                  d«      «      \  }}| j
                  |j	                  d«         \  }}|j                  |   }|j                  d«      }| j                  ||j                  «       |«       y )Nr   r   r   r‘  r   )
r  r"  r  r«  r  rT  r  r�  r¾  rb  )r  r  rC  r£  rû   Úresr–  s          r%   rN  z_NnapiSerializer.add_sizeï  sÓ   € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×AÑAÀ$Ç-Á-ÐPQÓBRÓS‰
ˆˆ7Ø—>‘> $§-¡-°Ó"2Ñ3‰ˆˆ5Ø�m‰m˜EÑ"ˆØ—‘ Ó"ˆØ×Ñ ¨¯©«°sÕ;r$   c                 ó  ‡— |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚| j                  |j	                  d«         }| j                  |j	                  d«      d«      \  }Št        |«      dk  rt        dt        |«      › �«      ‚g }d }d}|D �]K  }| j                  |«      \  }}	|€)t        |	j                  ‰d«      }
|	j                  |
¬	«      }|	j                  |j                  k7  r%t        d
|	j                  › d|j                  › �«      ‚|	j                  |j                  k7  r%t        d|	j                  › d|j                  › �«      ‚t        |	j                  ‰d«      t        |j                  ‰d«      k7  r;t        dt        |	j                  ‰d«      › dt        |j                  ‰d«      › �«      ‚|j                  |«       ||	j                  ‰   z  }�ŒN |€t        d«      ‚|j                  t        |j                  ‰|«      ¬	«      }	j                  t        j                  k(  rAt        |j                  «      dk7  r!t        dt        |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/                  t0        j2                  ||«       y )Nr   r   r   r‘  r   rã  zexpected len(tensors) > 0, got rÅ  r¡  zin_oper.op_type z != out_oper.op_type zin_oper.dim_order z != out_oper.dim_order zshape mismatch: z != zout_oper must not be Noner
   z9expected len(out_oper.shape) == 4 for CHANNELS_LAST, got ©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"  r  rU  r  r°  r!  r§  rý   r  rÖ  rð   r  r$  r  r  rf  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%   rQ  z_NnapiSerializer.add_catÿ  s‹  ø€ Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×'Ñ'¨¯©°aÓ(8Ñ9ˆØ×(Ñ(¨¯©°qÓ)9¸9ÓE‰ˆˆ3äˆw‹<˜1ÒÜ Ð#BÄ3ÀwÃ<À.Ð!QÓRÐRØˆØˆØˆØó 	/ˆCØ!×>Ñ>¸sÓC‰NˆE�7ØÐÜ*¨7¯=©=¸#¸rÓB�	Ø"×+Ñ+°)Ð+Ó<�Ø�‰ (×"2Ñ"2Ò2Ü$Ø& w§¡Ð&7Ð7LÈX×M]ÑM]ÐL^Ð_óð ð × Ñ  H×$6Ñ$6Ò6Ü$Ø(¨×):Ñ):Ð(;Ð;RÐS[×SeÑSeÐRfÐgóð ô ˜gŸm™m¨S°"Ó5¼Ø—‘  Ró:ò ô %Ø&¤~°g·m±mÀSÈ"Ó'MÐ&NÈdÔSaÐbj×bpÑbpÐruÐwyÓSzÐR{Ð|óð ð �M‰M˜%Ô à˜GŸM™M¨#Ñ.Ñ.ŠLð-	/ð0 ÐÜ Ð!<Ó=Ð=Ø×$Ñ$Ü  §¡°°lÓCð %ó 
ˆð ×Ñ¤× 6Ñ 6Ò6Ü�8—>‘>Ó" aÒ'Ü$ØOÔPSÐT\×TbÑTbÓPcÐOdÐeóð ò % 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                 óš  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚| j                  |j	                  d«      «      \  }}| j                  |j	                  d«      «      \  }}|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       j                  «       dk7  r*t        d	|j                  «       j                  «       › �«      ‚| j                  |j	                  d
«      d«      \  }}| j                  |j	                  d«      d«       |j                  t        j                  k(  rNt        |j                  «      dk7  r!t        dt        |j                  «      › �«      ‚|D �cg c]	  }g d¢|   ‘Œ }	}n|}	t        «       }
|D ]0  }|dk  r|t        |j                  «      z  }|
j                  |«       Œ2 |j                  t        j                  k(  r4|s2|
j                  d
dh«      st        d|
› �«      ‚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<   | j1                  t2        j4                  ||«       y c c}w )Nr
   ú%expected node.inputsSize() == 4, got r   r‘  r   râ  z!expected dim_ctype ListType, got rã  z'expected dim element type IntType, got r   ÚBoolTyper	   ÚNoneTypez8expected len(in_oper.shape) == 4 for CHANNELS_LAST, got rÑ  z/expected collapsed_dims to include {2, 3}, got r<  )r  r"  r  r«  r  r°  rÀ  rä  r  r  r  r!  r  ÚsetÚaddÚ
issupersetr  r‚  r$  rÖ  r£  r—  rf  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%   rS  z_NnapiSerializer.add_meanH  s,  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×EÑEÀdÇmÁmÐTUÓFVÓW‰ˆˆwØ×0Ñ0°·±¸qÓ1AÓB‰ˆ	�3Ø�>‰>Ó˜zÒ)Ü Ð#DÀYÇ^Á^ÓEUÐDVÐ!WÓXÐXØ×#Ñ#Ó%×*Ñ*Ó,°	Ò9Ü Ø9¸)×:RÑ:RÓ:T×:YÑ:YÓ:[Ð9\Ð]óð ð ×-Ñ-¨d¯m©m¸AÓ.>À
ÓK‰ˆˆ8à×Ñ §¡¨aÓ 0°*Ô=à×Ñ¤× 6Ñ 6Ò6Ü�7—=‘=Ó! QÒ&Ü$ØNÌsÐSZ×S`ÑS`ÓOaÐNbÐcóð ð 36Ö6¨Qš a›Ð6ˆIÑ6àˆIä›ˆØò 	"ˆAØ�1ŠuØ”S˜Ÿ™Ó'Ñ'�Ø×Ñ˜qÕ!ð	"ð
 ×Ñ¤× 6Ñ 6Ò6¹xØ!×,Ñ,¨a°¨VÔ4Ü$ØGÈÐGWÐXóð ô %×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ùòI 7s   Æ>Mc                 ór  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|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   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   rÖ  rf  r�  r·  r'   rÂ   )r  r  r×  r£  rC  r  r  Úscalar_typerð   rØ  rP  rQ  s               r%   rU  z_NnapiSerializer.add_quantize‰  sµ  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×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k7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|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�  r‘  r   rk  rå  )r  r"  r  r«  r  rÖ  r   r   rf  r�  r·  r'   r€   )r  r  r×  r£  rØ  rP  rQ  s          r%   rW  z_NnapiSerializer.add_dequantize±  s  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×EÑEÀdÇmÁmÐTUÓFVÓW‰ˆˆwØ×#Ñ#Ü%×4Ñ4ØØð $ó 
ˆð �˜!‘ˆØˆˆq‰	à�&˜1‘*ˆØ×,Ñ,¨T¯^©^¸AÓ->ÀÓIˆ�‰
à×ÑÔ.×9Ñ9¸6À7ÕKr$   c                 ó’  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|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�  r‘  r   g      p?)r  r  )r  r"  r  r§  r  r'   rˆ   rð   r   r   rÖ  rf  r�  r‚  r  rÒ  r·  )r  r  r¶  r×  r£  rØ  r¿  r  rE  rP  rQ  s              r%   rb  z._NnapiSerializer.add_pointwise_simple_unary_opÊ  sQ  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×:Ñ:¸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          
      ó†  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  d«      j                  «       j	                  «       dk7  r9t        d|j                  d«      j                  «       j	                  «       › �«      ‚|j                  d«      j                  «       j	                  «       dk7  r9t        d|j                  d«      j                  «       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                  k7  r%t        d	|j                  › d
|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<   | j1                  |||«       y)zFHelper for pointwise binary broadcast ops with superfluous extra args.r   r‘  r   r®  ú%expected inputsAt(0) TensorType, got ú%expected inputsAt(1) TensorType, got zCan't do a NNAPI binary op: z on two constantszin0_oper.op_type z != in1_oper.op_type r¡  N©r  r  zassert z == r	   r   )r  r"  r  rb  rÀ  r¥  r§  r±  r  r  rð   rà  r,  r  rÖ  rf  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_binaryì  s­  € à×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð �=‰=˜Ó× Ñ Ó"×'Ñ'Ó)¨\Ò9Ü Ø7¸¿¹ÀaÓ8H×8MÑ8MÓ8O×8TÑ8TÓ8VÐ7WÐXóð ð �=‰=˜Ó× Ñ Ó"×'Ñ'Ó)¨\Ò9Ü Ø7¸¿¹ÀaÓ8H×8MÑ8MÓ8O×8TÑ8TÓ8VÐ7WÐXóð ð ×&Ñ& 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óð ð ×Ñ˜x×/Ñ/Ò/Ü Ø# H×$4Ñ$4Ð#5Ð5JÈ8×K[ÑK[ÐJ\Ð]óð ð .2×-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                 óˆ   — |j                  «       dk7  rt        d|j                  «       › �«      ‚| j                  |||«       y )Nr   r   )r  r"  rò  )r  r  r¶  rï  s       r%   r^  z9_NnapiSerializer.add_pointwise_simple_binary_broadcast_op/  sD   € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð 	×Ñ˜D &¨)Õ4r$   c                 óð   — |j                  «       dk7  rt        d|j                  «       › �«      ‚| j                  |j                  d«      d«      \  }}|dk7  rt	        d«      ‚| j                  |||«       y )Nr	   r¯  r   rã  r   z*NNAPI does not support add/sub with alpha.)r  r"  r°  r  r  rò  )r  r  r¶  rï  rC  Úalphas         r%   rZ  z_NnapiSerializer.add_add_sub_op6  s|   € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×*Ñ*¨4¯=©=¸Ó+;¸YÓG‰ˆˆ5Ø�AŠ:ÜØ<óð ð 	×Ñ˜D &¨)Õ4r$   c                 ó   — |j                  «       dk7  rt        d|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  r¶  rï  rC  r  r  s          r%   r…  z_NnapiSerializer.add_qaddD  sŒ   € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×*Ñ*¨4¯=©=¸Ó+;¸[ÓI‰ˆˆ5Ø×/Ñ/°·±¸aÓ0@À)ÓL‰ˆˆ:à×Ñ˜D &¨)¸eÀZÐ=PÐÕQr$   c                 ó^  — |j                  «       dk7  rt        d|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   rã  g      ð?r   )r  r"  r§  r  r°  rf  r�  r‚  r  rÒ  rš  r—  r·  r'   r“   )r  r  r×  r£  rC  Úsoftmax_dimr¿  rE  ró   rP  rQ  s              r%   re  z_NnapiSerializer.add_softmaxO  s2  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×:Ñ:¸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k7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|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   )r   r   z9NNAPI only supports hardtanh with args (-1, 1) or (0, 6).)r  r"  r  r«  r  r°  r'   rŽ   r�   r¯  r  rf  r�  r·  )r  r  r×  r£  rC  Úmin_valÚmax_valÚop_mapr¶  rP  rQ  s              r%   rg  z_NnapiSerializer.add_hardtanhi  sY  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð ×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k7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  d«      j	                  «       j                  «       dk7  r9t        d|j                  d«      j	                  «       j                  «       › �«      ‚|j                  d«      j	                  «       j                  «       dk7  r9t        d|j                  d«      j	                  «       j                  «       › �«      ‚| j                  |j                  d«      «      \  }}| j                  |j                  d«      «      \  }}t        |j                  «      dk7  r!t        d	t        |j                  «      › �«      ‚|j                  d   dk  rt        d
|j                  d   › �«      ‚|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‘  r   r®  rì  rí  z%expected len(w_oper.shape) == 1, got z"expected w_oper.shape[0] > 0, got z8Per-channel PReLU only supports channels_last right now.z.PReLU requires fixed size for dim 0 and dim 1.)r  r"  r  r  rb  rÀ  r§  r³  r!  r  r  r  rf  r�  r‚  rÒ  r·  r'   rÁ   )r  r  r×  r£  Úw_idÚw_operr¿  rE  ró   rP  rQ  s              r%   rq  z_NnapiSerializer.add_prelu_opŠ  s›  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð �=‰=˜Ó× Ñ Ó"×'Ñ'Ó)¨\Ò9Ü Ø7¸¿¹ÀaÓ8H×8MÑ8MÓ8O×8TÑ8TÓ8VÐ7WÐXóð ð �=‰=˜Ó× Ñ Ó"×'Ñ'Ó)¨\Ò9Ü Ø7¸¿¹ÀaÓ8H×8MÑ8MÓ8O×8TÑ8TÓ8VÐ7WÐXóð ð ×:Ñ:¸4¿=¹=ÈÓ;KÓL‰ˆˆwØ×9Ñ9¸$¿-¹-ÈÓ:JÓK‰ˆˆfÜˆv�|‰|Ó Ò!Ü Ø7¼¸F¿L¹LÓ8IÐ7JÐKóð ð �<‰<˜‰?˜aÒÜ Ð#EÀfÇlÁlÐSTÁoÐEVÐ!WÓXÐXØ�<‰<˜‰?˜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k7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       \  }}}}}}|xs |}| j	                  | j                  |«      |||«      }	|	j                  dk7  s|	j                  dk7  rt        d«      ‚| j                  |«      \  }
}t        |j                  «      dk7  r!t        dt        |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.        j0                  «      |d<   | j3                  |«      |d<   d gdz  }| j5                  |j7                  d
«      |j9                  |¬«      «      |d
<   | j;                  |||«       y )Nr   z%expected node.inputsSize() == 6, got r   r‘  z'NNAPI does not support dilated pooling.r
   ú)expected len(image_oper.shape) == 4, got Fr   r   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ž  rf  r�  rÖ  r·  )r  r  r¶  ÚimageÚkernelró  rô  rõ  Ú
_ceil_moder/  Úimage_idÚ
image_operr8  r  rP  rQ  s                   r%   rk  z _NnapiSerializer.add_pool2d_nodeÀ  s§  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð @D¿{¹{»}Ñ<ˆˆv�v˜w¨°*àÒ!˜6ˆð ×2Ñ2Ø×Ñ˜fÓ% v¨w¸ó
ˆð �?‰?˜aÒ 4§?¡?°aÒ#7ÜÐEÓFÐFà#×KÑKÈEÓRÑˆ�*Üˆz×ÑÓ  AÒ%Ü Ø;¼CÀ
×@PÑ@PÓ<QÐ;RÐSóð ô (Ø×Ñ˜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                 óê  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       \  }}}}}}}| j	                  |«      \  }	}
| j	                  |«      \  }	}|
r|rt        d«      ‚| j                  | j                  |«      ||«      }| j                  |«      \  }}t        |j                  «      dk7  r!t        dt        |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                  |¬«      «      }| j9                  |||d«       ||d
<   | j;                  t<        j>                  ||«       y )Nr   ú%expected node.inputsSize() == 7, got r   r‘  zANNAPI doesn't support count_include_pad=False or divisor_overrider
   r  Fr   r   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ž  rf  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%   ri  z_NnapiSerializer.add_avg_pool2dô  sç  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð �K‰K‹Mñ	
ØØØØØØØð &*×%<Ñ%<Ð=NÓ%OÑ"ˆÐ"Ø$(×$;Ñ$;Ð<LÓ$MÑ!ˆÐ!Ù&Ñ*@ÜØSóð ð ×2Ñ2Ø×Ñ˜fÓ% v¨wó
ˆð  $×@Ñ@ÀÓGÑˆ�*Üˆz×ÑÓ  AÒ%Ü Ø;¼CÀ
×@PÑ@PÓ<QÐ;RÐSóð ô (Ø×Ñ˜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k7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚| j                  |j	                  d«      «      \  }}t        |j                  «      dk7  r!t        dt        |j                  «      › �«      ‚| j                  |j	                  d«      «      \  }}|j                  «       dk7  rt        d	|j                  «       › �«      ‚|j                  «       j                  «       d
k7  r*t        d|j                  «       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
   r  râ  ú"expected size_ctype ListType, got rã  ú(expected size element type IntType, got 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Û   rž  rf  r�  rÖ  r·  r'   r{   )
r  r  r  r  Ú
size_ctypeÚsize_argr8  r  rP  rQ  s
             r%   rm  z(_NnapiSerializer.add_adaptive_avg_pool2d3  sê  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð  $×KÑKØ�M‰M˜!Óó 
Ñˆ�*ô ˆz×ÑÓ  AÒ%Ü Ø;¼CÀ
×@PÑ@PÓ<QÐ;RÐSóð ð  $×6Ñ6°t·}±}ÀQÓ7GÓHÑˆ
�HØ�?‰?Ó 
Ò*Ü Ø4°Z·_±_Ó5FÐ4GÐHóð ð ×$Ñ$Ó&×+Ñ+Ó-°Ò:Ü Ø:¸:×;TÑ;TÓ;V×;[Ñ;[Ó;]Ð:^Ð_óð ð ˜˜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                 ód  — |j                  «       dk(  s/|j                  «       dk(  st        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk(  r|j                  «       \  }}}n|j                  «       \  }}}}| j	                  |«      \  }}|j                  «       dk(  r| j	                  «      \  }	}
nŠ| j	                  «      \  }}| j	                  «      \  }}|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|}	|}
| j                  |«      \  }}t        |j                  «      dk7  r!t        d	t        |j                  «      › �«      ‚|j                  «       dk7  r|	j                  «       dk7  rt        d
«      ‚|j                  «       dk7  �rp|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       j                  «       dk7  r*t        d|j                  «       j                  «       › �«      ‚|	j                  «       dk7  rt        d|	j                  «       › �«      ‚|
�t        d|
› �«      ‚t        |t        «      st        dt        |«      › �«      ‚|st        d«      ‚t        d„ |D «       «      st        d«      ‚t        |«      dk(  r|dz  }t        |«      dk7  rt        dt        |«      › �«      ‚|d   }|d   }| j                  |«      }| j                  |«      }�nÆ|	j                  «       dk7  �r§|	j                  «       dk7  rt        d|	j                  «       › �«      ‚|	j                  «       j                  «       dk7  r*t        d|	j                  «       j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|�t        d|› �«      ‚t        |
t        «      st        dt        |
«      › �«      ‚|
st        d«      ‚t        d„ |
D «       «      st        d «      ‚t        |
«      dk(  r|
dz  }
t        |
«      dk7  rt        d!t        |
«      › �«      ‚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<   | j1                  |«      |d<   d gdz  }||d<   | j3                  t4        j6                  ||«       y ))Nr	   r
   z*expected node.inputsSize() == 3 or 4, got r   r‘  rÛ  z%expected scale_h_ctype NoneType, got z%expected scale_w_ctype NoneType, got r  z'Size and scale cannot both be non-None.râ  r  rã  r  z#expected scale_ctype NoneType, got zexpected scale_arg None, got z"expected size_arg to be list, got z!expected size_arg to be non-emptyc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wrè   )ra  r  ©r  r�  s     r%   r  z:_NnapiSerializer.add_upsample_nearest2d.<locals>.<genexpr>«  s   è ø€ Ò@°”z #¤s×+Ñ@ùó   ‚z&expected all size_arg values to be intr   z!expected len(size_arg) == 2, got r   z#expected scale_ctype ListType, got rä  z+expected scale element type FloatType, got z"expected size_ctype NoneType, got zexpected size_arg None, got z#expected scale_arg to be list, got z"expected scale_arg to be non-emptyc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wrè   )ra  r  r  s     r%   r  z:_NnapiSerializer.add_upsample_nearest2d.<locals>.<genexpr>Ì  s   è ø€ ÒC°#”z #¤u×-ÑCùr  z)expected all scale_arg values to be floatz"expected len(scale_arg) == 2, got z#Size and scale cannot both be None.r¡  z(Flexible batch or channels not supported)r   r	   zint(z * rÈ  )r  r"  r  rP  r°  rÀ  r§  r!  r  r  rä  ra  r÷   rb  Úallr—  r  rš  r  rf  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%   ro  z'_NnapiSerializer.add_upsample_nearest2dj  s  € Ø—‘Ó! QÒ&¨$¯/©/Ó*;¸qÒ*@Ü Ø<¸T¿_¹_Ó=NÐ<OÐPóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð �?‰?Ó Ò!Ø)-¯©«Ñ&ˆE�8™Yà8<¿¹»Ñ5ˆE�8˜[¨+Ø#×6Ñ6°xÓ@Ñˆ
�Hà�?‰?Ó Ò!Ø%)×%<Ñ%<¸YÓ%GÑ"ˆK™à)-×)@Ñ)@ÀÓ)MÑ&ˆM˜;Ø*.×*AÑ*AÀ+Ó*NÑ'ˆM˜<ð
 ×!Ñ!Ó# zÒ1Ü$Ø;¸M×<NÑ<NÓ<PÐ;QÐRóð ð ×!Ñ!Ó# zÒ1Ü$Ø;¸M×<NÑ<NÓ<PÐ;QÐRóð ð (ˆKØ#ˆIà#×@Ñ@ÀÓGÑˆ�*Üˆz×ÑÓ  AÒ%Ü Ø;¼CÀ
×@PÑ@PÓ<QÐ;RÐSóð ð �?‰?Ó 
Ò*¨{×/?Ñ/?Ó/AÀZÒ/OÜÐEÓFÐFØ�_‰_Ó *Ó,Ø�‰Ó  JÒ.Ü$Ø8¸¿¹Ó9JÐ8KÐLóð ð ×(Ñ(Ó*×/Ñ/Ó1°YÒ>Ü$Ø>¸z×?XÑ?XÓ?Z×?_Ñ?_Ó?aÐ>bÐcóð ð ×ÑÓ! ZÒ/Ü$Ø9¸+×:JÑ:JÓ:LÐ9MÐNóð ð Ð$Ü$Ð'DÀYÀKÐ%PÓQÐQÜ˜h¬Ô-Ü$Ø8¼¸h»Ð8HÐIóð ñ Ü$Ð%HÓIÐIÜÑ@°xÔ@Ô@Ü$Ð%MÓNÐNÜ�8‹} Ò!Ø# a™<�Ü�8‹} Ò!Ü$Ø7¼¸H»°ÐGóð ð ˜Q‘KˆEØ˜Q‘KˆEØ×1Ñ1°%Ó8ˆEØ×1Ñ1°%Ó8ŠEØ×ÑÓ :Ó-Ø×ÑÓ! ZÒ/Ü$Ø9¸+×:JÑ:JÓ:LÐ9MÐNóð ð ×)Ñ)Ó+×0Ñ0Ó2°kÒAÜ$ØAÀ+×B\ÑB\ÓB^×BcÑBcÓBeÐAfÐgóð ð �‰Ó  JÒ.Ü$Ø8¸¿¹Ó9JÐ8KÐLóð ð Ð#Ü$Ð'CÀHÀ:Ð%NÓOÐOÜ˜i¬Ô.Ü$Ø9¼$¸y»/Ð9JÐKóð ñ Ü$Ð%IÓJÐJÜÑC¸ÔCÔCÜ$Ð%PÓQÐQÜ�9‹~ Ò"Ø%¨™M�	Ü�9‹~ Ò"Ü$Ø8¼¸Y»Ð8HÐIóð ô ˜	 !™ 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                 óÌ  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       \  }}}}}||fD ]T  }| j	                  |«      \  }}	|j                  «       dvrt        d|j                  «       › �«      ‚|	dk7  sŒKt        d«      ‚ | j                  |d|||«       y )	Nr   rÂ  r   r‘  )rã  rä  z/expected scale_ctype IntType or FloatType, got z6NNAPI Fully-Connected does not support alpha and beta.T)r  r"  r  rP  r°  rÀ  r  Úadd_addmm_or_linear)
r  r  Újit_biasÚ	jit_inputÚ
jit_weightÚjit_betaÚ	jit_alpharc  r  Úscale_values
             r%   rs  z_NnapiSerializer.add_addmm  s  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð @D¿{¹{»}Ñ<ˆ�)˜Z¨°9à Ð+ò 		ˆFØ'+×'>Ñ'>¸vÓ'FÑ$ˆK˜Ø×ÑÓ!Ð)AÑAÜ$ØEÀk×FVÑFVÓFXÐEYÐZóð ð ˜aÓÜØLóð ð		ð 	× Ñ   t¨Y¸
ÀHÕMr$   c                 ó  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       \  }}}| j	                  |d|||«       y )Nr	   r¯  r   r‘  F)r  r"  r  rP  r&  )r  r  r(  r)  r'  s        r%   ru  z_NnapiSerializer.add_linear  sŽ   € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð +/¯+©+«-Ñ'ˆ	�:˜xà× Ñ   u¨i¸ÀXÕNr$   c                 ó&  — | j                  |«      \  }}| j                  |«      \  }}	t        |j                  «      dk7  r!t	        dt        |j                  «      › �«      ‚t        |	j                  «      dk7  r!t	        dt        |	j                  «      › �«      ‚| j                  |d«      \  }
}t        |j                  «      dk7  r!t	        dt        |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   ú)expected len(input_oper.shape) == 2, got r   ú(expected len(bias_oper.shape) == 1, got r®  z,expected len(weight_tensor.shape) == 2, got r   r¡  r
   r	   )r§  r³  r!  r  r"  r°  r  Ú
contiguousr�  rK  rf  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Ñˆ�äˆz×ÑÓ  AÒ%Ü Ø;¼CÀ
×@PÑ@PÓ<QÐ;RÐSóð ô ˆy�‰Ó 1Ò$Ü Ø:¼3¸y¿¹Ó;OÐ:PÐQóð ð
  ×2Ñ2°:¸|ÓLÑˆˆ=Üˆ}×"Ñ"Ó# qÒ(Ü Ø>¼sÀ=×CVÑCVÓ?WÐ>XÐYóð ñ Ø"/§/¡/Ó"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k7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       \  }}}}| j	                  |«      \  }}t        |j                  «      dk7  r!t        dt        |j                  «      › �«      ‚| j                  |d«      \  }}	| j                  |d«      \  }}
| j                  |«      \  }}|j                  «       d	k7  rt        d
|j                  «       › �«      ‚|j                  «       d   \  }}|€t        d«      ‚t        |j                  «      dk7  r!t        dt        |j                  «      › �«      ‚t        |j                  «      dk7  r!t        dt        |j                  «      › �«      ‚|j                  d   |j                  d   k7  r+t        d|j                  d   › d|j                  d   › �«      ‚|j                  d   |j                  d   k7  r+t        d|j                  d   › d|j                  d   › �«      ‚|j                  «       t        j                  k7  rt        d|j                  «       › �«      ‚|j                  t        j                  k(  r|}n¨|j                  t        j                  k7  rt        d|j                  › �«      ‚t        j                   |j#                  «       j%                  «       dz   j'                  t        j(                  «      |j+                  «       |j-                  «       dz   ¬«      }|j+                  «       }|j.                  |z  }t        j0                  ||dt        j2                  «      }| j5                  |«      }|j.                  |z  |	z  }|dk  rt        d|› �«      ‚|dk\  rt7        d«      ‚|j9                  «       }| j5                  |«      }| j:                  |   }|j                  d   |j                  d   f}|j=                  ||	|
¬«      }d gdz  }||d<   ||d<   ||d<   | j?                  t@        jB                  «      |d<   d gdz  }| jE                  |jG                  d«      |«      |d<   | jI                  tJ        jL                  ||«       y )Nr
   rÙ  r   r‘  r   r/  rä  rã  ÚLinearPackedParamsBasez2expected weight_ctype LinearPackedParamsBase, got r   úraw_bias must not be Nonez)expected len(raw_weight.shape) == 2, got z'expected len(raw_bias.shape) == 1, got zraw_bias.shape[0] z != raw_weight.shape[0] zraw_weight.shape[1] z != input_oper.shape[1] ú5expected raw_weight.qscheme() per_tensor_affine, got ú%expected raw_weight.dtype qint8, got é€   rî  úexpected multiplier > 0, got ú°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"  r  rP  r«  r!  r  r°  r’  Ú__getstate__Úqschemer¨  Úper_tensor_affineru  rn  Úqint8Ú!_make_per_tensor_quantized_tensorÚint_reprr  ÚtoÚuint8rw  rx  r  Úquantize_per_tensorro  r�  r  r1  rK  rÖ  r—  rÚ   rÛ   rf  r�  r·  r'   rƒ   )r  r  r(  Újit_packed_weightÚ	jit_scaleÚjit_zero_pointr3  r4  rC  Ú	out_scaleÚout_zero_pointÚweight_ctypeÚpacked_weightÚ
raw_weightÚraw_biasÚunsigned_weightÚweight_scaleÚ
bias_scaleÚint_biasr5  Ú
multiplierr8  r9  r:  r8  rØ  rP  rQ  s                               r%   r~  z_NnapiSerializer.add_qlinearU  sè  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð �K‰K‹Mñ	
ØØØØð  $×KÑKÈIÓVÑˆ�*äˆz×ÑÓ  AÒ%Ü Ø;¼CÀ
×@PÑ@PÓ<QÐ;RÐSóð ð ×.Ñ.¨y¸+ÓF‰ˆˆ9Ø ×3Ñ3°NÀIÓNÑˆˆ>Ø&*×&=Ñ&=Ð>OÓ&PÑ#ˆ�mØ×ÑÓÐ":Ò:Ü ØDÀ\×EVÑEVÓEXÐDYÐZóð ð  -×9Ñ9Ó;¸AÑ>Ñˆ
�HØÐÜ Ð!<Ó=Ð=äˆz×ÑÓ  AÒ%Ü Ø;¼CÀ
×@PÑ@PÓ<QÐ;RÐSóð ô ˆx�~‰~Ó !Ò#Ü Ø9¼#¸h¿n¹nÓ:MÐ9NÐOóð ð �>‰>˜!Ñ 
× 0Ñ 0°Ñ 3Ò3Ü Ø$ X§^¡^°AÑ%6Ð$7Ð7OÐPZ×P`ÑP`ÐabÑPcÐOdÐeóð ð ×Ñ˜AÑ *×"2Ñ"2°1Ñ"5Ò5Ü Ø& z×'7Ñ'7¸Ñ':Ð&;Ð;SÐT^×TdÑTdÐefÑTgÐShÐióð ð ×ÑÓ¤5×#:Ñ#:Ò:Ü ØGÈ
×HZÑHZÓH\ÐG]Ð^óð ð ×ÑœuŸ|™|Ò+Ø(‰Oà×Ñ¤5§;¡;Ò.Ü$Ø;¸J×<LÑ<LÐ;MÐNóð ô $×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Ñ@ˆ
Ø˜Š?Ü Ð#@ÀÀÐ!MÓNÐNØ˜Š?Üð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   )ru  )	r°  rÀ  r¨  r©  ró   ru  r�  rK  r³  )
r  r'  r7  r1  r½  Ú_valueÚbias_idxÚnnapi_bias_tensorr5  r6  s
             r%   Úget_optional_biasz"_NnapiSerializer.get_optional_bias¾  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k7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       \  }}}}}}}| j	                  |d«      \  }	}
| j                  ||
«      \  }}| j                  |
j                  dd ||||«      }| j                  |j                  d«      d	d||
||d
t        j                  «	      S )Nr   r  r   r‘  r®  r   r
   r   rk  F©r  r"  r  rP  r°  r_  rö  r  Úadd_conv2d_commonr�  rÚ   rÛ   )r  r  Ú	jit_imager)  r'  Ú
jit_strideÚjit_padÚjit_dilationÚ
jit_groupsrC  r7  r5  Ú
_bias_operr/  s                 r%   rz  z_NnapiSerializer.add_conv2dË  s   € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð �K‰K‹Mñ	
ØØØØØØØð  ×2Ñ2°:¸|ÓLÑˆˆ=Ø"×4Ñ4°X¸}ÓMÑˆ�Ø×2Ñ2Ø×Ñ  !Ð$ j°'¸<Èó
ˆð ×%Ñ%Ø�N‰N˜1ÓØØØØØØØÜ×%Ñ%ó

ð 
	
r$   c                 ó(  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       \  }}}}}}}}	}
}	}	}	}	| j	                  |d«      \  }	}| j	                  |«      \  }	}| j                  |||«      \  }}| j                  |j                  dd ||||
«      }| j                  |j                  d«      d	d|||||t        j                  «	      S )
Nr(   z&expected node.inputsSize() == 13, got r   r‘  r®  r   r
   r   rk  ra  )r  r  rc  r)  r'  rd  re  rf  Újit_transposerC  rg  r7  r1  r5  rh  r/  s                   r%   rx  z$_NnapiSerializer.add_conv_underscoreñ  sH  € Ø�?‰?Ó Ò"Ü Ø8¸¿¹Ó9JÐ8KÐLóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð$ �K‰K‹Mñ	
ØØØØØØØØØØØØØð  ×2Ñ2°:¸|ÓLÑˆˆ=Ø×.Ñ.¨}Ó=‰ˆˆ9Ø"×4Ñ4°X¸}ÈiÓXÑˆ�Ø×2Ñ2Ø×Ñ  !Ð$ j°'¸<Èó
ˆð ×%Ñ%Ø�N‰N˜1ÓØØØØØØØÜ×%Ñ%ó

ð 
	
r$   c                 ón  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|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¡  )r  r"  r  rP  r«  r°  r  rš  r—  rf  r�  rÖ  r·  r'   rº   )r  r  r(  Újit_dimÚ_jit_half_to_floatr3  r4  rC  rE  r8  rP  rQ  s               r%   r|  z _NnapiSerializer.add_log_softmax	  sA  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð 26·±³Ñ.ˆ	�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k7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       \  }}}}| j	                  |d«      \  }}	| j	                  |d«      \  }}
| j	                  |«      \  }}|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       d	   \  }}}|d
k7  rt        d|›�«      ‚|\  }}|\  }|€t        d«      ‚| j                  |j                  dd |«      }|j                  «       t        j                  k7  rt        d|j                  «       › �«      ‚|j                  t        j                  k(  r|}n¨|j                  t        j                  k7  rt        d|j                  › �«      ‚t        j                  |j!                  «       j#                  «       dz   j%                  t        j&                  «      |j)                  «       |j+                  «       dz   ¬«      }|j)                  «       }| j-                  |«      \  }}|j.                  |z  }t        j0                  ||d	t        j2                  «      }| j5                  |«      }|j.                  |z  |	z  }|d	k  rt        d|› �«      ‚|dk\  rt7        d«      ‚| j9                  |j;                  d	«      |	|
||||||«	      S )Nr
   rÙ  r   r‘  rä  rã  ÚConv2dPackedParamsBasez2expected weight_ctype Conv2dPackedParamsBase, got r   Ú2zexpected pack_version '2', got r=  r   r>  r?  r@  rî  rA  rB  )r  r"  r  rP  r°  r’  rD  rñ  r  rE  r¨  rF  ru  rn  rG  rH  rI  r  rJ  rK  rw  rx  r§  r  rL  ro  r�  r  rb  r�  )r  r  rï  r1  rc  rM  rN  rO  rC  rP  rQ  rR  rS  Úpack_versionr›  Úopt_tensorsrê  rT  rU  r/  rV  rW  r  rX  rY  r5  rZ  s                              r%   r�  z_NnapiSerializer.add_qconv2d:	  s5  € Ø�?‰?Ó Ò!Ü Ø7¸¿¹Ó8IÐ7JÐKóð ð ×ÑÓ Ò"Ü Ø8¸×9IÑ9IÓ9KÐ8LÐMóð ð �K‰K‹Mñ	
ØØØØð ×.Ñ.¨y¸+ÓF‰ˆˆ9Ø ×3Ñ3°NÀIÓNÑˆˆ>Ø&*×&=Ñ&=Ð>OÓ&PÑ#ˆ�mØ×ÑÓÐ":Ò:Ü ØDÀ\×EVÑEVÓEXÐDYÐZóð ð ×&Ñ&Ó(¨Ñ+ñ		
ØØØà˜3ÒÜ Ð#BÀ<ÐBRÐ!SÓTÐTØ$+Ñ!ˆ�zØ!‰ˆØÐÜ Ð!<Ó=Ð=Ø×3Ñ3Ø×Ñ˜Q˜qÐ! =ó
ˆð ×ÑÓ¤5×#:Ñ#:Ò:Ü ØGÈ
×HZÑHZÓH\ÐG]Ð^óð ð ×ÑœuŸ|™|Ò+Ø(‰Oà×Ñ¤5§;¡;Ò.Ü$Ø;¸J×<LÑ<LÐ;MÐNóð ô $×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Ñ@ˆ
Ø˜Š?Ü Ð#@ÀÀÐ!MÓNÐNØ˜Š?Üð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(  rk|j                  t        j                  k7  rt        d|j                  › �«      ‚|j                  t        j                  k7  �r=t        d|j                  › �«      ‚|j                  t        j                  k(  rð|j                  t        j                  k7  rt        d	|j                  › �«      ‚|j                  t        j                  k7  rt        d
|j                  › �«      ‚t        |j                  |j                  z  |j                  «      s2t        d|j                  |j                  z  › d|j                  › �«      ‚|j                   dk7  r0t        d|j                   › �«      ‚t        d|j                  › �«      ‚t#        |j                  «      dk7  r!t        dt#        |j                  «      › �«      ‚t#        |j                  «      dk7  r!t        dt#        |j                  «      › �«      ‚t#        |j                  «      dk7  r!t        dt#        |j                  «      › �«      ‚|rk|j                  \  }}}}|dk7  rt        d|› �«      ‚||z  dk7  rt        d|› d|› �«      ‚||z  }|dk7  rt        d|› �«      ‚||k7  r8t        d|› d|› �«      ‚|j                  \  }}}}||k7  rt        d|› d|› �«      ‚||j                  d   k7  rt        d|› d|j                  d   › �«      ‚|j%                  «       }|rd}t&        j(                  }n%d}|rt&        j*                  }nt&        j,                  }d g|z  }|
|d<   ||d<   ||d<   | j/                  |j0                  «      |d<   | j/                  |j2                  «      |d<   | j/                  |j4                  «      |d<   | j/                  |j6                  «      |d <   | j/                  |j8                  «      |d!<   | j/                  |j:                  «      |d"<   |r=| j/                  d«      |d#<   | j/                  |	«      |d$<   | j=                  |«      |d<   n(| j/                  |	«      |d#<   | j=                  |«      |d$<   d gdz  }t?        |j                  |||«      }|jA                  |||¬%«      }| jC                  ||«      } | jE                  | |||«       | |d<   | jG                  |||«       y )&Nr   F)r   r   r	   r   r?  Tz$Group convolution not supported yet.z)expected weight_oper TENSOR_FLOAT32, got z'expected bias_oper TENSOR_FLOAT32, got z.expected weight_oper TENSOR_QUANT8_ASYMM, got z%expected bias_oper TENSOR_INT32, got z#scale mismatch: image*weight scale z != bias scale r   z(expected bias_oper.zero_point == 0, got z#Unsupported input type for conv2d: r
   r  z*expected len(weight_oper.shape) == 4, got r0  z(expected weight_oper.shape[0] == 1, got zout_c z must be divisible by in_c z"channel_multiplier must be 1, got z	 != in_c zkern_d z != bias_oper.shape[0] r   r   r   r	   r   r   r   r   r   r   rC  )$r§  r  r
  r  r‹  r1  r�  rK  rð   r   r   r"  r   r   rî   r  r  r!  r  r'   r~   rÕ   r}   r—  r  r  r  r  r  r  rž  r9  rÖ  rf  r	  r·  )!r  Újit_outrP  rQ  rc  r7  r5  r/  r1  rï  r  r  Úin_cÚ	depthwiseÚweight_permutationr8  r9  r:  r6  ÚoneÚ_kern_hÚ_kern_wÚout_cÚchannel_multiplierÚkern_dr  Únum_argsr¶  rP  rQ  r8  rØ  r¿  s!                                    r%   rb  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Ø×"Ñ"Ô&7×&FÑ&FÒFÜ$Ø?À×@SÑ@SÐ?TÐUóð ð × Ñ Ô$5×$DÑ$DÓDÜ$Ø=¸i×>OÑ>OÐ=PÐQóð ð ×ÑÔ#4×#HÑ#HÒHØ×"Ñ"Ô&7×&KÑ&KÒKÜ$ØDÀ[×EXÑEXÐDYÐZóð ð × Ñ Ô$5×$BÑ$BÒBÜ$Ø;¸I×<MÑ<MÐ;NÐOóð ô   
× 0Ñ 0°;×3DÑ3DÑ DÀiÇoÁoÔVÜ$Ø9¸*×:JÑ:JÈ[×M^ÑM^Ñ:^Ð9_Ð_nÐox×o~Ño~Ðnð  Aóð ð ×#Ñ# qÒ(Ü$Ø>¸y×?SÑ?SÐ>TÐUóð ô Ø5°j×6HÑ6HÐ5IÐJóð ô ˆz×ÑÓ  AÒ%Ü Ø;¼CÀ
×@PÑ@PÓ<QÐ;RÐSóð ô ˆ{× Ñ Ó! QÒ&Ü Ø<¼SÀ×ARÑARÓ=SÐ<TÐUóð ô ˆy�‰Ó 1Ò$Ü Ø:¼3¸y¿¹Ó;OÐ:PÐQóð ñ à+6×+<Ñ+<Ñ(ˆC�˜' 5Ø�aŠxÜ$Ð'OÐPSÈuÐ%UÓVÐVØ�t‰|˜qÒ Ü$ v¨e¨WÐ4OÐPTÈvÐ%VÓWÐWØ!&¨$¡ÐØ! QÒ&Ü$Ø8Ð9KÐ8LÐMóð ð ˜Š}Ü$ v¨e¨W°I¸d¸VÐ%DÓEÐEð /:×.?Ñ.?Ñ+ˆE�7˜G VØ˜Š~Ü$ w¨v¨h°iÀ¸vÐ%FÓGÐGà�I—O‘O AÑ&Ò&Ü Ø˜˜Ð6°y·±ÀqÑ7IÐ6JÐKóð ð ×&Ñ&Ó(ˆáØˆ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¿  rc  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^  rf  rh  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  rE  r5  r:  r<  r>  r@  rB  rG  rI  rK  rN  rQ  rS  rU  rW  rb  rò  r^  rZ  r…  re  rg  rq  rk  ri  rm  ro  rs  ru  r&  r~  r_  rz  rx  r|  r�  rb  r	  r#   r$   r%   rH  rH  L  s  „ óò,"ò	òò1
òfð" !)× 9Ñ 9óò"
1ò
ò

ò

ò

ò1ò7òð !)× <Ñ <ó7ò7ò
5ò/ò
0ó
ó4
òlTò
ò
$ò(
ò

ò
ð, BFó
ò"
ó,z
òx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òò>1òMòBò)IòV<Iò|OOòb<ò GOòR?FòB&JòPLò2 4ðD BFô A4òF5ò5ò	RòIò44òB4Gòl24òh=Qò~5QònUYònNò0Oò-Qò^gQóR@ò$
òL+
òZMó8Q
òfR4óh"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*  F
  s&   € ô ˜FÐ$8Ó9×IÑIØ�˜óð r$   )g�íµ ÷Æ°>)r¡  Úenumr³  Úloggingrµ  r‰  rÇ  Útypingr   r¨  Ú	getLoggerr¶   r   r'   rÚ   rà   ÚEnumrå   rî   rõ   rý   rÿ   r  r  r,  r9  r=  r@  rF  rH  r*  r#   r$   r%   ú<module>r‰     sß   ðã Û Û Û Û Û Û 
Ý ã ð €g×ÑÐ)Ó*€÷ñ ÷ _!ñ _!÷Dñ ÷ñ ô�t—y‘yô ó7òòô�Zô ô ˆt�y‰yô ô-ˆjô -ò@ òFò06ò(	Nò÷w#ñ w#ðvG #°$ÈUõr$   