Ë
    ÌÓ^jš» ã                   ó$  — d Z ddlZddlmc mc mc mc mZ ddl	mc mc mZ
 ddlmc mc mc mZ ddlmZ ddlmZ ddlmc mZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z: dd	l;m<Z<m=Z= 	 dd
l>m?Z?m@Z@ ddlAmBZBmCZCmDZDmEZE ddlFmGZG ddlHmIZI dZJddlLZLddlMZMddlNZNddlOZOddlPZPddlQmRZR ddlSmTZT ddlUZVddlWmXZY ddlZm[Z[  G d„ d«      Z\d„ Z]d„ Z^ej                  j¿                  «       Z`e`fd„Za G d„ d«      ZbdÐd„Zcd„ Zdd„ Zed„ Zfd„ Zgd„ ZhdÑd „Zid!„ Zjd"„ Zkd#„ Zld$„ Zmd%„ Znd&„ Zod'„ Zpd(„ Zqd)„ Zrd*„ Zs	 ddltZtdZu ePjì                  eu d+«      Zwd,„ ZxeVjò                  dfd-„ZzdÒd.„Z{dÓd/„Z|d0„ Z} G d1„ d2e=«      Z~ G d3„ d4e~«      Z G d5„ d6ej                  �j                   «      Z� G d7„ d8ej                  �j                   «      Z‚ G d9„ d:ej                  �j                   «      Zƒ G d;„ d<e�j                   «      Z„ G d=„ d>ej                  �j                   «      Z… G d?„ d@ej                  �j                   «      Z† G dA„ dBej                  �j                   «      Z‡ G dC„ dDej                  �j                   «      Zˆ G dE„ dFej                  �j                   «      Z‰ G dG„ dHej                  �j                   «      ZŠ G dI„ dJej                  �j                   «      Z‹ G dK„ dLej                  �j                   «      ZŒ G dM„ dNej                  �j                   «      Z� G dO„ dPej                  �j                   «      ZŽ G dQ„ dRej                  �j                   «      Z� G dS„ dTej                  �j                   «      Z� G dU„ dVej                  �j                   «      Z‘ G dW„ dXe�j                   «      Z’ G dY„ dZej                  �j                   «      Z“ G d[„ d\ej                  �j                   «      Z” G d]„ d^ej                  �j                   «      Z• G d_„ d`ej                  �j                   «      Z– G da„ dbej                  �j                   «      Z— G dc„ ddej                  �j                   «      Z˜ G de„ dfej                  �j                   «      Z™ G dg„ dhej                  �j                   «      Zš G di„ djej                  �j                   «      Z› G dk„ dlej                  �j                   «      Zœ G dm„ dnej                  �j                   «      Z� G do„ dpej                  �j                   «      Zž G dq„ drej                  �j                   «      ZŸ G ds„ dtej                  �j                   «      Z  G du„ dvej                  �j                   «      Z¡ G dw„ dxej                  �j                   «      Z¢ G dy„ dzej                  �j                   «      Z£ G d{„ d|ej                  �j                   «      Z¤ G d}„ d~ej                  �j                   «      Z¥ G d„ d€ej                  �j                   «      Z¦ G d�„ d‚ej                  �j                   «      Z§ G dƒ„ d„ej                  �j                   «      Z¨ G d…„ d†e�j                   «      Z© G d‡„ dˆe�j                   «      Zª G d‰„ dŠej                  �j                   «      Z« G d‹„ dŒej                  �j                   «      Z¬ G d�„ dŽej                  �j                   «      Z­ G d�„ d�e�j                   «      Z® G d‘„ d’e�j                   «      Z¯ G d“„ d”ej                  �j                   «      Z° G d•„ d–ej                  �j                   «      Z± G d—„ d˜ej                  �j                   «      Z² G d™„ dšej                  �j                   «      Z³ G d›„ dœej                  �j                   «      Z´ G d�„ džej                  �j                   «      Zµ G dŸ„ d ej                  �j                   «      Z¶ G d¡„ d¢e¶«      Z· G d£„ d¤e�j                   «      Z¸ G d¥„ d¦e�j                   «      Z¹ G d§„ d¨e�j                   «      Zº G d©„ dªe�j                   «      Z» G d«„ d¬e�j                   «      Z¼ G d­„ d®e�jz                  «      Z¾ G d¯„ d°e�j                   «      Z¿ G d±„ d²e�j                   «      ZÀ G d³„ d´e�j                   «      ZÁ G dµ„ d¶ej                  �j                   «      ZÂ G d·„ d¸e�j                   «      ZÃ G d¹„ dºej                  �j                   «      ZÄ G d»„ d¼ej                  �j                   «      ZÅ G d½„ d¾ej                  �j                   «      ZÆ G d¿„ dÀej                  �j                   «      ZÇ G dÁ„ dÂej                  �j                   «      ZÈ G dÃ„ dÄej                  �j                   «      ZÉ G dÅ„ dÆej                  �j                   «      ZÊ G dÇ„ dÈe�j                   «      ZË G dÉ„ dÊe�j                   «      ZÌ G dË„ dÌe�j                   «      ZÍ G dÍ„ dÎ«      ZÎdÏ„ ZÏy# eK$ r dZJY �	Œ²w xY w# eK$ r dZuY �	Œw xY w)ÔzˆImporting this file includes common utility methods and base classes for
checking quantization api and properties of resulting modules.
é    N)Úcontrol_flow)Ú_FusedModule)ÚconvertÚdefault_dynamic_qat_qconfigÚdefault_dynamic_qconfigÚdefault_dynamic_quant_observerÚdefault_embedding_qat_qconfigÚdefault_observerÚdefault_per_channel_qconfigÚdefault_qconfigÚ%default_symmetric_qnnpack_qat_qconfigÚdefault_weight_observerÚDeQuantStubÚ!float_qparams_weight_only_qconfigÚget_default_qat_qconfigÚget_default_qat_qconfig_mappingÚget_default_qconfigÚget_default_qconfig_mappingÚPerChannelMinMaxObserverÚpropagate_qconfig_ÚQConfigÚQConfigMappingÚquantizeÚquantize_dynamic_jitÚquantize_jitÚ	QuantStubÚ	QuantTypeÚQuantWrapper)Ú)get_default_dynamic_quant_module_mappingsÚget_default_qat_module_mappingsÚ$get_default_qconfig_propagation_list)Ú_load_for_lite_interpreter)Úoverride_quantized_engine)ÚTEST_WITH_ROCMÚTestCase)ÚNSSingleResultValuesTypeÚ
NSSubgraph)Ú
convert_fxÚconvert_to_reference_fxÚ
prepare_fxÚprepare_qat_fx)ÚGraphModule)ÚNodeTF)ÚAny)ÚCallable)Ú	FileCheckc                   óX   — e Zd ZdZd„ Zed„ «       Zed„ «       Zed„ «       Zd„ Z	d„ Z
d„ Zy	)
ÚNodeSpecz"Used for checking GraphModule Nodec                 ó    — || _         || _        y)z¿
        op: call_function | call_module
        target:
          for call_function, target would be a function
          for call_module, target would be the type of PyTorch module
        N)ÚopÚtarget)Úselfr4   r5   s      úv/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/testing/_internal/common_quantization.pyÚ__init__zNodeSpec.__init__X   s   € ð ˆŒØˆ�ó    c                 ó   — t        d|«      S )NÚcall_function©r2   ©Úclsr5   s     r7   r;   zNodeSpec.call_functionb   s   € ä˜¨Ó0Ð0r9   c                 ó   — t        d|«      S )NÚcall_methodr<   r=   s     r7   r@   zNodeSpec.call_methodf   ó   € ä˜ vÓ.Ð.r9   c                 ó   — t        d|«      S )NÚcall_moduler<   r=   s     r7   rC   zNodeSpec.call_modulej   rA   r9   c                 óD   — t        | j                  | j                  f«      S ©N)Úhashr4   r5   ©r6   s    r7   Ú__hash__zNodeSpec.__hash__n   s   € Ü�T—W‘W˜dŸk™kÐ*Ó+Ð+r9   c                 ó–   — t        |t        «      st        S | j                  |j                  k(  xr | j                  |j                  k(  S rE   )Ú
isinstancer2   ÚNotImplementedr4   r5   )r6   Úothers     r7   Ú__eq__zNodeSpec.__eq__q   s7   € Ü˜%¤Ô*Ü!Ð!à�w‰w˜%Ÿ(™(Ñ"ÒB t§{¡{°e·l±lÑ'BÐBr9   c                 ó^   — t        | j                  «      dz   t        | j                  «      z   S )Nú )Úreprr4   r5   rG   s    r7   Ú__repr__zNodeSpec.__repr__w   s#   € Ü�D—G‘G‹}˜sÑ"¤T¨$¯+©+Ó%6Ñ6Ð6r9   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r8   Úclassmethodr;   r@   rC   rH   rM   rQ   © r9   r7   r2   r2   U   sV   „ Ù,òð ñ1ó ð1ð ñ/ó ð/ð ñ/ó ð/ò,òCó7r9   r2   c                  óX   — t         j                  j                  «       r
t        sddgS dgS )NÚcpuÚcuda)ÚtorchrZ   Úis_availabler$   rW   r9   r7   Úget_supported_device_typesr]   {   s*   € ä Ÿ:™:×2Ñ2Ô4½^ˆ�ˆðØRWÐQXðr9   c                 ó   — |D ]  } | |Ž  Œ	 y)z†
    Default evaluation function takes a torch.utils.data.Dataset or a list of
    input Tensors and run the model on the dataset
    NrW   )ÚmodelÚ
calib_dataÚinps      r7   Útest_only_eval_fnrb   �   s   € ð
 ò ˆÙˆsŠñr9   c                 ó  — t         j                  j                  | j                  «       d¬«      }d\  }}}t	        d«      D ]Á  }| j                  «        |D ]ª  \  }}	|j                  «         | |«      }
 ||
|	«      }|j                  «        |j                  «        ||j                  «       z  }t        j                  |
d«      \  }}||	j                  d«      z  }|||	k(  j                  «       j                  «       z  }Œ¬ ŒÃ |||fS )zh
    Default train function takes a torch.utils.data.Dataset and train the model
    on the dataset
    gü©ñÒMbP?©Úlr)r   r   r   é
   é   r   )r[   ÚoptimÚAdamÚ
parametersÚrangeÚtrainÚ	zero_gradÚbackwardÚstepÚitemÚmaxÚsizeÚsum)r_   Ú
train_dataÚloss_fnÚ	optimizerÚ
train_lossÚcorrectÚtotalÚ_Údatar5   ÚoutputÚlossÚ	predicteds                r7   Útest_only_train_fnr   �   sû   € ô
 —‘× Ñ  ×!1Ñ!1Ó!3¸Ð Ó>€IØ!(Ñ€J�˜Ü�2‹Yò :ˆØ�‰Œà&ò 		:‰LˆD�&Ø×ÑÔ!Ù˜4“[ˆFÙ˜6 6Ó*ˆDØ�M‰MŒOØ�N‰NÔØ˜$Ÿ)™)›+Ñ%ˆJÜ Ÿ9™9 V¨QÓ/‰LˆAˆyØ�V—[‘[ “^Ñ#ˆEØ˜	 VÑ+×0Ñ0Ó2×7Ñ7Ó9Ñ9‰Gñ		:ð:ð �w Ð%Ð%r9   c                   ó,   — e Zd ZdZdd„Zd„ Zdd„Zd„ Zy)	ÚAverageMeterz1Computes and stores the average and current valuec                 ó@   — || _         || _        | j                  «        y rE   )ÚnameÚfmtÚreset)r6   rƒ   r„   s      r7   r8   zAverageMeter.__init__§   s   € ØˆŒ	ØˆŒØ�
‰
�r9   c                 ó<   — d| _         d| _        d| _        d| _        y ©Nr   )ÚvalÚavgrs   ÚcountrG   s    r7   r…   zAverageMeter.reset¬   s   € ØˆŒØˆŒØˆŒØˆ�
r9   c                 ó¨   — || _         | xj                  ||z  z  c_        | xj                  |z  c_        | j                  | j                  z  | _        y rE   )rˆ   rs   rŠ   r‰   )r6   rˆ   Úns      r7   ÚupdatezAverageMeter.update²   s<   € ØˆŒØ�Š�C˜!‘GÑ�Ø�
Š
�a‰�
Ø—8‘8˜dŸj™jÑ(ˆ�r9   c                 ó~   — d| j                   z   dz   | j                   z   dz   } |j                  di | j                  ¤ŽS )Nz{name} {valz} ({avgz})rW   )r„   ÚformatÚ__dict__)r6   Úfmtstrs     r7   Ú__str__zAverageMeter.__str__¸   s;   € Ø §¡Ñ)¨IÑ5¸¿¹Ñ@À4ÑGˆØˆv�}‰}Ñ-˜tŸ}™}Ñ-Ð-r9   N)z:f©rg   )rR   rS   rT   rU   r8   r…   r�   r’   rW   r9   r7   r�   r�   ¤   s   „ Ù;óò
ó)ó.r9   r�   c                 óþ  — t        j                  «       5  t        |«      }|j                  d«      }| j	                  |ddd«      \  }}|j                  «       }|j                  |j                  dd«      j                  |«      «      }g }|D ]X  }	|d|	 j                  d«      j                  «       j                  dd¬«      }
|j                  |
j                  d|z  «      «       ŒZ |cddd«       S # 1 sw Y   yxY w)zNComputes the accuracy over the k top predictions for the specified values of kr   rg   TéÿÿÿÿN)Úkeepdimg      Y@)r[   Úno_gradrq   rr   ÚtopkÚtÚeqÚviewÚ	expand_asÚfloatrs   ÚappendÚmul_)r|   r5   r˜   ÚmaxkÚ
batch_sizerz   Úpredrx   ÚresÚkÚ	correct_ks              r7   Úaccuracyr¦   ½   sß   € ä	�‰‹ñ Ü�4‹yˆØ—[‘[ “^ˆ
à—+‘+˜d A t¨TÓ2‰ˆˆ4Ø�v‰v‹xˆØ—'‘'˜&Ÿ+™+ a¨Ó,×6Ñ6°tÓ<Ó=ˆàˆØò 	;ˆAØ  ˜×(Ñ(¨Ó,×2Ñ2Ó4×8Ñ8¸ÀDÐ8ÓIˆIØ�J‰J�y—~‘~ e¨jÑ&8Ó9Õ:ð	;ð ÷÷ ò ús   •CC3Ã3C<c                 ó^  — | j                  «        t        |d¬«      D ]�  \  }\  }}t        dd¬«       |j                  |«      |j                  |«      }} | |«      }	 ||	|«      }
|j	                  «        |
j                  «        |j                  «        t        |	|d¬«       ||k\  sŒ� y  y )Nrg   )Ústartú.Ú )Úend)rg   é   )r˜   )rl   Ú	enumerateÚprintÚtorm   rn   ro   r¦   )r_   Ú	criterionrv   Údata_loaderÚdeviceÚntrain_batchesÚcntÚimager5   r|   r}   s              r7   Útrain_one_epochr¶   Î   sŸ   € Ø	‡K�K„MÜ )¨+¸QÔ ?ò 
Ñˆ‰_ˆe�VÜˆc�rÕØŸ™ Ó(¨&¯)©)°FÓ*;ˆvˆÙ�u“ˆÙ˜ Ó(ˆØ×ÑÔØ�‰ŒØ�‰ÔÜ�˜ fÕ-Ø�.Ó Ùð
ð r9   c                 ó€   — dt         j                  d<   dt         j                  d<   t        j                  d| |¬«       y )NÚ	localhostÚMASTER_ADDRÚ12355ÚMASTER_PORTÚgloo©ÚrankÚ
world_size)ÚosÚenvironÚdistÚinit_process_groupr½   s     r7   Ú	ddp_setuprÄ   Þ   s2   € Ø +„B‡J�Jˆ}ÑØ '„B‡J�Jˆ}Ñô 	×Ñ˜F¨¸*ÖEr9   c                  ó,   — t        j                  «        y rE   )rÂ   Údestroy_process_grouprW   r9   r7   Úddp_cleanuprÇ   æ   s   € Ü×ÑÕ r9   c                 ó\  — t        | |«       |j                  «        t        j                  j                  j                  || g¬«      }|j                  | «       |}t        j                  j                  |j                  «       d¬«      }t        |t        |t        | d«       t        «        y )N)Ú
device_idsg-Cëâ6?rd   rg   )rÄ   rZ   r[   ÚnnÚparallelÚDistributedDataParallelr¯   rh   ÚSGDrj   r¶   r°   ÚdatasetrÇ   )r¾   r¿   ÚpreparedÚmodel_with_ddprv   s        r7   Úrun_ddprÑ   ê   s}   € Üˆd�JÔØ‡M�M„OÜ�x‰x× Ñ ×8Ñ8¸ÈtÈfÐ8ÓU€HØ‡K�K�ÔØ€NÜ—‘—‘ × 9Ñ 9Ó ;À�ÓG€IÜ�N¤I¨y¼'À4ÈÔKÜ…Mr9   c                 ó0   — t        | t        «       d¬«       y )NT©Úinplace)r   r   )Úmodules    r7   Úconvert_dynamicrÖ   õ   s   € ÜˆFÔ=Ó?ÈÖNr9   c                 ó   — t        | |«       y rE   )r   )r_   Úqconfig_dicts     r7   Úprepare_dynamicrÙ   ù   s   € Ü�u˜lÕ+r9   c                 ó4  — ||z  }||z  }d\  }}t        j                  ||| |f|z   «      }|||z
  j                  «       z  }t        j                  |||t         j                  ¬«      }||z  }|	|z  }	|d | }|	d | }	d\  }}t        j                  ||||f|z   «      }t        j                  dd|f«      }|rôddt        |«      z  z   }t        j                  |t         j                  ¬«      }t        j                  |	t         j                  ¬«      } |j                  |Ž |j                  «        |j                  |Ž z
  j                  «       z  }||z  |j                  «       z  }t        j                  ||j                  «       |j                  «       dt         j                  ¬«      }nb|d   ||	d   z
  j                  «       z  }||d   z  |j                  «       z  }t        j                  ||d   |	d   t         j                  ¬«      }|||||
r|fS d fS )	N©r   é   ©ÚscaleÚ
zero_pointÚdtype)éûÿÿÿr¬   r   rf   )r•   rg   r“   ©rà   )r[   Úrandintr�   Úquantize_per_tensorÚquint8ÚlenÚtensorÚreshapeÚquantize_per_channelÚdoubleÚlongÚqint8)r¡   Úin_channels_per_groupÚinput_feature_map_sizeÚout_channels_per_groupÚgroupsÚkernel_sizeÚX_scaleÚX_zero_pointÚW_scaleÚW_zero_pointÚuse_biasÚuse_channelwiseÚin_channelsÚout_channelsÚX_value_minÚX_value_maxÚX_initÚXÚX_qÚW_value_minÚW_value_maxÚW_initÚb_initÚW_shapeÚW_scales_tensorÚW_zero_points_tensorÚWÚbÚW_qs                                r7   Ú_make_conv_test_inputr	  ý   sG  € ð (¨&Ñ0€KØ)¨FÑ2€Là!'Ñ€[�+Ü�]‰]ØØàØð	
ð !ñ		!ó€Fð 	�6˜LÑ(×/Ñ/Ó1Ñ1€AÜ
×
#Ñ
#Ø	� \¼¿¹ô€Cð ˜Ñ$€GØ ,Ñ.€Là�m�|Ð$€GØ  Ð.€Lð ")Ñ€[�+ô �]‰]ØØàØ!ð	
ð ñ		ó€Fô �]‰]˜1˜b < /Ó2€FáØ˜D¤3 {Ó#3Ñ3Ñ3ˆÜŸ,™, w´e·k±kÔBˆÜ$Ÿ|™|¨LÄÇÁÔLÐà#ˆO×#Ñ# WÐ-Ø�|‰|‹~Ð <Ð 4× <Ñ <¸gÐ FÑF×MÑMÓOñPð 	
ð �oÑ%¨¯©«Ñ6ˆÜ×(Ñ(ØØ×"Ñ"Ó$Ø ×%Ñ%Ó'ØÜ—+‘+ô
‰ð �A‰J˜& <°¡?Ñ2×9Ñ9Ó;Ñ;ˆØ�g˜a‘jÑ  6§<¡<£>Ñ1ˆÜ×'Ñ'Ø�W˜Q‘Z¨L¸©OÄ5Ç;Á;ô
ˆð ˆs�A�s¡˜AÐ4Ð4¨tÐ4Ð4r9   c                 ó¼   — d\  }}t        j                  |||«      }| ||z
  j                  «       z  }t        j                  || |t         j                  ¬«      }||fS )NrÛ   rÝ   )r[   rã   r�   rä   rå   )rÞ   rß   Úsizesrú   rû   rü   rý   rþ   s           r7   Ú!_make_conv_add_extra_input_tensorr  P  se   € Ø!'Ñ€[�+Ü�]‰]ØØØó€Fð
 	�˜*Ñ$×+Ñ+Ó-Ñ-€AÜ
×
#Ñ
#Ø	� :´U·\±\ô€Cð ˆcˆ6€Mr9   c                 óÖ   ‡ ‡— dŠt        ‰ t        «      r6dt        j                  j                  j
                  vrd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )NzrQuantized operations require FBGEMM. FBGEMM is only optimized for CPUs with instruction set support AVX2 or newer.ÚfbgemmTc                  óŒ   •— dt         j                  j                  j                  vrt	        j
                  ‰«      ‚ ‰| i |¤Ž y )Nr  ©r[   ÚbackendsÚ	quantizedÚsupported_enginesÚunittestÚSkipTest©ÚargsÚkwargsÚfnÚreasons     €€r7   ÚwrapperzskipIfNoFBGEMM.<locals>.wrapperf  ó9   ø€ àœ5Ÿ>™>×3Ñ3×EÑEÑEÜ×#Ñ# FÓ+Ð+á�Ð˜Ór9   ©
rJ   Útyper[   r  r  r  Ú__unittest_skip__Ú__unittest_skip_why__Ú	functoolsÚwraps©r  r  r  s   ` @r7   ÚskipIfNoFBGEMMr$  ^  sd   ù€ ð B€FÜ�"”dÔØœ5Ÿ>™>×3Ñ3×EÑEÑEØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð €Nr9   c                 óÖ   ‡ ‡— dŠt        ‰ t        «      r6dt        j                  j                  j
                  vrd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nú%Quantized operations require QNNPACK.ÚqnnpackTc                  óŒ   •— dt         j                  j                  j                  vrt	        j
                  ‰«      ‚ ‰| i |¤Ž y ©Nr'  r  r  s     €€r7   r  z skipIfNoQNNPACK.<locals>.wrapperx  s9   ø€ àœEŸN™N×4Ñ4×FÑFÑFÜ×#Ñ# FÓ+Ð+á�Ð˜Ór9   r  r#  s   ` @r7   ÚskipIfNoQNNPACKr*  p  sa   ù€ Ø4€FÜ�"”dÔØœEŸN™N×4Ñ4×FÑFÑFØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð €Nr9   c                 óÖ   ‡ ‡— dŠt        ‰ t        «      r6dt        j                  j                  j
                  vrd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nr&  r'  Tc                  óÌ   •— dt         j                  j                  j                  vrt	        j
                  ‰«      ‚t        d«      5   ‰| i |¤Ž d d d «       y # 1 sw Y   y xY wr)  )r[   r  r  r  r  r  r#   r  s     €€r7   r  z#withQNNPACKBackend.<locals>.wrapperŒ  sV   ø€ àœEŸN™N×4Ñ4×FÑFÑFÜ×#Ñ# FÓ+Ð+Ü& yÓ1ñ 	 Ù�Ð˜Ò÷	 ÷ 	 ñ 	 ús   Á	AÁA#r  r#  s   ` @r7   ÚwithQNNPACKBackendr-  ‚  sc   ù€ ð 5€FÜ�"”dÔØœEŸN™N×4Ñ4×FÑFÑFØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð €Nr9   c                 óÖ   ‡ ‡— dŠt        ‰ t        «      r6dt        j                  j                  j
                  vrd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nz$Quantized operations require ONEDNN.ÚonednnTc                  óŒ   •— dt         j                  j                  j                  vrt	        j
                  ‰«      ‚ ‰| i |¤Ž y )Nr/  r  r  s     €€r7   r  zskipIfNoONEDNN.<locals>.wrapperž  r  r9   r  r#  s   ` @r7   ÚskipIfNoONEDNNr1  –  sa   ù€ Ø3€FÜ�"”dÔØœ5Ÿ>™>×3Ñ3×EÑEÑEØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð €Nr9   c                 óÚ   ‡ ‡— dŠt        ‰ t        «      r8t        j                  j                  j                  «       sd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nz*Quantized operations require BF16 support.Tc                  ó�   •— t         j                  j                  j                  «       st	        j
                  ‰«      ‚ ‰| i |¤Ž y rE   )r[   ÚopsÚmkldnnÚ_is_mkldnn_bf16_supportedr  r  r  s     €€r7   r  z#skipIfNoONEDNNBF16.<locals>.wrapper°  s7   ø€ ä�y‰y×Ñ×9Ñ9Ô;Ü×#Ñ# FÓ+Ð+á�Ð˜Ór9   )
rJ   r  r[   r4  r5  r6  r  r   r!  r"  r#  s   ` @r7   ÚskipIfNoONEDNNBF16r7  ¨  s_   ù€ Ø9€FÜ�"”dÔÜ�y‰y×Ñ×9Ñ9Ô;Ø#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð €Nr9   c                 óÖ   ‡ ‡— dŠt        ‰ t        «      r6dt        j                  j                  j
                  vrd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nz!Quantized operations require X86.Úx86Tc                  óŒ   •— dt         j                  j                  j                  vrt	        j
                  ‰«      ‚ ‰| i |¤Ž y )Nr9  r  r  s     €€r7   r  zskipIfNoX86.<locals>.wrapperÂ  s9   ø€ àœŸ™×0Ñ0×BÑBÑBÜ×#Ñ# FÓ+Ð+á�Ð˜Ór9   r  r#  s   ` @r7   ÚskipIfNoX86r;  º  sa   ù€ Ø0€FÜ�"”dÔØœŸ™×0Ñ0×BÑBÑBØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð €Nr9   c                 ó²   ‡ ‡— dŠt        ‰ t        «      r$t        j                  «       sd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nzdynamo doesn't support.Tc                  óh   •— t        j                  «       st        j                  ‰«      ‚ ‰| i |¤Ž y rE   )ÚtorchdynamoÚis_dynamo_supportedr  r  r  s     €€r7   r  z&skipIfNoDynamoSupport.<locals>.wrapperÔ  s-   ø€ ä×.Ñ.Ô0Ü×#Ñ# FÓ+Ð+á�Ð˜Ór9   )rJ   r  r>  r?  r  r   r!  r"  r#  s   ` @r7   ÚskipIfNoDynamoSupportr@  Ì  sU   ù€ Ø&€FÜ�"”dÔÜ×.Ñ.Ô0Ø#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð €Nr9   c                 ó²   ‡ ‡— dŠt        ‰ t        «      r$t        j                  «       sd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nzinductor doesn't support.Tc                  óh   •— t        j                  «       st        j                  ‰«      ‚ ‰| i |¤Ž y rE   )r>  Úis_inductor_supportedr  r  r  s     €€r7   r  z(skipIfNoInductorSupport.<locals>.wrapperæ  s-   ø€ ä×0Ñ0Ô2Ü×#Ñ# FÓ+Ð+á�Ð˜Ór9   )rJ   r  r>  rC  r  r   r!  r"  r#  s   ` @r7   ÚskipIfNoInductorSupportrD  Þ  sU   ù€ Ø(€FÜ�"”dÔÜ×0Ñ0Ô2Ø#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð €Nr9   zno torchvisionc                 ó„   — |r t         j                  j                  | |«      S t         j                  j                  | «      S rE   )r[   ÚjitÚtraceÚscript)r_   Útracingr{   s      r7   Úget_script_modulerJ  ù  s-   € Ù+2Œ5�9‰9�?‰?˜5 $Ó'ÐO¼¿	¹	×8HÑ8HÈÓ8OÐOr9   c                 óÈ   — t        j                  | j                  d   dz   f|¬«      }| |dd t        j                  t        j
                  ||¬«      «      }|r|dd S |dd S )z6
    Convert lengths to offsets for embedding_bag
    r   rg   râ   Nr•   )ÚnpÚzerosÚshaper[   Ú
from_numpyÚcumsum)r™   Úoffset_typeÚuse_begin_offsetÚtts       r7   Úlengths_to_offsetsrT  ý  sb   € ô 
�‰�1—7‘7˜1‘: ‘>Ð#¨;Ô	7€BØ€B€q€r€FÜ	×	Ñ	œ"Ÿ)™) B¨kÔ:Ó	;€BÙØ�#�2ˆwˆØˆaˆbˆ6€Mr9   c           	      óÔ  — | j                  «       dk7  rt        d| j                  «       › �«      ‚| j                  dd«      j                  «       } |dk  rt        d|› �«      ‚| j                  d   |z  dk7  rt        d| j                  d   › d|› �«      ‚| j                  d|«      }t        j                  |«      j                  «       dk7  rt        d	«      ‚|j                  dd
¬«      }|j                  dd
¬«      }d|z  dz
  }d}||z
  j                  d¬«      |z  }t        j                  |«      j                  «       dk7  rt        d«      ‚||d|dz
  z  z  z   }	t        j                  |	«      j                  «       dk7  rt        d«      ‚|j                  |«      j                  |«      j                  «       j                  ||«      }
t        j                  |
«      j                  «       dk7  rt        d«      ‚|
j!                  t        j"                  ¬«      j                  | j                  «      }
|
j$                  t        j$                  d«      k7  r9|
d d …d d d…f   dz  |
d d …dd d…f   z  j!                  t        j&                  «      }
|j)                  | j                  d   d«      }|	j)                  | j                  d   d«      }	t        j*                  |j                  |j-                  d«      |j-                  d«      d«      |	j                  |	j-                  d«      |	j-                  d«      d«      gd«      j                  dd«      j                  «       }|
|fS )Né   zexpected w.dim() == 2, got r   rg   zexpected q_group_size > 1, got r•   z:expected w.shape[-1] % q_group_size == 0, got w.shape[-1]=z, q_group_size=zto_quant contains NaN valuesT©Údimr–   g�íµ ÷Æ°>©Úminzscales contains NaN valueszzeros contains NaN valueszout contains NaN valuesrâ   rY   rÜ   )rX  ÚAssertionErrorÚ	transposeÚ
contiguousrN  rè   r[   Úisnanrs   ÚamaxÚaminÚclampÚsubÚdivÚroundÚclamp_r¯   Úint32r²   Úuint8r›   Úcatrr   )ÚwÚn_bitÚq_group_sizeÚto_quantÚmax_valÚmin_valÚmax_intÚmin_intÚscalesrM  ÚoutÚscales_and_zeross               r7   Ú_group_quantize_tensorrt  	  sý  € Ø‡u�uƒw�!‚|ÜÐ:¸1¿5¹5»7¸)ÐDÓEÐEØ	�‰�A�qÓ×$Ñ$Ó&€AØ�qÒÜÐ>¸|¸nÐMÓNÐNØ‡w�wˆr�{�\Ñ! QÒ&ÜØHÈÏÉÐQSÉÈÐUdÐeqÐdrÐsó
ð 	
ð �y‰y˜˜\Ó*€HÜ‡{�{�8Ó× Ñ Ó" aÒ'ÜÐ;Ó<Ð<à�m‰m ¨4ˆmÓ0€GØ�m‰m ¨4ˆmÓ0€GØ�‰h˜‰l€GØ€GØ˜Ñ×&Ñ&¨4Ð&Ó0°7Ñ:€FÜ‡{�{�6Ó×ÑÓ  AÒ%ÜÐ9Ó:Ð:à�f  e¨a¡iÑ 0Ñ1Ñ1€EÜ‡{�{�5Ó×ÑÓ 1Ò$ÜÐ8Ó9Ð9à
�,‰,�wÓ
×
#Ñ
# FÓ
+×
1Ñ
1Ó
3×
:Ñ
:¸7ÀGÓ
L€CÜ‡{�{�3Ó×ÑÓ Ò"ÜÐ6Ó7Ð7à
�&‰&”u—{‘{ˆ&Ó
#×
+Ñ
+¨A¯G©GÓ
4€CØ
‡z�z”U—\‘\ %Ó(Ò(Ø’2‘s˜�s�7‰|˜qÑ  3¢r¨1¨4¨a¨4 x¡=Ñ0×4Ñ4´U·[±[ÓAˆð �[‰[˜Ÿ™ ™ RÓ(€FØ�J‰J�q—w‘w˜q‘z 2Ó&€Eä�	‰	à—‘˜vŸ{™{¨1›~¨v¯{©{¸1«~¸qÓAØ—‘˜eŸj™j¨›m¨U¯Z©Z¸«]¸AÓ>ðð ó	
÷ 
‰�1�a‹ß	‰‹ð ð Ð Ð Ð r9   c                 óæ  — | j                  dd«      j                  «       } | j                  «       dk7  rt        d| j                  «       › �«      ‚|dk  rt        d|› �«      ‚| j                  d   |z  dk7  rt        d| j                  d   › d|› �«      ‚| j                  d|«      }|j                  «       j                  dd	¬
«      }t        j                  |j                  «      j                  }d|dz
  z  dz
  }|j                  |¬«      |z  }t        j                  |«      }|j                  t        j                  «      j                  | j                  d   d«      }|j                  t        j                  «      j                  | j                  d   d«      }|j                  dd«      }|j                  dd«      }d|z  dz
  }|j!                  |«      j#                  d«      j                  t        j$                  «      j                  |¬«      }	|	d d …dd d…f   dz  |	d d …d d d…f   z  j                  t        j&                  «      }
|j)                  «       j                  «       }|
|fS )Nr   rg   rV  zExpected w.dim() == 2, got zExpected groupsize > 1, got r•   z+Expected w.shape[-1] % groupsize == 0, got z % TrW  rY  g      !@)rq   rÜ   )r\  r]  rX  r[  rN  rè   Úabsr_  r[   Úfinforà   Úepsra  Ú
zeros_liker¯   Úfloat32rc  ÚaddÚint8rg  Úsqueeze)ri  rj  Ú	groupsizerl  rm  rx  ro  rq  rM  Úw_int8Ú	out_uint8rs  s               r7   Ú _group_quantize_tensor_symmetricr�  ?  s"  € ð 	
�‰�A�qÓ×$Ñ$Ó&€AØ‡u�uƒw�!‚|ÜÐ:¸1¿5¹5»7¸)ÐDÓEÐEØ�A‚~ÜÐ;¸I¸;ÐGÓHÐHØ‡w�wˆr�{�YÑ !Ò#ÜÐJÈ1Ï7É7ÐSUÉ;È-ÐWZÐ[dÐZeÐfÓgÐgà�y‰y˜˜YÓ'€HØ�l‰l‹n×!Ñ! a°Ð!Ó6€GÜ
�+‰+�g—m‘mÓ
$×
(Ñ
(€CØ�E˜A‘IÑ Ñ"€GØ�]‰]˜sˆ]Ó# gÑ-€FÜ×Ñ˜VÓ$€Eð �Y‰Y”u—}‘}Ó%×-Ñ-¨a¯g©g°a©j¸"Ó=€FØ�H‰H”U—]‘]Ó#×+Ñ+¨A¯G©G°A©J¸Ó;€EØ�^‰^˜B Ó"€FØ�M‰M˜"˜aÓ €EØ�‰h˜‰l€GØ�\‰\˜&Ó!×%Ñ% cÓ*×-Ñ-¬e¯j©jÓ9×?Ñ?ÀGÐ?ÓL€Fð š˜A˜D˜q˜D˜Ñ! QÑ&¨²±C°a°C°©Ñ8×<Ñ<¼U¿[¹[ÓI€Ià—~‘~Ó'×2Ñ2Ó4ÐàÐ&Ð&Ð&r9   c                 ó�  — | j                   }| j                  «       } t        j                  t        j                  «      j
                  }t        j                  | d¬«      \  }}t        j                  |t        j                  |«      «      }t        j                  |t        j                  |«      «      }	|j                  }
t        j                  | |	«      }	|	t        ||z
  «      dz  z  }t        j                  ||¬«      j                  | j                   «      }t        j                  |j                  «       t        j                  |
¬«      }| |j!                  d«      z  }t        j"                  |«      }||j!                  d«      z   }t        j                  |||«      j                  |«      }||j                  |«      |fS )Nrg   ©rX  rV  rY  )rà   r²   r•   )rà   r�   r[   rw  rz  rx  ÚaminmaxrZ  ry  rq   r²   ra  r¯   rM  rr   Úint64Ú	unsqueezerd  )ÚxÚ	quant_minÚ	quant_maxÚtarget_dtypeÚx_dtyperx  rn  rm  Úmin_val_negÚmax_val_posr²   rq  Úzero_pointsÚx_divÚx_roundÚx_zpÚquants                    r7   Ú!_dynamically_quantize_per_channelr“  a  sb  € ð �g‰g€GØ	�‰‹	€AÜ
�+‰+”e—m‘mÓ
$×
(Ñ
(€Cô —}‘} Q¨AÔ.Ñ€GˆWô —)‘)˜G¤U×%5Ñ%5°gÓ%>Ó?€KÜ—)‘)˜G¤U×%5Ñ%5°gÓ%>Ó?€KØ×Ñ€Fô —)‘)˜[˜L¨+Ó6€KØœE )¨iÑ"7Ó8¸1Ñ<Ñ=€Fä�[‰[˜ SÔ)×,Ñ,¨Q¯W©WÓ5€FÜ—+‘+˜k×.Ñ.Ó0¼¿¹ÈFÔS€Kð �× Ñ  Ó$Ñ$€EÜ�k‰k˜%Ó €GØ�[×*Ñ*¨2Ó.Ñ.€DÜ�K‰K˜˜i¨Ó3×6Ñ6°|ÓD€Eà�&—)‘)˜GÓ$ kÐ1Ð1r9   c            
       óz  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Z	 d!d„Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd"d„Zd„ Zd„ Z	 	 	 	 	 	 d#d„Z	 	 	 d$d„Zd%d„ZerRdeeeeef   f   deeeeeef   eeef   f   f   dededdf
d„Zdeeeeeee f   f   f   ddfd„Z!	 	 	 	 	 	 	 	 	 	 	 d&d„Z"e#jH                  fd „Z%ˆ xZ&S )'ÚQuantizationTestCasec                 óî  •— t         ‰| �  «        t        d«      D �cg c])  }t        j                  ddt        j
                  ¬«      g‘Œ+ c}| _        t        d«      D �cg c]O  }t        j                  ddt        j
                  ¬«      t        j                  dddt        j                  ¬«      g‘ŒQ c}| _	        t        d«      D �cg c]*  }t        j                  dddt        j
                  ¬«      g‘Œ, c}| _
        t        d«      D �cg c]+  }t        j                  ddddt        j
                  ¬«      g‘Œ- c}| _        t        d«      D �cg c],  }t        j                  dddddt        j
                  ¬«      g‘Œ. c}| _        t        d«      D �cg c]P  }t        j                  dddt        j
                  ¬«      t        j                  ddd	t        j                  ¬«      g‘ŒR c}| _        t        d«      D �cg c]Q  }t        j                  ddddt        j
                  ¬«      t        j                  ddd	t        j                  ¬«      g‘ŒS c}| _        t        d«      D �cg c]R  }t        j                  dddddt        j
                  ¬«      t        j                  ddd	t        j                  ¬«      g‘ŒT c}| _        | j                  | j                  | j                  d
œ| _        t"        j$                  t"        j&                  g| _        t"        j*                  t"        j$                  t"        j&                  g| _        y c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )NrV  r¬   râ   r   rg   )rV  é   rf   r“   ©rg   rV  r—  )ÚsuperÚsetUprk   r[   Úrandr�   r`   rã   rë   rt   Úimg_data_1dÚimg_data_2dÚimg_data_3dÚimg_data_1d_trainÚimg_data_2d_trainÚimg_data_3d_trainÚimg_data_dictr   ÚSTATICÚQATÚstatic_quant_typesÚDYNAMICÚall_quant_types)r6   rz   Ú	__class__s     €r7   rš  zQuantizationTestCase.setUpƒ  s¨  ø€ Ü‰‰ŒÜJOÐPQË(ÖSÀQœEŸJ™J q¨!´5·;±;Ô?Ò@ÒSˆŒô ˜1“Xö
ð
 ô —
‘
˜1˜a¤u§{¡{Ô3Ü—‘˜a  D´·
±
Ô;òò
ˆŒô PUÐUVËxÖXÈ!œUŸZ™Z¨¨1¨b¼¿¹ÔDÒEÒXˆÔäCHÈÃ8ö
Ø>?ŒU�Z‰Z˜˜1˜b "¬E¯K©KÔ8Ò9ò
ˆÔô EJÈ!ÃHö
Ø?@ŒU�Z‰Z˜˜1˜a  A¬U¯[©[Ô9Ò:ò
ˆÔô ˜1“Xö"
ð
 ô —
‘
˜1˜a ¬5¯;©;Ô7Ü—‘˜a  D´·
±
Ô;òò"
ˆÔô ˜1“Xö"
ð
 ô —
‘
˜1˜a  R¬u¯{©{Ô;Ü—‘˜a  D´·
±
Ô;òò"
ˆÔô ˜1“Xö"
ð
 ô —
‘
˜1˜a  A q´·±Ô<Ü—‘˜a  D´·
±
Ô;òò"
ˆÔð ×ÑØ×ÑØ×Ññ
ˆÔô $-×#3Ñ#3´Y·]±]Ð"CˆÔä )× 1Ñ 1´9×3CÑ3CÄYÇ]Á]ÐSˆÕùò] Tùò
ùò Yùò
ùò
ùò"
ùò"
ùò"
s3   �.MÁ AMÃ	/MÄ0MÅ1M#ÆAM(ÈAM-É-AM2c                 óp   — | j                  t        |d«      «       | j                  t        |d«      «       y)zˆChecks the module does not contain child
        modules for quantization preparation, e.g.
        quant, dequant and observer
        r’  ÚdequantN)ÚassertFalseÚhasattr©r6   rÕ   s     r7   ÚcheckNoPrepModulesz'QuantizationTestCase.checkNoPrepModulesµ  s.   € ð
 	×Ñœ ¨Ó1Ô2Ø×Ñœ ¨Ó3Õ4r9   c                 ó†   — | j                  t        |d«      «       |j                  «       D ]  }| j                  |«       Œ y)z*Checks the module does not contain qconfigÚqconfigN)r«  r¬  ÚchildrenÚcheckNoQconfig)r6   rÕ   Úchilds      r7   r²  z#QuantizationTestCase.checkNoQconfig½  s;   € à×Ñœ ¨Ó3Ô4à—_‘_Ó&ò 	'ˆEØ×Ñ Õ&ñ	'r9   c                 ó¦   — | j                  t        |d«      «       | j                  t        |d«      «       | j                  t        |d«      «       y)z€Checks the module contains child
        modules for quantization preparation, e.g.
        quant, dequant and observer
        rÕ   r’  rª  N)Ú
assertTruer¬  r­  s     r7   ÚcheckHasPrepModulesz(QuantizationTestCase.checkHasPrepModulesÄ  s=   € ð
 	�‰œ ¨Ó1Ô2Ø�‰œ ¨Ó0Ô1Ø�‰œ ¨	Ó2Õ3r9   Nc           	      óø  — |€
t        «       }|€i }|j                  di «      }d„ }t        |d«      r´|j                  �¨ ||«      r1t	        |t
        j                  j                  «      st        |«      |v st        |«      |v rbt	        |t
        j                  j                  j                  «      s4| j                  t        |d«      dt        t        |«      «      z   dz   «       t        |«      t        «       j                  «       vrrt        |«      |j                  «       vrVt	        |t         «      sE|j#                  «       D ]1  }t        |«      t        j$                  u rŒ| j'                  |||«       Œ3 yyyy)znChecks the module or module's leaf descendants
        have observers in preparation for quantization
        NÚ%float_to_observed_custom_module_classc                 óV   — d}| j                  «       D ]  \  }}|dk7  sŒ|dz  }Œ |dk(  S )Nr   Úactivation_post_processrg   )Únamed_children)rÕ   Úsubmodule_name_countrƒ   rz   s       r7   Úis_leaf_modulez;QuantizationTestCase.checkObservers.<locals>.is_leaf_moduleÜ  sE   € Ø#$Ð Ø!×0Ñ0Ó2ò .‘��aØÐ4Ó4Ø(¨AÑ-Ñ(ð.ð (¨1Ñ,Ð,r9   r°  rº  zmodule: z do not have observer)r!   Úgetr¬  r°  rJ   r[   rÊ   Ú
Sequentialr  ÚaoÚquantizationr   rµ  Ústrr    Úvaluesr   r±  ÚDropoutÚcheckObservers)r6   rÕ   Úpropagate_qconfig_listÚprepare_custom_config_dictÚ&float_to_observed_module_class_mappingr½  r³  s          r7   rÅ  z#QuantizationTestCase.checkObserversÍ  s\  € ð "Ð)Ü%IÓ%KÐ"Ø%Ð-Ø)+Ð&Ø1K×1OÑ1OØ3°Ró2
Ð.ò
	-ô �F˜IÔ&Ø—‘Ð*ñ # 6Ô*Ü& v¬u¯x©x×/BÑ/BÔCÜ˜V›Ð(>Ñ>ä˜“<Ð#IÑIä˜v¤u§x¡x×'<Ñ'<×'HÑ'HÔIà�O‰OÜ˜Ð 9Ó:ØœS¤ f£Ó.Ñ.Ð1HÑHôô �‹LÔ ?Ó A× HÑ HÓ JÑJÜ�V“Ð$J×$QÑ$QÓ$SÑSÜ˜v¤|Ô4àŸ™Ó*ò �Ü˜“;¤"§*¡*Ñ,ØØ×#Ñ#ØÐ1Ð3Mõñð 5ð Tð Kr9   c                 óÐ   — | j                  t        |j                  «      t        j                  «       | j                  t        |j
                  «      t        j                  «       y)zVChecks that mod has nn.Quantize and
        nn.DeQuantize submodules inserted
        N)ÚassertEqualr  r’  ÚnnqÚQuantizerª  Ú
DeQuantize©r6   Úmods     r7   ÚcheckQuantDequantz&QuantizationTestCase.checkQuantDequant  s=   € ð 	×Ñœ˜cŸi™i›¬#¯,©,Ô7Ø×Ñœ˜cŸk™kÓ*¬C¯N©NÕ;r9   c                 óŒ   — | j                  t        |j                  «      t        j                  «       | j                  |«       y)z¢Checks that mod has been swapped for an nnq.Linear
        module, the bias is qint32, and that the module
        has Quantize and DeQuantize submodules
        N)rÊ  r  rÕ   rË  ÚLinearrÐ  rÎ  s     r7   ÚcheckWrappedQuantizedLinearz0QuantizationTestCase.checkWrappedQuantizedLinear	  s/   € ð
 	×Ñœ˜cŸj™jÓ)¬3¯:©:Ô6Ø×Ñ˜sÕ#r9   c                 óV   — | j                  t        |«      t        j                  «       y rE   )rÊ  r  rË  rÒ  rÎ  s     r7   ÚcheckQuantizedLinearz)QuantizationTestCase.checkQuantizedLinear  s   € Ø×Ñœ˜c›¤C§J¡JÕ/r9   c                 ó¢   — | j                  t        |«      t        j                  «       | j                  |j                  j
                  |«       y©ú_Checks that mod has been swapped for an nnqd.Linear
        module, the bias is float.
        N)rÊ  r  ÚnnqdrÒ  Ú_packed_paramsrà   ©r6   rÏ  rà   s      r7   ÚcheckDynamicQuantizedLinearz0QuantizationTestCase.checkDynamicQuantizedLinear  s8   € ð 	×Ñœ˜c›¤D§K¡KÔ0Ø×Ñ˜×+Ñ+×1Ñ1°5Õ9r9   c                 ó¢   — | j                  t        |«      t        j                  «       | j                  |j                  j
                  |«       yr×  )rÊ  r  ÚnniqdÚ
LinearReLUrÚ  rà   rÛ  s      r7   ÚcheckDynamicQuantizedLinearReluz4QuantizationTestCase.checkDynamicQuantizedLinearRelu  s:   € ð 	×Ñœ˜c›¤E×$4Ñ$4Ô5Ø×Ñ˜×+Ñ+×1Ñ1°5Õ9r9   c                 óÜ  ‡ — |j                  «       }t        j                  «       }t        j                  ||«       |j                  d«       t        j                  |d¬«      }|j                  |«        ||Ž } ||Ž }ˆ fd„}	 |	||«       t        j                  «       }t        j                  ||«       |j                  d«       t        j                  |d¬«      }
 |
|Ž } |	||«       y )Nr   F)Úweights_onlyc                 ó  •— ‰j                  | d   |d   «       t        | d   t        «      r=‰j                  | d   d   |d   d   «       ‰j                  | d   d   |d   d   «       y ‰j                  | d   |d   «       y )Nr   rg   )rÊ  rJ   Útuple)Úref_outÚload_outr6   s     €r7   Úcheck_outputszEQuantizationTestCase.check_eager_serialization.<locals>.check_outputs.  s�   ø€ Ø×Ñ˜W Q™Z¨°!©Ô5Ü˜' !™*¤eÔ,Ø× Ñ  ¨¡¨A¡°¸±¸A±Ô?Ø× Ñ  ¨¡¨A¡°¸±¸A±Õ?à× Ñ  ¨¡¨X°a©[Õ9r9   )Ú
state_dictÚioÚBytesIOr[   ÚsaveÚseekÚloadÚload_state_dict)r6   Ú	ref_modelÚloaded_modelr‡  Ú
model_dictr  Úloaded_dictrå  ræ  rç  Úloadeds   `          r7   Úcheck_eager_serializationz.QuantizationTestCase.check_eager_serialization"  s¾   ø€ à×)Ñ)Ó+ˆ
Ü�J‰J‹LˆÜ�
‰
�:˜qÔ!Ø	�‰ˆqŒ	ä—j‘j °Ô7ˆØ×$Ñ$ [Ô1Ù˜Q�-ˆÙ Ð#ˆô	:ñ 	�g˜xÔ(Ü�J‰J‹LˆÜ�
‰
�9˜aÔ Ø	�‰ˆqŒ	ä—‘˜A¨EÔ2ˆÙ˜1�:ˆÙ�g˜xÕ(r9   c                 óð   — |j                  «       }|j                  «       }| j                  ||j                  «       z  t	        «       «       | j                  ||j                  «       z  t	        «       «       y rE   )Ú
get_weightÚget_biasrÊ  ÚkeysÚset)r6   rï  Úweight_keysÚ	bias_keysÚweightÚbiass         r7   Úcheck_weight_bias_apiz*QuantizationTestCase.check_weight_bias_api?  sX   € Ø×%Ñ%Ó'ˆØ×!Ñ!Ó#ˆØ×Ñ˜ v§{¡{£}Ñ4´c³eÔ<Ø×Ñ˜ T§Y¡Y£[Ñ0´#³%Õ8r9   c                 ó  — t         j                  dt         j                  di}| j                  t	        |«      |«       |j
                  D ]5  }| j                  |j                  j                  «       d   d   ||   «       Œ7 y)zbChecks that mod has been swapped for an nnqd.LSTM type
        module, the bias is float.
        Úquantized_dynamicÚquantized_fp16r   N)r[   rì   Úfloat16rÊ  r  Ú_all_weight_valuesÚparamÚ__getstate__©r6   rÏ  Úreference_module_typerà   Úwt_dtype_mapÚpacked_paramss         r7   ÚcheckDynamicQuantizedLSTMz.QuantizationTestCase.checkDynamicQuantizedLSTME  s|   € ô
 �K‰KÐ,Ü�M‰MÐ+ð
ˆð 	×Ñœ˜c›Ð$9Ô:Ø ×3Ñ3ò 	ˆMØ×ÑØ×#Ñ#×0Ñ0Ó2°1Ñ5°aÑ8¸,ÀuÑ:Mõñ	r9   c                 ój   — | j                  t        |«      t        j                  j                  «       y rE   )rÊ  r  r[   rÊ   rÒ  rÎ  s     r7   ÚcheckLinearz QuantizationTestCase.checkLinearS  s   € Ø×Ñœ˜c›¤E§H¡H§O¡OÕ4r9   c                 ó   — t         j                  dt         j                  di}| j                  t	        |«      |«       t        |d«      rE|j                  D ]5  }| j                  |j                  j                  «       d   d   ||   «       Œ7 yy)rØ  r   r  r  r   N)	r[   rì   r  rÊ  r  r¬  r  r  r  r  s         r7   ÚcheckDynamicQuantizedModulez0QuantizationTestCase.checkDynamicQuantizedModuleV  sŒ   € ô
 �K‰KÐ,Ü�M‰MÐ+ð
ˆð 	×Ñœ˜c›Ð$9Ô:Ü�3Ð,Ô-Ø!$×!7Ñ!7ò �Ø× Ñ Ø!×'Ñ'×4Ñ4Ó6°qÑ9¸!Ñ<¸lÈ5Ñ>Qõñð .r9   c                 óØ   — t         j                  j                  |«      }| j                  ||||«       t         j                  j	                  ||d   «      }| j                  ||||«       y r‡   )r[   rF  rH  Ú_checkScriptablerG  )r6   Úorig_modr`   Úcheck_save_loadÚscriptedÚtraceds         r7   ÚcheckScriptablez$QuantizationTestCase.checkScriptablee  sX   € Ü—9‘9×#Ñ# HÓ-ˆØ×Ñ˜h¨°*¸oÔNô —‘—‘ ¨:°a©=Ó9ˆØ×Ñ˜h¨°
¸OÕLr9   c                 ó  — | j                  |||«       t        j                  «       }t        j                  j                  ||«       |j                  d«       t        j                  j                  |«      }|r| j                  |||«       y y r‡   )Ú"_checkModuleCorrectnessAgainstOrigré  rê  r[   rF  rë  rì  rí  )r6   r  Ú
script_modr`   r  ÚbufferÚ
loaded_mods          r7   r  z%QuantizationTestCase._checkScriptablen  sl   € Ø×/Ñ/°¸*ÀjÔQô —‘“ˆÜ�	‰	�‰�z 6Ô*à�‰�AŒÜ—Y‘Y—^‘^ FÓ+ˆ
ñ Ø×3Ñ3°H¸jÈ*ÕUð r9   c                 óJ   — |D ]  } ||Ž } ||Ž }| j                  ||«       Œ  y rE   )rÊ  )r6   r  Útest_modr`   ra   Ú
ref_outputÚscripted_outputs          r7   r  z7QuantizationTestCase._checkModuleCorrectnessAgainstOrig|  s3   € Øò 	:ˆCÙ! 3˜ˆJÙ&¨˜nˆOØ×Ñ˜_¨jÕ9ñ	:r9   c
           	      ó  — |rt        dt        |«      «       dt        t        j                  j
                  j                  «      i}
|r|j                  «       }|rd|	€t        n|	i}
t        |||d   «      j                  «       }|rt        d|j                  «       i }i }dD ]`  }|r t        ||
|¬«      ||<    ||   |«      ||<   Œ%t        j                  |«      }t        ||
t        |gd|¬«      ||<    ||   |d   Ž ||<   Œb |r2t        d	|d
   j                  «       t        d|d   j                  «       |rM| j!                  |d
   |d   «       t#        «       j%                  |«      j'                  |d   j                  «       |d   S )NzTesting:rª   r   zinput graph:)TF)ÚdebugF)rÔ   r   zdebug graph:Tznon debug graph:)r®   rÂ  r   r[   r  r  ÚengineÚevalr   rJ  Úgraphr   ÚcopyÚdeepcopyr   rb   rÊ  r0   ÚcheckÚrun)r6   rÕ   ÚinputsÚquantized_oprI  r   r&  Ú	eval_modeÚdynamicr°  rØ   r_   ÚmodelsÚoutputsÚinputs_copys                  r7   ÚcheckGraphModeOpz%QuantizationTestCase.checkGraphModeOp‚  s�  € ñ Ü�*œc &›kÔ*ØÔ/´·±×0HÑ0H×0OÑ0OÓPÐQˆáØ—[‘[“]ˆFÙØ¸7¸?Õ 7ÐPWÐXˆLÜ! &¨'°6¸!±9Ó=×BÑBÓDˆÙÜ�. %§+¡+Ô.ØˆØˆØ"ò 	;ˆEÙÜ 4°U¸LÐPUÔ V��u‘à!. ¨¡¨vÓ!6�˜’ô #Ÿm™m¨FÓ3�Ü ,ØØ Ü%Ø �MØ!Øô!��u‘ð "/ ¨¡°°q±	Ð!:�˜’ð%	;ñ( Ü�. &¨¡,×"4Ñ"4Ô5ÜÐ$ f¨U¡m×&9Ñ&9Ô:áà×Ñ˜W T™]¨G°E©NÔ;ô ‹K×Ñ˜lÓ+×/Ñ/°°u±×0CÑ0CÔDà�e‰}Ðr9   c           	      ó<  — i }g }t        |j                  d¬«      «      }|j                  j                  D ]©  }d}	|j                  dk(  s|j                  dk(  r!t        |j                  |j                  «      }	n;|j                  dk(  r,t        |j                  t        ||j                     «      «      }	|	€Œ‚|j                  |	«       |	|v r||	xx   dz  cc<   Œ¥d||	<   Œ« |�#| j                  ||v dt        |«      z   d	z   «       |�©|j                  «       D ]–  \  }}
|
d
k7  ri| j                  ||v dt        |«      z   dz   «       | j                  ||   |
k(  dt        |«      z   dz   t        |
«      z   dz   t        ||   «      z   «       Œt| j                  ||vdt        |«      z   dz   «       Œ˜ |�id
}|D ]   }	|t        |«      k(  r y|	||   k(  sŒ|dz  }Œ" | j                  |t        |«      k(  d| j                  |d¬«      z   dz   t        |«      z   «       yy)a   Check if GraphModule contains the target node
        Args:
            graph_module: the GraphModule instance we want to check
            expected_node, expected_node_occurrence, expected_node_list:
               see docs for checkGraphModeFxOp
        F©Úremove_duplicateNr;   r@   rC   rg   znode:z not found in the graph moduler   zCheck failed for node:z
 not foundz Expected occurrence:z Found occurrence:z! expected no occurrence but foundzCheck failed for graph:)Ú	print_strzExpected ordered list:)ÚdictÚnamed_modulesr#  Únodesr4   r2   r5   r  rž   rµ  rÂ  Úitemsræ   ÚprintGraphModule)r6   Úgraph_moduleÚexpected_nodeÚexpected_node_occurrenceÚexpected_node_listÚnodes_in_graphÚ	node_listÚmodulesÚnoderŒ   Ú
occurrenceÚ	cur_indexs               r7   ÚcheckGraphModuleNodesz*QuantizationTestCase.checkGraphModuleNodes¼  sw  € ð ˆØˆ	Ü�|×1Ñ1À5Ð1ÓIÓJˆØ ×&Ñ&×,Ñ,ò 	*ˆDØˆAØ�w‰w˜/Ò)¨T¯W©W¸Ò-EÜ˜TŸW™W d§k¡kÓ2‘Ø—‘˜MÒ)Ü˜TŸW™W¤d¨7°4·;±;Ñ+?Ó&@ÓA�à‰}Ø× Ñ  Ô#Ø˜Ñ&Ø" 1Ó%¨Ñ*Ô%à()�N 1Ò%ð	*ð Ð$Ø�O‰OØ Ð/Øœ#˜mÓ,Ñ,Ð/OÑOôð
 $Ð/Ø-E×-KÑ-KÓ-Mò Ñ)�˜zØ ’?Ø—O‘OØ%¨Ð7Ø0´3°}Ó3EÑEÈÑTôð —O‘OØ& }Ñ5¸ÑCØ0Ü˜mÓ,ñ-à1ñ2ô ˜j›/ñ*ð /ñ	/ô
 ˜n¨]Ñ;Ó<ñ=õð —O‘OØ%¨^Ð;Ø0Ü˜mÓ,ñ-à=ñ>õð!ð. Ð)ØˆIØò #�Ø¤Ð$6Ó 7Ò7ÙØÐ*¨9Ñ5Ó5Ø ‘N‘Ið	#ð
 �O‰OØœSÐ!3Ó4Ñ4Ø)Ø×'Ñ'¨ÀÐ'ÓFñGà*ñ+ô Ð(Ó)ñ*õð *r9   c                 óì  — t        |j                  d¬«      «      }g }|j                  j                  D ]Ÿ  }dj	                  t        t        |j                  |j                  |j                  |j                  |j                  g«      «      }|j                  dk(  r'|dt        t        ||j                     «      «      z   z  }|j                  |«       Œ¡ dj	                  |«      }|rt        |«       |S )NFr1  rO   rC   z module type: ú
)r4  r5  r#  r6  ÚjoinÚmaprP   r4   rƒ   r5   r  r  r  rž   r®   )r6   r9  r3  r?  Ú
node_infosrŒ   Ú	node_infoÚstr_to_prints           r7   r8  z%QuantizationTestCase.printGraphModule  sÌ   € Ü�|×1Ñ1À5Ð1ÓIÓJˆØˆ
Ø×#Ñ#×)Ñ)ò 	)ˆAØŸ™¤¤T¨A¯D©D°!·&±&¸!¿(¹(ÀAÇFÁFÈAÏHÉHÐ+UÓ!VÓWˆIØ�t‰t�}Ò$ØÐ-´´T¸'À!Ç(Á(Ñ:KÓ5LÓ0MÑMÑM�	Ø×Ñ˜iÕ(ð		)ð
 —y‘y Ó,ˆÙÜ�,ÔØÐr9   Úmatched_subgraph_pairsÚexpected_typesÚgm_aÚgm_bÚreturnc                 ó$  — dt         dt        dt        t        z  fd„}| j	                  t        |«      t        |«      k(  dt        |«      › dt        |«      › �«       |j                  «       D ]¡  \  }}|\  }}	|\  }
}|	\  }}||   \  }} ||j                  |«      } ||j                  |«      } ||j                  |«      } ||j                  |«      }|
|u xr ||u xr
 ||u xr ||u }| j	                  |d|› d|
|||f› d	||||f› �«       Œ£ y
)aÛ  
            Verifies that the types specified in expected_types match
            the underlying objects pointed to by the nodes in matched_subgraph_pairs.

            An example successful test case:

              matched_subgraph_pairs = {'x0': (graph_a_conv_0_node, graph_b_conv_0_node)}
              expected_types = {'x0': (nn.Conv2d, nnq.Conv2d)}

            The function tests for key equivalence, and verifies types with
            instance checks.
            r@  ÚgmrO  c                 óÆ   — | j                   dk(  r!t        || j                  «      }t        |«      S | j                   dvrt	        d| j                   ›�«      ‚| j                  S )NrC   )r;   r@   z:Expected node.op in ('call_function', 'call_method'), got )r4   Úgetattrr5   r  r[  )r@  rQ  rÏ  s      r7   Ú_get_underlying_op_typez]QuantizationTestCase.assert_types_for_matched_subgraph_pairs.<locals>._get_underlying_op_type,  s\   € ð —7‘7˜mÒ+Ü! " d§k¡kÓ2�CÜ ›9Ð$à—w‘wÐ&FÑFÜ,Ð/iÐjn×jqÑjqÐitÐ-uÓvÐvØŸ;™;Ð&r9   z-Expected length of results to match, but got ú and zType mismatch at z: expected z, got N)	r-   r,   r/   rÂ  rµ  ræ   r7  Ú
start_nodeÚend_node)r6   rK  rL  rM  rN  rT  r¤   ÚvÚexpected_types_aÚexpected_types_bÚexp_type_start_aÚexp_type_end_aÚexp_type_start_bÚexp_type_end_bÚ
subgraph_aÚ
subgraph_bÚact_type_start_aÚact_type_start_bÚact_type_end_aÚact_type_end_bÚtypes_matchs                        r7   Ú'assert_types_for_matched_subgraph_pairsz<QuantizationTestCase.assert_types_for_matched_subgraph_pairs  s  € ð,	'Üð	'Ü +ð	'äœC‘ó	'ð �O‰OÜÐ*Ó+¬s°>Ó/BÑBØ?ÄÐDZÓ@[Ð?\Ð\aÔbeÐftÓbuÐavÐwôð '×,Ñ,Ó.ò ‘��1Ø56Ñ2Ð Ð"2Ø3CÑ0Ð  .Ø3CÑ0Ð  .Ø)?ÀÑ)BÑ&�
˜Já#:¸:×;PÑ;PÐRVÓ#WÐ Ù#:¸:×;PÑ;PÐRVÓ#WÐ Ù!8¸×9LÑ9LÈdÓ!S�Ù!8¸×9LÑ9LÈdÓ!S�à%Ð)9Ð9ò ;Ø'¨>Ð9ò;à)Ð-=Ð=ò;ð (¨>Ð9ð	 ð —‘ØØ'¨ s¨+Ð7GÈÐYiÐkyÐ6zÐ5{ð |Ø,¨nÐ>NÐP^Ð_Ð`ðbõñ!r9   Úact_compare_dictc                 ó(  — |j                  «       D �]þ  \  }}|j                  «       D �]ä  \  }}| j                  t        |«      dk(  d|› d�«       |j                  «       \  }}t	        t        ||   «      «      D �]Ž  }||   |   }	||   |   }
| j                  |	d   |	d   k(  d|› d|› d|› d�«       | j                  t        |	d   «      t        |
d   «      k(  d|› d|› d|› d	�«       |t
        j                  j                  k(  xr d
|	d   v xs d
|
d   v }|�sEt	        t        |	d   «      «      D �]*  }|	d   |   }|
d   |   }t        |t        j                  «      r;| j                  |j                  |j                  k(  d|› d|› d|› d�d|› d�z   «       Œit        |t        «      rE|d   }|d   }| j                  |j                  |j                  k(  d|› d|› d|› d�d|› d�z   «       Œ¾t        |t        «      st        dt        |«      › �«      ‚t        |«      dk7  rt        dt        |«      › �«      ‚t        |d   «      dk7  rt        dt        |d   «      › �«      ‚|d   j                  |d   j                  k7  r+t        d|d   j                  › d|d   j                  › �«      ‚|d   d   j                  |d   d   j                  k7  r1t        d|d   d   j                  › d|d   d   j                  › �«      ‚|d   d   j                  |d   d   j                  k7  s�Œüt        d|d   d   j                  › d|d   d   j                  › �«      ‚ |	d   }|
d   }|	d   }|
d   }|	d   t
        j                   j                  k(  r*| j                  ||k(  «       | j                  ||k(  «       �ŒE|	d   t
        j"                  j                  k(  s�Œg| j                  ||k7  «       | j                  ||k7  «       �Œ‘ �Œç �Œ y)a  
            Verifies that the act_compare_dict (output of Numeric Suite APIs) is valid:
            1. for each layer, results are recorded for two models
            2. number of seen tensors match
            3. shapes of each pair of seen tensors match
            rV  zLayer z) does not have exactly two model results.r  z, rU  z do not have the same type.rÃ  z- do not have the same number of seen Tensors.Úconv1dÚprev_node_target_typerO   zhave a shape mismatch at idx r©   r   zunhandled type z!Expected len(values_0) == 2, got rg   z$Expected len(values_0[1]) == 2, got z5Expected values_0[0].shape == values_1[0].shape, got z != z;Expected values_0[1][0].shape == values_1[1][0].shape, got z;Expected values_0[1][1].shape == values_1[1][1].shape, got Úref_node_nameÚprev_node_nameN)r7  rµ  ræ   rø  rk   r&   ÚWEIGHTÚvaluerJ   r[   ÚTensorrN  Úlisträ  r[  r  ÚNODE_OUTPUTÚ
NODE_INPUT)r6   rg  Ú
layer_nameÚresult_type_to_dataÚresult_typeÚ
layer_dataÚmodel_name_0Úmodel_name_1Úres_idxÚlayer_data_0Úlayer_data_1Úis_weight_functional_conv1dÚidxÚvalues_0Úvalues_1Úref_node_name_0Úref_node_name_1Úprev_node_name_0Úprev_node_name_1s                      r7   Úassert_ns_compare_dict_validz1QuantizationTestCase.assert_ns_compare_dict_validQ  sß  € ð 4D×3IÑ3IÓ3Kó VQÑ/�
Ð/Ø/B×/HÑ/HÓ/Jó UQÑ+�K Ø—O‘OÜ˜J›¨1Ñ,Ø   Ð,UÐVôð 2<·±Ó1BÑ.�L ,Ü#(¬¨Z¸Ñ-EÓ)FÓ#Gó OQ˜Ø'1°,Ñ'?ÀÑ'H˜Ø'1°,Ñ'?ÀÑ'H˜ØŸ™Ø(¨Ñ0°LÀÑ4HÑHØ$ Z L°°<°.ÀÀlÀ^ÐSnÐoôð
 Ÿ™Ü ¨XÑ 6Ó7¼3¸|ÈHÑ?UÓ;VÑVØ$ Z L°°<°.ÀÀlÀ^ð  TAð  Bôð (Ô+C×+JÑ+J×+PÑ+PÑPò à (¨LÐ9PÑ,QÐ Qò !UØ#+¨|Ð<SÑ/TÐ#Tð	 4ò  ;Ü',¬S°¸hÑ1GÓ-HÓ'Ió &* Ø+7¸Ñ+AÀ#Ñ+F Ø+7¸Ñ+AÀ#Ñ+F Ü#-¨h¼¿¹Ô#EØ$(§O¡OØ(0¯©¸(¿.¹.Ñ(HØ*0°°¸B¸|¸nÈEÐR^ÐQ_Ð_`Ð(aØ,IÈ#ÈÈaÐ*Pñ)Qõ%&ô
 &0°¼$Ô%?Ø/7¸©{ HØ/7¸©{ HØ$(§O¡OØ(0¯©¸(¿.¹.Ñ(HØ*0°°¸B¸|¸nÈEÐR^ÐQ_Ð_`Ð(aØ,IÈ#ÈÈaÐ*Pñ)Qõ%&ô ,6°hÄÔ+FÜ.<¸ÌtÐT\Ë~ÐN^Ð=_Ó.`Ð(`Ü'*¨8£}¸Ò'9Ü.<Ð?`ÔadÐemÓanÐ`oÐ=pÓ.qÐ(qÜ'*¨8°A©;Ó'7¸1Ò'<Ü.<Ð?cÔdgÐhpÐqrÑhsÓdtÐcuÐ=vÓ.wÐ(wØ'/°¡{×'8Ñ'8¸HÀQ¹K×<MÑ<MÒ'MÜ.<ð/3Ø3;¸A±;×3DÑ3DÐ2EÀTÈ(ÐSTÉ+×J[ÑJ[ÐI\ð-^ó/*ð )*ð (0°¡{°1¡~×';Ñ';¸xÈ¹{È1¹~×?SÑ?SÒ'SÜ.<ð/3Ø3;¸A±;¸q±>×3GÑ3GÐ2HÈÈXÐVWÉ[ÐYZÉ^×MaÑMaÐLbð-dó/*ð )*ð (0°¡{°1¡~×';Ñ';¸xÈ¹{È1¹~×?SÑ?SÔ'SÜ.<ð/3Ø3;¸A±;¸q±>×3GÑ3GÐ2HÈÈXÐVWÉ[ÐYZÉ^×MaÑMaÐLbð-dó/*ð )*ðG&*ðR +7°Ñ*G˜Ø*6°Ñ*G˜Ø+7Ð8HÑ+IÐ(Ø+7Ð8HÑ+IÐ(à(¨Ñ0Ü7×CÑC×IÑIòJð !ŸO™O¨OÐ?OÑ,OÔPØ ŸO™O¨OÐ?OÑ,OÖPà(¨Ñ0Ü7×BÑB×HÑHôIð !ŸO™O¨OÐ?OÑ,OÔPØ ŸO™O¨OÐ?OÑ,OÖPò_OQòUQñVQr9   c                 óB  — t        |«      t        u r|d   }|t        j                  k(  r>t	        t
        j                  j                  j                  «      }|j                  «        n€|t        j                  k(  r>t        t
        j                  j                  j                  «      }|j                  «        n/t        }t        «       j                  |«      }|j                  «        |t        j                  k(  rt         }nt"        }|	�Jt        |	«      t        t$        fvrt'        d«      ‚t)        |	t        «      r|	}nt        j*                  |	«      } ||||||¬«      }|t        j,                  k7  r ||Ž  |r8t/        «        t/        d|«       t/        d|«       t/        «        t/        d|«       | j1                  ||
||«       t3        j4                  |«      }t7        t3        j4                  |«      «      }t9        t3        j4                  |«      «      } ||Ž } ||Ž }t3        j4                  |«      }t3        j4                  |«      }|r|n|}|r1t/        «        t/        d|«       | j;                  |«       t/        «        | j1                  ||||«       |||||dœS )	a0  Quantizes model with graph mode quantization on fx and check if the
            quantized model contains the quantized_node

            Args:
                model: floating point torch.nn.Module
                inputs: one positional sample input arguments for model
                expected_node: NodeSpec
                    e.g. NodeSpec.call_function(torch.quantize_per_tensor)
                expected_node_occurrence: a dict from NodeSpec to
                    expected number of occurrences (int)
                    e.g. {NodeSpec.call_function(torch.quantize_per_tensor) : 1,
                            NodeSpec.call_method('dequantize'): 1}
                expected_node_list: a list of NodeSpec, used to check the order
                    of the occurrence of Node
                    e.g. [NodeSpec.call_function(torch.quantize_per_tensor),
                            NodeSpec.call_module(nnq.Conv2d),
                            NodeSpec.call_function(F.hardtanh_),
                            NodeSpec.call_method('dequantize')]
                is_reference: if True, enables reference mode
                print_debug_info: if True, prints debug info
                custom_qconfig_dict: overrides default qconfig_dict
                prepare_expected_node: same as expected_node, but for prepare
                prepare_expected_node_occurrence: same as
                    expected_node_occurrence, but for prepare
                prepare_expected_node_list: same as expected_node_list, but
                    for prepare

            Returns:
                A dictionary with the following structure:
               {
                   "prepared": ...,  # the prepared model
                   "quantized": ...,  # the quantized non-reference model
                   "quantized_reference": ...,  # the quantized reference model
                   "result": ...,  # the result for either quantized or
                                   # quantized_reference model depending on the
                                   # is_reference argument
               }
            r   z8custom_qconfig_dict should be a QConfigMapping or a dict)Úexample_inputsÚprepare_custom_configÚbackend_configzquant type:
zoriginal model:
zprepared model:
zquantized model:
)rÏ   r  Úquantized_referenceÚquantized_outputÚquantized_reference_output)r  rp  r   r¤  r   r[   r  r  r!  rl   r£  r   r"  r   r   Ú
set_globalr+   r*   r4  r[  rJ   Ú	from_dictr¦  r®   rC  r$  r%  r(   r)   r8  )r6   r_   r(  Ú
quant_typer:  r;  r<  Úis_referenceÚprint_debug_infoÚcustom_qconfig_dictÚprepare_expected_nodeÚ prepare_expected_node_occurrenceÚprepare_expected_node_listr‡  rˆ  Úqconfig_mappingr°  ÚpreparerÏ   Úprepared_copyÚqgraphÚqgraph_referenceÚresultÚresult_referenceÚqgraph_copyÚqgraph_reference_copyÚqgraph_to_checks                              r7   ÚcheckGraphModeFxOpz'QuantizationTestCase.checkGraphModeFxOp³  sI  € ôp �F‹|œtÑ#Ø ™�àœYŸ]™]Ò*Ü"AÜ—N‘N×,Ñ,×3Ñ3ó#�ð —‘•Øœy×/Ñ/Ò/Ü"=Ü—N‘N×,Ñ,×3Ñ3ó#�ð —
‘
•ä1�Ü"0Ó"2×"=Ñ"=¸gÓ"F�Ø—
‘
”àœYŸ]™]Ò*Ü(‘ä$�ð #Ð.ÜÐ+Ó,´^ÄTÐ4JÑJÜ(Ð)cÓdÐdÜÐ1´>ÔBØ&9‘Oä&4×&>Ñ&>Ð?RÓ&S�OÙØØØ%Ø&;Ø-ôˆHð œY×.Ñ.Ò.Ù˜&Ñ!áÜ”Ü�o zÔ2ÜÐ)¨5Ô1Ü”ÜÐ)¨8Ô4à×&Ñ&ØØ%Ø0Ø*ô	ô !ŸM™M¨(Ó3ˆMÜ¤§¡¨hÓ 7Ó8ˆFÜ6´t·}±}ÀXÓ7NÓOÐÙ˜V�_ˆFÙ/°Ð8ÐÜŸ-™-¨Ó/ˆKÜ$(§M¡MÐ2BÓ$CÐ!á2>Ñ.ÀFˆOÙÜ”ÜÐ*¨OÔ<Ø×%Ñ% oÔ6Ü”Ø×&Ñ&ØØØ(Ø"ô	ð *Ø(Ø'<Ø$*Ø.>ñð r9   c	                 óš  — |r||g}	n|g}	|j                  «       }
t        j                  «       }t        j                  |
|«       |j                  d«       t        j                  |«      }t        j                  j                  j                  }|
D ]ˆ  }t        |
|   t        j                  j                  «      sŒ+t        ||   t        j                  j                  «      st        d|›d�«      ‚ ||
|   «      } |||   «      }| j                  ||«       ŒŠ |rt        j                   ||dd|¬«      }nt        j"                  |||¬«      }| j%                  |||	«       |j'                  |«       | j                   ||j(                  j*                  «       ||j(                  j*                  «      «       | j-                  ||	gd¬«       |r%t        j.                  j!                  ||dd	d¬
«      }n!t        j.                  j#                  ||¬«      }|r<t1        j2                  |t        j4                  d¬«      }t7        t8        |¬«      |_        t=        |«        ||	Ž  |r"t        j                   j?                  |«      }d}n!t        j"                  j?                  |«      }d} ||	Ž  | jA                  |tC        |«      v «       y )Nr   zExpected loaded_dict[z] to be ScriptObjectTrs   )Únum_embeddingsÚembedding_dimÚinclude_last_offsetÚmoderà   )r¡  r¢  rà   )r  F©r¡  r¢  r£  Úscale_grad_by_freqr¤  ©r¡  r¢  )rà   ÚqschemeÚch_axis©Ú
activationrü  ÚQuantizedEmbeddingBagÚQuantizedEmbedding)"rè  ré  rê  r[   rë  rì  rí  r4  r  Úembedding_bag_unpackrJ   Ú_CÚScriptObjectr[  rÊ  rË  ÚEmbeddingBagÚ	Embeddingrô  rî  rÚ  Ú_packed_weightr  rÊ   r   Ú	with_argsÚ per_channel_affine_float_qparamsr   r   r°  rÙ   Ú
from_floatrµ  rÂ  )r6   Úqembr¡  r¢  ÚindicesÚoffsetsÚset_qconfigÚ
is_emb_bagrà   r(  Úemb_dictr  rò  Úembedding_unpackÚkeyÚ
emb_weightÚloaded_weightÚloaded_qembÚfloat_embeddingÚfloat_qparams_observerÚq_embeddingbagÚexpected_names                         r7   ÚcheckEmbeddingSerializationz0QuantizationTestCase.checkEmbeddingSerialization>  sˆ  € ñ Ø˜wÐ'‰Fà�YˆFØ—?‘?Ó$ˆÜ�J‰J‹LˆÜ�
‰
�8˜QÔØ	�‰ˆqŒ	Ü—j‘j “mˆÜ Ÿ9™9×.Ñ.×CÑCÐàò 	<ˆCÜ˜( 3™-¬¯©×)>Ñ)>Õ?Ü! +¨cÑ"2´E·H±H×4IÑ4IÔJÜ(Ð+@ÀÀÐG[Ð)\Ó]Ð]Ù-¨h°s©mÓ<�
Ù 0°¸SÑ1AÓ B�Ø× Ñ  ¨]Õ;ð	<ñ Ü×*Ñ*Ø-Ø+Ø$(ØØô‰Kô Ÿ-™-Ø-¸]ÐRWôˆKð 	×&Ñ& t¨[¸&ÔAà×#Ñ# KÔ0Ø×ÑÙ˜T×0Ñ0×?Ñ?Ó@Ù˜[×7Ñ7×FÑFÓGô	
ð 	×Ñ˜T F 8¸TÐÔBñ Ü#Ÿh™h×3Ñ3Ø-Ø+Ø$(Ø#(Øð 4ó ‰Oô $Ÿh™h×0Ñ0Ø-¸]ð 1ó ˆOñ Ü%=×%GÑ%GØ¤U×%KÑ%KÐUVô&Ð"ô '.Ü9ÐBXô'ˆOÔ#ô 	˜Ô(á˜Ñ ÙÜ ×-Ñ-×8Ñ8¸ÓIˆNØ3‰Mä Ÿ]™]×5Ñ5°oÓFˆNØ0ˆMá˜Ñà�‰˜¬¨^Ó)<Ð<Õ=r9   ©NN)F)FFTTFN)NNN©T)NNNFFNNNNNN)'rR   rS   rT   rš  r®  r²  r¶  rÅ  rÐ  rÓ  rÕ  rÜ  rà  rô  rþ  r
  r  r  r  r  r  r/  rC  r8  ÚHAS_FXr4  rÂ  rä  r'   r/   r,   rf  r.   r„  rŸ  r[   rå   rÆ  Ú__classcell__©r¨  s   @r7   r•  r•  ‚  s‡  ø„ ô0Tòd5ò'ò4ð OSó3òj<ò$ò0ò:ò:ò)ò:9òò5òóMòVò:ð ØØØØØó8ðz Ø!%ØóIóVñ ð9	à$(¨¨e°JÀ
Ð4JÑ.KÐ)KÑ$Lð9	ð !Ø�U˜5 ¨8Ð!3Ñ4°e¸HÀhÐ<NÑ6OÐOÑPÐPñð9	ð ð9	ð ð9	ð ó9	ðv`	Qà" 3¨¨S°$°s¸C°x±.Ð-@Ñ(AÐ#AÑBð`	Qð ó`	QðN Ø%)Ø#ØØ"Ø $Ø"&Ø-1Ø'+Ø"&ØóI	ðh �l‰l÷Y>r9   r•  c                   ó’   — e Zd Zdeej
                  j                     fd„Zdej
                  j                  dej                  fd„Z	y)ÚQuantizationLiteTestCaseÚmodel_classc                 óæ   — d}t        |«      5  t        j                  j                  j	                  |«      } |di |¤Ž}t        |t        | j                  g«      }d d d «       |S # 1 sw Y   S xY w)Nr'  rW   )r#   r[   rÀ  rÁ  r   r   rb   r`   )r6   rÎ  r  Úqenginer°  r_   s         r7   Ú_create_quantized_modelz0QuantizationLiteTestCase._create_quantized_model›  sm   € àˆÜ& wÓ/ñ 	Jä—h‘h×+Ñ+×?Ñ?ÀÓHˆGÙÑ) &Ñ)ˆEÜ˜UÔ$5¸¿¹Ð7HÓIˆE÷		Jð ˆ÷	Jð ˆús   ŽAA&Á&A0r_   Úinputc                 ó”  — d}t        |«      5  t        j                  j                  |«      } ||«      }d}t	        d|dz   «      D ]Î  }	 t        j                  |j                  «       «      }|j                  d«       t        |«      }	 |	|«      }
t        j                  j                  ||
«       |	j                  |«      }t        j                  j                  ||«       |	j                  d|«      }t        j                  j                  ||«        n d d d «       y # t        $ r}||k(  r|‚Y d }~Œïd }~ww xY w# 1 sw Y   y xY w)Nr'  r¬   rg   r   Úforward)r#   r[   rF  rH  rk   ré  rê  Ú$_save_to_buffer_for_lite_interpreterrì  r"   ÚtestingÚassert_closerÔ  Ú
run_methodr[  )r6   r_   rÒ  rÐ  Úscript_moduleÚscript_module_resultÚ	max_retryÚretryr  Úmobile_moduleÚmobile_module_resultÚmobile_module_forward_resultÚmobile_module_run_method_resultÚes                 r7   Ú_compare_script_and_mobilez3QuantizationLiteTestCase._compare_script_and_mobile¦  sF  € àˆÜ& wÓ/ñ #	Ü!ŸI™I×,Ñ,¨UÓ3ˆMÙ#0°Ó#7Ð àˆIÜ˜q )¨a¡-Ó0ò �ð!ÜŸZ™ZØ%×JÑJÓLó�Fð —K‘K ”NÜ$>¸vÓ$F�Má+8¸Ó+?Ð(ä—M‘M×.Ñ.Ø,Ð.Bôð 4A×3HÑ3HÈÓ3OÐ0Ü—M‘M×.Ñ.Ø,Ð.Jôð 7D×6NÑ6NØ! 5ó7Ð3ô —M‘M×.Ñ.Ø,Ð.Môñ ð=÷#	ð #	øô< &ò !Ø 	Ò)Ø˜ä ûð	!ú÷=#	ð #	ús6   Ž<D>ÁC
D!ÄD>Ä!	D;Ä*D6Ä1D>Ä6D;Ä;D>Ä>EN)
rR   rS   rT   r  r[   rÊ   ÚModulerÑ  ro  râ  rW   r9   r7   rÍ  rÍ  š  s:   „ ð	°4¸¿¹¿¹Ñ3Hó 	ð&°·±·±ð &ÈÏÉô &r9   rÍ  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚSingleLayerLinearModelrO  c                 ó¨   •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        y ©Nr¬   râ   )r™  r8   r[   rÊ   rÒ  r¯   r�   Úfc1©r6   r¨  s    €r7   r8   zSingleLayerLinearModel.__init__Ó  s6   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆ�r9   c                 ó(   — | j                  |«      }|S rE   ©rè  ©r6   r‡  s     r7   rÔ  zSingleLayerLinearModel.forward×  ó   € Ø�H‰H�Q‹KˆØˆr9   .c                 ó0   — t        j                  dd«      fS ©Nrg   r¬   ©r[   r›  rG   s    r7   Úget_example_inputsz)SingleLayerLinearModel.get_example_inputsÛ  ó   € Ü—
‘
˜1˜aÓ Ð"Ð"r9   ©rO  N©	rR   rS   rT   r8   rÔ  rä  r.   rñ  rÊ  rË  s   @r7   rå  rå  Ò  s!   ø„ õ?òð# E¨#¨s¨(¡O÷ #r9   rå  c                   ó<   ‡ — e Zd Zdˆ fd„	Zd„ Zdeedf   fd„Zˆ xZS )ÚAnnotatedSingleLayerLinearModelc                 ó  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        t        j                  j                  dd«      j                  t        j                  ¬«      «      | _        y rç  )r™  r8   r[   rÀ  rÁ  r   r°  r   rÊ   rÒ  r¯   r�   rè  ©r6   rÐ  r¨  s     €r7   r8   z(AnnotatedSingleLayerLinearModel.__init__à  sW   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ó KÓLˆ�r9   c                 ó(   — | j                  |«      }|S rE   rë  rì  s     r7   rÔ  z'AnnotatedSingleLayerLinearModel.forwardå  rí  r9   rO  .c                 ó0   — t        j                  dd«      fS rï  rð  rG   s    r7   rñ  z2AnnotatedSingleLayerLinearModel.get_example_inputsé  rò  r9   ©r  rô  rË  s   @r7   rö  rö  ß  s"   ø„ õMò
ð# E¨#¨s¨(¡O÷ #r9   rö  c                   ó<   ‡ — e Zd Zdˆ fd„	Zd„ Zdeedf   fd„Zˆ xZS )ÚSingleLayerLinearDynamicModelc                 ó  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        y rç  )r™  r8   r[   rÀ  rÁ  r   r°  rÊ   rÒ  r¯   r�   rè  rø  s     €r7   r8   z&SingleLayerLinearDynamicModel.__init__î  sR   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆ�r9   c                 ó(   — | j                  |«      }|S rE   rë  rì  s     r7   rÔ  z%SingleLayerLinearDynamicModel.forwardó  rí  r9   rO  .c                 ó0   — t        j                  dd«      fS rï  rð  rG   s    r7   rñ  z0SingleLayerLinearDynamicModel.get_example_inputs÷  rò  r9   rû  rô  rË  s   @r7   rý  rý  í  s!   ø„ õ?ò
ð# E¨#¨s¨(¡O÷ #r9   rý  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearAddModelrO  c                 ó.  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        y ©Nr¬   é   râ   ©	r™  r8   r[   rÊ   rÒ  r¯   r�   rè  Úfc2ré  s    €r7   r8   zLinearAddModel.__init__ü  ó^   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆ�r9   c                 óv   — | j                  |«      }t        j                  |d«      }| j                  |«      }|S ©Nr¬   )rè  r[   r{  r  rì  s     r7   rÔ  zLinearAddModel.forward  s0   € Ø�H‰H�Q‹KˆÜ�I‰I�a˜‹OˆØ�H‰H�Q‹KˆØˆr9   .c                 ó0   — t        j                  dd«      fS rï  rð  rG   s    r7   rñ  z!LinearAddModel.get_example_inputs  rò  r9   ró  rô  rË  s   @r7   r  r  û  s!   ø„ õ?ò
ð# E¨#¨s¨(¡O÷ #r9   r  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚRNNDynamicModelc                 óZ  •— t         ‰| �  «        t        | _        |dk(  rCt        j
                  j                  dd«      j                  t        j                  ¬«      | _	        |dk(  rDt        j
                  j                  dd«      j                  t        j                  ¬«      | _	        y y )NÚGRUrV  râ   ÚLSTM)r™  r8   r   r°  r[   rÊ   r  r¯   r�   rÏ  r  ©r6   Úmod_typer¨  s     €r7   r8   zRNNDynamicModel.__init__  sz   ø€ Ü‰ÑÔÜ.ˆŒØ�uÒÜ—x‘x—|‘| A qÓ)×,Ñ,´5·;±;Ð,Ó?ˆDŒHØ�vÒÜ—x‘x—}‘} Q¨Ó*×-Ñ-´E·K±KÐ-Ó@ˆD�Hð r9   c                 ó(   — | j                  |«      }|S rE   ©rÏ  rì  s     r7   rÔ  zRNNDynamicModel.forward  rí  r9   ©rR   rS   rT   r8   rÔ  rÊ  rË  s   @r7   r  r    s   ø„ ôAör9   r  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚRNNCellDynamicModelc                 ó‚  •— t         ‰| �  «        t        | _        |dk(  rCt        j
                  j                  dd«      j                  t        j                  ¬«      | _	        |dk(  rCt        j
                  j                  dd«      j                  t        j                  ¬«      | _	        |dk(  rEt        j
                  j                  ddd¬«      j                  t        j                  ¬«      | _	        |dk(  rFt        j
                  j                  ddd	¬«      j                  t        j                  ¬«      | _	        y y )
NÚGRUCellrV  râ   ÚLSTMCellÚRNNReLUÚrelu)ÚnonlinearityÚRNNTanhÚtanh)r™  r8   r   r°  r[   rÊ   r  r¯   r�   rÏ  r  ÚRNNCellr  s     €r7   r8   zRNNCellDynamicModel.__init__  sì   ø€ Ü‰ÑÔÜ.ˆŒØ�yÒ Ü—x‘x×'Ñ'¨¨1Ó-×0Ñ0´u·{±{Ð0ÓCˆDŒHØ�zÒ!Ü—x‘x×(Ñ(¨¨AÓ.×1Ñ1¼¿¹Ð1ÓDˆDŒHØ�yÒ Ü—x‘x×'Ñ'¨¨1¸6Ð'ÓB×EÑEÌEÏKÉKÐEÓXˆDŒHØ�yÒ Ü—x‘x×'Ñ'¨¨1¸6Ð'ÓB×EÑEÌEÏKÉKÐEÓXˆD�Hð !r9   c                 ó(   — | j                  |«      }|S rE   r  rì  s     r7   rÔ  zRNNCellDynamicModel.forward&  rí  r9   r  rË  s   @r7   r  r    s   ø„ ô
Yör9   r  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚLSTMwithHiddenDynamicModelc                 ó  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        y )NrV  râ   )r™  r8   r[   rÀ  rÁ  r   r°  rÊ   r  r¯   r�   Úlstmrø  s     €r7   r8   z#LSTMwithHiddenDynamicModel.__init__,  sR   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H—M‘M ! QÓ'×*Ñ*´·±Ð*Ó=ˆ�	r9   c                 ó4   — | j                  ||«      \  }}||fS rE   )r%  )r6   r‡  Úhids      r7   rÔ  z"LSTMwithHiddenDynamicModel.forward1  s   € Ø—‘˜1˜cÓ"‰ˆˆ3Ø�#ˆvˆr9   rû  r  rË  s   @r7   r#  r#  +  s   ø„ õ>ö
r9   r#  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )Ú	ConvModelrO  c                 ó®   •— t         ‰| �  «        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        y ©Nr—  r¬   F©rý  râ   )r™  r8   r[   rÊ   ÚConv2dr¯   r�   Úconvré  s    €r7   r8   zConvModel.__init__7  s<   ø€ Ü‰ÑÔÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆ�	r9   c                 ó(   — | j                  |«      }|S rE   ©r.  rì  s     r7   rÔ  zConvModel.forward;  ó   € Ø�I‰I�a‹LˆØˆr9   .c                 ó4   — t        j                  dddd«      fS ©Nrg   r—  r¬   rð  rG   s    r7   rñ  zConvModel.get_example_inputs?  ó   € Ü—
‘
˜1˜a  AÓ&Ð(Ð(r9   ró  rô  rË  s   @r7   r)  r)  6  s"   ø„ õOòð) E¨#¨s¨(¡O÷ )r9   r)  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvTransposeModelrO  c                 ó®   •— t         ‰| �  «        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        y r+  )r™  r8   r[   rÊ   ÚConvTranspose2dr¯   r�   r.  ré  s    €r7   r8   zConvTransposeModel.__init__D  s?   ø€ Ü‰ÑÔÜ—H‘H×,Ñ,¨Q°°1¸5Ð,ÓA×DÑDÌ5Ï;É;ÐDÓWˆ�	r9   c                 ó(   — | j                  |«      }|S rE   r0  rì  s     r7   rÔ  zConvTransposeModel.forwardH  r1  r9   .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  z%ConvTransposeModel.get_example_inputsL  r4  r9   ró  rô  rË  s   @r7   r6  r6  C  s"   ø„ õXòð) E¨#¨s¨(¡O÷ )r9   r6  c                   ó:   ‡ — e Zd Zˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚAnnotatedConvModelc                 óF  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        j                  j                  dddd¬«      j                  t        j                  ¬«      | _        t        «       | _        t        «       | _        y r+  )r™  r8   r[   rÀ  rÁ  r   r°  rÊ   r-  r¯   r�   r.  r   r’  r   rª  rø  s     €r7   r8   zAnnotatedConvModel.__init__Q  sj   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü“[ˆŒ
Ü"“}ˆ�r9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   ©r’  r.  rª  rì  s     r7   rÔ  zAnnotatedConvModel.forwardX  ó.   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�L‰L˜‹OˆØˆr9   rO  .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  z%AnnotatedConvModel.get_example_inputs^  r4  r9   rô  rË  s   @r7   r<  r<  P  ó!   ø„ ô%òð) E¨#¨s¨(¡O÷ )r9   r<  c                   ó:   ‡ — e Zd Zˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚAnnotatedConvTransposeModelc                 óF  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        j                  j                  dddd¬«      j                  t        j                  ¬«      | _        t        «       | _        t        «       | _        y r+  )r™  r8   r[   rÀ  rÁ  r   r°  rÊ   r8  r¯   r�   r.  r   r’  r   rª  rø  s     €r7   r8   z$AnnotatedConvTransposeModel.__init__c  sm   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H×,Ñ,¨Q°°1¸5Ð,ÓA×DÑDÌ5Ï;É;ÐDÓWˆŒ	Ü“[ˆŒ
Ü"“}ˆ�r9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   r?  rì  s     r7   rÔ  z#AnnotatedConvTransposeModel.forwardj  r@  r9   rO  .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  z.AnnotatedConvTransposeModel.get_example_inputsp  r4  r9   rô  rË  s   @r7   rD  rD  b  rB  r9   rD  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvBnModelrO  c                 ó2  •— t         ‰| �  «        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        t        j                  j                  d«      j                  t        j                  ¬«      | _	        y r+  )
r™  r8   r[   rÊ   r-  r¯   r�   r.  ÚBatchNorm2dÚbnré  s    €r7   r8   zConvBnModel.__init__u  sd   ø€ Ü‰ÑÔÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ó?ˆ�r9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   ©r.  rL  rì  s     r7   rÔ  zConvBnModel.forwardz  ó!   € Ø�I‰I�a‹LˆØ�G‰G�A‹JˆØˆr9   .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  zConvBnModel.get_example_inputs  r4  r9   ró  rô  rË  s   @r7   rI  rI  t  s"   ø„ õ@ò
ð
) E¨#¨s¨(¡O÷ )r9   rI  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚAnnotatedConvBnModelrO  c                 ó„  •— t         ‰| �  «        t        | _        t        j
                  j                  dddd¬«      j                  t        j                  ¬«      | _	        t        j
                  j                  d«      j                  t        j                  ¬«      | _        t        «       | _        t        «       | _        y r+  )r™  r8   r   r°  r[   rÊ   r-  r¯   r�   r.  rK  rL  r   r’  r   rª  ré  s    €r7   r8   zAnnotatedConvBnModel.__init__„  s}   ø€ Ü‰ÑÔÜ&ˆŒÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ó?ˆŒÜ“[ˆŒ
Ü"“}ˆ�r9   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S rE   )r’  r.  rL  rª  rì  s     r7   rÔ  zAnnotatedConvBnModel.forwardŒ  s;   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�G‰G�A‹JˆØ�L‰L˜‹OˆØˆr9   .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  z'AnnotatedConvBnModel.get_example_inputs“  r4  r9   ró  rô  rË  s   @r7   rR  rR  ƒ  s!   ø„ õ%òð) E¨#¨s¨(¡O÷ )r9   rR  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvBnReLUModelrO  c                 óh  •— t         ‰| �  «        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        t        j                  j                  d«      j                  t        j                  ¬«      | _	        t        j                  d¬«      | _        y ©Nr—  r¬   Fr,  râ   TrÓ   )r™  r8   r[   rÊ   r-  r¯   r�   r.  rK  rL  ÚReLUr  ré  s    €r7   r8   zConvBnReLUModel.__init__˜  st   ø€ Ü‰ÑÔÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ó?ˆŒÜ—G‘G DÔ)ˆ�	r9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   ©r.  rL  r  rì  s     r7   rÔ  zConvBnReLUModel.forwardž  s.   € Ø�I‰I�a‹LˆØ�G‰G�A‹JˆØ�I‰I�a‹LˆØˆr9   .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  z"ConvBnReLUModel.get_example_inputs¤  r4  r9   ró  rô  rË  s   @r7   rW  rW  —  s!   ø„ õ*òð) E¨#¨s¨(¡O÷ )r9   rW  c                   óB   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zdeedf   fd„Zˆ xZ	S )ÚAnnotatedConvBnReLUModelc                 ó   •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        j                  j                  dddd¬«      j                  t        j                  ¬«      | _        t        j                  j                  d«      j                  t        j                  ¬«      | _        t        j                  d¬«      | _        t!        «       | _        t%        «       | _        y rY  )r™  r8   r[   rÀ  rÁ  r   r°  rÊ   r-  r¯   r�   r.  rK  rL  rZ  r  r   r’  r   rª  rø  s     €r7   r8   z!AnnotatedConvBnReLUModel.__init__©  s¢   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ó?ˆŒÜ—G‘G DÔ)ˆŒ	Ü“[ˆŒ
Ü"“}ˆ�r9   c                 ó°   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|S rE   )r’  r.  rL  r  rª  rì  s     r7   rÔ  z AnnotatedConvBnReLUModel.forward²  sH   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�G‰G�A‹JˆØ�I‰I�a‹LˆØ�L‰L˜‹OˆØˆr9   c                 óÚ   — | j                   r0t        j                  j                  j	                  | g d¢gd¬«       y t        j                  j                  j                  | g d¢gd¬«       y )Nr\  TrÓ   ©Útrainingr[   rÀ  rÁ  Úfuse_modules_qatÚfuse_modulesrG   s    r7   Ú
fuse_modelz#AnnotatedConvBnReLUModel.fuse_modelº  s[   € à�=Š=Ü�H‰H×!Ñ!×2Ñ2ØÒ-Ð.¸ð 3õ ô �H‰H×!Ñ!×.Ñ.ØÒ-Ð.¸ð /õ r9   rO  .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  z+AnnotatedConvBnReLUModel.get_example_inputsÅ  r4  r9   rû  )
rR   rS   rT   r8   rÔ  rg  rä  r.   rñ  rÊ  rË  s   @r7   r_  r_  ¨  s&   ø„ õ%òò	ð) E¨#¨s¨(¡O÷ )r9   r_  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚTwoLayerConvModelrO  c                 ó:  •— t         ‰| �  «        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        y )Nr—  r¬   Fr,  râ   rg   )	r™  r8   r[   rÊ   r-  r¯   r�   Úconv1Úconv2ré  s    €r7   r8   zTwoLayerConvModel.__init__Ê  sj   ø€ Ü‰ÑÔÜ—X‘X—_‘_ Q¨¨1°5�_Ó9×<Ñ<Ä5Ç;Á;Ð<ÓOˆŒ
Ü—X‘X—_‘_ Q¨¨1°5�_Ó9×<Ñ<Ä5Ç;Á;Ð<ÓOˆ�
r9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   ©rl  rm  rì  s     r7   rÔ  zTwoLayerConvModel.forwardÏ  ó!   € Ø�J‰J�q‹MˆØ�J‰J�q‹MˆØˆr9   .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  z$TwoLayerConvModel.get_example_inputsÔ  r4  r9   ró  rô  rË  s   @r7   rj  rj  É  s"   ø„ õPò
ð
) E¨#¨s¨(¡O÷ )r9   rj  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚTwoLayerLinearModelrO  c                 ó.  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        y r  r  ré  s    €r7   r8   zTwoLayerLinearModel.__init__Ù  r  r9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   ©rè  r  rì  s     r7   rÔ  zTwoLayerLinearModel.forwardÞ  ó!   € Ø�H‰H�Q‹KˆØ�H‰H�Q‹KˆØˆr9   .c                 ó0   — t        j                  dd«      fS rï  rð  rG   s    r7   rñ  z&TwoLayerLinearModel.get_example_inputsã  rò  r9   ró  rô  rË  s   @r7   rs  rs  Ø  s!   ø„ õ?ò
ð
# E¨#¨s¨(¡O÷ #r9   rs  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearModelWithSubmodulerO  c                 óv   •— t         ‰| �  «        t        «       | _        t	        j
                  dd«      | _        y r
  )r™  r8   rs  ÚsubmrÊ   rÒ  Úfcré  s    €r7   r8   z!LinearModelWithSubmodule.__init__è  s)   ø€ Ü‰ÑÔÜ'Ó)ˆŒ	Ü—)‘)˜A˜q“/ˆ�r9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   )r|  r}  rì  s     r7   rÔ  z LinearModelWithSubmodule.forwardí  rO  r9   .c                 ó6   — | j                   j                  «       S rE   )r|  rñ  rG   s    r7   rñ  z+LinearModelWithSubmodule.get_example_inputsò  ó   € Ø�y‰y×+Ñ+Ó-Ð-r9   ró  rô  rË  s   @r7   rz  rz  ç  s!   ø„ õ"ò
ð
. E¨#¨s¨(¡O÷ .r9   rz  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚAnnotatedTwoLayerLinearModelrO  c                 ó°  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        t        j                  j	                  dd«      j                  t        j                  ¬«      «      | _	        t        j                  j                  j                  d«      | j                  _        y )Nr¬   r  râ   r  )r™  r8   r[   rÊ   rÒ  r¯   r�   rè  r   r  rÀ  rÁ  r   r°  ré  s    €r7   r8   z%AnnotatedTwoLayerLinearModel.__init__÷  s„   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ó KÓLˆŒÜ Ÿ8™8×0Ñ0×DÑDÀXÓNˆ�‰Õr9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   rv  rì  s     r7   rÔ  z$AnnotatedTwoLayerLinearModel.forwardý  rw  r9   .c                 ó0   — t        j                  dd«      fS rï  rð  rG   s    r7   rñ  z/AnnotatedTwoLayerLinearModel.get_example_inputs  rò  r9   ró  rô  rË  s   @r7   r‚  r‚  ö  s"   ø„ õOòð
# E¨#¨s¨(¡O÷ #r9   r‚  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚActivationsTestModelc                 ó6  •— t         ‰| �  «        t        j                  j                  j                  d«      | _        t        j                  j                  j                  «       | _        t        j                  j                  «       j                  t        j                  ¬«      | _        t        j                  j                  «       j                  t        j                  ¬«      | _        t        j                  j                  j!                  «       | _        y )Nr  râ   )r™  r8   r[   rÀ  rÁ  r   r°  r   r’  rÊ   Ú	Hardswishr¯   r�   Ú	hardswishÚELUÚelur   rª  ré  s    €r7   r8   zActivationsTestModel.__init__  s§   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓJˆŒÜ—X‘X×*Ñ*×4Ñ4Ó6ˆŒ
ÜŸ™×+Ñ+Ó-×0Ñ0´u·{±{Ð0ÓCˆŒÜ—8‘8—<‘<“>×$Ñ$¬5¯;©;Ð$Ó7ˆŒÜ—x‘x×,Ñ,×8Ñ8Ó:ˆ�r9   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S rE   )r’  rŠ  rŒ  rª  rì  s     r7   rÔ  zActivationsTestModel.forward  s<   € Ø�J‰J�q‹MˆØ�N‰N˜1ÓˆØ�H‰H�Q‹KˆØ�L‰L˜‹OˆØˆr9   ró  r  rË  s   @r7   r‡  r‡    s   ø„ õ;ör9   r‡  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearReluModelrO  c                 óî   •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        y rç  ©
r™  r8   r[   rÊ   rÒ  r¯   r�   r}  rZ  r  ré  s    €r7   r8   zLinearReluModel.__init__  sG   ø€ Ü‰ÑÔÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ó=ˆŒÜ—H‘H—M‘M“Oˆ�	r9   c                 óF   — | j                  | j                  |«      «      }|S rE   ©r  r}  rì  s     r7   rÔ  zLinearReluModel.forward  ó   € Ø�I‰I�d—g‘g˜a“jÓ!ˆØˆr9   .c                 ó0   — t        j                  dd«      fS rï  rð  rG   s    r7   rñ  z"LinearReluModel.get_example_inputs!  rò  r9   ró  rô  rË  s   @r7   r�  r�    s!   ø„ õ$ò
ð# E¨#¨s¨(¡O÷ #r9   r�  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearReluLinearModelrO  c                 ót  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        t        j                  j	                  dd«      j                  t        j                  ¬«      | _
        y r  ©r™  r8   r[   rÊ   rÒ  r¯   r�   rè  rZ  r  r  ré  s    €r7   r8   zLinearReluLinearModel.__init__&  óo   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—H‘H—M‘M“OˆŒ	Ü—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆ�r9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   ©rè  r  r  rì  s     r7   rÔ  zLinearReluLinearModel.forward,  ó.   € Ø�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØˆr9   .c                 ó0   — t        j                  dd«      fS rï  rð  rG   s    r7   rñ  z(LinearReluLinearModel.get_example_inputs2  rò  r9   ró  rô  rË  s   @r7   r—  r—  %  s!   ø„ õ?òð# E¨#¨s¨(¡O÷ #r9   r—  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearReluAddModelrO  c                 ót  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        t        j                  j	                  dd«      j                  t        j                  ¬«      | _
        y rç  r™  ré  s    €r7   r8   zLinearReluAddModel.__init__7  rš  r9   c                 óÞ   — | j                  |«      }| j                  |«      }t        j                  |d«      }| j	                  |«      }t        j
                  j                  «       | _        |S r
  ©rè  r  r[   r{  r  rÊ   rZ  rì  s     r7   rÔ  zLinearReluAddModel.forward=  óN   € Ø�H‰H�Q‹KˆØ�I‰I�a‹LˆÜ�I‰I�a˜‹OˆØ�H‰H�Q‹KˆÜ—H‘H—M‘M“OˆŒ	Øˆr9   .c                 ó0   — t        j                  dd«      fS rï  rð  rG   s    r7   rñ  z%LinearReluAddModel.get_example_inputsE  rò  r9   ró  rô  rË  s   @r7   r   r   6  s!   ø„ õ?òð# E¨#¨s¨(¡O÷ #r9   r   c                   ó<   ‡ — e Zd Zdˆ fd„	Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearBnLeakyReluModelc                 óÎ   •— t         ‰| �  «        t        j                  dd«      | _        t        j
                  d«      | _        t        j                  d«      | _        || _	        y )Nr¬   g{®Gáz„?)
r™  r8   rÊ   rÒ  ÚlinearÚBatchNorm1dÚbn1dÚ	LeakyReLUÚ
leaky_reluÚwith_bn)r6   r®  r¨  s     €r7   r8   zLinearBnLeakyReluModel.__init__J  sF   ø€ Ü‰ÑÔÜ—i‘i  1“oˆŒÜ—N‘N 1Ó%ˆŒ	ÜŸ,™, tÓ,ˆŒØˆ�r9   c                 ó„   — | j                  |«      }| j                  r| j                  |«      }| j                  |«      }|S rE   )r©  r®  r«  r­  rì  s     r7   rÔ  zLinearBnLeakyReluModel.forwardQ  s6   € Ø�K‰K˜‹NˆØ�<Š<Ø—	‘	˜!“ˆAØ�O‰O˜AÓˆØˆr9   rO  .c                 ó0   — t        j                  dd«      fS rï  rð  rG   s    r7   rñ  z)LinearBnLeakyReluModel.get_example_inputsX  rò  r9   rÈ  rô  rË  s   @r7   r§  r§  I  s!   ø„ õòð# E¨#¨s¨(¡O÷ #r9   r§  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearTanhModelrO  c                 óŠ   •— t         ‰| �  «        t        j                  dd«      | _        t        j
                  «       | _        y r
  )r™  r8   rÊ   rÒ  r©  ÚTanhr  ré  s    €r7   r8   zLinearTanhModel.__init__]  s,   ø€ Ü‰ÑÔÜ—i‘i  1“oˆŒÜ—G‘G“Iˆ�	r9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   )r©  r  rì  s     r7   rÔ  zLinearTanhModel.forwardb  s!   € Ø�K‰K˜‹NˆØ�I‰I�a‹LˆØˆr9   .c                 ó0   — t        j                  dd«      fS rï  rð  rG   s    r7   rñ  z"LinearTanhModel.get_example_inputsg  rò  r9   ró  rô  rË  s   @r7   r²  r²  \  s!   ø„ õò
ð
# E¨#¨s¨(¡O÷ #r9   r²  c                   óF   ‡ — e Zd Z	 	 	 	 	 dˆ fd„	Zd„ Zdeedf   fd„Zˆ xZS )ÚConvBnAddReluModelc                 ó>  •— t         ‰| �  «        t        j                  ddd«      | _        t        j                  ddd«      | _        t        j                  d«      | _        t        j                  «       | _	        || _
        || _        || _        || _        || _        y )Nr¬   )rV  rV  )r™  r8   rÊ   r-  r.  rm  rK  rL  rZ  r  r®  Ú	with_reluÚtwo_convÚ	left_convÚuse_torch_add)r6   r®  rº  r¼  r»  r½  r¨  s         €r7   r8   zConvBnAddReluModel.__init__l  sy   ø€ ô 	‰ÑÔÜ—I‘I˜a  FÓ+ˆŒ	Ü—Y‘Y˜q ! VÓ,ˆŒ
Ü—.‘. Ó#ˆŒÜ—G‘G“IˆŒ	ØˆŒØ"ˆŒØ ˆŒØ"ˆŒØ*ˆÕr9   c                 ó@  — | j                   rø| j                  r‡| j                  rEt        j                  | j                  | j                  |«      «      | j                  |«      «      }�nt        j                  | j                  |«      | j                  |«      «      }�ná| j                  r4| j                  | j                  |«      «      | j                  |«      z   }�n¡| j                  |«      | j                  |«      z   }�n|| j                  rÛ| j                  rh| j                  r6t        j                  | j                  | j                  |«      «      |«      }�n"t        j                  | j                  |«      |«      }nü| j                  r5t        j                  || j                  | j                  |«      «      «      }n»t        j                  || j                  |«      «      }n•| j                  rE| j                  r$| j                  | j                  |«      «      |z   }nY| j                  |«      |z   }nD| j                  r$|| j                  | j                  |«      «      z   }n|| j                  |«      z   }| j                  r| j                  |«      }|S rE   )r»  r½  r®  r[   r{  rL  r.  rm  r¼  rº  r  )r6   Úx1Úx2r‡  s       r7   rÔ  zConvBnAddReluModel.forward  s¾  € Ø�=Š=Ø×!Ò!Ø—<’<ÜŸ	™	 $§'¡'¨$¯)©)°B«-Ó"8¸$¿*¹*ÀR».ÓI’AäŸ	™	 $§)¡)¨B£-°·±¸B³Ó@’Aà—<’<ØŸ™ §	¡	¨"£Ó.°·±¸B³Ñ?’AàŸ	™	 "›¨¯
©
°2«Ñ6’Aà×!Ò!Ø—>’>Ø—|’|Ü!ŸI™I d§g¡g¨d¯i©i¸«mÓ&<¸bÓAšä!ŸI™I d§i¡i°£m°RÓ8™à—|’|Ü!ŸI™I b¨$¯'©'°$·)±)¸B³-Ó*@ÓA™ä!ŸI™I b¨$¯)©)°B«-Ó8™à—>’>Ø—|’|Ø ŸG™G D§I¡I¨b£MÓ2°RÑ7™à ŸI™I b›M¨BÑ.™à—|’|Ø §¡¨¯©°2«Ó!7Ñ7™à §¡¨2£Ñ.˜Ø�>Š>Ø—	‘	˜!“ˆAØˆr9   rO  .c                 ób   — t        j                  dddd«      t        j                  dddd«      fS )Nrg   r¬   r—  rV  rð  rG   s    r7   rñ  z%ConvBnAddReluModel.get_example_inputs¦  s+   € Ü—
‘
˜1˜a  AÓ&¬¯
©
°1°a¸¸AÓ(>Ð?Ð?r9   )TTTTTrô  rË  s   @r7   r¸  r¸  k  s5   ø„ ð ØØØØõ+ò&%ðN@ E¨#¨s¨(¡O÷ @r9   r¸  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvReluModelrO  c                 óð   •— t         ‰| �  «        t        j                  j	                  ddd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        y )Nr—  r¬   râ   )
r™  r8   r[   rÊ   r-  r¯   r�   r}  rZ  r  ré  s    €r7   r8   zConvReluModel.__init__¬  sI   ø€ Ü‰ÑÔÜ—(‘(—/‘/ ! Q¨Ó*×-Ñ-´E·K±KÐ-Ó@ˆŒÜ—H‘H—M‘M“Oˆ�	r9   c                 óF   — | j                  | j                  |«      «      }|S rE   r“  rì  s     r7   rÔ  zConvReluModel.forward±  r”  r9   .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  z ConvReluModel.get_example_inputsµ  r4  r9   ró  rô  rË  s   @r7   rÃ  rÃ  «  s!   ø„ õ$ò
ð) E¨#¨s¨(¡O÷ )r9   rÃ  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvReluConvModelrO  c                 óx  •— t         ‰| �  «        t        j                  j	                  ddd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        t        j                  j	                  ddd«      j                  t        j                  ¬«      | _
        y ©Nr—  r¬   râ   rg   ©r™  r8   r[   rÊ   r-  r¯   r�   rè  rZ  r  r  ré  s    €r7   r8   zConvReluConvModel.__init__»  ós   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 a¨Ó+×.Ñ.´U·[±[Ð.ÓAˆŒÜ—H‘H—M‘M“OˆŒ	Ü—8‘8—?‘? 1 a¨Ó+×.Ñ.´U·[±[Ð.ÓAˆ�r9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   rœ  rì  s     r7   rÔ  zConvReluConvModel.forwardÁ  r�  r9   .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  z$ConvReluConvModel.get_example_inputsÇ  r4  r9   ró  rô  rË  s   @r7   rÈ  rÈ  º  s"   ø„ õBòð) E¨#¨s¨(¡O÷ )r9   rÈ  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvReluAddModelrO  c                 óx  •— t         ‰| �  «        t        j                  j	                  ddd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        t        j                  j	                  ddd«      j                  t        j                  ¬«      | _
        y rÊ  rË  ré  s    €r7   r8   zConvReluAddModel.__init__Í  rÌ  r9   c                 óÞ   — | j                  |«      }| j                  |«      }t        j                  |d«      }| j	                  |«      }t        j
                  j                  «       | _        |S r
  r£  rì  s     r7   rÔ  zConvReluAddModel.forwardÓ  r¤  r9   .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  z#ConvReluAddModel.get_example_inputsÛ  r4  r9   ró  rô  rË  s   @r7   rÐ  rÐ  Ì  s"   ø„ õBòð) E¨#¨s¨(¡O÷ )r9   rÐ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚNormalizationTestModelc                 ól  •— t         ‰| �  «        t        j                  j                  j                  «       | _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  d«      | _        t        j                  j                  dd«      | _        t        j                  j!                  d«      | _        t        j                  j%                  d«      | _        t        j                  j)                  d«      | _        y )Nr¬   r  râ   rV  )r™  r8   r[   rÀ  rÁ  r   r’  rÊ   rÒ  r¯   r�   rè  Ú	LayerNormÚ
layer_normÚ	GroupNormÚ
group_normÚInstanceNorm1dÚinstance_norm1dÚInstanceNorm2dÚinstance_norm2dÚInstanceNorm3dÚinstance_norm3dré  s    €r7   r8   zNormalizationTestModel.__init__à  sÃ   ø€ Ü‰ÑÔÜ—X‘X×*Ñ*×4Ñ4Ó6ˆŒ
Ü—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜŸ(™(×,Ñ,¨QÓ/ˆŒÜŸ(™(×,Ñ,¨Q°Ó2ˆŒÜ$Ÿx™x×6Ñ6°qÓ9ˆÔÜ$Ÿx™x×6Ñ6°qÓ9ˆÔÜ$Ÿx™x×6Ñ6°qÓ9ˆÕr9   c                 óp  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |j	                  d«      j                  ddd«      «      }| j                  |«      }| j                  |j	                  d«      «      }| j                  |j	                  d«      «      }|S )Nr•   rg   r—  )	r’  rè  rØ  rÚ  r†  ÚrepeatrÜ  rÞ  rà  rì  s     r7   rÔ  zNormalizationTestModel.forwardê  s”   € Ø�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�O‰O˜AÓˆØ�O‰O˜AŸK™K¨›O×2Ñ2°1°a¸Ó;Ó<ˆØ× Ñ  Ó#ˆØ× Ñ  §¡¨R£Ó1ˆØ× Ñ  §¡¨R£Ó1ˆØˆr9   ró  r  rË  s   @r7   rÕ  rÕ  ß  s   ø„ õ:ör9   rÕ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚNestedModelc                 óä   •— t         ‰| �  «        t        «       | _        t	        «       | _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        y rç  )r™  r8   r�  Úsub1rs  Úsub2r[   rÊ   rÒ  r¯   r�   Úfc3ré  s    €r7   r8   zNestedModel.__init__ö  sJ   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü'Ó)ˆŒ	Ü—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆ�r9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   ©ræ  rç  rè  rì  s     r7   rÔ  zNestedModel.forwardü  ó.   € Ø�I‰I�a‹LˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØˆr9   ró  r  rË  s   @r7   rä  rä  õ  s   ø„ õ?ör9   rä  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚAnnotatedNestedModelc                 ó  •— t         ‰| �  «        t        «       | _        t	        «       | _        t        t        j                  j                  dd«      j                  t        j                  ¬«      «      | _        t        | j                  _        t        | j
                  j                  «      | j
                  _        |dk(  r t         | j
                  j                  _        y t        | j
                  j                  _        y )Nr¬   râ   r  )r™  r8   r�  ræ  rs  rç  r   r[   rÊ   rÒ  r¯   r�   rè  r   r°  rè  r   rø  s     €r7   r8   zAnnotatedNestedModel.__init__  s›   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü'Ó)ˆŒ	Ü¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ó KÓLˆŒÜ*ˆ�‰ÔÜ$ T§Y¡Y§]¡]Ó3ˆ�	‰	ŒØ�hÒÜ$?ˆD�I‰I�M‰MÕ!ä$3ˆD�I‰I�M‰MÕ!r9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   rê  rì  s     r7   rÔ  zAnnotatedNestedModel.forward  rë  r9   r  rË  s   @r7   rí  rí    s   ø„ ô
4ör9   rí  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚAnnotatedSubNestedModelc                 ó\  •— t         ‰| �  «        t        «       | _        t	        t        «       «      | _        t	        t        j                  j                  dd«      j                  t        j                  ¬«      «      | _        t        | j                  _        t        | j                  _        y rç  )r™  r8   r�  ræ  r   rs  rç  r[   rÊ   rÒ  r¯   r�   rè  r   r°  ré  s    €r7   r8   z AnnotatedSubNestedModel.__init__  sm   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü Ô!4Ó!6Ó7ˆŒ	Ü¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ó KÓLˆŒÜ*ˆ�‰ÔÜ+ˆ�	‰	Õr9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   rê  rì  s     r7   rÔ  zAnnotatedSubNestedModel.forward   rë  r9   ró  r  rË  s   @r7   rñ  rñ    s   ø„ õ,ör9   rñ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )Ú AnnotatedCustomConfigNestedModelc                 óÂ  •— t         ‰| �  «        t        «       | _        t	        «       | _        t        t        j                  j                  dd«      j                  t        j                  ¬«      «      | _        t        | j                  _        t        | j
                  _        t        j                  t        j                   dœ}t#        t%        j&                  di |¤Žt(        ¬«      }|| j
                  j*                  _        t        | j
                  j*                  «      | j
                  _        t        | j
                  j,                  «      | j
                  _        y )Nr¬   râ   )rà   r¨  rª  rW   )r™  r8   r�  ræ  rs  rç  r   r[   rÊ   rÒ  r¯   r�   rè  r   r°  rå   Úper_tensor_affiner   r
   r´  r   rè  r  )r6   Úcustom_optionsÚcustom_qconfigr¨  s      €r7   r8   z)AnnotatedCustomConfigNestedModel.__init__(  sÛ   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü'Ó)ˆŒ	Ü¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ó KÓLˆŒÜ*ˆ�‰ÔÜ+ˆ�	‰	Ôä#(§<¡<¼E×<SÑ<SÑTˆÜ Ü'×1Ñ1ÑC°NÑCÜ*ô
ˆð !/ˆ�	‰	�‰Ôä$ T§Y¡Y§]¡]Ó3ˆ�	‰	ŒÜ$ T§Y¡Y§]¡]Ó3ˆ�	‰	�r9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   rê  rì  s     r7   rÔ  z(AnnotatedCustomConfigNestedModel.forward:  rë  r9   ró  r  rË  s   @r7   rõ  rõ  '  s   ø„ õ4ö$r9   rõ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚQuantSubModelc                 óJ  •— t         ‰| �  «        t        «       | _        t	        t        «       «      | _        t        | j                  _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        t        | j                  _        y rç  )r™  r8   r�  ræ  r   rs  rç  r   r°  r[   rÊ   rÒ  r¯   r�   rè  ré  s    €r7   r8   zQuantSubModel.__init__B  sh   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü Ô!4Ó!6Ó7ˆŒ	Ü+ˆ�	‰	ÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ*ˆ�‰Õr9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   rê  rì  s     r7   rÔ  zQuantSubModel.forwardJ  rë  r9   ró  r  rË  s   @r7   rü  rü  A  s   ø„ õ+ör9   rü  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )ÚInnerModulec                 óº  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        t        j                  j	                  dd«      j                  t        j                  ¬«      | _
        t        j                  j                  «       | _        y r  )r™  r8   r[   rÊ   rÒ  r¯   r�   rè  rZ  Úrelu1r  Úrelu2ré  s    €r7   r8   zInnerModule.__init__R  s€   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—X‘X—]‘]“_ˆŒ
Ü—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—X‘X—]‘]“_ˆ�
r9   c           	      ó~   — | j                  | j                  | j                  | j                  |«      «      «      «      S rE   )r  r  r  rè  rì  s     r7   rÔ  zInnerModule.forwardY  s+   € Ø�z‰z˜$Ÿ(™( 4§:¡:¨d¯h©h°q«kÓ#:Ó;Ó<Ð<r9   c                 ó4  — g }t        | j                  «       «      }t        |«      D ]Š  \  }\  }}t        |t        j
                  j                  «      sŒ.|t        |«      dz
  k\  r nLt        ||dz      d   t        j
                  j                  «      sŒo|j                  |||dz      d   g«       ŒŒ | j                  r-t        j                  j                  j                  | |d¬«       y t        j                  j                  j                  | |d¬«       y )Nrg   r   TrÓ   )rp  r»  r­   rJ   r[   rÊ   rÒ  ræ   rZ  rž   rd  rÀ  rÁ  re  rf  )r6   Úfusable_layersr»  r}  Úcurrent_nameÚlayers         r7   rf  zInnerModule.fuse_modules\  së   € ØˆÜ˜d×1Ñ1Ó3Ó4ˆÜ*3°NÓ*Cò 	VÑ&ˆCÑ&�, Ü˜%¤§¡§¡Õ1Øœ#˜nÓ-°Ñ1Ò1ÙÜ˜n¨S°1©WÑ5°aÑ8¼%¿(¹(¿-¹-ÕHØ"×)Ñ)¨<¸ÈÈaÉÑ9PÐQRÑ9SÐ*TÕUð	Vð �=Š=Ü�H‰H×!Ñ!×2Ñ2°4¸ÐQUÐ2ÕVä�H‰H×!Ñ!×.Ñ.¨t°^ÈTÐ.ÕRr9   ró  )rR   rS   rT   r8   rÔ  rf  rÊ  rË  s   @r7   r   r   Q  s   ø„ õ%ò=öSr9   r   c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalLinearrO  c                 óŠ   •— t         ‰| �  «        t        j                  d«      | _        t        j
                  d«      | _        y )N)r¬   r¬   r¬   )r™  r8   r[   r›  rü  rM  rý  ré  s    €r7   r8   zFunctionalLinear.__init__m  s-   ø€ Ü‰ÑÔÜ—j‘j Ó(ˆŒÜ—K‘K “Nˆ�	r9   c                 óX   — t        j                  || j                  | j                  «      S rE   )ÚFr©  rü  rý  rì  s     r7   rÔ  zFunctionalLinear.forwardr  s   € Ü�x‰x˜˜4Ÿ;™;¨¯	©	Ó2Ð2r9   .c                 ó0   — t        j                  dd«      fS rï  rð  rG   s    r7   rñ  z#FunctionalLinear.get_example_inputsu  rò  r9   ró  rô  rË  s   @r7   r
  r
  l  s!   ø„ õ#ò
3ð# E¨#¨s¨(¡O÷ #r9   r
  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )Ú SingleLayerFunctionalLinearModelrO  c                 ó@   •— t         ‰| �  «        t        «       | _        y rE   )r™  r8   r
  Úlinear1ré  s    €r7   r8   z)SingleLayerFunctionalLinearModel.__init__z  s   ø€ Ü‰ÑÔÜ'Ó)ˆ�r9   c                 ó(   — | j                  |«      }|S rE   )r  rì  s     r7   rÔ  z(SingleLayerFunctionalLinearModel.forward~  s   € Ø�L‰L˜‹OˆØˆr9   .c                 ó6   — | j                   j                  «       S rE   ©r  rñ  rG   s    r7   rñ  z3SingleLayerFunctionalLinearModel.get_example_inputs‚  ó   € Ø�|‰|×.Ñ.Ó0Ð0r9   ró  rô  rË  s   @r7   r  r  y  s!   ø„ õ*òð1 E¨#¨s¨(¡O÷ 1r9   r  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚTwoLayerFunctionalLinearModelrO  c                 ó^   •— t         ‰| �  «        t        «       | _        t        «       | _        y rE   ©r™  r8   r
  r  Úlinear2ré  s    €r7   r8   z&TwoLayerFunctionalLinearModel.__init__‡  ó"   ø€ Ü‰ÑÔÜ'Ó)ˆŒÜ'Ó)ˆ�r9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   )r  r  rì  s     r7   rÔ  z%TwoLayerFunctionalLinearModel.forwardŒ  s!   € Ø�L‰L˜‹OˆØ�L‰L˜‹OˆØˆr9   .c                 ó6   — | j                   j                  «       S rE   r  rG   s    r7   rñ  z0TwoLayerFunctionalLinearModel.get_example_inputs‘  r  r9   ró  rô  rË  s   @r7   r  r  †  s!   ø„ õ*ò
ð
1 E¨#¨s¨(¡O÷ 1r9   r  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalLinearAddModelrO  c                 ó^   •— t         ‰| �  «        t        «       | _        t        «       | _        y rE   r  ré  s    €r7   r8   z!FunctionalLinearAddModel.__init__–  r  r9   c                 óv   — | j                  |«      }t        j                  |d«      }| j                  |«      }|S r
  )r  r[   r{  r  rì  s     r7   rÔ  z FunctionalLinearAddModel.forward›  s0   € Ø�L‰L˜‹OˆÜ�I‰I�a˜‹OˆØ�L‰L˜‹OˆØˆr9   .c                 ó6   — | j                   j                  «       S rE   r  rG   s    r7   rñ  z+FunctionalLinearAddModel.get_example_inputs¡  r  r9   ró  rô  rË  s   @r7   r   r   •  s!   ø„ õ*ò
ð1 E¨#¨s¨(¡O÷ 1r9   r   c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalLinearReluModelrO  c                 ó@   •— t         ‰| �  «        t        «       | _        y rE   )r™  r8   r
  r©  ré  s    €r7   r8   z"FunctionalLinearReluModel.__init__¦  s   ø€ Ü‰ÑÔÜ&Ó(ˆ�r9   c                 óR   — | j                  |«      }t        j                  |«      }|S rE   )r©  r  r  rì  s     r7   rÔ  z!FunctionalLinearReluModel.forwardª  s!   € Ø�K‰K˜‹NˆÜ�F‰F�1‹IˆØˆr9   .c                 ó6   — | j                   j                  «       S rE   )r©  rñ  rG   s    r7   rñ  z,FunctionalLinearReluModel.get_example_inputs¯  s   € Ø�{‰{×-Ñ-Ó/Ð/r9   ró  rô  rË  s   @r7   r%  r%  ¥  s!   ø„ õ)òð
0 E¨#¨s¨(¡O÷ 0r9   r%  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalLinearReluLinearModelrO  c                 ó�   •— t         ‰| �  «        t        «       | _        t	        j
                  «       | _        t        «       | _        y rE   )r™  r8   r
  r  rÊ   rZ  r  r  ré  s    €r7   r8   z(FunctionalLinearReluLinearModel.__init__´  s/   ø€ Ü‰ÑÔÜ'Ó)ˆŒÜ—G‘G“IˆŒ	Ü'Ó)ˆ�r9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   )r  r  r  rì  s     r7   rÔ  z'FunctionalLinearReluLinearModel.forwardº  s.   € Ø�L‰L˜‹OˆØ�I‰I�a‹LˆØ�L‰L˜‹OˆØˆr9   .c                 ó6   — | j                   j                  «       S rE   r  rG   s    r7   rñ  z2FunctionalLinearReluLinearModel.get_example_inputsÀ  r  r9   ró  rô  rË  s   @r7   r*  r*  ³  s!   ø„ õ*òð1 E¨#¨s¨(¡O÷ 1r9   r*  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalConv2drO  c                 óÈ   •— t         ‰| �  «        t        j                  dddd«      | _        t        j                  d«      | _        d| _        d| _        d| _        d| _	        y )Nr—  ©rg   rg   )r   r   rg   )
r™  r8   r[   r›  rü  rý  ÚstrideÚpaddingÚdilationrð   ré  s    €r7   r8   zFunctionalConv2d.__init__Å  sO   ø€ Ü‰ÑÔÜ—j‘j  A q¨!Ó,ˆŒÜ—J‘J˜q“MˆŒ	ØˆŒØˆŒØˆŒØˆ�r9   c           	      ó°   — t        j                  || j                  | j                  | j                  | j
                  | j                  | j                  «      S rE   )r  Úconv2drü  rý  r2  r3  r4  rð   rì  s     r7   rÔ  zFunctionalConv2d.forwardÎ  s@   € Ü�x‰xØØ�K‰KØ�I‰IØ�K‰KØ�L‰LØ�M‰MØ�K‰Kó
ð 	
r9   .c                 ó4   — t        j                  dddd«      fS r3  rð  rG   s    r7   rñ  z#FunctionalConv2d.get_example_inputsÙ  r4  r9   ró  rô  rË  s   @r7   r/  r/  Ä  s!   ø„ õò	
ð) E¨#¨s¨(¡O÷ )r9   r/  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚSingleLayerFunctionalConvModelrO  c                 ó@   •— t         ‰| �  «        t        «       | _        y rE   )r™  r8   r/  rl  ré  s    €r7   r8   z'SingleLayerFunctionalConvModel.__init__Þ  s   ø€ Ü‰ÑÔÜ%Ó'ˆ�
r9   c                 ó(   — | j                  |«      }|S rE   )rl  rì  s     r7   rÔ  z&SingleLayerFunctionalConvModel.forwardâ  s   € Ø�J‰J�q‹MˆØˆr9   .c                 ó6   — | j                   j                  «       S rE   ©rl  rñ  rG   s    r7   rñ  z1SingleLayerFunctionalConvModel.get_example_inputsæ  ó   € Ø�z‰z×,Ñ,Ó.Ð.r9   ró  rô  rË  s   @r7   r9  r9  Ý  s!   ø„ õ(òð/ E¨#¨s¨(¡O÷ /r9   r9  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚTwoLayerFunctionalConvModelrO  c                 ó^   •— t         ‰| �  «        t        «       | _        t        «       | _        y rE   )r™  r8   r/  rl  rm  ré  s    €r7   r8   z$TwoLayerFunctionalConvModel.__init__ë  s"   ø€ Ü‰ÑÔÜ%Ó'ˆŒ
Ü%Ó'ˆ�
r9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   ro  rì  s     r7   rÔ  z#TwoLayerFunctionalConvModel.forwardð  rp  r9   .c                 ó6   — | j                   j                  «       S rE   r=  rG   s    r7   rñ  z.TwoLayerFunctionalConvModel.get_example_inputsõ  r>  r9   ró  rô  rË  s   @r7   r@  r@  ê  s!   ø„ õ(ò
ð
/ E¨#¨s¨(¡O÷ /r9   r@  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalConvReluModelrO  c                 ó@   •— t         ‰| �  «        t        «       | _        y rE   )r™  r8   r/  r.  ré  s    €r7   r8   z FunctionalConvReluModel.__init__ú  s   ø€ Ü‰ÑÔÜ$Ó&ˆ�	r9   c                 óR   — | j                  |«      }t        j                  |«      }|S rE   )r.  r  r  rì  s     r7   rÔ  zFunctionalConvReluModel.forwardþ  s!   € Ø�I‰I�a‹LˆÜ�F‰F�1‹IˆØˆr9   .c                 ó6   — | j                   j                  «       S rE   )r.  rñ  rG   s    r7   rñ  z*FunctionalConvReluModel.get_example_inputs	  r€  r9   ró  rô  rË  s   @r7   rE  rE  ù  s!   ø„ õ'òð
. E¨#¨s¨(¡O÷ .r9   rE  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalConvReluConvModelrO  c                 ó�   •— t         ‰| �  «        t        «       | _        t	        j
                  «       | _        t        «       | _        y rE   )r™  r8   r/  rl  rÊ   rZ  r  rm  ré  s    €r7   r8   z$FunctionalConvReluConvModel.__init__	  s/   ø€ Ü‰ÑÔÜ%Ó'ˆŒ
Ü—G‘G“IˆŒ	Ü%Ó'ˆ�
r9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rE   )rl  r  rm  rì  s     r7   rÔ  z#FunctionalConvReluConvModel.forward	  s.   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�J‰J�q‹MˆØˆr9   .c                 ó6   — | j                   j                  «       S rE   r=  rG   s    r7   rñ  z.FunctionalConvReluConvModel.get_example_inputs	  r>  r9   ró  rô  rË  s   @r7   rJ  rJ  	  s!   ø„ õ(òð/ E¨#¨s¨(¡O÷ /r9   rJ  c                   ó0   ‡ — e Zd ZdZdˆ fd„Zd„ Zd„ Zˆ xZS )ÚSkipQuantModelúVWe can skip quantization by explicitly
    setting qconfig of a submodule to None
    c                 óÆ   •— t         ‰| �  «        t        «       | _        t        j
                  j                  dd«      j                  t        j                  ¬«      | _	        y rç  )
r™  r8   r   rb  r[   rÊ   rÒ  r¯   r�   r}  ré  s    €r7   r8   zSkipQuantModel.__init__	  s?   ø€ Ü‰ÑÔÜ“=ˆŒÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ó=ˆ�r9   c                 óB   — | j                  | j                  |«      «      S rE   ©r}  rb  rì  s     r7   rÔ  zSkipQuantModel.forward"	  ó   € Ø�w‰w�t—x‘x “{Ó#Ð#r9   c                 ó8   — | j                   j                  «        y rE   )rb  rf  rG   s    r7   rf  zSkipQuantModel.fuse_modules%	  s   € Ø�‰×ÑÕr9   ró  ©rR   rS   rT   rU   r8   rÔ  rf  rÊ  rË  s   @r7   rO  rO  	  s   ø„ ñõ>ò
$ö r9   rO  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚAnnotatedSkipQuantModelrP  c                 óV  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        t        «       «      | _	        t        j                  j                  dd«      j                  t        j                  ¬«      | _        d | j                  _        y rç  )r™  r8   r[   rÀ  rÁ  r   r°  r   r   rb  rÊ   rÒ  r¯   r�   r}  rø  s     €r7   r8   z AnnotatedSkipQuantModel.__init__.	  sk   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ¤£Ó.ˆŒÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ó=ˆŒàˆ�‰�r9   c                 óB   — | j                  | j                  |«      «      S rE   rS  rì  s     r7   rÔ  zAnnotatedSkipQuantModel.forward6	  rT  r9   c                 óL   — | j                   j                  j                  «        y rE   )rb  rÕ   rf  rG   s    r7   rf  z$AnnotatedSkipQuantModel.fuse_modules9	  s   € Ø�‰�‰×$Ñ$Õ&r9   rV  rË  s   @r7   rX  rX  )	  s   ø„ ñôò$ö'r9   rX  c                   ó*   ‡ — e Zd ZdZdˆ fd„Zd„ Zˆ xZS )ÚQuantStubModelú=A Module with manually inserted `QuantStub` and `DeQuantStub`c                 ó@  •— t         ‰| �  «        t        j                  j                  j                  d«      | _        t        «       | _        t        «       | _
        t        j                  j                  dd«      j                  t        j                  ¬«      | _        y )Nr'  r¬   râ   )r™  r8   r[   rÀ  rÁ  r   r°  r   r’  r   rª  rÊ   rÒ  r¯   r�   r}  ré  s    €r7   r8   zQuantStubModel.__init__@	  sd   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓKˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ó=ˆ�r9   c                 óh   — | j                  |«      }| j                  |«      }| j                  |«      S rE   )r’  r}  rª  rì  s     r7   rÔ  zQuantStubModel.forwardG	  s*   € Ø�J‰J�q‹MˆØ�G‰G�A‹JˆØ�|‰|˜A‹Ðr9   ró  ©rR   rS   rT   rU   r8   rÔ  rÊ  rË  s   @r7   r]  r]  =	  s   ø„ ÙHõ>ör9   r]  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚManualLinearQATModelr^  c                 óÆ  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        «       | _        t        «       | _
        t        j                  j                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        y ©Nr¬   rg   râ   rf   )r™  r8   r[   rÀ  rÁ  r   r°  r   r’  r   rª  rÊ   rÒ  r¯   r�   rè  r  rø  s     €r7   r8   zManualLinearQATModel.__init__P	  sŒ   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×DÑDÀWÓMˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—8‘8—?‘? 1 bÓ)×,Ñ,´5·;±;Ð,Ó?ˆ�r9   c                 óŠ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      S rE   )r’  rè  r  rª  rì  s     r7   rÔ  zManualLinearQATModel.forwardX	  s7   € Ø�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�H‰H�Q‹KˆØ�|‰|˜A‹Ðr9   ra  rË  s   @r7   rc  rc  M	  s   ø„ ÙHô@ör9   rc  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚManualDropoutQATModelr^  c                 óˆ  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        «       | _        t        «       | _
        t        j                  j                  dd«      j                  t        j                  ¬«      | _        t        j                  j!                  d«      | _        y )Nr¬   rg   râ   ç      à?)r™  r8   r[   rÀ  rÁ  r   r°  r   r’  r   rª  rÊ   rÒ  r¯   r�   rè  rÄ  Údropoutrø  s     €r7   r8   zManualDropoutQATModel.__init__b	  sz   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×DÑDÀWÓMˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—x‘x×'Ñ'¨Ó,ˆ�r9   c                 óŠ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      S rE   )r’  rè  rk  rª  rì  s     r7   rÔ  zManualDropoutQATModel.forwardj	  s7   € Ø�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�L‰L˜‹OˆØ�|‰|˜A‹Ðr9   ra  rË  s   @r7   rh  rh  _	  s   ø„ ÙHô-ör9   rh  c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚManualLinearDynamicQATModelz,A Module that uses a dynamic QAT by default.c                 óL  •— t         ‰| �  «        |xs t        | _        t        j
                  j                  dd«      j                  t        j                  ¬«      | _	        t        j
                  j                  dd«      j                  t        j                  ¬«      | _
        y re  )r™  r8   r   r°  r[   rÊ   rÒ  r¯   r�   rè  r  ©r6   r°  r¨  s     €r7   r8   z$ManualLinearDynamicQATModel.__init__t	  sk   ø€ Ü‰ÑÔØÒ=Ô"=ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—8‘8—?‘? 1 bÓ)×,Ñ,´5·;±;Ð,Ó?ˆ�r9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   rv  rì  s     r7   rÔ  z#ManualLinearDynamicQATModel.forwardz	  rw  r9   rE   ra  rË  s   @r7   rn  rn  q	  s   ø„ Ù7õ@ör9   rn  c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚManualConvLinearQATModelzpA module with manually inserted `QuantStub` and `DeQuantStub`
    and contains both linear and conv modules
    c                 óX  •— t         ‰| �  «        |r|n(t        j                  j                  j                  d«      | _        t        «       | _        t        «       | _
        t        j                  j                  ddd¬«      j                  t        j                  ¬«      | _        t        j                  j!                  dd«      j                  t        j                  ¬«      | _        t        j                  j!                  dd«      j                  t        j                  ¬«      | _        y )Nr'  r—  rg   )rñ   râ   é@   rf   )r™  r8   r[   rÀ  rÁ  r   r°  r   r’  r   rª  rÊ   r-  r¯   r�   r.  rÒ  rè  r  rp  s     €r7   r8   z!ManualConvLinearQATModel.__init__…	  sÇ   ø€ Ü‰ÑÔñ ñ ä—‘×&Ñ&×>Ñ>¸yÓIð 	Œô
 “[ˆŒ
Ü"“}ˆŒÜ—H‘H—O‘O A q°a�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü—8‘8—?‘? 2 rÓ*×-Ñ-´E·K±KÐ-Ó@ˆŒÜ—8‘8—?‘? 2 rÓ*×-Ñ-´E·K±KÐ-Ó@ˆ�r9   c                 óì   — | j                  |«      }| j                  |«      }|j                  dd«      j                  «       }| j	                  |«      }| j                  |«      }| j                  |«      S )Nr•   ru  )r’  r.  r›   r]  rè  r  rª  rì  s     r7   rÔ  z ManualConvLinearQATModel.forward’	  s\   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�F‰F�2�r‹N×%Ñ%Ó'ˆØ�H‰H�Q‹KˆØ�H‰H�Q‹KˆØ�|‰|˜A‹Ðr9   rE   ra  rË  s   @r7   rs  rs  €	  s   ø„ ñõAör9   rs  c                   ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚManualConvLinearSymmQATModelzhSame as ManualConvLinearQATModule but with Symmetric Quantization.
    Supported only with qnnpack.
    c                 ó,   •— t         ‰| �  t        «       y rE   )r™  r8   r   ré  s    €r7   r8   z%ManualConvLinearSymmQATModel.__init__ 	  s   ø€ Ü‰ÑÔ>Õ?r9   ró  )rR   rS   rT   rU   r8   rÊ  rË  s   @r7   rx  rx  ›	  s   ø„ ñ÷@ñ @r9   rx  c                   ó‚   ‡ — e Zd Zdˆ fd„Z	 	 ddej
                  dej
                  dz  dej
                  dz  fd„Zˆ xZS )	ÚManualEmbeddingBagLinearNc                 óT  •— t         ‰| �  «        t        j                  ddd¬«      | _        t
        | j                  _        t        «       | _        t        «       | _
        t        j                  dd«      j                  t        j                  ¬«      | _        t!        d«      | _        y )Nrf   é   rs   )r¡  r¢  r¤  rg   râ   r'  )r™  r8   rÊ   r±  Úembr	   r°  r   r’  r   rª  rÒ  r¯   r[   r�   r©  r   ré  s    €r7   r8   z!ManualEmbeddingBagLinear.__init__¥	  sp   ø€ Ü‰ÑÔÜ—?‘?°"ÀBÈUÔSˆŒÜ8ˆ�‰ÔÜ“[ˆŒ
Ü"“}ˆŒÜ—i‘i  AÓ&×)Ñ)´·±Ð)Ó<ˆŒÜ.¨yÓ9ˆ�r9   rÒ  r¹  Úper_sample_weightsc                 óŽ   — | j                  |||«      }| j                  |«      }| j                  |«      }| j                  |«      S rE   )r~  r’  r©  rª  )r6   rÒ  r¹  r  r‡  s        r7   rÔ  z ManualEmbeddingBagLinear.forward®	  s?   € ð �H‰H�U˜GÐ%7Ó8ˆØ�J‰J�q‹MˆØ�K‰K˜‹NˆØ�|‰|˜A‹Ðr9   ró  rÇ  ©rR   rS   rT   r8   r[   ro  rÔ  rÊ  rË  s   @r7   r{  r{  ¤	  sG   ø„ õ:ð (,Ø26ñ		à�|‰|ð	ð —‘ Ñ$ð	ð "ŸL™L¨4Ñ/÷		r9   r{  c                   ó\   ‡ — e Zd ZdZdˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚDeFusedEmbeddingBagLineara  A module to simulate QAT embedding bag with a linear layer,
    this module uses a separate embedding and bagging op, similar
    to that which is described in the EmbeddingBag documentation.

    https://pytorch.org/docs/stable/generated/torch.nn.EmbeddingBag.html
    rO  c                 ó|  •— t         ‰| �  «        t        j                  dd¬«      | _        t
        | j                  _        t        j                  | _	        t        «       | _        t        «       | _        t        j                  dd«      j                  t        j                   ¬«      | _        t%        d«      | _        y )Nrf   r}  r§  rg   râ   r'  )r™  r8   rÊ   r²  r~  r	   r°  r[   rs   Ú
bagging_opr   r’  r   rª  rÒ  r¯   r�   r©  r   ré  s    €r7   r8   z"DeFusedEmbeddingBagLinear.__init__Â	  sy   ø€ Ü‰ÑÔÜ—<‘<¨rÀÔDˆŒÜ8ˆ�‰ÔÜŸ)™)ˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—i‘i  AÓ&×)Ñ)´·±Ð)Ó<ˆŒÜ.¨yÓ9ˆ�r9   rÒ  c                 ó¬   — | j                  | j                  |«      d¬«      }| j                  |«      }| j                  |«      }| j	                  |«      S ©Nrg   rƒ  )r…  r~  r’  r©  rª  )r6   rÒ  r‡  s      r7   rÔ  z!DeFusedEmbeddingBagLinear.forwardÌ	  sD   € Ø�O‰O˜DŸH™H U›O°ˆOÓ3ˆØ�J‰J�q‹MˆØ�K‰K˜‹NˆØ�|‰|˜A‹Ðr9   ró  )	rR   rS   rT   rU   r8   r[   ro  rÔ  rÊ  rË  s   @r7   rƒ  rƒ  º	  s(   ø„ ñõ:ð˜UŸ\™\ð ¨e¯l©l÷ r9   rƒ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚSubModelForFusionc                 ó
  •— t         ‰| �  «        t        j                  dddd ¬«      j	                  t
        j                  ¬«      | _        t        j                  d«      j	                  t
        j                  ¬«      | _	        y )NrV  rg   r,  râ   )
r™  r8   rÊ   r-  r¯   r[   r�   r.  rK  rL  ré  s    €r7   r8   zSubModelForFusion.__init__Ô	  sX   ø€ Ü‰ÑÔÜ—I‘I˜a  A¨DÔ1×4Ñ4¼5¿;¹;Ð4ÓGˆŒ	Ü—.‘. Ó#×&Ñ&¬U¯[©[Ð&Ó9ˆ�r9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   rN  rì  s     r7   rÔ  zSubModelForFusion.forwardÙ	  rO  r9   ró  r  rË  s   @r7   r‰  r‰  Ó	  s   ø„ õ:ö
r9   r‰  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚSubModelWithoutFusionc                 ó  •— t         ‰| �  «        t        j                  dddd ¬«      j	                  t
        j                  ¬«      | _        t        j                  d¬«      j	                  t
        j                  ¬«      | _	        y )NrV  rg   r,  râ   FrÓ   )
r™  r8   rÊ   r-  r¯   r[   r�   r.  rZ  r  ré  s    €r7   r8   zSubModelWithoutFusion.__init__à	  sX   ø€ Ü‰ÑÔÜ—I‘I˜a  A¨DÔ1×4Ñ4¼5¿;¹;Ð4ÓGˆŒ	Ü—G‘G EÔ*×-Ñ-´E·K±KÐ-Ó@ˆ�	r9   c                 óB   — | j                  | j                  |«      «      S rE   )r  r.  rì  s     r7   rÔ  zSubModelWithoutFusion.forwardå	  s   € Ø�y‰y˜Ÿ™ 1›Ó&Ð&r9   ró  r  rË  s   @r7   r�  r�  ß	  s   ø„ õAö
'r9   r�  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚModelForFusionc                 óÚ  •— t         ‰| �  «        t        j                  dddd ¬«      j	                  t
        j                  ¬«      | _        t        j                  d«      j	                  t
        j                  ¬«      | _	        t        j                  d¬«      j	                  t
        j                  ¬«      | _        t        «       | _        t        «       | _        t        j                   dd	«      j	                  t
        j                  ¬«      | _        t%        «       | _        t)        «       | _        || _        t        j.                  ddd
d ¬«      j	                  t
        j                  ¬«      | _        t        j                  d¬«      j	                  t
        j                  ¬«      | _        t        j4                  d«      j	                  t
        j                  ¬«      | _        t        j                  d¬«      j	                  t
        j                  ¬«      | _        t        j:                  ddd«      j	                  t
        j                  ¬«      | _        t        j>                  d«      j	                  t
        j                  ¬«      | _         t        j                  d¬«      j	                  t
        j                  ¬«      | _!        d | j                  _        d | j"                  _        y )Nr—  rV  rg   r,  râ   TrÓ   é$   rf   )rg   rg   rg   F)"r™  r8   rÊ   r-  r¯   r[   r�   rl  rK  Úbn1rZ  r  r‰  ræ  r�  rç  rÒ  r}  r   r’  r   rª  r°  ÚConv3drm  r  ÚBatchNorm3dÚbn2Úrelu3ÚConv1dÚconv3rª  Úbn3Úrelu4rp  s     €r7   r8   zModelForFusion.__init__ê	  sÚ  ø€ Ü‰ÑÔÜ—Y‘Y˜q ! Q¨TÔ2×5Ñ5¼E¿K¹KÐ5ÓHˆŒ
Ü—>‘> !Ó$×'Ñ'¬e¯k©kÐ'Ó:ˆŒÜ—W‘W TÔ*×-Ñ-´E·K±KÐ-Ó@ˆŒ
Ü%Ó'ˆŒ	Ü)Ó+ˆŒ	Ü—)‘)˜B Ó#×&Ñ&¬U¯[©[Ð&Ó9ˆŒÜ“[ˆŒ
Ü"“}ˆŒØˆŒÜ—Y‘Y˜q ! Y°TÔ:×=Ñ=ÄEÇKÁKÐ=ÓPˆŒ
Ü—W‘W UÔ+×.Ñ.´U·[±[Ð.ÓAˆŒ
Ü—>‘> !Ó$×'Ñ'¬e¯k©kÐ'Ó:ˆŒÜ—W‘W TÔ*×-Ñ-´E·K±KÐ-Ó@ˆŒ
Ü—Y‘Y˜q ! QÓ'×*Ñ*´·±Ð*Ó=ˆŒ
Ü—>‘> !Ó$×'Ñ'¬e¯k©kÐ'Ó:ˆŒÜ—W‘W TÔ*×-Ñ-´E·K±KÐ-Ó@ˆŒ
à ˆ�	‰	ÔØˆ�‰�r9   c                 óÌ  — |j                  d«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|j                  d«      }|j                  d«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|j                  dd«      j                  «       }| j                  |«      }| j                  |«      }| j!                  |«      }| j#                  |«      }| j%                  |«      }| j                  |«      }|S )NrV  r•   r“  )r}  r’  rš  r›  rœ  r†  rl  r”  r  ræ  rª  rç  rè   r]  r}  rm  r  r—  r˜  ©r6   r‡  Úys      r7   rÔ  zModelForFusion.forward 
  s  € Ø�I‰I�a‹LˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�J‰J�q‹MˆØ�K‰K˜‹NˆØ�K‰K˜‹NˆØ�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�J‰J�q‹MˆØ�I‰I�a‹LˆØ�L‰L˜‹OˆØ�I‰I�a‹LˆØ�I‰I�b˜"Ó×(Ñ(Ó*ˆØ�G‰G�A‹JˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�J‰J�q‹MˆØ�L‰L˜‹OˆØˆr9   r  rË  s   @r7   r‘  r‘  é	  s   ø„ ôö,r9   r‘  c                   ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )Ú
ConvBNReLUc           	      ó¦   •— t         ‰| �  t        j                  ddddd¬«      t        j                  d«      t        j
                  d¬«      «       y )Nr—  rg   Fr,  rÓ   )r™  r8   rÊ   r-  rK  rZ  ré  s    €r7   r8   zConvBNReLU.__init__
  s;   ø€ Ü‰ÑÜ�I‰I�a˜˜A˜q uÔ-¬r¯~©~¸aÓ/@Ä"Ç'Á'ÐRWÔBXõ	
r9   ró  )rR   rS   rT   r8   rÊ  rË  s   @r7   r¡  r¡  
  s   ø„ ÷
ñ 
r9   r¡  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelWithSequentialFusionc                 óü  •— t         ‰| �  «        t        j                  ddd«      | _        t        j
                  d¬«      | _        t        d«      D �cg c]  }t        «       ‘Œ }}t        j                  |Ž | _
        t        j                  dd«      t        j
                  d¬«      g}t        j                  |Ž | _        t        j                  «       | _        t        «       | _        t!        «       | _        y c c}w )Nr—  rg   FrÓ   é,  rf   )r™  r8   rÊ   r-  rl  rZ  r  rk   r¡  r¿  ÚfeaturesrÒ  Ú
classifierÚseqr   r’  r   rª  )r6   rz   ÚlayersÚheadr¨  s       €r7   r8   z"ModelWithSequentialFusion.__init__ 
  s­   ø€ Ü‰ÑÔÜ—Y‘Y˜q ! QÓ'ˆŒ
Ü—W‘W UÔ+ˆŒ
Ü(-¨a«Ö1 1”*•,Ð1ˆÐ1ÜŸ™ vÐ.ˆŒÜ—	‘	˜#˜rÓ"¤B§G¡G°EÔ$:Ð;ˆÜŸ-™-¨Ð.ˆŒÜ—=‘=“?ˆŒÜ“[ˆŒ
Ü"“}ˆ�ùò 2s   ÁC9c                 ó   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }t	        j
                  |d«      }| j                  |«      }| j                  |«      }| j                  |«      }|S )N)r•   r¦  )	r’  rl  r  r§  r[   rè   r¨  r©  rª  rì  s     r7   rÔ  z!ModelWithSequentialFusion.forward,
  su   € Ø�J‰J�q‹MˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�M‰M˜!ÓˆÜ�M‰M˜!Ð.Ó/ˆØ�O‰O˜AÓˆØ�H‰H�Q‹KˆØ�L‰L˜‹OˆØˆr9   ró  r  rË  s   @r7   r¤  r¤  
  s   ø„ õ
%ö	r9   r¤  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelForFusionWithBiasc                 ó   •— t         ‰| �  «        t        j                  dddd¬«      j	                  t
        j                  ¬«      | _        t        j                  d«      j	                  t
        j                  ¬«      | _	        t        j                  d¬«      j	                  t
        j                  ¬«      | _        t        j                  dddd¬«      j	                  t
        j                  ¬«      | _        t        j                  d«      j	                  t
        j                  ¬«      | _        t        «       | _        t!        «       | _        y )	Nr—  rV  r¬   Tr,  râ   rÓ   rg   )r™  r8   rÊ   r-  r¯   r[   r�   rl  rK  r”  rZ  r  rm  r—  r   r’  r   rª  ré  s    €r7   r8   zModelForFusionWithBias.__init__9
  sÖ   ø€ Ü‰ÑÔÜ—Y‘Y˜q ! Q¨TÔ2×5Ñ5¼E¿K¹KÐ5ÓHˆŒ
Ü—>‘> !Ó$×'Ñ'¬e¯k©kÐ'Ó:ˆŒÜ—W‘W TÔ*×-Ñ-´E·K±KÐ-Ó@ˆŒ
Ü—Y‘Y˜q ! Q¨TÔ2×5Ñ5¼E¿K¹KÐ5ÓHˆŒ
Ü—>‘> !Ó$×'Ñ'¬e¯k©kÐ'Ó:ˆŒÜ“[ˆŒ
Ü"“}ˆ�r9   c                 óô   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }| j                  |«      }|S rE   )r’  rl  r”  r  rm  r—  rª  rì  s     r7   rÔ  zModelForFusionWithBias.forwardC
  sb   € Ø�J‰J�q‹MˆØ�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�L‰L˜‹OˆØˆr9   ró  r  rË  s   @r7   r®  r®  8
  s   ø„ õ%ör9   r®  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelForLinearBNFusionc                 óX  •— t         ‰| �  «        t        j                  dd«      | _        t        j
                  d«      | _        t        j                  j                  | j                  j                  «       t        j                  j                  | j                  j                  «       y )Né   rf   )r™  r8   rÊ   rÒ  r}  rª  rL  ÚinitÚuniform_rü  rý  ré  s    €r7   r8   zModelForLinearBNFusion.__init__O
  sd   ø€ Ü‰ÑÔÜ—)‘)˜B Ó#ˆŒÜ—.‘. Ó$ˆŒÜ
�‰×Ñ˜Ÿ™Ÿ™Ô(Ü
�‰×Ñ˜Ÿ™Ÿ™Õ&r9   c                 óB   — | j                  | j                  |«      «      S rE   )rL  r}  rì  s     r7   rÔ  zModelForLinearBNFusion.forwardV
  s   € Ø�w‰w�t—w‘w˜q“zÓ"Ð"r9   ró  r  rË  s   @r7   r²  r²  N
  s   ø„ õ'ö#r9   r²  c                   ó   — e Zd Zd„ Zd„ Zy)ÚDummyObserverc                  ó   — y)N)g      ð?r   rW   rG   s    r7   Úcalculate_qparamszDummyObserver.calculate_qparams[
  s   € Ør9   c                 ó   — |S rE   rW   rì  s     r7   rÔ  zDummyObserver.forward^
  s   € Øˆr9   N)rR   rS   rT   r»  rÔ  rW   r9   r7   r¹  r¹  Z
  s   „ òór9   r¹  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelForConvTransposeBNFusionc                 óf  •— t         ‰| �  «        t        j                  ddd«      | _        t        j
                  d«      | _        t        j                  ddd«      | _        t        j                  d«      | _
        t        j                  ddd«      | _        t        j                  d«      | _        y )Nr—  rg   )r™  r8   rÊ   ÚConvTranspose1drl  rª  r”  r8  rm  rK  r—  ÚConvTranspose3drš  r–  r›  ré  s    €r7   r8   z&ModelForConvTransposeBNFusion.__init__c
  s€   ø€ Ü‰ÑÔÜ×'Ñ'¨¨1¨aÓ0ˆŒ
Ü—>‘> !Ó$ˆŒÜ×'Ñ'¨¨1¨aÓ0ˆŒ
Ü—>‘> !Ó$ˆŒÜ×'Ñ'¨¨1¨aÓ0ˆŒ
Ü—>‘> !Ó$ˆ�r9   c                 ó  — | j                  |«      }| j                  |«      }|j                  d«      }| j                  |«      }| j	                  |«      }|j                  d«      }| j                  |«      }| j                  |«      }|S )NrV  )rl  r”  r†  rm  r—  rš  r›  rì  s     r7   rÔ  z%ModelForConvTransposeBNFusion.forwardl
  so   € Ø�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�K‰K˜‹NˆØ�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�K‰K˜‹NˆØ�J‰J�q‹MˆØ�H‰H�Q‹KˆØˆr9   ró  r  rË  s   @r7   r¾  r¾  b
  s   ø„ õ%ö	r9   r¾  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelWithFunctionalsc                 óê   •— t         ‰| �  «        t        j                  «       | _        t        j                  «       | _        t        j                  «       | _        t        j                  «       | _        y rE   )r™  r8   rË  ÚFloatFunctionalÚmycatÚmyaddÚ
myadd_reluÚmymatmulré  s    €r7   r8   zModelWithFunctionals.__init__y
  sN   ø€ Ü‰ÑÔÜ×(Ñ(Ó*ˆŒ
Ü×(Ñ(Ó*ˆŒ
Ü×-Ñ-Ó/ˆŒÜ×+Ñ+Ó-ˆ�r9   c                 óþ   — | j                   j                  |||g«      }| j                  j                  ||«      }| j                  j                  ||«      }| j                  j                  ||j                  «      }|S rE   )	rÇ  rh  rÈ  r{  rÉ  Úadd_relurÊ  ÚmatmulÚT)r6   r‡  rŸ  Úzri  Úus         r7   rÔ  zModelWithFunctionals.forward„
  se   € Ø�J‰J�N‰N˜A˜q !˜9Ó%ˆØ�J‰J�N‰N˜1˜aÓ ˆØ�O‰O×$Ñ$ Q¨Ó*ˆØ�M‰M× Ñ   A§C¡CÓ(ˆð
 ˆr9   ró  r  rË  s   @r7   rÄ  rÄ  x
  s   ø„ õ.ö	r9   rÄ  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )Ú
ResNetBasec                 ó
  •— t         ‰| �  «        t        j                  }d}t        j                  ||dd¬«      | _         ||«      | _        t        j                  «       | _        t        j                  «       | _	        t        j                  j                  «       | _        t        j                  j                  «       | _        t        j                   d«      | _        t        j                  j%                  |d«      | _        y )Nr—  r1  Fr,  rg   )r™  r8   rÊ   rK  r-  rl  r”  rZ  r  r  r[   ÚIdentityÚ
downsampler  rÆ  ÚmyopÚAdaptiveAvgPool2dÚavgpoolrÒ  r}  ©r6   Ú
norm_layerÚinplanesr¨  s      €r7   r8   zResNetBase.__init__‘
  s¨   ø€ Ü‰ÑÔÜ—^‘^ˆ
ØˆÜ—Y‘Y˜x¨°6ÀÔFˆŒ
Ù˜hÓ'ˆŒÜ—W‘W“YˆŒ
Ü—W‘W“YˆŒ
ÜŸ(™(×+Ñ+Ó-ˆŒÜ—L‘L×0Ñ0Ó2ˆŒ	Ü×+Ñ+¨FÓ3ˆŒÜ—(‘(—/‘/ (¨AÓ.ˆ�r9   c                 óX  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  j                  ||«      }| j                  |«      }| j                  |«      }t        j                  |d«      }| j                  |«      }|S )Nrg   )rl  r”  r  rÕ  rÖ  r{  r  rØ  r[   Úflattenr}  ©r6   r‡  rr  Úidentitys       r7   rÔ  zResNetBase.forwardž
  sˆ   € Ø�j‰j˜‹mˆØ�h‰h�s‹mˆØ�j‰j˜‹oˆØ—?‘? 1Ó%ˆØ�i‰i�m‰m˜C Ó*ˆØ�j‰j˜‹oˆØ�l‰l˜3ÓˆÜ�m‰m˜C Ó#ˆØ�g‰g�c‹lˆØˆ
r9   c                 óÚ   — | j                   r0t        j                  j                  j	                  | g d¢gd¬«       y t        j                  j                  j                  | g d¢gd¬«       y )N)rl  r”  r  TrÓ   rc  rG   s    r7   rg  zResNetBase.fuse_modelª
  s[   € à�=Š=Ü�H‰H×!Ñ!×2Ñ2ØÒ0Ð1¸4ð 3õ ô �H‰H×!Ñ!×.Ñ.ØÒ0Ð1¸4ð /õ r9   ró  )rR   rS   rT   r8   rÔ  rg  rÊ  rË  s   @r7   rÒ  rÒ  �
  s   ø„ õ/ò
ö	r9   rÒ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelMultipleOpsc                 óx  •— t         ‰| �  «        t        j                  }d}t        j                  ||dd¬«      | _        t        j                  ||dd¬«      | _         ||«      | _        t        j                  «       | _	        t        j                  «       | _
        t        j                  j                  «       | _        t        j                  j                  «       | _        t        j                  j                  «       | _        t        j$                  d«      | _        t        j(                  dd«      | _        y ©Nr—  r1  Fr,  )rÜ   rÜ   r}  é   )r™  r8   rÊ   rK  r-  rl  rm  r”  rZ  r  r  r[   rÔ  rÕ  r  rÆ  Úskip_addrh  r×  rØ  rÒ  r}  rÙ  s      €r7   r8   zModelMultipleOps.__init__·
  sÎ   ø€ Ü‰ÑÔÜ—^‘^ˆ
ØˆÜ—Y‘Y˜x¨°6ÀÔFˆŒ
Ü—Y‘Y˜x¨°6ÀÔFˆŒ
Ù˜hÓ'ˆŒÜ—W‘W“YˆŒ
Ü—W‘W“YˆŒ
ÜŸ(™(×+Ñ+Ó-ˆŒÜŸ™×4Ñ4Ó6ˆŒÜ—<‘<×/Ñ/Ó1ˆŒÜ×+Ñ+¨FÓ3ˆŒÜ—)‘)˜B Ó"ˆ�r9   c                 ó  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  j                  ||«      }| j                  |«      }| j                  |«      }| j                  |«      }t        j                  j                  j                  |dd«      }| j                  j                  ||g«      }|j                  dd«      }| j                  |«      }|S ©NrV  r•   r}  )rl  r”  r  rÕ  ræ  r{  r  rØ  rm  r[   rÊ   Ú
functionalÚ
max_pool2drh  rè   r}  rÞ  s       r7   rÔ  zModelMultipleOps.forwardÆ
  sË   € Ø�j‰j˜‹mˆØ�h‰h�s‹mˆØ�j‰j˜‹oˆØ—?‘? 1Ó%ˆØ�m‰m×Ñ  XÓ.ˆØ�j‰j˜‹oˆØ�l‰l˜3ÓˆØ�j‰j˜‹oˆÜ�h‰h×!Ñ!×,Ñ,¨S°!°QÓ7ˆØ�h‰h�l‰l˜C ˜:Ó&ˆØ�k‰k˜"˜iÓ(ˆØ�g‰g�c‹lˆØˆ
r9   ró  r  rË  s   @r7   râ  râ  ¶
  s   ø„ õ#ör9   râ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelMultipleOpsNoAvgPoolc                 ó2  •— t         ‰| �  «        t        j                  }d}t        j                  ||dd¬«      | _        t        j                  ||dd¬«      | _         ||«      | _        t        j                  «       | _	        t        j                  «       | _
        t        j                  j                  «       | _        t        j                  j                  «       | _        t        j                  d«      | _        t        j"                  dd«      | _        y rä  )r™  r8   rÊ   rK  r-  rl  rm  r”  rZ  r  r  r  rÆ  ræ  rh  Ú	MaxPool2dÚmaxpoolrÒ  r}  rÙ  s      €r7   r8   z"ModelMultipleOpsNoAvgPool.__init__Û
  s¸   ø€ Ü‰ÑÔÜ—^‘^ˆ
ØˆÜ—Y‘Y˜x¨°6ÀÔFˆŒ
Ü—Y‘Y˜x¨°6ÀÔFˆŒ
Ù˜hÓ'ˆŒÜ—W‘W“YˆŒ
Ü—W‘W“YˆŒ
ÜŸ™×4Ñ4Ó6ˆŒÜ—<‘<×/Ñ/Ó1ˆŒÜ—|‘| FÓ+ˆŒÜ—)‘)˜B Ó"ˆ�r9   c                 ó  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  j                  ||«      }| j                  |«      }| j                  |«      }| j                  |«      }t        j                  j                  j                  |dd«      }| j                  j                  ||g«      }|j                  dd«      }| j                  |«      }|S rè  )rl  r”  r  rm  ræ  r{  r  rï  r[   rÊ   ré  rê  rh  rè   r}  )r6   r‡  rr  Úskips       r7   rÔ  z!ModelMultipleOpsNoAvgPool.forwardé
  sÊ   € Ø�j‰j˜‹mˆØ�h‰h�s‹mˆØ�j‰j˜‹oˆØ�z‰z˜!‹}ˆØ�m‰m×Ñ  TÓ*ˆØ�j‰j˜‹oˆØ�l‰l˜3ÓˆØ�j‰j˜‹oˆÜ�h‰h×!Ñ!×,Ñ,¨S°!°QÓ7ˆØ�h‰h�l‰l˜C ˜:Ó&ˆØ�k‰k˜"˜iÓ(ˆØ�g‰g�c‹lˆØˆ
r9   ró  r  rË  s   @r7   rì  rì  Ú
  s   ø„ õ#ör9   rì  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚEmbeddingBagModulec                 ót   •— t         ‰| �  «        t        j                  j	                  ddddd¬«      | _        y )Nrf   r}  TFrs   r¥  )r™  r8   r[   rÊ   r±  r~  ré  s    €r7   r8   zEmbeddingBagModule.__init__ú
  s8   ø€ Ü‰ÑÔÜ—8‘8×(Ñ(ØØØ $Ø$Øð )ó 
ˆ�r9   c                 ó(   — | j                  |||«      S rE   ©r~  )r6   r¸  r¹  r  s       r7   rÔ  zEmbeddingBagModule.forward  s   € Ø�x‰x˜ Ð*<Ó=Ð=r9   ró  r  rË  s   @r7   ró  ró  ù
  s   ø„ õ
ö>r9   ró  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚEmbeddingModulec                 ón   •— t         ‰| �  «        t        j                  j	                  dd¬«      | _        y ©Nrf   r}  r§  ©r™  r8   r[   rÊ   r²  r~  ré  s    €r7   r8   zEmbeddingModule.__init__	  s)   ø€ Ü‰ÑÔÜ—8‘8×%Ñ%°RÀrÐ%ÓJˆ�r9   c                 ó$   — | j                  |«      S rE   rö  ©r6   r¸  s     r7   rÔ  zEmbeddingModule.forward  s   € Ø�x‰x˜Ó Ð r9   ró  r  rË  s   @r7   rø  rø    s   ø„ õKö!r9   rø  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚEmbeddingWithStaticLinearc                 ó4  •— t         ‰| �  «        t        j                  j	                  dd¬«      | _        t        j                  j                  dd«      | _        t        | j
                  _	        t        | _	        t        «       | _        t        «       | _        y )Nrf   r}  r§  rÜ   rV  )r™  r8   r[   rÊ   r±  r~  rÒ  r}  r   r°  r   r   r’  r   rª  ré  s    €r7   r8   z"EmbeddingWithStaticLinear.__init__  sd   ø€ Ü‰ÑÔÜ—8‘8×(Ñ(¸È"Ð(ÓMˆŒÜ—(‘(—/‘/ ! QÓ'ˆŒÜ<ˆ�‰ÔÜ&ˆŒÜ“[ˆŒ
Ü"“}ˆ�r9   c                 óÈ   — | j                  ||«      }| j                  |«      }| j                  |«      }| j                  |«      }t	        j
                  |g|gz   d¬«      }|S r‡  )r~  r’  r}  rª  r[   rh  )r6   r¸  r¹  Ú	linear_inr~  Úq_xr}  r§  s           r7   rÔ  z!EmbeddingWithStaticLinear.forward  sX   € Ø�h‰h�w Ó(ˆØ�j‰j˜Ó#ˆØ�W‰W�S‹\ˆØ�\‰\˜"ÓˆÜ—9‘9˜b˜T S E™\¨qÔ1ˆØˆr9   ró  r  rË  s   @r7   rÿ  rÿ    s   ø„ õ%ör9   rÿ  c                   ót   ‡ — e Zd Z	 	 dˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚDenseTopMLPrO  c                 ó
  •— t         ‰| �  «        t        j                  t        j                  ||«      «      | _        t        j                  t        j                  ||z   |«      t        j                  ||«      «      | _        y rE   )r™  r8   rÊ   r¿  rÒ  Ú	dense_mlpÚtop_mlp)r6   Ú	dense_dimÚ	dense_outr¢  Ú
top_out_inÚtop_out_outr¨  s         €r7   r8   zDenseTopMLP.__init__%  sa   ø€ ô 	‰ÑÔäŸ™Ü�I‰I�i Ó+ó
ˆŒô —}‘}Ü�I‰I�i -Ñ/°Ó<Ü�I‰I�j +Ó.ó
ˆ�r9   Úsparse_featureÚdensec                 ó‚   — | j                  |«      }t        j                  |g|gz   d¬«      }| j                  |«      }|S r‡  )r  r[   rh  r  )r6   r  r  Údense_featurer§  rr  s         r7   rÔ  zDenseTopMLP.forward2  s?   € ð
 Ÿ™ uÓ-ˆÜ—9‘9˜m˜_°Ð/?Ñ?ÀQÔGˆà�l‰l˜8Ó$ˆØˆ
r9   ró  r�  rË  s   @r7   r  r  $  s=   ø„ ð
à	õ
ð	àŸ™ð	ð �|‰|ð	ð 
�‰÷		r9   r  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚEmbBagWrapperc                 ó\   •— t         ‰| �  «        t        j                  ||d¬«      | _        y )Nrs   )r¤  )r™  r8   rÊ   r±  Úemb_bag)r6   r¡  r¢  r¨  s      €r7   r8   zEmbBagWrapper.__init__A  s"   ø€ Ü‰ÑÔÜ—‘ ~°}È5ÔQˆ�r9   c                 ó&   — | j                  ||«      S rE   )r  )r6   r¸  r¹  s      r7   rÔ  zEmbBagWrapper.forwardE  s   € Ø�|‰|˜G WÓ-Ð-r9   r  rË  s   @r7   r  r  @  s   ø„ ôRö.r9   r  c                   ó¤   ‡ — e Zd ZdZdZdZdZdZdZdZ	dˆ fd„Z
dej                  d	ej                  d
ej                  dej                  fd„Zˆ xZS )ÚSparseNNModelrf   r¬   rÜ   rV  rg   rO  c                 óø   •— t         ‰| �  «        t        | j                  | j                  «      | _        t        | j                  | j                  | j                  | j                  | j                  «      | _        y rE   )r™  r8   r  Ú_NUM_EMBEDDINGSÚ_EMBEDDING_DIMÚmodel_sparser  Ú
_DENSE_DIMÚ_DENSE_OUTPUTÚ_TOP_OUT_INÚ_TOP_OUT_OUTÚ	dense_topré  s    €r7   r8   zSparseNNModel.__init__R  s`   ø€ Ü‰ÑÔä)¨$×*>Ñ*>À×@SÑ@SÓTˆÔÜ$Ø�O‰OØ×ÑØ×ÑØ×ÑØ×Ñó
ˆ�r9   Úsparse_indicesÚsparse_offsetsr  c                 óN   — | j                  ||«      }| j                  ||«      }|S rE   )r  r   )r6   r!  r"  r  r  rr  s         r7   rÔ  zSparseNNModel.forward^  s+   € ð ×*Ñ*¨>¸>ÓJˆØ�n‰n˜^¨UÓ3ˆàˆ
r9   ró  )rR   rS   rT   r  r  r  r  r  r  Ú_TOP_MLP_DIMr8   r[   ro  rÔ  rÊ  rË  s   @r7   r  r  I  sf   ø„ Ø€OØ€NØ€JØ€MØ€KØ€LØ€Lõ

ð	àŸ™ð	ð Ÿ™ð	ð �|‰|ð		ð
 
�‰÷	r9   r  c                   óÜ  — e Zd Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z	 G d	„ d
ej                  j
                  «      Z
 G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ d ej                  j
                  «      Z G d!„ d"ej                  j
                  «      Z G d#„ d$ej                  j
                  «      Z G d%„ d&ej                  j
                  «      Z G d'„ d(ej                  j
                  «      Z G d)„ d*ej                  j
                  «      Z G d+„ d,ej                  j
                  «      Z G d-„ d.ej                  j
                  «      Z G d/„ d0ej                  j
                  «      Zy1)2ÚTestHelperModulesc            
       ó’   — e Zd Zdej                  dej                  dej                  dej                  dej                  f
d„Zd„ Zy)	úTestHelperModules.ControlFlowÚxsÚpred1Úpred2rŸ  rO  c           
      ó\  ‡‡‡‡	— dt         j                  dt         j                  fd„Š	dt         j                  dt         j                  fd„Šdt         j                  dt         j                  dt         j                  fˆˆ	fd„Šdt         j                  dt         j                  fd„Šdt         j                  d	t         j                  dt         j                  dt         j                  dt         j                  f
ˆˆfd
„}t        j                  ||«      }t        j                  |||||«      S )NrŸ  rO  c                 ó<   — | | z   } t        j                  | | «      } | S rE   ©r[   Úmm©rŸ  s    r7   Útrue_nestedz:TestHelperModules.ControlFlow.forward.<locals>.true_nesteds  s   € Ø˜‘E�Ü—H‘H˜Q “N�Ø�r9   c                 ó.   — t        j                  | | «      S rE   r.  r0  s    r7   Úfalse_nestedz;TestHelperModules.ControlFlow.forward.<locals>.false_nestedx  s   € Ü—x‘x  1“~Ð%r9   r‡  r+  c                 ó@   •— t        j                  |‰‰| g«      }| |z   S rE   )r   Úcond)r‡  r+  rÏ  r3  r1  s      €€r7   Útrue_fnz6TestHelperModules.ControlFlow.forward.<locals>.true_fn{  s$   ø€ Ü ×%Ñ% e¨[¸,ÈÈÓL�Ø˜1‘u�r9   c                 ó"   — | j                  «       S rE   )Úcos)r‡  rz   s     r7   Úfalse_fnz7TestHelperModules.ControlFlow.forward.<locals>.false_fn  s   € Ø—u‘u“w�r9   r*  c                 ó‚   •— | j                  «       } t        j                  |‰‰||g«      }| |z   } | j                  «       S rE   )r8  r   r5  Úsin)r‡  r*  r+  rŸ  r9  r6  s       €€r7   Úmap_fnz5TestHelperModules.ControlFlow.forward.<locals>.map_fn‚  s>   ø€ ð —E‘E“G�Ü ×%Ñ% e¨W°hÀÀEÀ
ÓK�Ø˜‘E�Ø—u‘u“w�r9   )r[   ro  r/  r   rG  )
r6   r)  r*  r+  rŸ  r<  r9  r3  r6  r1  s
         @@@@r7   rÔ  z%TestHelperModules.ControlFlow.forwardl  së   û€ ðœuŸ|™|ð ´·±ó ð
&¤§¡ð &´·±ó &ðœ5Ÿ<™<ð ´·±ð ÄÇÁö ðœEŸL™Lð ´·±ó ð	Ü—<‘<ð	ä—|‘|ð	ô —|‘|ð	ô —<‘<ð		ô
 —‘ö	ô —‘˜˜A“ˆAÜ×#Ñ# F¨B°°u¸aÓ@Ð@r9   c                 ó®   — t        j                  dd«      t        j                  dg«      t        j                  dg«      t        j                  dd«      fS )NrV  F)r[   Úonesrç   rG   s    r7   r†  z,TestHelperModules.ControlFlow.example_inputs�  sD   € ä—
‘
˜1˜aÓ Ü—‘˜e˜WÓ%Ü—‘˜e˜WÓ%Ü—
‘
˜1˜aÓ ð	ð r9   N)rR   rS   rT   r[   ro  rÔ  r†  rW   r9   r7   ÚControlFlowr(  k  sW   „ ð"	Aà—‘ð"	Að —<‘<ð"	Að —<‘<ð	"	Að
 �|‰|ð"	Að �\‰\ó"	AóH	r9   r?  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú%TestHelperModules.Conv2dPropAnnotatonc                 ó¸   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  dd«      | _        y ©Nr—  )r™  r8   r[   rÊ   r-  r.  rÒ  r©  ré  s    €r7   r8   z.TestHelperModules.Conv2dPropAnnotaton.__init__™  s<   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜŸ(™(Ÿ/™/¨!¨QÓ/ˆD�Kr9   c                 óÄ   — | j                  |«      }|j                  dd«      }t        j                  j                  j                  |dd«      }| j                  |«      }|S )Nr•   r—  g      à¿rj  )r.  r›   r[   rÊ   ré  Úhardtanhr©  rì  s     r7   rÔ  z-TestHelperModules.Conv2dPropAnnotaton.forwardž  sN   € Ø—	‘	˜!“ˆAØ—‘�r˜1“ˆAÜ—‘×#Ñ#×,Ñ,¨Q°°cÓ:ˆAØ—‘˜A“ˆAØˆHr9   ró  r  rË  s   @r7   ÚConv2dPropAnnotatonrA  ˜  s   ø„ õ	0ö
	r9   rF  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú)TestHelperModules.Conv2dWithObsSharingOpsc                 óü   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  «       | _        t        j                  j                  d«      | _	        y ©Nr—  r1  )
r™  r8   r[   rÊ   r-  r.  ÚHardtanhrE  r×  Úadaptive_avg_pool2dré  s    €r7   r8   z2TestHelperModules.Conv2dWithObsSharingOps.__init__¦  sQ   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜ!ŸH™H×-Ñ-Ó/ˆDŒMÜ',§x¡x×'AÑ'AÀ&Ó'IˆDÕ$r9   c                 ó–   — | j                  |«      }| j                  |«      }| j                  |«      }t        j                  |«      }|S rE   )r.  rL  rE  r[   Úmeanrì  s     r7   rÔ  z1TestHelperModules.Conv2dWithObsSharingOps.forward¬  s?   € Ø—	‘	˜!“ˆAØ×(Ñ(¨Ó+ˆAØ—‘˜aÓ ˆAÜ—
‘
˜1“ˆAØˆHr9   ró  r  rË  s   @r7   ÚConv2dWithObsSharingOpsrH  ¥  s   ø„ õ	Jö	r9   rO  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú,TestHelperModules.Conv2dWithTwoLinearPermutec                 ó  •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  ddd¬«      | _        t        j                  j                  dd«      | _        y )Nr—  é   r  Fr,  ©	r™  r8   r[   rÊ   r-  r.  rÒ  r  r  ré  s    €r7   r8   z5TestHelperModules.Conv2dWithTwoLinearPermute.__init__´  óV   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨2¨qÓ1ˆDŒIÜ Ÿ8™8Ÿ?™?¨2¨q°u˜?Ó=ˆDŒLÜ Ÿ8™8Ÿ?™?¨1¨aÓ0ˆD�Lr9   c                 ó�   — | j                  |«      }t        j                  |d«      }| j                  | j	                  |«      «      S ©N©r   rV  r—  rg   )r.  r[   Úpermuter  r  ©r6   r‡  Úconv_outÚpermute_outs       r7   rÔ  z4TestHelperModules.Conv2dWithTwoLinearPermute.forwardº  s7   € Ø—y‘y “|ˆHÜŸ-™-¨°,Ó?ˆKØ—<‘< §¡¨[Ó 9Ó:Ð:r9   ró  r  rË  s   @r7   ÚConv2dWithTwoLinearPermuterQ  ³  ó   ø„ õ	1ö	;r9   r]  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú%TestHelperModules.Conv2dWithTwoLinearc                 ó  •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  ddd¬«      | _        t        j                  j                  dd«      | _        y )Nr—  rS  ru  r  Fr,  rT  ré  s    €r7   r8   z.TestHelperModules.Conv2dWithTwoLinear.__init__À  rU  r9   c                 ó�   — | j                  |«      }t        j                  |d«      }| j                  | j	                  |«      «      S )N)rV  ru  )r.  r[   rè   r  r  )r6   r‡  r[  Úreshape_outs       r7   rÔ  z-TestHelperModules.Conv2dWithTwoLinear.forwardÆ  s7   € Ø—y‘y “|ˆHÜŸ-™-¨°'Ó:ˆKØ—<‘< §¡¨[Ó 9Ó:Ð:r9   ró  r  rË  s   @r7   ÚConv2dWithTwoLinearr`  ¿  r^  r9   rd  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú$TestHelperModules.ConvLinearWPermutec                 ó¸   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  dd«      | _        y )Nr—  r  )r™  r8   r[   rÊ   r-  r.  rÒ  r  ré  s    €r7   r8   z-TestHelperModules.ConvLinearWPermute.__init__Ì  s<   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜ Ÿ8™8Ÿ?™?¨1¨aÓ0ˆD�Lr9   c                 ór   — | j                  |«      }t        j                  |d«      }| j                  |«      S rW  )r.  r[   rY  r  rZ  s       r7   rÔ  z,TestHelperModules.ConvLinearWPermute.forwardÑ  s.   € Ø—y‘y “|ˆHÜŸ-™-¨°,Ó?ˆKØ—<‘< Ó,Ð,r9   ró  r  rË  s   @r7   ÚConvLinearWPermuterf  Ë  s   ø„ õ	1ö
	-r9   ri  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )ú!TestHelperModules.TwoLinearModulec                 óº   •— t         ‰| �  «        t        j                  j	                  ddd¬«      | _        t        j                  j	                  dd«      | _        y )Nr  rS  Fr,  )r™  r8   r[   rÊ   rÒ  r  r  ré  s    €r7   r8   z*TestHelperModules.TwoLinearModule.__init__×  s>   ø€ Ü‰GÑÔÜ Ÿ8™8Ÿ?™?¨1¨b°u˜?Ó=ˆDŒLÜ Ÿ8™8Ÿ?™?¨2¨qÓ1ˆD�Lr9   c                 óB   — | j                  | j                  |«      «      S rE   )r  r  rì  s     r7   rÔ  z)TestHelperModules.TwoLinearModule.forwardÜ  s   € Ø—<‘< §¡¨Q£Ó0Ð0r9   c                 ó0   — t        j                  dd«      fS )NrV  r  ©r[   ÚrandnrG   s    r7   r†  z0TestHelperModules.TwoLinearModule.example_inputsß  s   € Ü—K‘K  1Ó%Ð'Ð'r9   ró  ©rR   rS   rT   r8   rÔ  r†  rÊ  rË  s   @r7   ÚTwoLinearModulerk  Ö  s   ø„ õ	2ò
	1ö	(r9   rr  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )úTestHelperModules.ConvMaxPool2dc                 ó¸   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  dd«      | _        y )NrV  rg   )r™  r8   r[   rÊ   r-  r.  rî  Úpoolré  s    €r7   r8   z(TestHelperModules.ConvMaxPool2d.__init__ã  s>   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜŸ™×*Ñ*¨1¨aÓ0ˆD�Ir9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   )r.  rv  rì  s     r7   rÔ  z'TestHelperModules.ConvMaxPool2d.forwardè  s!   € Ø—	‘	˜!“ˆAØ—	‘	˜!“ˆAØˆHr9   ró  r  rË  s   @r7   ÚConvMaxPool2drt  â  s   ø„ õ	1ö
	r9   rx  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú+TestHelperModules.ConvWithAdaptiveAvgPool2dc                 ó¶   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  d«      | _        y rJ  )r™  r8   r[   rÊ   r-  r.  r×  rL  ré  s    €r7   r8   z4TestHelperModules.ConvWithAdaptiveAvgPool2d.__init__î  s=   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜ',§x¡x×'AÑ'AÀ&Ó'IˆDÕ$r9   c                 óJ   — | j                  |«      }| j                  |«      }|S rE   )r.  rL  rì  s     r7   rÔ  z3TestHelperModules.ConvWithAdaptiveAvgPool2d.forwardó  s$   € Ø—	‘	˜!“ˆAØ×(Ñ(¨Ó+ˆAØˆHr9   ró  r  rË  s   @r7   ÚConvWithAdaptiveAvgPool2drz  í  s   ø„ õ	Jö
	r9   r}  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ú TestHelperModules.ConvWithBNReluc                 ó‚  •— t         ‰| �  «        t        j                  j                  t        j                  j
                  t        j                  j                  dœ}t        j                  j                  t        j                  j                  t        j                  j                  dœ} ||   ddd||¬«      | _
        |r ||   d«      | _        n#t        j                  j                  «       | _        |r$t        j                  j                  «       | _        y t        j                  j                  «       | _        y )Nr˜  r—  )rý  r3  )r™  r8   r[   rÊ   r™  r-  r•  rª  rK  r–  r.  rL  rÔ  rZ  r  )	r6   r  rX  rL  rý  r3  ÚconvsÚbnsr¨  s	           €r7   r8   z)TestHelperModules.ConvWithBNRelu.__init__ù  sÌ   ø€ Ü‰GÑÔÜŸ™Ÿ™¬E¯H©H¯O©OÄÇÁÇÁÑPˆEä—8‘8×'Ñ'Ü—8‘8×'Ñ'Ü—8‘8×'Ñ'ñˆCð
 #˜˜c™
 1 a¨°¸wÔGˆDŒIáØ"˜#˜c™( 1›+�•äŸ(™(×+Ñ+Ó-�”ÙÜ!ŸH™HŸM™M›O�•	ä!ŸH™H×-Ñ-Ó/�•	r9   c                 óh   — | j                  |«      }| j                  |«      }| j                  |«      S rE   r\  rì  s     r7   rÔ  z(TestHelperModules.ConvWithBNRelu.forward  s*   € Ø—	‘	˜!“ˆAØ—‘˜“
ˆAØ—9‘9˜Q“<Ðr9   )rV  TTr   r  rË  s   @r7   ÚConvWithBNRelur  ø  s   ø„ õ	0ö&	 r9   r„  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ú!TestHelperModules.ConvTWithBNReluc                 ó  •— t         ‰| �  «        t        j                  j                  t        j                  j
                  dœ}t        j                  j                  t        j                  j                  dœ} ||   ddd|¬«      | _        |r ||   d«      | _	        n#t        j                  j                  «       | _	        |r$t        j                  j                  «       | _        y t        j                  j                  «       | _        y )N)rg   rV  r—  r,  )r™  r8   r[   rÊ   rÀ  r8  rª  rK  ÚconvtrL  rÔ  rZ  r  )r6   r  rX  rL  rý  Úconvtsr‚  r¨  s          €r7   r8   z*TestHelperModules.ConvTWithBNRelu.__init__  s²   ø€ Ü‰GÑÔÜŸ™×1Ñ1´e·h±h×6NÑ6NÑOˆFÜ—h‘h×*Ñ*¬u¯x©x×/CÑ/CÑDˆCØ$˜ ™ Q¨¨1°4Ô8ˆDŒJáØ"˜#˜c™( 1›+�•äŸ(™(×+Ñ+Ó-�”ÙÜ!ŸH™HŸM™M›O�•	ä!ŸH™H×-Ñ-Ó/�•	r9   c                 óh   — | j                  |«      }| j                  |«      }| j                  |«      S rE   )rˆ  rL  r  rì  s     r7   rÔ  z)TestHelperModules.ConvTWithBNRelu.forward!  s*   € Ø—
‘
˜1“ˆAØ—‘˜“
ˆAØ—9‘9˜Q“<Ðr9   )rV  TTr  rË  s   @r7   ÚConvTWithBNRelur†    s   ø„ õ	0ö	 r9   r‹  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )ú"TestHelperModules.Conv2dThenConv1dc                 óº   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  ddd«      | _        y rC  )r™  r8   r[   rÊ   r™  ri  r-  r6  ré  s    €r7   r8   z+TestHelperModules.Conv2dThenConv1d.__init__'  s>   ø€ Ü‰GÑÔÜŸ(™(Ÿ/™/¨!¨Q°Ó2ˆDŒKÜŸ(™(Ÿ/™/¨!¨Q°Ó2ˆD�Kr9   c                 ól   — | j                  |«      }|j                  d«      }| j                  |«      }|S r‡   )r6  r}  ri  rì  s     r7   rÔ  z*TestHelperModules.Conv2dThenConv1d.forward,  s.   € Ø—‘˜A“ˆAØ—	‘	˜!“ˆAØ—‘˜A“ˆAØˆHr9   c                 ó4   — t        j                  dddd«      fS r3  ro  rG   s    r7   r†  z1TestHelperModules.Conv2dThenConv1d.example_inputs2  s   € Ü—K‘K  1 a¨Ó+Ð-Ð-r9   ró  rq  rË  s   @r7   ÚConv2dThenConv1dr�  &  s   ø„ õ	3ò
	ö	.r9   r‘  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )úTestHelperModules.Conv2dWithCatc                 óº   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j	                  ddd«      | _        y rC  ©r™  r8   r[   rÊ   r-  rl  rm  ré  s    €r7   r8   z(TestHelperModules.Conv2dWithCat.__init__6  ó>   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨A¨qÓ1ˆDŒJÜŸ™Ÿ™¨¨A¨qÓ1ˆD�Jr9   c                 ó|   — | j                  |«      }| j                  |«      }t        j                  ||gd¬«      }|S r‡  ©rl  rm  r[   rh  )r6   r‡  rŸ  rÏ  s       r7   rÔ  z'TestHelperModules.Conv2dWithCat.forward;  s5   € Ø—
‘
˜1“ˆAØ—
‘
˜1“ˆAÜ—	‘	˜1˜a˜& aÔ(ˆAØˆHr9   ró  r  rË  s   @r7   ÚConv2dWithCatr“  5  s   ø„ õ	2ö
	r9   r™  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú"TestHelperModules.Conv2dWithTwoCatc                 óº   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j	                  ddd«      | _        y rC  r•  ré  s    €r7   r8   z+TestHelperModules.Conv2dWithTwoCat.__init__B  r–  r9   c                 ó´   — | j                  |«      }| j                  |«      }t        j                  ||gd¬«      }||z   }t        j                  ||g«      }|S r‡  r˜  ©r6   r¿  rÀ  Úx3Úx4rŸ  rÏ  ri  s           r7   rÔ  z*TestHelperModules.Conv2dWithTwoCat.forwardG  sP   € Ø—‘˜B“ˆBØ—‘˜B“ˆBÜ—	‘	˜2˜r˜(¨Ô*ˆAØ�R‘ˆAÜ—	‘	˜1˜a˜&Ó!ˆAØˆHr9   ró  r  rË  s   @r7   ÚConv2dWithTwoCatr›  A  s   ø„ õ	2ö
	r9   r¡  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )ú!TestHelperModules.Conv2dWithSplitc                 óº   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j	                  ddd«      | _        y rC  r•  ré  s    €r7   r8   z*TestHelperModules.Conv2dWithSplit.__init__P  r–  r9   c                 ó�   — | j                  |«      }t        j                  |dd¬«      \  }}t        j                  ||gd¬«      }|S )NrV  rg   rƒ  )rl  r[   Úsplitrh  )r6   r‡  r¿  rÀ  rŸ  s        r7   rÔ  z)TestHelperModules.Conv2dWithSplit.forwardU  s>   € Ø—
‘
˜1“ˆAä—[‘[  A¨1Ô-‰FˆB�Ü—	‘	˜2˜r˜(¨Ô*ˆAØˆHr9   c                 ó4   — t        j                  dddd«      fS )Nrg   r—  rS  ro  rG   s    r7   r†  z0TestHelperModules.Conv2dWithSplit.example_inputs\  ó   € Ü—K‘K  1 b¨"Ó-Ð/Ð/r9   ró  rq  rË  s   @r7   ÚConv2dWithSplitr£  O  s   ø„ õ	2ò
	ö	0r9   r©  c                   ó   — e Zd Zd„ Zy)úTestHelperModules.ThreeAddc                 ó$   — ||z   }||z   }||z   }|S rE   rW   rž  s           r7   rÔ  z"TestHelperModules.ThreeAdd.forward`  s"   € Ø�R‘ˆAØ�R‘ˆAØ�A‘ˆAØˆHr9   N©rR   rS   rT   rÔ  rW   r9   r7   ÚThreeAddr«  _  s   „ ó	r9   r®  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú!TestHelperModules.EmbeddingModulec                 ón   •— t         ‰| �  «        t        j                  j	                  dd¬«      | _        y rú  rû  ré  s    €r7   r8   z*TestHelperModules.EmbeddingModule.__init__g  s)   ø€ Ü‰GÑÔÜ—x‘x×)Ñ)¸È2Ð)ÓNˆD�Hr9   c                 ó$   — | j                  |«      S rE   rö  rý  s     r7   rÔ  z)TestHelperModules.EmbeddingModule.forwardk  s   € Ø—8‘8˜GÓ$Ð$r9   ró  r  rË  s   @r7   rø  r°  f  s   ø„ õ	Oö	%r9   rø  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú+TestHelperModules.EmbeddingConvLinearModulec                 ó  •— t         ‰| �  «        t        j                  j	                  dd¬«      | _        t        j                  j                  ddd«      | _        t        j                  j                  dd«      | _	        y )Nrf   r  r§  rS  )rg   r—  )
r™  r8   r[   rÊ   r²  r~  r-  r.  rÒ  r©  ré  s    €r7   r8   z4TestHelperModules.EmbeddingConvLinearModule.__init__o  sW   ø€ Ü‰GÑÔÜ—x‘x×)Ñ)¸È1Ð)ÓMˆDŒHÜŸ™Ÿ™¨¨2¨vÓ6ˆDŒIÜŸ(™(Ÿ/™/¨"¨aÓ0ˆD�Kr9   c                 ó  — | j                  |«      }t        j                  |d¬«      }t        j                  |d«      }| j	                  |«      }t        j                  |d«      }t        j
                  |d¬«      }| j                  |«      S )Nr   rƒ  )r   r—  rg   rV  rX  )r~  r[   r†  rY  r.  r}  r©  )r6   r¸  Ú
embeddingsr[  s       r7   rÔ  z3TestHelperModules.EmbeddingConvLinearModule.forwardu  sm   € ØŸ™ 'Ó*ˆJÜŸ™¨¸Ô;ˆJÜŸ™ z°<Ó@ˆJØ—y‘y Ó,ˆHÜ—}‘} X¨|Ó<ˆHÜ—}‘} X°1Ô5ˆHØ—;‘;˜xÓ(Ð(r9   ró  r  rË  s   @r7   ÚEmbeddingConvLinearModuler´  n  s   ø„ õ	1ö	)r9   r¸  c                   ó   — e Zd Zd„ Zy)úTestHelperModules.AddInplaceAddc                 ó   — ||z   }||z  }|S rE   rW   rž  s      r7   rÔ  z'TestHelperModules.AddInplaceAdd.forward  ó   € Ø�A‘ˆAØ�‰FˆAØˆHr9   Nr­  rW   r9   r7   ÚAddInplaceAddrº  ~  ó   „ ó	r9   r½  c                   ó   — e Zd Zd„ Zy)úTestHelperModules.MulInplaceMulc                 ó   — ||z  }||z  }|S rE   rW   rž  s      r7   rÔ  z'TestHelperModules.MulInplaceMul.forward…  r¼  r9   Nr­  rW   r9   r7   ÚMulInplaceMulrÀ  „  r¾  r9   rÂ  c                   ó   — e Zd Zd„ Zy)úTestHelperModules.AddMulScalarc                 ó.   — |dz   }|dz  }|dz  }|dz  }|S rC  rW   rì  s     r7   rÔ  z&TestHelperModules.AddMulScalar.forward‹  s+   € Ø�A‘ˆAØ�A‘ˆAØ�‰FˆAØ�‰FˆAØˆHr9   Nr­  rW   r9   r7   ÚAddMulScalarrÄ  Š  s   „ ó	r9   rÆ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú+TestHelperModules.ConvBnReLU2dAndLinearReLUc                 óì   •— t         ‰| �  «        t        j                  d¬«      | _        t
        j                  j                  ddd¬«      | _        t
        j                  j                  «       | _
        y )NT)r  r—  r  Fr,  )r™  r8   r&  r„  Úconv_bn_relur[   rÊ   rÒ  r©  rZ  r  ré  s    €r7   r8   z4TestHelperModules.ConvBnReLU2dAndLinearReLU.__init__“  sO   ø€ Ü‰GÑÔÜ 1× @Ñ @ÀdÐ @Ó KˆDÔÜŸ(™(Ÿ/™/¨!¨Q°U˜/Ó;ˆDŒKÜŸ™Ÿ™›ˆD�Ir9   c                 óv   — | j                  |«      }t        j                  |d«      }| j                  |«      }|S rW  )rÊ  r[   rY  r©  )r6   r‡  r\  Ú
linear_outs       r7   rÔ  z3TestHelperModules.ConvBnReLU2dAndLinearReLU.forward™  s6   € Ø×!Ñ! !Ó$ˆAÜŸ-™-¨¨<Ó8ˆKØŸ™ [Ó1ˆJØÐr9   ró  r  rË  s   @r7   ÚConvBnReLU2dAndLinearReLUrÈ  ’  s   ø„ õ	(ö	r9   rÍ  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )ú!TestHelperModules.GroupwiseConv2dc                 ór   •— t         ‰| �  «        t        j                  j	                  dddd¬«      | _        y )NrÜ   r—  rV  )rð   )r™  r8   r[   rÊ   r-  r.  ré  s    €r7   r8   z*TestHelperModules.GroupwiseConv2d.__init__   s*   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨a¸˜Ó:ˆD�Ir9   c                 ó$   — | j                  |«      S rE   r0  rì  s     r7   rÔ  z)TestHelperModules.GroupwiseConv2d.forward¤  s   € Ø—9‘9˜Q“<Ðr9   c                 ó4   — t        j                  dddd«      fS )NrV  rÜ   rf   ro  rG   s    r7   r†  z0TestHelperModules.GroupwiseConv2d.example_inputs§  r¨  r9   ró  rq  rË  s   @r7   ÚGroupwiseConv2drÏ  Ÿ  s   ø„ õ	;ò	 ö	0r9   rÓ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú!TestHelperModules.LinearReluModelc                 óî   •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        y rç  r‘  ré  s    €r7   r8   z*TestHelperModules.LinearReluModel.__init__«  sG   ø€ Ü‰GÑÔÜ—h‘h—o‘o a¨Ó+×.Ñ.´U·[±[Ð.ÓAˆDŒGÜŸ™Ÿ™›ˆD�Ir9   c                 óF   — | j                  | j                  |«      «      }|S rE   r“  rì  s     r7   rÔ  z)TestHelperModules.LinearReluModel.forward°  s   € Ø—	‘	˜$Ÿ'™' !›*Ó%ˆAØˆHr9   ró  r  rË  s   @r7   r�  rÕ  ª  s   ø„ õ	(ö
	r9   r�  N)rR   rS   rT   r[   rÊ   rã  r?  rF  rO  r]  rd  ri  rr  rx  r}  r„  r‹  r‘  r™  r¡  r©  r®  rø  r¸  r½  rÂ  rÆ  rÍ  rÓ  r�  rW   r9   r7   r&  r&  j  sã  „ ô+�e—h‘h—o‘oô +ôZ˜eŸh™hŸo™oô ô %§(¡(§/¡/ô ô
; U§X¡X§_¡_ô 
;ô
;˜eŸh™hŸo™oô 
;ô	-˜UŸX™XŸ_™_ô 	-ô
(˜%Ÿ(™(Ÿ/™/ô 
(ô	˜Ÿ™Ÿ™ô 	ô	 E§H¡H§O¡Oô 	ô ˜Ÿ™Ÿ™ô  ô2 ˜%Ÿ(™(Ÿ/™/ô  ô*.˜5Ÿ8™8Ÿ?™?ô .ô
˜Ÿ™Ÿ™ô 
ô˜5Ÿ8™8Ÿ?™?ô ô0˜%Ÿ(™(Ÿ/™/ô 0ô �5—8‘8—?‘?ô ô%˜%Ÿ(™(Ÿ/™/ô %ô) E§H¡H§O¡Oô )ô ˜Ÿ™Ÿ™ô ô˜Ÿ™Ÿ™ô ô�u—x‘x—‘ô ô E§H¡H§O¡Oô ô	0˜%Ÿ(™(Ÿ/™/ô 	0ô˜%Ÿ(™(Ÿ/™/õ r9   r&  c                 óz   —  G d„ dt         j                  j                  «      } || |||«      j                  «       S )a†  
    Generate a linear module with quantize-dequantize (reference quantized)
    with static quantization parameters (no choose_qparams at runtime).
    A simulation to PT2E quantization in Torchao.
    It is used to test fusion and lowering passes in Inductor for X86 CPU.
    Input quantization limit is 0-127 to avoid overflow on old platforms.
    Params:
        N: output feature dimension
        K: input feature dimension
        bias: boolean flag to indicate whether linear module has bias
        example_input: example input tensor to get scale/zero point
    Return:
        An instance of the reference quantized linear module
    c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ú8_static_reference_quantized_linear_module.<locals>.Modelc           	      óæ  •— t         ‰| �  «        t        j                  j                  j
                  j                  |ddt        j                  t        j                  «      j                  t        j                  ¬«      \  | _        | _        | j                  j                  «       j                  «       | j                  j                  «       j                  «       c| _        | _        t        j                  j!                  |||«      | _        t        j                  j                  j%                  | j"                  j&                  t        j(                  ¬«      \  | _        | _        | j*                  j                  «       j/                  t        j                  «      j1                  «       | _        | j,                  j                  «       j/                  t        j2                  «      j1                  «       | _        t        j                  j                  j4                  j7                  | j"                  j&                  | j*                  | j,                  dddt        j(                  ¬«      | _        y )Nr   é   )rˆ  r‰  rx  rà   râ   é€ÿÿÿ©Úaxisrˆ  r‰  rà   )r™  r8   r[   r4  Úquantized_decomposedÚchoose_qparamsrç   rw  rz  rx  rg  Úx_scaler‘  Údetachrp   rÊ   rÒ  r©  Úchoose_qparams_per_tokenrü  r|  Úw_scalesÚw_zpsr¯   r}  r…  ré   ÚdefaultÚqw)r6   ÚNÚKrý  Úexample_inputr¨  s        €r7   r8   zA_static_reference_quantized_linear_module.<locals>.Model.__init__Ä  s¢  ø€ Ü‰GÑÔÜ&+§i¡i×&DÑ&D×&SÑ&S×&ZÑ&ZØØØÜ—K‘K¤§¡Ó.×2Ñ2Ü—k‘kð '[ó 'Ñ#ˆDŒL˜$œ)ð '+§l¡l×&9Ñ&9Ó&;×&@Ñ&@Ó&BÀDÇIÁI×DTÑDTÓDV×D[ÑD[ÓD]Ð#ˆDŒL˜$œ)ÜŸ(™(Ÿ/™/¨!¨Q°Ó5ˆDŒKÜ(-¯	©	×(FÑ(F×(_Ñ(_Ø—‘×"Ñ"¬%¯*©*ð )`ó )Ñ%ˆDŒM˜4œ:ð !ŸM™M×0Ñ0Ó2×5Ñ5´e·m±mÓD×LÑLÓNˆDŒMØŸ™×*Ñ*Ó,×/Ñ/´·±Ó<×DÑDÓFˆDŒJÜ—i‘i×4Ñ4×IÑI×QÑQØ—‘×"Ñ"Ø—‘Ø—
‘
ØØØÜ—j‘jð Ró ˆD�Gr9   c           	      óÐ  — t         j                  j                  j                  j	                  | j
                  | j                  | j                  dddt         j                  ¬«      }t         j                  j                  j                  j	                  || j                  | j                  ddt         j                  ¬«      }t         j                  j                  j                  j	                  || j                  | j                  ddt         j                  ¬«      }t         j                  j                  j                  j	                  ||| j                  j                   «      }|S )Nr   rÝ  rÜ  rÞ  )rˆ  r‰  rà   )r[   r4  rà  Údequantize_per_channelrç  rè  rå  ræ  r|  rä   râ  r‘  rg  Údequantize_per_tensorÚatenr©  rý  )r6   r‡  ÚdqwÚquantize_per_tensor_defaultÚdequantize_per_tensor_defaultr©  s         r7   rÔ  z@_static_reference_quantized_linear_module.<locals>.Model.forwardÞ  s  € Ü—)‘)×0Ñ0×GÑG×OÑOØ—‘Ø—‘Ø—
‘
ØØØÜ—j‘jð Pó ˆCô +0¯)©)×*HÑ*H×*\Ñ*\×*dÑ*dØØ—‘Ø—	‘	ØØÜ—k‘kð +eó +Ð'ô -2¯I©I×,JÑ,J×,`Ñ,`×,hÑ,hØ+Ø—‘Ø—	‘	ØØÜ—k‘kð -ió -Ð)ô —Y‘Y—^‘^×*Ñ*×2Ñ2Ð3PÐRUÐW[×WbÑWb×WgÑWgÓhˆFØˆMr9   r  rË  s   @r7   ÚModelrÚ  Ã  s   ø„ ô	ö4	r9   ró  )r[   rÊ   rã  r"  )ré  rê  rý  rë  ró  s        r7   Ú)_static_reference_quantized_linear_modulerô  ´  s3   € ô6”—‘—‘ô 6ñp ��A�t˜]Ó+×0Ñ0Ó2Ð2r9   )r“   rE   )rÜ   rS  )rÜ   é    )ÐrU   r[   Ú'torch.ao.nn.intrinsic.quantized.dynamicrÀ  rÊ   Ú	intrinsicr  r+  rÞ  Útorch.ao.nn.quantizedrË  Útorch.ao.nn.quantized.dynamicrÙ  Útorch.distributedÚdistributedrÂ   Útorch.nnÚtorch.nn.functionalré  r  Úfunctorch.experimentalr   Útorch.ao.nn.intrinsicr   Útorch.ao.quantizationr   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   Ú+torch.ao.quantization.quantization_mappingsr   r    r!   Útorch.jit.mobiler"   Ú(torch.testing._internal.common_quantizedr#   Ú$torch.testing._internal.common_utilsr$   r%   Útorch.ao.ns.fx.ns_typesr&   r'   Ú!torch.ao.quantization.quantize_fxr(   r)   r*   r+   Útorch.fxr,   Útorch.fx.graphr-   rÉ  ÚImportErrorr$  r!  ré  rÀ   r  Útypingr.   Úcollections.abcr/   ÚnumpyrL  Útorch._dynamoÚ_dynamor>  Útorch.testingr0   r2   r]   rb   ÚCrossEntropyLossÚ_default_loss_fnr   r�   r¦   r¶   rÄ   rÇ   rÑ   rÖ   rÙ   r	  r  r$  r*  r-  r1  r7  r;  r@  rD  ÚtorchvisionÚHAS_TORCHVISIONÚskipIfÚskip_if_no_torchvisionrJ  r…  rT  rt  r�  r“  r•  rÍ  rã  rå  rö  rý  r  r  r  r#  r)  r6  r<  rD  rI  rR  rW  r_  rj  rs  rz  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/  r9  r@  rE  rJ  rO  rX  r]  rc  rh  rn  rs  rx  r{  rƒ  r‰  r�  r‘  r¿  r¡  r¤  r®  r²  r¹  r¾  rÄ  rÒ  râ  rì  ró  rø  rÿ  r  r  r  r&  rô  rW   r9   r7   ú<module>r     sš  ðñó ß 7× 7Ñ 7ß #Ó #ß ,Ö ,Ý  Ý ß Ð Ý /Ý .÷÷ ÷ ÷ ÷ ÷ ÷ ÷8ñ õ 8Ý Nß IðßL÷ó õ %Ý#à€Fó Û Û 	Û 	ã Ý Ý $ã Ý #Ý #÷#7ñ #7òLòð —8‘8×,Ñ,Ó.Ð ð 3Có &÷..ñ .ó2ò"ò Fò!òòOó,òP5òfòò$ò$ò(ò$ò$ò$ò$ð$Ûà€Oð )˜Ÿ™¨_Ð)<Ð>NÓOÐ òPð ')§h¡hÀó 	ó3!ól'òD2ôBU>˜8ô U>ôp2Ð3ô 2ôp
#˜UŸX™XŸ_š_ô 
#ô# e§h¡h§o¢oô #ô# E§H¡H§O¢Oô #ô#�R—Y’Yô #ô �e—h‘h—o’oô ô˜%Ÿ(™(Ÿ/š/ô ô$ §¡§¢ô ô
)�—‘—’ô 
)ô
)˜Ÿ™Ÿšô 
)ô)˜Ÿ™Ÿšô )ô$) %§(¡(§/¢/ô )ô$)�%—(‘(—/’/ô )ô)˜5Ÿ8™8Ÿ?š?ô )ô()�e—h‘h—o’oô )ô")˜uŸx™xŸšô )ôB)˜Ÿ™Ÿšô )ô#˜%Ÿ(™(Ÿ/š/ô #ô.˜rŸyšyô .ô# 5§8¡8§?¢?ô #ô ˜5Ÿ8™8Ÿ?š?ô ô"#�e—h‘h—o’oô #ô#˜EŸH™HŸOšOô #ô"#˜Ÿ™Ÿšô #ô&#˜UŸX™XŸ_š_ô #ô&#�e—h‘h—o’oô #ô<@˜Ÿ™Ÿšô <@ô@)�E—H‘H—O’Oô )ô)˜Ÿ™Ÿšô )ô$)�u—x‘x—’ô )ô&˜UŸX™XŸ_š_ô ô,�%—(‘(—/’/ô ô˜5Ÿ8™8Ÿ?š?ô ô(˜eŸh™hŸošoô ô  u§x¡x§¢ô ô4�E—H‘H—O’Oô ô S�%—(‘(—/’/ô Sô6
#�u—x‘x—’ô 
#ô
1 u§x¡x§¢ô 
1ô1 E§H¡H§O¢Oô 1ô1˜uŸx™xŸšô 1ô 0 §	¢	ô 0ô1 b§i¢iô 1ô")�u—x‘x—’ô )ô2
/ U§X¡X§_¢_ô 
/ô/ %§(¡(§/¢/ô /ô.˜bŸišiô .ô/ "§)¢)ô /ô" �U—X‘X—_’_ô  ô"'˜eŸh™hŸošoô 'ô(�U—X‘X—_’_ô ô ˜5Ÿ8™8Ÿ?š?ô ô$˜EŸH™HŸOšOô ô$ %§(¡(§/¢/ô ô˜uŸx™xŸšô ô6@Ð#;ô @ô˜rŸyšyô ô, §	¢	ô ô2	˜Ÿ	š	ô 	ô'˜BŸIšIô 'ô,�R—Y’Yô ,ô^
�—’ô 
ô §	¢	ô ô2˜RŸYšYô ô,	#˜RŸYšYô 	#ô�E—H‘H—O’Oô ô B§I¢Iô ô,˜5Ÿ8™8Ÿ?š?ô ô0#�—‘—’ô #ôL�u—x‘x—’ô ôH §¡§¢ô ô>>˜Ÿ™Ÿšô >ô!�e—h‘h—o’oô !ô §¡§¢ô ô&�"—)’)ô ô8.�B—I’Iô .ô�B—I’Iô ÷BHñ HóT
G3øðac ò ØƒFðûð` ò ØƒOðús$   Â,"i6 Å-j é6jê jêjêj