ó
    IC˜j#Ý ã                   ó€  • S r SSKrSSKJs  Js  Js  Js  Jr  SSK	Js  Js  Jr
  SSKJs  Js  Js  Jr  SSKJr  SSKJr  SSKJs  Jr  SSKJr  SSKJr  SSKJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2  SSK3J4r4J5r5J6r6  SSK7J8r8  SSK9J:r:  SS	K;J<r<J=r=   SS
K>J?r?J@r@  SSKAJBrBJCrCJDrDJErE  SSKFJGrG  SSKHJIrI  SrJSSKLrLSSKMrMSSKNrNSSKOrOSSKPrPSSKQJRrR  SSKSJTrT  SSKUrVSSKWJXrY  SSKZJ[r[   " S S5      r\S r]S r^\R                  R¿                  5       r`\`4S jra " S S5      rbSÓS jrcS rdS reS rfS rgS rhSÔS  jriS! rjS" rkS# rlS$ rmS% rnS& roS' rpS( rqS) rrS* rs SSKtrtSru\PRì                  " \u(       + S+5      rwS, rx\VRò                  S4S- jrzSÕS. jr{SÖS/ jr|S0 r} " S1 S2\=5      r~ " S3 S4\~5      r " S5 S6\R                  GR                   5      r� " S7 S8\R                  GR                   5      r‚ " S9 S:\R                  GR                   5      rƒ " S; S<\GR                   5      r„ " S= S>\R                  GR                   5      r… " S? S@\R                  GR                   5      r† " SA SB\R                  GR                   5      r‡ " SC SD\R                  GR                   5      rˆ " SE SF\R                  GR                   5      r‰ " SG SH\R                  GR                   5      rŠ " SI SJ\R                  GR                   5      r‹ " SK SL\R                  GR                   5      rŒ " SM SN\R                  GR                   5      r� " SO SP\R                  GR                   5      rŽ " SQ SR\R                  GR                   5      r� " SS ST\R                  GR                   5      r� " SU SV\R                  GR                   5      r‘ " SW SX\GR                   5      r’ " SY SZ\R                  GR                   5      r“ " S[ S\\R                  GR                   5      r” " S] S^\R                  GR                   5      r• " S_ S`\R                  GR                   5      r– " Sa Sb\R                  GR                   5      r— " Sc Sd\R                  GR                   5      r˜ " Se Sf\R                  GR                   5      r™ " Sg Sh\R                  GR                   5      rš " Si Sj\R                  GR                   5      r› " Sk Sl\R                  GR                   5      rœ " Sm Sn\R                  GR                   5      r� " So Sp\R                  GR                   5      rž " Sq Sr\R                  GR                   5      rŸ " Ss St\R                  GR                   5      r  " Su Sv\R                  GR                   5      r¡ " Sw Sx\R                  GR                   5      r¢ " Sy Sz\R                  GR                   5      r£ " S{ S|\R                  GR                   5      r¤ " S} S~\R                  GR                   5      r¥ " S S€\R                  GR                   5      r¦ " S� S‚\R                  GR                   5      r§ " Sƒ S„\R                  GR                   5      r¨ " S… S†\GR                   5      r© " S‡ Sˆ\GR                   5      rª " S‰ SŠ\R                  GR                   5      r« " S‹ SŒ\R                  GR                   5      r¬ " S� SŽ\R                  GR                   5      r­ " S� S�\GR                   5      r® " S‘ S’\GR                   5      r¯ " S“ S”\R                  GR                   5      r° " S• S–\R                  GR                   5      r± " S— S˜\R                  GR                   5      r² " S™ Sš\R                  GR                   5      r³ " S› Sœ\R                  GR                   5      r´ " S� Sž\R                  GR                   5      rµ " SŸ S \R                  GR                   5      r¶ " S¡ S¢\¶5      r· " S£ S¤\GR                   5      r¸ " S¥ S¦\GR                   5      r¹ " S§ S¨\GR                   5      rº " S© Sª\GR                   5      r» " S« S¬\GR                   5      r¼ " S­ S®\GRz                  5      r¾ " S¯ S°\GR                   5      r¿ " S± S²\GR                   5      rÀ " S³ S´\GR                   5      rÁ " Sµ S¶\R                  GR                   5      rÂ " S· S¸\GR                   5      rÃ " S¹ Sº\R                  GR                   5      rÄ " S» S¼\R                  GR                   5      rÅ " S½ S¾\R                  GR                   5      rÆ " S¿ SÀ\R                  GR                   5      rÇ " SÁ SÂ\R                  GR                   5      rÈ " SÃ SÄ\R                  GR                   5      rÉ " SÅ SÆ\R                  GR                   5      rÊ " SÇ SÈ\GR                   5      rË " SÉ SÊ\GR                   5      rÌ " SË SÌ\GR                   5      rÍ " SÍ SÎ5      rÎSÏ\GRž                  4SÐ jrÐSÑSÏ\GRž                  4SÒ jrÑg! \K a    SrJ G	Nßf = f! \K a    Sru G	NFf = f)×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                   ó`   • \ rS rSrSrS r\S 5       r\S 5       r\S 5       r	S r
S rS	 rS
rg)ÚNodeSpecéU   z"Used for checking GraphModule Nodec                 ó   • Xl         X l        g)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)Úselfr6   r7   s      Ú¹C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\torch/testing/_internal/common_quantization.pyÚ__init__ÚNodeSpec.__init__X   s   € ð ŒØ�ó    c                 ó   • [        SU5      $ )NÚcall_function©r2   ©Úclsr7   s     r9   r>   ÚNodeSpec.call_functionb   s   € ä˜¨Ó0Ð0r<   c                 ó   • [        SU5      $ )NÚcall_methodr?   r@   s     r9   rD   ÚNodeSpec.call_methodf   ó   € ä˜ vÓ.Ð.r<   c                 ó   • [        SU5      $ )NÚcall_moduler?   r@   s     r9   rH   ÚNodeSpec.call_modulej   rF   r<   c                 óD   • [        U R                  U R                  45      $ ©N)Úhashr6   r7   ©r8   s    r9   Ú__hash__ÚNodeSpec.__hash__n   s   € Ü�T—W‘W˜dŸk™kÐ*Ó+Ð+r<   c                 óª   • [        U[        5      (       d  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rK   )Ú
isinstancer2   ÚNotImplementedr6   r7   )r8   Úothers     r9   Ú__eq__ÚNodeSpec.__eq__q   s:   € Ü˜%¤×*Ñ*Ü!Ð!à�w‰w˜%Ÿ(™(Ñ"×B t§{¡{°e·l±lÑ'BÐBr<   c                 ó^   • [        U R                  5      S-   [        U R                  5      -   $ )NÚ )Úreprr6   r7   rM   s    r9   Ú__repr__ÚNodeSpec.__repr__w   s#   € Ü�D—G‘G‹}˜sÑ"¤T¨$¯+©+Ó%6Ñ6Ð6r<   r5   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r:   Úclassmethodr>   rD   rH   rN   rT   rY   Ú__static_attributes__© r<   r9   r2   r2   U   sV   † Ù,òð ñ1ó ð1ð ñ/ó ð/ð ñ/ó ð/ò,òCõ7r<   r2   c                  ól   • [         R                  R                  5       (       a  [        (       d  SS/$ S/$ )NÚcpuÚcuda)Útorchre   Úis_availabler$   rb   r<   r9   Úget_supported_device_typesrh   {   s/   € ä Ÿ:™:×2Ñ2×4Ñ4¿^º^ˆ�ˆðØRWÐQXðr<   c                 ó    • U H  nU " U6   M
     g)zz
Default evaluation function takes a torch.utils.data.Dataset or a list of
input Tensors and run the model on the dataset
Nrb   )ÚmodelÚ
calib_dataÚinps      r9   Útest_only_eval_fnrm   �   s   € ó
 ˆÙˆs‹ò r<   c                 ó  • [         R                  R                  U R                  5       SS9nSu  pEn[	        S5       H¿  nU R                  5         U H¦  u  p‰UR                  5         U " U5      n
U" X©5      nUR                  5         UR                  5         XKR                  5       -  n[         R                  " U
S5      u  p|XiR                  S5      -  nX\U	:H  R                  5       R                  5       -  nM¨     MÁ     XEU4$ )z\
Default train function takes a torch.utils.data.Dataset and train the model
on the dataset
gü©ñÒMbP?©Úlr)r   r   r   é
   é   r   )rf   ÚoptimÚAdamÚ
parametersÚrangeÚtrainÚ	zero_gradÚbackwardÚstepÚitemÚmaxÚsizeÚsum)rj   Ú
train_dataÚloss_fnÚ	optimizerÚ
train_lossÚcorrectÚtotalÚ_Údatar7   ÚoutputÚlossÚ	predicteds                r9   Útest_only_train_fnrŠ   �   sá   € ô
 —‘× Ñ  ×!1Ñ!1Ó!3¸Ð Ð>€IØ!(Ñ€J˜Ü�2ŽYˆØ�‰Œã&‰LˆDØ×ÑÔ!Ù˜4“[ˆFÙ˜6Ó*ˆDØ�M‰MŒOØ�N‰NÔØŸ)™)›+Ñ%ˆJÜ Ÿ9š9 V¨QÓ/‰LˆAØ—[‘[ “^Ñ#ˆEØ VÑ+×0Ñ0Ó2×7Ñ7Ó9Ñ9ŠGó 'ñ ð  Ð%Ð%r<   c                   ó8   • \ rS rSrSrS	S jrS rS
S jrS rSr	g)ÚAverageMeteré¤   z1Computes and stores the average and current valuec                 ó<   • Xl         X l        U R                  5         g rK   )ÚnameÚfmtÚreset)r8   r�   r�   s      r9   r:   ÚAverageMeter.__init__§   s   € ØŒ	ØŒØ�
‰
�r<   c                 ó<   • SU l         SU l        SU l        SU l        g ©Nr   )ÚvalÚavgr~   ÚcountrM   s    r9   r‘   ÚAverageMeter.reset¬   s   € ØˆŒØˆŒØˆŒØˆ�
r<   c                 ó¤   • Xl         U =R                  X-  -  sl        U =R                  U-  sl        U R                  U R                  -  U l        g rK   )r•   r~   r—   r–   )r8   r•   Úns      r9   ÚupdateÚAverageMeter.update²   s8   € ØŒØ�Š�C‘GÑ�Ø�
Š
�a‰�
Ø—8‘8˜dŸj™jÑ(ˆ�r<   c                 ó~   • SU R                   -   S-   U R                   -   S-   nUR                  " S0 U R                  D6$ )Nz{name} {valz} ({avgz})rb   )r�   ÚformatÚ__dict__)r8   Úfmtstrs     r9   Ú__str__ÚAverageMeter.__str__¸   s9   € Ø §¡Ñ)¨IÑ5¸¿¹Ñ@À4ÑGˆØ�}Š}Ñ-˜tŸ}™}Ñ-Ð-r<   )r–   r—   r�   r�   r~   r•   N)z:f©rr   )
r[   r\   r]   r^   r_   r:   r‘   r›   r¡   ra   rb   r<   r9   rŒ   rŒ   ¤   s   † Ù;ôò
ô)õ.r<   rŒ   c                 ó  • [         R                  " 5          [        U5      nUR                  S5      nU R	                  USSS5      u  pVUR                  5       nUR                  UR                  SS5      R                  U5      5      n/ nU HV  n	USU	 R                  S5      R                  5       R                  SSS9n
UR                  U
R                  SU-  5      5        MX     UsSSS5        $ ! , (       d  f       g= f)zNComputes the accuracy over the k top predictions for the specified values of kr   rr   TéÿÿÿÿN)Úkeepdimg      Y@)rf   Úno_gradr|   r}   ÚtopkÚtÚeqÚviewÚ	expand_asÚfloatr~   ÚappendÚmul_)r‡   r7   r¨   ÚmaxkÚ
batch_sizer…   Úpredrƒ   ÚresÚkÚ	correct_ks              r9   Úaccuracyr¶   ½   sÍ   € ä	�Š�Ü�4‹yˆØ—[‘[ “^ˆ
à—+‘+˜d A t¨TÓ2‰ˆØ�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C2Ã2
D c                 óH  • U R                  5         [        USS9 H„  u  nu  px[        SSS9  UR                  U5      UR                  U5      p‡U " U5      n	U" X˜5      n
UR	                  5         U
R                  5         UR                  5         [        X˜SS9  Xe:¼  d  M„    g    g )Nrr   )ÚstartÚ.Ú )Úend)rr   é   )r¨   )rw   Ú	enumerateÚprintÚtorx   ry   rz   r¶   )rj   Ú	criterionr�   Údata_loaderÚdeviceÚntrain_batchesÚcntÚimager7   r‡   rˆ   s              r9   Útrain_one_epochrÆ   Î   s‘   € Ø	‡K�K„MÜ )¨+¸QÔ ?Ñˆ‰_ˆeÜˆc�rÒØŸ™ Ó(¨&¯)©)°FÓ*;ˆvÙ�u“ˆÙ˜Ó(ˆØ×ÑÔØ�‰ŒØ�‰ÔÜ� fÒ-ØÕ Ùñ !@ð r<   c                 óz   • S[         R                  S'   S[         R                  S'   [        R                  " SXS9  g )NÚ	localhostÚMASTER_ADDRÚ12355ÚMASTER_PORTÚgloo©ÚrankÚ
world_size)ÚosÚenvironÚdistÚinit_process_grouprÍ   s     r9   Ú	ddp_setuprÔ   Þ   s0   € Ø +„B‡J�Jˆ}ÑØ '„B‡J�Jˆ}Ñô 	×Ò˜F¨ÓEr<   c                  ó.   • [         R                  " 5         g rK   )rÒ   Údestroy_process_grouprb   r<   r9   Úddp_cleanupr×   æ   s   € Ü×ÒÕ r<   c                 óL  • [        X5        UR                  5         [        R                  R                  R                  X /S9nUR                  U 5        Un[        R                  R                  UR                  5       SS9n[        U[        U[        U S5        [        5         g )N)Ú
device_idsg-Cëâ6?ro   rr   )rÔ   re   rf   ÚnnÚparallelÚDistributedDataParallelr¿   rs   ÚSGDru   rÆ   rÀ   Údatasetr×   )rÎ   rÏ   ÚpreparedÚmodel_with_ddpr�   s        r9   Úrun_ddprá   ê   sy   € ÜˆdÔØ‡M�M„OÜ�x‰x× Ñ ×8Ñ8¸ÈfÐ8ÐU€HØ‡K�K�ÔØ€NÜ—‘—‘ × 9Ñ 9Ó ;À�ÐG€IÜ�N¤I¨y¼'À4ÈÔKÜ…Mr<   c                 ó*   • [        U [        5       SS9  g )NT©Úinplace)r   r   )Úmodules    r9   Úconvert_dynamicræ   õ   s   € ÜˆFÔ=Ó?ÈÓNr<   c                 ó   • [        X5        g rK   )r   )rj   Úqconfig_dicts     r9   Úprepare_dynamicré   ù   s
   € Ü�uÕ+r<   c                 ó,  • X-  nX4-  nSu  pï[         R                  " UUU U4U-   5      nUUU-
  R                  5       -  n[         R                  " UXg[         R                  S9nX�-  nX�-  n	US U nU	S U n	Su  nn[         R                  " UUUU4U-   5      n[         R                  " SSU45      nU(       aî  SS[        U5      -  -   n[         R                  " U[         R                  S9n[         R                  " U	[         R                  S9nUR                  " U6 UR                  5       UR                  " U6 -
  R                  5       -  nUU-  UR                  5       -  n[         R                  " UUR                  5       UR                  5       S[         R                  S9nO_US   UU	S   -
  R                  5       -  nXhS   -  UR                  5       -  n[         R                  " UUS   U	S   [         R                  S9nUUUUU
(       a  U4$ S 4$ )	N©r   é   ©ÚscaleÚ
zero_pointÚdtype)éûÿÿÿr¼   r   rq   )r¥   rr   r£   ©rð   )rf   Ú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                                r9   Ú_make_conv_test_inputr  ý   s4  € ð (Ñ0€KØ)Ñ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Ðà×#Ò# WÐ-Ø�|‰|‹~Ð 4× <Ò <¸gÐ FÑF×MÑMÓOñPð 	
ð �oÑ%¨¯©«Ñ6ˆÜ×(Ò(ØØ×"Ñ"Ó$Ø ×%Ñ%Ó'ØÜ—+‘+ñ
‰ð �A‰J˜& <°¡?Ñ2×9Ñ9Ó;Ñ;ˆØ˜a‘jÑ  6§<¡<£>Ñ1ˆÜ×'Ò'Ø�W˜Q‘Z¨L¸©OÄ5Ç;Á;ñ
ˆð ˆs�A�s¦˜AÐ4Ð4¨tÐ4Ð4r<   c                 ó²   • Su  p4[         R                  " UUU5      nXU-
  R                  5       -  n[         R                  " X`U[         R                  S9nXg4$ )Nrë   rí   )rf   ró   r­   rô   rõ   )rî   rï   Úsizesr
  r  r  r  r  s           r9   Ú!_make_conv_add_extra_input_tensorr  P  s]   € Ø!'Ñ€[Ü�]Š]ØØØó€Fð
 	˜*Ñ$×+Ñ+Ó-Ñ-€AÜ
×
#Ò
#Ø	 :´U·\±\ñ€Cð ˆ6€Mr<   c                 óè   ^ ^• Sm[        T [        5      (       a8  S[        R                  R                  R
                  ;  a  ST l        TT l        T $ [        R                  " T 5      U U4S j5       nU$ )NzrQuantized operations require FBGEMM. FBGEMM is only optimized for CPUs with instruction set support AVX2 or newer.ÚfbgemmTc                  ó’   >• S[         R                  R                  R                  ;  a  [        R
                  " T5      eT" U 0 UD6  g )Nr  ©rf   ÚbackendsÚ	quantizedÚsupported_enginesÚunittestÚSkipTest©ÚargsÚkwargsÚfnÚreasons     €€r9   ÚwrapperÚskipIfNoFBGEMM.<locals>.wrapperf  ó9   ø€ àœ5Ÿ>™>×3Ñ3×EÑEÓEÜ×#Ò# FÓ+Ð+á�Ð˜Ór<   ©
rQ   Útyperf   r!  r"  r#  Ú__unittest_skip__Ú__unittest_skip_why__Ú	functoolsÚwraps©r)  r+  r*  s   ` @r9   ÚskipIfNoFBGEMMr5  ^  sg   ù€ ð B€FÜ�"”d×ÑØœ5Ÿ>™>×3Ñ3×EÑEÓEØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_‚_�RÓõ ó ð ð €Nr<   c                 óè   ^ ^• Sm[        T [        5      (       a8  S[        R                  R                  R
                  ;  a  ST l        TT l        T $ [        R                  " T 5      U U4S j5       nU$ )Nú%Quantized operations require QNNPACK.ÚqnnpackTc                  ó’   >• S[         R                  R                  R                  ;  a  [        R
                  " T5      eT" U 0 UD6  g ©Nr8  r   r&  s     €€r9   r+  Ú skipIfNoQNNPACK.<locals>.wrapperx  s9   ø€ àœEŸN™N×4Ñ4×FÑFÓFÜ×#Ò# FÓ+Ð+á�Ð˜Ór<   r.  r4  s   ` @r9   ÚskipIfNoQNNPACKr<  p  sd   ù€ Ø4€FÜ�"”d×ÑØœEŸN™N×4Ñ4×FÑFÓFØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_‚_�RÓõ ó ð ð €Nr<   c                 óè   ^ ^• Sm[        T [        5      (       a8  S[        R                  R                  R
                  ;  a  ST l        TT l        T $ [        R                  " T 5      U U4S j5       nU$ )Nr7  r8  Tc                  óÜ   >• S[         R                  R                  R                  ;  a  [        R
                  " T5      e[        S5         T" U 0 UD6  S S S 5        g ! , (       d  f       g = fr:  )rf   r!  r"  r#  r$  r%  r#   r&  s     €€r9   r+  Ú#withQNNPACKBackend.<locals>.wrapperŒ  sM   ø€ àœEŸN™N×4Ñ4×FÑFÓFÜ×#Ò# FÓ+Ð+Ü& yÕ1Ù�Ð˜Ò÷ 2×1Ö1ús   Á	AÁ
A+r.  r4  s   ` @r9   ÚwithQNNPACKBackendr@  ‚  sf   ù€ ð 5€FÜ�"”d×ÑØœEŸN™N×4Ñ4×FÑFÓFØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_‚_�RÓõ ó ð ð €Nr<   c                 óè   ^ ^• Sm[        T [        5      (       a8  S[        R                  R                  R
                  ;  a  ST l        TT l        T $ [        R                  " T 5      U U4S j5       nU$ )Nz$Quantized operations require ONEDNN.ÚonednnTc                  ó’   >• S[         R                  R                  R                  ;  a  [        R
                  " T5      eT" U 0 UD6  g )NrB  r   r&  s     €€r9   r+  ÚskipIfNoONEDNN.<locals>.wrapperž  r-  r<   r.  r4  s   ` @r9   ÚskipIfNoONEDNNrE  –  sd   ù€ Ø3€FÜ�"”d×ÑØœ5Ÿ>™>×3Ñ3×EÑEÓEØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_‚_�RÓõ ó ð ð €Nr<   c                 óò   ^ ^• Sm[        T [        5      (       a=  [        R                  R                  R                  5       (       d  ST l        TT l        T $ [        R                  " T 5      U U4S j5       nU$ )Nz*Quantized operations require BF16 support.Tc                  óœ   >• [         R                  R                  R                  5       (       d  [        R
                  " T5      eT" U 0 UD6  g rK   )rf   ÚopsÚmkldnnÚ_is_mkldnn_bf16_supportedr$  r%  r&  s     €€r9   r+  Ú#skipIfNoONEDNNBF16.<locals>.wrapper°  s:   ø€ ä�y‰y×Ñ×9Ñ9×;Ñ;Ü×#Ò# FÓ+Ð+á�Ð˜Ór<   )
rQ   r/  rf   rH  rI  rJ  r0  r1  r2  r3  r4  s   ` @r9   ÚskipIfNoONEDNNBF16rL  ¨  se   ù€ Ø9€FÜ�"”d×ÑÜ�y‰y×Ñ×9Ñ9×;Ñ;Ø#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_‚_�RÓõ ó ð ð €Nr<   c                 óè   ^ ^• Sm[        T [        5      (       a8  S[        R                  R                  R
                  ;  a  ST l        TT l        T $ [        R                  " T 5      U U4S j5       nU$ )Nz!Quantized operations require X86.Úx86Tc                  ó’   >• S[         R                  R                  R                  ;  a  [        R
                  " T5      eT" U 0 UD6  g )NrN  r   r&  s     €€r9   r+  ÚskipIfNoX86.<locals>.wrapperÂ  s9   ø€ àœŸ™×0Ñ0×BÑBÓBÜ×#Ò# FÓ+Ð+á�Ð˜Ór<   r.  r4  s   ` @r9   ÚskipIfNoX86rQ  º  sd   ù€ Ø0€FÜ�"”d×ÑØœŸ™×0Ñ0×BÑBÓBØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_‚_�RÓõ ó ð ð €Nr<   c                 óÌ   ^ ^• Sm[        T [        5      (       a*  [        R                  " 5       (       d  ST l        TT l        T $ [        R                  " T 5      U U4S j5       nU$ )Nzdynamo doesn't support.Tc                  óv   >• [         R                  " 5       (       d  [        R                  " T5      eT" U 0 UD6  g rK   )ÚtorchdynamoÚis_dynamo_supportedr$  r%  r&  s     €€r9   r+  Ú&skipIfNoDynamoSupport.<locals>.wrapperÔ  s0   ø€ ä×.Ò.×0Ñ0Ü×#Ò# FÓ+Ð+á�Ð˜Ór<   )rQ   r/  rT  rU  r0  r1  r2  r3  r4  s   ` @r9   ÚskipIfNoDynamoSupportrW  Ì  s[   ù€ Ø&€FÜ�"”d×ÑÜ×.Ò.×0Ñ0Ø#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_‚_�RÓõ ó ð ð €Nr<   c                 óÌ   ^ ^• Sm[        T [        5      (       a*  [        R                  " 5       (       d  ST l        TT l        T $ [        R                  " T 5      U U4S j5       nU$ )Nzinductor doesn't support.Tc                  óv   >• [         R                  " 5       (       d  [        R                  " T5      eT" U 0 UD6  g rK   )rT  Úis_inductor_supportedr$  r%  r&  s     €€r9   r+  Ú(skipIfNoInductorSupport.<locals>.wrapperæ  s0   ø€ ä×0Ò0×2Ñ2Ü×#Ò# FÓ+Ð+á�Ð˜Ór<   )rQ   r/  rT  rZ  r0  r1  r2  r3  r4  s   ` @r9   ÚskipIfNoInductorSupportr\  Þ  s[   ù€ Ø(€FÜ�"”d×ÑÜ×0Ò0×2Ñ2Ø#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_‚_�RÓõ ó ð ð €Nr<   zno torchvisionc                 óŒ   • U(       a  [         R                  R                  X5      $ [         R                  R                  U 5      $ rK   )rf   ÚjitÚtraceÚscript)rj   Útracingr†   s      r9   Úget_script_modulerb  ù  s+   € Þ+2Œ5�9‰9�?‰?˜5Ó'ÐO¼¿	¹	×8HÑ8HÈÓ8OÐOr<   c                 óÈ   • [         R                  " U R                  S   S-   4US9nXSS& [        R                  " [         R
                  " X1S95      nU(       a  USS $ USS $ )z.
Convert lengths to offsets for embedding_bag
r   rr   rò   Nr¥   )ÚnpÚzerosÚshaperf   Ú
from_numpyÚcumsum)r©   Úoffset_typeÚuse_begin_offsetÚtts       r9   Úlengths_to_offsetsrl  ý  s^   € ô 
�Š�1—7‘7˜1‘: ‘>Ð#¨;Ñ	7€BØ€q€r€FÜ	×	Ò	œ"Ÿ)š) BÑ:Ó	;€BÞØ�#�2ˆwˆØˆaˆbˆ6€Mr<   c           	      óÐ  • U R                  5       S:w  a  [        SU R                  5        35      eU R                  SS5      R                  5       n US::  a  [        SU 35      eU R                  S   U-  S:w  a  [        SU R                  S    SU 35      eU R                  SU5      n[        R                  " U5      R                  5       S:w  a  [        S	5      eUR                  SS
S9nUR                  SS
S9nSU-  S-
  nSnXE-
  R                  SS9U-  n[        R                  " U5      R                  5       S:w  a  [        S5      eXXSUS-
  -  -  -   n	[        R                  " U	5      R                  5       S:w  a  [        S5      eUR                  U5      R                  U5      R                  5       R                  Xv5      n
[        R                  " U
5      R                  5       S:w  a  [        S5      eU
R!                  [        R"                  S9R                  U R                  5      n
U
R$                  [        R$                  " S5      :w  a9  U
S S 2S S S24   S-  U
S S 2SS S24   -  R!                  [        R&                  5      n
UR)                  U R                  S   S5      nU	R)                  U R                  S   S5      n	[        R*                  " UR                  UR-                  S5      UR-                  S5      S5      U	R                  U	R-                  S5      U	R-                  S5      S5      /S5      R                  SS5      R                  5       nX«4$ )Né   zexpected w.dim() == 2, got r   rr   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ò   rd   rì   )rp  ÚAssertionErrorÚ	transposeÚ
contiguousrf  rø   rf   Úisnanr~   ÚamaxÚaminÚclampÚsubÚdivÚroundÚclamp_r¿   Úint32rÂ   Úuint8r«   Úcatr}   )ÚwÚn_bitÚq_group_sizeÚto_quantÚmax_valÚmin_valÚmax_intÚmin_intÚscalesre  ÚoutÚscales_and_zeross               r9   Ú_group_quantize_tensorrŒ  	  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Ó:Ð:à  e¨a¡iÑ 0Ñ1Ñ1€EÜ‡{‚{�5Ó×ÑÓ 1Ó$ÜÐ8Ó9Ð9à
�,‰,�wÓ
×
#Ñ
# FÓ
+×
1Ñ
1Ó
3×
:Ñ
:¸7Ó
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‹ß	‰‹ð ð Ð Ð r<   c                 óÜ  • U R                  SS5      R                  5       n U R                  5       S:w  a  [        SU R                  5        35      eUS::  a  [        SU 35      eU R                  S   U-  S:w  a  [        SU R                  S    SU 35      eU R                  SU5      nUR                  5       R                  SS	S
9n[        R                  " UR                  5      R                  nSUS-
  -  S-
  nUR                  US9U-  n[        R                  " U5      nUR                  [        R                  5      R                  U R                  S   S5      nUR                  [        R                  5      R                  U R                  S   S5      nUR                  SS5      nUR                  SS5      nSU-  S-
  nUR!                  U5      R#                  S5      R                  [        R$                  5      R                  US9n	U	S S 2SS S24   S-  U	S S 2S S S24   -  R                  [        R&                  5      n
UR)                  5       R                  5       nX«4$ )Nr   rr   rn  zExpected w.dim() == 2, got zExpected groupsize > 1, got r¥   z+Expected w.shape[-1] % groupsize == 0, got z % Tro  rq  g      !@)r|   rì   )rt  ru  rp  rs  rf  rø   Úabsrw  rf   Úfinforð   Úepsry  Ú
zeros_liker¿   Úfloat32r{  ÚaddÚint8r  Úsqueeze)r�  r‚  Ú	groupsizer„  r…  r�  r‡  r‰  re  Úw_int8Ú	out_uint8r‹  s               r9   Ú _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ÐàÐ&Ð&r<   c                 óˆ  • U R                   nU R                  5       n [        R                  " [        R                  5      R
                  n[        R                  " U SS9u  pg[        R                  " U[        R                  " U5      5      n[        R                  " U[        R                  " U5      5      n	UR                  n
[        R                  " U* U	5      n	U	[        X!-
  5      S-  -  n[        R                  " XµS9R                  U R                   5      n[        R                  " UR                  5       [        R                  U
S9nXR!                  S5      -  n[        R"                  " U5      nXìR!                  S5      -   n[        R                  " XñU5      R                  U5      nUUR                  U5      U4$ )Nrr   ©rp  rn  rq  )rð   rÂ   r¥   )rð   r­   rf   r�  r’  r�  Úaminmaxrr  r‘  r|   rÂ   ry  r¿   re  r}   Úint64Ú	unsqueezer|  )ÚxÚ	quant_minÚ	quant_maxÚtarget_dtypeÚx_dtyper�  r†  r…  Úmin_val_negÚmax_val_posrÂ   r‰  Úzero_pointsÚx_divÚx_roundÚx_zpÚquants                    r9   Ú!_dynamically_quantize_per_channelr«  a  sV  € ð �g‰g€GØ	�‰‹	€AÜ
�+Š+”e—m‘mÓ
$×
(Ñ
(€Cô —}’} Q¨AÑ.Ñ€Gô —)’)˜G¤U×%5Ò%5°gÓ%>Ó?€KÜ—)’)˜G¤U×%5Ò%5°gÓ%>Ó?€KØ×Ñ€Fô —)’)˜[˜L¨+Ó6€KØœE )Ñ"7Ó8¸1Ñ<Ñ=€Fä�[Š[˜Ñ)×,Ñ,¨Q¯W©WÓ5€FÜ—+’+˜k×.Ñ.Ó0¼¿¹ÈFÑS€Kð × Ñ  Ó$Ñ$€EÜ�kŠk˜%Ó €GØ×*Ñ*¨2Ó.Ñ.€DÜ�KŠK˜¨Ó3×6Ñ6°|ÓD€Eà�&—)‘)˜GÓ$ kÐ1Ð1r<   c            
       ó   ^ • \ rS rSrU 4S jrS rS rS r S#S jrS r	S	 r
S
 rS rS rS rS rS rS rS rS$S jrS rS r      S%S jr   S&S jrS'S jr\(       aU  S\\\\\4   4   S\\\\\\4   \\\4   4   4   S\S\SS4
S jr S\\\\\\\!4   4   4   SS4S jr"           S(S  jr#\$RJ                  4S! jr&S"r'U =r($ ))ÚQuantizationTestCasei‚  c                 óî  >• [         TU ]  5         [        S5       Vs/ s H(  n[        R                  " SS[        R
                  S9/PM*     snU l        [        S5       Vs/ s HL  n[        R                  " SS[        R
                  S9[        R                  " SSS[        R                  S9/PMN     snU l	        [        S5       Vs/ s H)  n[        R                  " SSS[        R
                  S9/PM+     snU l
        [        S5       Vs/ s H*  n[        R                  " SSSS[        R
                  S9/PM,     snU l        [        S5       Vs/ s H+  n[        R                  " SSSSS[        R
                  S9/PM-     snU l        [        S5       Vs/ s HM  n[        R                  " SSS[        R
                  S9[        R                  " SSS	[        R                  S9/PMO     snU l        [        S5       Vs/ s HN  n[        R                  " SSSS[        R
                  S9[        R                  " SSS	[        R                  S9/PMP     snU l        [        S5       Vs/ s HO  n[        R                  " SSSSS[        R
                  S9[        R                  " SSS	[        R                  S9/PMQ     snU l        U R                  U R                  U R                  S
.U l        ["        R$                  ["        R&                  /U l        ["        R*                  ["        R$                  ["        R&                  /U l        g s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )Nrn  r¼   rò   r   rr   )rn  é   rq   r£   ©rr   rn  r¯  )ÚsuperÚsetUprv   rf   Úrandr­   rk   ró   rû   r   Ú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)r8   r…   Ú	__class__s     €r9   r²  Ú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ÊxÈ!œUŸZšZ¨¨1¨b¼¿¹ÑDÓEÉxÑXˆÔäCHÈÄ8ó
ÚCK¸aŒU�ZŠZ˜˜1˜b "¬E¯K©KÑ8Ó9Á8ñ
ˆÔô EJÈ!ÄHó
ÚDL¸qŒU�ZŠZ˜˜1˜a  A¬U¯[©[Ñ9Ó:ÁHñ
ˆÔô ˜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Ã	0MÄ1MÅ2M#ÆAM(ÈAM-É.AM2c                 óp   • U R                  [        US5      5        U R                  [        US5      5        g)zpChecks the module does not contain child
modules for quantization preparation, e.g.
quant, dequant and observer
rª  ÚdequantN)ÚassertFalseÚhasattr©r8   rå   s     r9   ÚcheckNoPrepModulesÚ'QuantizationTestCase.checkNoPrepModulesµ  s.   € ð
 	×Ñœ ¨Ó1Ô2Ø×Ñœ ¨Ó3Õ4r<   c                 óŠ   • U R                  [        US5      5        UR                  5        H  nU R                  U5        M     g)z*Checks the module does not contain qconfigÚqconfigN)rÄ  rÅ  ÚchildrenÚcheckNoQconfig)r8   rå   Úchilds      r9   rÌ  Ú#QuantizationTestCase.checkNoQconfig½  s6   € à×Ñœ ¨Ó3Ô4à—_‘_Ö&ˆEØ×Ñ Ö&ò 'r<   c                 ó¦   • U R                  [        US5      5        U R                  [        US5      5        U R                  [        US5      5        g)zhChecks the module contains child
modules for quantization preparation, e.g.
quant, dequant and observer
rå   rª  rÃ  N)Ú
assertTruerÅ  rÆ  s     r9   ÚcheckHasPrepModulesÚ(QuantizationTestCase.checkHasPrepModulesÄ  s=   € ð
 	�‰œ ¨Ó1Ô2Ø�‰œ ¨Ó0Ô1Ø�‰œ ¨	Ó2Õ3r<   Nc           	      óF  • Uc
  [        5       nUc  0 nUR                  S0 5      nS n[        US5      (       aÈ  UR                  b»  U" U5      (       a8  [	        U[
        R                  R                  5      (       d  [        U5      U;   d  [        U5      U;   ag  [	        U[
        R                  R                  R                  5      (       d4  U R                  [        US5      S[        [        U5      5      -   S-   5        [        U5      [        5       R                  5       ;  a|  [        U5      UR                  5       ;  a^  [	        U[         5      (       dH  UR#                  5        H3  n[        U5      [        R$                  L a  M!  U R'                  XbU5        M5     gggg)z^Checks the module or module's leaf descendants
have observers in preparation for quantization
NÚ%float_to_observed_custom_module_classc                 ó\   • SnU R                  5        H  u  p#US:w  d  M  US-  nM     US:H  $ )Nr   Úactivation_post_processrr   )Únamed_children)rå   Úsubmodule_name_countr�   r…   s       r9   Úis_leaf_moduleÚ;QuantizationTestCase.checkObservers.<locals>.is_leaf_moduleÜ  s>   € Ø#$Ð Ø!×0Ñ0Ö2‘�ØÐ4Õ4Ø(¨AÑ-Ò(ñ 3ð (¨1Ñ,Ð,r<   rÊ  rÖ  zmodule: z do not have observer)r!   ÚgetrÅ  rÊ  rQ   rf   rÚ   Ú
Sequentialr/  ÚaoÚquantizationr   rÐ  Ústrr    Úvaluesr   rË  ÚDropoutÚcheckObservers)r8   rå   Úpropagate_qconfig_listÚprepare_custom_config_dictÚ&float_to_observed_module_class_mappingrÙ  rÍ  s          r9   râ  Ú#QuantizationTestCase.checkObserversÍ  sc  € ð "Ñ)Ü%IÓ%KÐ"Ø%Ñ-Ø)+Ð&Ø1K×1OÑ1OØ3°Ró2
Ð.ò
	-ô �F˜I×&Ñ&Ø—‘Ñ*ñ # 6×*Ñ*Ü& v¬u¯x©x×/BÑ/B×CÑCÜ˜V›Ð(>Ó>ä˜“<Ð#IÓIä˜v¤u§x¡x×'<Ñ'<×'HÑ'H×IÑIà�O‰OÜ˜Ð 9Ó:ØœS¤ f£Ó.Ñ.Ð1HÑHôô �‹LÔ ?Ó A× HÑ HÓ JÓJÜ�V“Ð$J×$QÑ$QÓ$SÓSÜ˜v¤|×4Ñ4àŸ™Ö*�Ü˜“;¤"§*¡*Ò,ÙØ×#Ñ#ØÐ3Möò +ð 5ð Tð Kr<   c                 óÐ   • U R                  [        UR                  5      [        R                  5        U R                  [        UR
                  5      [        R                  5        g)zFChecks that mod has nn.Quantize and
nn.DeQuantize submodules inserted
N)ÚassertEqualr/  rª  ÚnnqÚQuantizerÃ  Ú
DeQuantize©r8   Úmods     r9   ÚcheckQuantDequantÚ&QuantizationTestCase.checkQuantDequant  s=   € ð 	×Ñœ˜cŸi™i›¬#¯,©,Ô7Ø×Ñœ˜cŸk™kÓ*¬C¯N©NÕ;r<   c                 óŒ   • U R                  [        UR                  5      [        R                  5        U R                  U5        g)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     r9   ÚcheckWrappedQuantizedLinearÚ0QuantizationTestCase.checkWrappedQuantizedLinear	  s/   € ð
 	×Ñœ˜cŸj™jÓ)¬3¯:©:Ô6Ø×Ñ˜sÕ#r<   c                 óV   • U R                  [        U5      [        R                  5        g rK   )rè  r/  ré  rñ  rì  s     r9   ÚcheckQuantizedLinearÚ)QuantizationTestCase.checkQuantizedLinear  s   € Ø×Ñœ˜c›¤C§J¡JÕ/r<   c                 ó¢   • U R                  [        U5      [        R                  5        U R                  UR                  R
                  U5        g©úOChecks that mod has been swapped for an nnqd.Linear
module, the bias is float.
N)rè  r/  Únnqdrñ  Ú_packed_paramsrð   ©r8   rí  rð   s      r9   ÚcheckDynamicQuantizedLinearÚ0QuantizationTestCase.checkDynamicQuantizedLinear  s8   € ð 	×Ñœ˜c›¤D§K¡KÔ0Ø×Ñ˜×+Ñ+×1Ñ1°5Õ9r<   c                 ó¢   • U R                  [        U5      [        R                  5        U R                  UR                  R
                  U5        grø  )rè  r/  ÚnniqdÚ
LinearReLUrû  rð   rü  s      r9   ÚcheckDynamicQuantizedLinearReluÚ4QuantizationTestCase.checkDynamicQuantizedLinearRelu  s:   € ð 	×Ñœ˜c›¤E×$4Ñ$4Ô5Ø×Ñ˜×+Ñ+×1Ñ1°5Õ9r<   c                 óÖ  ^ • UR                  5       n[        R                  " 5       n[        R                  " XE5        UR                  S5        [        R                  " USS9nUR                  U5        U" U6 nU" U6 nU 4S jn	U	" Xx5        [        R                  " 5       n[        R                  " X5        UR                  S5        [        R                  " USS9n
U
" U6 nU	" Xx5        g )Nr   F)Úweights_onlyc                 ó  >• TR                  U S   US   5        [        U S   [        5      (       a=  TR                  U S   S   US   S   5        TR                  U S   S   US   S   5        g TR                  U S   US   5        g )Nr   rr   )rè  rQ   Útuple)Úref_outÚload_outr8   s     €r9   Úcheck_outputsÚEQuantizationTestCase.check_eager_serialization.<locals>.check_outputs.  s„   ø€ Ø×Ñ˜W Q™Z¨°!©Ô5Ü˜' !™*¤e×,Ñ,Ø× Ñ  ¨¡¨A¡°¸±¸A±Ô?Ø× Ñ  ¨¡¨A¡°¸±¸A±Õ?à× Ñ  ¨¡¨X°a©[Õ9r<   )Ú
state_dictÚioÚBytesIOrf   ÚsaveÚseekÚloadÚload_state_dict)r8   Ú	ref_modelÚloaded_modelrŸ  Ú
model_dictr  Úloaded_dictr  r	  r
  Úloadeds   `          r9   Úcheck_eager_serializationÚ.QuantizationTestCase.check_eager_serialization"  s¶   ø€ à×)Ñ)Ó+ˆ
Ü�JŠJ‹LˆÜ�
Š
�:Ô!Ø	�‰ˆqŒ	ä—j’j °Ñ7ˆØ×$Ñ$ [Ô1Ù˜Q�-ˆÙ Ð#ˆõ	:ñ 	�gÔ(Ü�JŠJ‹LˆÜ�
Š
�9Ô Ø	�‰ˆqŒ	ä—’˜A¨EÑ2ˆÙ˜1�:ˆÙ�gÕ(r<   c                 óì   • UR                  5       nUR                  5       nU R                  X$R                  5       -  [	        5       5        U R                  X5R                  5       -  [	        5       5        g rK   )Ú
get_weightÚget_biasrè  ÚkeysÚset)r8   r  Úweight_keysÚ	bias_keysÚweightÚbiass         r9   Úcheck_weight_bias_apiÚ*QuantizationTestCase.check_weight_bias_api?  sT   € Ø×%Ñ%Ó'ˆØ×!Ñ!Ó#ˆØ×Ñ˜§{¡{£}Ñ4´c³eÔ<Ø×Ñ˜§Y¡Y£[Ñ0´#³%Õ8r<   c                 ó  • [         R                  S[         R                  S0nU R                  [	        U5      U5        UR
                   H5  nU R                  UR                  R                  5       S   S   XC   5        M7     g)zRChecks that mod has been swapped for an nnqd.LSTM type
module, the bias is float.
Úquantized_dynamicÚquantized_fp16r   N)rf   rü   Úfloat16rè  r/  Ú_all_weight_valuesÚparamÚ__getstate__©r8   rí  Úreference_module_typerð   Úwt_dtype_mapÚpacked_paramss         r9   ÚcheckDynamicQuantizedLSTMÚ.QuantizationTestCase.checkDynamicQuantizedLSTME  su   € ô
 �K‰KÐ,Ü�M‰MÐ+ð
ˆð 	×Ñœ˜c›Ð$9Ô:Ø ×3Ô3ˆMØ×ÑØ×#Ñ#×0Ñ0Ó2°1Ñ5°aÑ8¸,Ñ:Möò 4r<   c                 ój   • U R                  [        U5      [        R                  R                  5        g rK   )rè  r/  rf   rÚ   rñ  rì  s     r9   ÚcheckLinearÚ QuantizationTestCase.checkLinearS  s   € Ø×Ñœ˜c›¤E§H¡H§O¡OÕ4r<   c                 ó,  • [         R                  S[         R                  S0nU R                  [	        U5      U5        [        US5      (       aF  UR                   H5  nU R                  UR                  R                  5       S   S   XC   5        M7     gg)rù  r&  r'  r)  r   N)	rf   rü   r(  rè  r/  rÅ  r)  r*  r+  r,  s         r9   ÚcheckDynamicQuantizedModuleÚ0QuantizationTestCase.checkDynamicQuantizedModuleV  sˆ   € ô
 �K‰KÐ,Ü�M‰MÐ+ð
ˆð 	×Ñœ˜c›Ð$9Ô:Ü�3Ð,×-Ñ-Ø!$×!7Ô!7�Ø× Ñ Ø!×'Ñ'×4Ñ4Ó6°qÑ9¸!Ñ<¸lÑ>Qöò "8ð .r<   c                 óÎ   • [         R                  R                  U5      nU R                  XX#5        [         R                  R	                  XS   5      nU R                  XX#5        g r”   )rf   r^  r`  Ú_checkScriptabler_  )r8   Úorig_modrk   Úcheck_save_loadÚscriptedÚtraceds         r9   ÚcheckScriptableÚ$QuantizationTestCase.checkScriptablee  sN   € Ü—9‘9×#Ñ# HÓ-ˆØ×Ñ˜h°*ÔNô —‘—‘ °a©=Ó9ˆØ×Ñ˜h°
ÕLr<   c                 ó$  • U R                  XU5        [        R                  " 5       n[        R                  R                  X%5        UR                  S5        [        R                  R                  U5      nU(       a  U R                  XU5        g g r”   )Ú"_checkModuleCorrectnessAgainstOrigr  r  rf   r^  r  r  r  )r8   r:  Ú
script_modrk   r;  ÚbufferÚ
loaded_mods          r9   r9  Ú%QuantizationTestCase._checkScriptablen  sf   € Ø×/Ñ/°ÀjÔQô —’“ˆÜ�	‰	�‰�zÔ*à�‰�AŒÜ—Y‘Y—^‘^ FÓ+ˆ
ö Ø×3Ñ3°HÈ*ÕUð r<   c                 óL   • U H  nU" U6 nU" U6 nU R                  Xe5        M      g rK   )rè  )r8   r:  Útest_modrk   rl   Ú
ref_outputÚscripted_outputs          r9   rA  Ú7QuantizationTestCase._checkModuleCorrectnessAgainstOrig|  s,   € ÛˆCÙ! 3˜ˆJÙ&¨˜nˆOØ×Ñ˜_Ö9ò r<   c
           
      óP  • U(       a  [        S[        U5      5        S[        [        R                  R
                  R                  5      0n
U(       a  UR                  5       nU(       a  SU	c  [        OU	0n
[        XUS   5      R                  5       nU(       a  [        SUR                  5        0 n0 nS H[  nU(       a  [        XºUS9XÅ'   XÅ   " U5      XÕ'   M$  [        R                  " U5      n[        UU
[        U/SUS9XÅ'   XÅ   " US   6 XÕ'   M]     U(       a2  [        S	US
   R                  5        [        SUS   R                  5        U(       aM  U R!                  US
   US   5        [#        5       R%                  U5      R'                  US   R                  5        US   $ )NzTesting:rº   r   zinput graph:)TF)ÚdebugF)rä   rL  zdebug graph:Tznon debug graph:)r¾   rß  r   rf   r!  r"  ÚengineÚevalr   rb  Úgraphr   ÚcopyÚdeepcopyr   rm   rè  r0   ÚcheckÚrun)r8   rå   ÚinputsÚquantized_opra  rL  rR  Ú	eval_modeÚdynamicrÊ  rè   rj   ÚmodelsÚoutputsÚinputs_copys                  r9   ÚcheckGraphModeOpÚ%QuantizationTestCase.checkGraphModeOp‚  st  € ö Ü�*œc &›kÔ*ØÔ/´·±×0HÑ0H×0OÑ0OÓPÐQˆæØ—[‘[“]ˆFÞØ¸7¹?Õ 7ÐPWÐXˆLÜ! &°6¸!±9Ó=×BÑBÓDˆÞÜ�. %§+¡+Ô.ØˆØˆÛ"ˆEÞÜ 4°UÐPUÑ V�‘à!'¢¨vÓ!6�“ô #Ÿmšm¨FÓ3�Ü ,ØØ Ü%Ø �MØ!Øñ!�‘ð "(¢°°q±	Ð!:�“ñ% #ö( Ü�. &¨¡,×"4Ñ"4Ô5ÜÐ$ f¨U¡m×&9Ñ&9Ô:æà×Ñ˜W T™]¨G°E©NÔ;ô ‹K×Ñ˜lÓ+×/Ñ/°°u±×0CÑ0CÔDà�e‰}Ðr<   c           	      óL  • 0 n/ n[        UR                  SS95      nUR                  R                   H®  nSn	UR                  S:X  d  UR                  S:X  a!  [        UR                  UR                  5      n	O;UR                  S:X  a+  [        UR                  [        XxR                     5      5      n	U	c  M†  UR                  U	5        X•;   a  XY==   S-  ss'   Mª  SXY'   M°     Ub#  U R                  X%;   S[        U5      -   S	-   5        Ubª  UR                  5        H–  u  p*U
S
:w  ah  U R                  X%;   S[        U5      -   S-   5        U R                  XR   U
:H  S[        U5      -   S-   [        U
5      -   S-   [        XR   5      -   5        Ms  U R                  X%;  S[        U5      -   S-   5        M˜     Ubj  S
nU H#  n	U[        U5      :X  a    gX”U   :X  d  M  US-  nM%     U R                  U[        U5      :H  SU R                  USS9-   S-   [        U5      -   5        gg)zØ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>   rD   rH   rr   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_modulesrO  Únodesr6   r2   r7   r/  r®   rÐ  rß  Úitemsrö   ÚprintGraphModule)r8   Úgraph_moduleÚexpected_nodeÚexpected_node_occurrenceÚexpected_node_listÚnodes_in_graphÚ	node_listÚmodulesÚnoderš   Ú
occurrenceÚ	cur_indexs               r9   ÚcheckGraphModuleNodesÚ*QuantizationTestCase.checkGraphModuleNodes¼  sR  € ð ˆØˆ	Ü�|×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·;±;Ñ+?Ó&@ÓA�à‹}Ø× Ñ  Ô#ØÓ&Ø"Ó%¨Ñ*Õ%à()�NÓ%ñ -ð Ñ$Ø�O‰OØÑ/Øœ#˜mÓ,Ñ,Ð/OÑOôð
 $Ñ/Ø-E×-KÑ-KÖ-MÑ)�Ø “?Ø—O‘OØ%Ñ7Ø0´3°}Ó3EÑEÈÑTôð —O‘OØ&Ñ5¸ÑCØ0Ü˜mÓ,ñ-à1ñ2ô ˜j›/ñ*ð /ñ	/ô
 ˜nÑ;Ó<ñ=öð —O‘OØ%Ñ;Ø0Ü˜mÓ,ñ-à=ñ>öñ! .Nð. Ñ)ØˆIÛ�Ø¤Ð$6Ó 7Ó7ÙØ¨9Ñ5Õ5Ø ‘N’Iñ	 ð
 �O‰OØœSÐ!3Ó4Ñ4Ø)Ø×'Ñ'¨ÀÐ'ÐFñGà*ñ+ô Ð(Ó)ñ*õð *r<   c                 óô  • [        UR                  SS95      n/ nUR                  R                   H   nSR	                  [        [        UR                  UR                  UR                  UR                  UR                  /5      5      nUR                  S:X  a&  US[        [        X5R                     5      5      -   -  nUR                  U5        M¢     SR	                  U5      nU(       a  [        U5        U$ )NFr^  rW   rH   z module type: Ú
)ra  rb  rO  rc  ÚjoinÚmaprX   r6   r�   r7   r'  r(  r/  r®   r¾   )r8   rf  r`  rl  Ú
node_infosrš   Ú	node_infoÚstr_to_prints           r9   re  Ú%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 Ó,ˆÞÜ�,ÔØÐr<   Úmatched_subgraph_pairsÚexpected_typesÚgm_aÚgm_bÚreturnc                 ó8  • S[         S[        S[        [        -  4S jnU R	                  [        U5      [        U5      :H  S[        U5       S[        U5       35        UR                  5        H©  u  pgUu  p‰Uu  p«U	u  pÍX   u  pïU" UR                  U5      nU" UR                  U5      nU" UR                  U5      nU" UR                  U5      nU
UL =(       a    UUL =(       a    UUL =(       a    UUL nU R	                  USU SX«XÍ4 S	UUUU4 35        M«     g
)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.
rm  Úgmr~  c                 óÌ   • U R                   S:X  a   [        XR                  5      n[        U5      $ U R                   S;  a  [	        SU R                   < 35      eU R                  $ )NrH   )r>   rD   z:Expected node.op in ('call_function', 'call_method'), got )r6   Úgetattrr7   r/  rs  )rm  r€  rí  s      r9   Ú_get_underlying_op_typeÚ]QuantizationTestCase.assert_types_for_matched_subgraph_pairs.<locals>._get_underlying_op_type,  sZ   € ð —7‘7˜mÓ+Ü! "§k¡kÓ2�CÜ ›9Ð$à—w‘wÐ&FÓFÜ,Ð/iÐjn×jqÑjqÑitÐ-uÓvÐvØŸ;™;Ð&r<   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ö   rd  Ú
start_nodeÚend_node)r8   rz  r{  r|  r}  rƒ  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                        r9   Ú'assert_types_for_matched_subgraph_pairsÚ<QuantizationTestCase.assert_types_for_matched_subgraph_pairs  sh  € ð,	'Üð	'Ü +ð	'äœC‘ô	'ð �O‰OÜÐ*Ó+¬s°>Ó/BÑBØ?ÄÐDZÓ@[Ð?\Ð\aÔbeÐftÓbuÐavÐwôð '×,Ñ,Ö.‘�Ø56Ñ2Ð Ø3CÑ0Ð Ø3CÑ0Ð Ø)?Ñ)BÑ&�
á#:¸:×;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Ð6zÐ5{ð |Ø,¨nÐ>NÐP^Ð_Ð`ðböò! /r<   Úact_compare_dictc                 ó‚  • UR                  5        GH*  u  p#UR                  5        GH  u  pEU R                  [        U5      S:H  SU S35        UR                  5       u  pg[	        [        XV   5      5       GHº  nXV   U   n	XW   U   n
U R                  U	S   U	S   :H  SU SU SU S35        U R                  [        U	S   5      [        U
S   5      :H  SU SU SU S	35        U[
        R                  R                  :H  =(       a    S
U	S   ;   =(       d    S
U
S   ;   nU(       Gd]  [	        [        U	S   5      5       GHA  nU	S   U   nU
S   U   n[        U[        R                  5      (       a<  U R                  UR                  UR                  :H  SU SU SU S3SU S3-   5        Mo  [        U[        5      (       aF  US   nUS   nU R                  UR                  UR                  :H  SU SU SU S3SU S3-   5        MÊ  [        U[        5      (       d  [        S[        U5       35      e[        U5      S:w  a  [        S[        U5       35      e[        US   5      S:w  a  [        S[        US   5       35      eUS   R                  US   R                  :w  a+  [        SUS   R                   SUS   R                   35      eUS   S   R                  US   S   R                  :w  a1  [        SUS   S   R                   SUS   S   R                   35      eUS   S   R                  US   S   R                  :w  d  GM  [        SUS   S   R                   SUS   S   R                   35      e   U	S   nU
S   nU	S   nU
S   nU	S   [
        R                   R                  :X  a+  U R                  UU:H  5        U R                  UU:H  5        GMn  U	S   [
        R"                  R                  :X  d  GM’  U R                  UU:g  5        U R                  UU:g  5        GM½     GM     GM-     g)zÑ
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
rn  zLayer z) does not have exactly two model results.r/  z, r…  z do not have the same type.rà  z- do not have the same number of seen Tensors.Úconv1dÚprev_node_target_typerW   zhave a shape mismatch at idx r¹   r   zunhandled type z!Expected len(values_0) == 2, got rr   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)rd  rÐ  rö   r  rv   r&   ÚWEIGHTÚvaluerQ   rf   ÚTensorrf  Úlistr  rs  r/  ÚNODE_OUTPUTÚ
NODE_INPUT)r8   r˜  Ú
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                      r9   Úassert_ns_compare_dict_validÚ1QuantizationTestCase.assert_ns_compare_dict_validQ  s¿  € ð 4D×3IÑ3I×3KÑ/�
Ø/B×/HÑ/H×/JÑ+�KØ—O‘OÜ˜J›¨1Ñ,Ø   Ð,UÐVôð 2<·±Ó1BÑ.�LÜ#(¬¨ZÑ-EÓ)F×#G˜Ø'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Ñ#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Ñ+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 (Jð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ô_ $Hô 0Kò 4Lr<   c                 ó€  • [        U5      [        L a  US   nU[        R                  :X  a>  [	        [
        R                  R                  R                  5      nUR                  5         O�U[        R                  :X  a>  [        [
        R                  R                  R                  5      nUR                  5         O/[        n[        5       R                  U5      nUR                  5         U[        R                  :X  a  [         nO["        nU	bR  [        U	5      [        [$        4;  a  ['        S5      e[)        U	[        5      (       a  U	nO[        R*                  " U	5      nU" UUUUUS9nU[        R,                  :w  a  U" U6   U(       a8  [/        5         [/        SU5        [/        SU5        [/        5         [/        SU5        U R1                  UU
UU5        [2        R4                  " U5      n[7        [2        R4                  " U5      5      n[9        [2        R4                  " U5      5      nU" U6 nU" U6 n[2        R4                  " U5      n[2        R4                  " U5      nU(       a  UOUnU(       a1  [/        5         [/        SU5        U R;                  U5        [/        5         U R1                  UUUU5        UUUUUS.$ )	aŒ  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/  r¡  r   r¼  r   rf   r!  r"  rM  rw   r»  r   rN  r   r   Ú
set_globalr+   r*   ra  rs  rQ   Ú	from_dictr¾  r¾   rp  rP  rQ  r(   r)   re  )r8   rj   rT  Ú
quant_typerg  rh  ri  Ú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                              r9   ÚcheckGraphModeFxOpÚ'QuantizationTestCase.checkGraphModeFxOp³  sL  € ô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Ñ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Ü”Ø×&Ñ&ØØØ(Ø"ô	ð *Ø(Ø'<Ø$*Ø.>ñð r<   c	                 óº  • U(       a  XE/n	OU/n	UR                  5       n
[        R                  " 5       n[        R                  " X«5        UR                  S5        [        R                  " U5      n[        R                  R                  R                  nU
 H‘  n[        X®   [        R                  R                  5      (       d  M0  [        XÎ   [        R                  R                  5      (       d  [        SU< S35      eU" X®   5      nU" XÎ   5      nU R                  UU5        M“     U(       a  [        R                   " UUSSUS9nO[        R"                  " X#US9nU R%                  UUU	5        UR'                  U5        U R                  U" UR(                  R*                  5      U" UR(                  R*                  5      5        U R-                  X/SS9  U(       a"  [        R.                  R!                  UUSS	SS
9nO[        R.                  R#                  X#S9nU(       a7  [0        R2                  " U[        R4                  SS9n[7        [8        US9Ul        [=        U5        U" U	6   U(       a"  [        R                   R?                  U5      nSnO![        R"                  R?                  U5      nSnU" U	6   U RA                  U[C        U5      ;   5        g )Nr   zExpected loaded_dict[z] to be ScriptObjectTr~   )Ú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  rf   r  r  r  rH  r"  Úembedding_bag_unpackrQ   Ú_CÚScriptObjectrs  rè  ré  ÚEmbeddingBagÚ	Embeddingr  r  rû  Ú_packed_weightr>  rÚ   r   Ú	with_argsÚ per_channel_affine_float_qparamsr   r   rÊ  ré   Ú
from_floatrÐ  rß  )r8   ÚqembrÔ  rÕ  ÚindicesÚoffsetsÚset_qconfigÚ
is_emb_bagrð   rT  Úemb_dictr  r  Úembedding_unpackÚkeyÚ
emb_weightÚloaded_weightÚloaded_qembÚfloat_embeddingÚfloat_qparams_observerÚq_embeddingbagÚexpected_names                         r9   ÚcheckEmbeddingSerializationÚ0QuantizationTestCase.checkEmbeddingSerialization>  sw  € ö ØÐ'‰Fà�YˆFØ—?‘?Ó$ˆÜ�JŠJ‹LˆÜ�
Š
�8ÔØ	�‰ˆqŒ	Ü—j’j “mˆÜ Ÿ9™9×.Ñ.×CÑCÐãˆCÜ˜(™-¬¯©×)>Ñ)>×?Ó?Ü! +Ñ"2´E·H±H×4IÑ4I×JÑJÜ(Ð+@ÀÁÐG[Ð)\Ó]Ð]Ù-¨h©mÓ<�
Ù 0°Ñ1AÓ B�Ø× Ñ  ¨]Ö;ñ ö Ü×*Ò*Ø-Ø+Ø$(ØØñ‰Kô Ÿ-š-Ø-ÐRWñˆKð 	×&Ñ& t¨[¸&ÔAà×#Ñ# KÔ0Ø×ÑÙ˜T×0Ñ0×?Ñ?Ó@Ù˜[×7Ñ7×FÑFÓGô	
ð 	×Ñ˜T 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á˜Ñà�‰˜¬¨^Ó)<Ñ<Õ=r<   )r¿  rk   r´  r·  rµ  r¸  r¶  r¹  rº  r½  r   ©NN)F)FFTTFN)NNN©T)NNNFFNNNNNN))r[   r\   r]   r^   r²  rÇ  rÌ  rÑ  râ  rî  rò  rõ  rý  r  r  r#  r0  r3  r6  r>  r9  rA  r[  rp  re  ÚHAS_FXra  rß  r  r'   r/   r,   r–  r.   rµ  rÑ  rf   rõ   rù  ra   Ú__classcell__©rÀ  s   @r9   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>ò Y>r<   r­  c                   óž   • \ rS rSrS\\R                  R                     4S jrS\R                  R                  S\R                  4S jr
Srg)	ÚQuantizationLiteTestCaseiš  Úmodel_classc                 óð   • Sn[        U5         [        R                  R                  R	                  U5      nU" S0 UD6n[        U[        U R                  /5      nS S S 5        U$ ! , (       d  f       W$ = f)Nr8  rb   )r#   rf   rÝ  rÞ  r   r   rm   rk   )r8   r  r(  ÚqenginerÊ  rj   s         r9   Ú_create_quantized_modelÚ0QuantizationLiteTestCase._create_quantized_model›  sh   € àˆÜ& wÕ/ä—h‘h×+Ñ+×?Ñ?ÀÓHˆGÙÑ) &Ñ)ˆEÜ˜UÔ$5¸¿¹Ð7HÓIˆE÷	 0ð ˆ÷ 0Ô/ð ˆús   ŽAA&Á&
A5rj   Úinputc                 ó   • Sn[        U5         [        R                  R                  U5      nU" U5      nSn[	        SUS-   5       HÌ  n [
        R                  " UR                  5       5      nUR                  S5        [        U5      n	U	" U5      n
[        R                  R                  XZ5        U	R                  U5      n[        R                  R                  X[5        U	R                  SU5      n[        R                  R                  X\5          O   S S S 5        g ! [         a  nXv:X  a  Ue S nAMð  S nAff = f! , (       d  f       g = f)Nr8  r¼   rr   r   Úforward)r#   rf   r^  r`  rv   r  r  Ú$_save_to_buffer_for_lite_interpreterr  r"   ÚtestingÚassert_closer	  Ú
run_methodrs  )r8   rj   r  r  Úscript_moduleÚscript_module_resultÚ	max_retryÚretryrC  Úmobile_moduleÚmobile_module_resultÚmobile_module_forward_resultÚmobile_module_run_method_resultÚes                 r9   Ú_compare_script_and_mobileÚ3QuantizationLiteTestCase._compare_script_and_mobile¦  s-  € àˆÜ& 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×.Ñ.Ø,ôð 4A×3HÑ3HÈÓ3OÐ0Ü—M‘M×.Ñ.Ø,ôð 7D×6NÑ6NØ! 5ó7Ð3ô —M‘M×.Ñ.Ø,ôñ ñ= 1÷ 0Ð/øô< &ó !ØÓ)Ø˜å ûð	!ú÷= 0Õ/ús6   Ž<D?ÁCD ÄD?Ä 
D<Ä*D7Ä1D?Ä7D<Ä<D?Ä?
Erb   N)r[   r\   r]   r^   r/  rf   rÚ   ÚModuler  r   r  ra   rb   r<   r9   r  r  š  s:   † ð	°4¸¿¹¿¹Ñ3Hô 	ð&°·±·±ð &ÈÏÉ÷ &r<   r  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚSingleLayerLinearModeliÒ  r~  c                 ó¢   >• [         TU ]  5         [        R                  R	                  SS5      R                  [        R                  S9U l        g ©Nr¼   rò   )r±  r:   rf   rÚ   rñ  r¿   r­   Úfc1©r8   rÀ  s    €r9   r:   ÚSingleLayerLinearModel.__init__Ó  s6   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆ�r<   c                 ó(   • U R                  U5      nU$ rK   ©r  ©r8   rŸ  s     r9   r	  ÚSingleLayerLinearModel.forward×  ó   € Ø�H‰H�Q‹KˆØˆr<   .c                 ó2   • [         R                  " SS5      4$ ©Nrr   r¼   ©rf   r³  rM   s    r9   Úget_example_inputsÚ)SingleLayerLinearModel.get_example_inputsÛ  ó   € Ü—
’
˜1˜aÓ Ð"Ð"r<   r"  ©r~  N©r[   r\   r]   r^   r:   r	  r  r.   r)  ra   rþ  rÿ  s   @r9   r  r  Ò  s&   ø† ÷?òð# E¨#¨s¨(¡O÷ #ò #r<   r  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚAnnotatedSingleLayerLinearModeliß  c                 ó  >• [         TU ]  5         [        R                  R                  R                  U5      U l        [        [        R                  R                  SS5      R                  [        R                  S95      U l        g r  )r±  r:   rf   rÝ  rÞ  r   rÊ  r   rÚ   rñ  r¿   r­   r  ©r8   r  rÀ  s     €r9   r:   Ú(AnnotatedSingleLayerLinearModel.__init__à  sW   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ð KÓLˆ�r<   c                 ó(   • U R                  U5      nU$ rK   r"  r#  s     r9   r	  Ú'AnnotatedSingleLayerLinearModel.forwardå  r%  r<   r~  .c                 ó2   • [         R                  " SS5      4$ r'  r(  rM   s    r9   r)  Ú2AnnotatedSingleLayerLinearModel.get_example_inputsé  r+  r<   ©r  rÊ  ©r  r-  rÿ  s   @r9   r/  r/  ß  s'   ø† ÷Mò
ð# E¨#¨s¨(¡O÷ #ò #r<   r/  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚSingleLayerLinearDynamicModelií  c                 óþ   >• [         TU ]  5         [        R                  R                  R                  U5      U l        [        R                  R                  SS5      R                  [        R                  S9U l        g r  )r±  r:   rf   rÝ  rÞ  r   rÊ  rÚ   rñ  r¿   r­   r  r1  s     €r9   r:   Ú&SingleLayerLinearDynamicModel.__init__î  sR   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆ�r<   c                 ó(   • U R                  U5      nU$ rK   r"  r#  s     r9   r	  Ú%SingleLayerLinearDynamicModel.forwardó  r%  r<   r~  .c                 ó2   • [         R                  " SS5      4$ r'  r(  rM   s    r9   r)  Ú0SingleLayerLinearDynamicModel.get_example_inputs÷  r+  r<   r7  r8  r-  rÿ  s   @r9   r:  r:  í  s&   ø† ÷?ò
ð# E¨#¨s¨(¡O÷ #ò #r<   r:  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚLinearAddModeliû  r~  c                 ó"  >• [         TU ]  5         [        R                  R	                  SS5      R                  [        R                  S9U l        [        R                  R	                  SS5      R                  [        R                  S9U l        g ©Nr¼   é   rò   ©	r±  r:   rf   rÚ   rñ  r¿   r­   r  Úfc2r  s    €r9   r:   ÚLinearAddModel.__init__ü  ó^   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆ�r<   c                 óx   • U R                  U5      n[        R                  " US5      nU R                  U5      nU$ ©Nr¼   )r  rf   r“  rG  r#  s     r9   r	  ÚLinearAddModel.forward  s0   € Ø�H‰H�Q‹KˆÜ�IŠI�a˜‹OˆØ�H‰H�Q‹KˆØˆr<   .c                 ó2   • [         R                  " SS5      4$ r'  r(  rM   s    r9   r)  Ú!LinearAddModel.get_example_inputs  r+  r<   ©r  rG  r,  r-  rÿ  s   @r9   rB  rB  û  s&   ø† ÷?ò
ð# E¨#¨s¨(¡O÷ #ò #r<   rB  c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚRNNDynamicModeli  c                 óR  >• [         TU ]  5         [        U l        US:X  a@  [        R
                  R                  SS5      R                  [        R                  S9U l	        US:X  aA  [        R
                  R                  SS5      R                  [        R                  S9U l	        g g )NÚGRUrn  rò   ÚLSTM)r±  r:   r   rÊ  rf   rÚ   rS  r¿   r­   rí  rT  ©r8   Úmod_typerÀ  s     €r9   r:   ÚRNNDynamicModel.__init__  sz   ø€ Ü‰ÑÔÜ.ˆŒØ�uÓÜ—x‘x—|‘| A qÓ)×,Ñ,´5·;±;Ð,Ð?ˆDŒHØ�vÓÜ—x‘x—}‘} Q¨Ó*×-Ñ-´E·K±KÐ-Ð@ˆD�Hð r<   c                 ó(   • U R                  U5      nU$ rK   ©rí  r#  s     r9   r	  ÚRNNDynamicModel.forward  r%  r<   ©rí  rÊ  ©r[   r\   r]   r^   r:   r	  ra   rþ  rÿ  s   @r9   rQ  rQ    s   ø† õA÷ð r<   rQ  c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚRNNCellDynamicModeli  c                 óf  >• [         TU ]  5         [        U l        US:X  a@  [        R
                  R                  SS5      R                  [        R                  S9U l	        US:X  a@  [        R
                  R                  SS5      R                  [        R                  S9U l	        US:X  a?  [        R
                  R                  SSSS9R                  [        R                  S9U l	        US:X  a@  [        R
                  R                  SSS	S9R                  [        R                  S9U l	        g g )
NÚGRUCellrn  rò   ÚLSTMCellÚRNNReLUÚrelu)ÚnonlinearityÚRNNTanhÚtanh)r±  r:   r   rÊ  rf   rÚ   r`  r¿   r­   rí  ra  ÚRNNCellrU  s     €r9   r:   Ú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ð !r<   c                 ó(   • U R                  U5      nU$ rK   rY  r#  s     r9   r	  ÚRNNCellDynamicModel.forward&  r%  r<   r[  r\  rÿ  s   @r9   r^  r^    s   ø† õ
Y÷ð r<   r^  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚLSTMwithHiddenDynamicModeli+  c                 óþ   >• [         TU ]  5         [        R                  R                  R                  U5      U l        [        R                  R                  SS5      R                  [        R                  S9U l        g )Nrn  rò   )r±  r:   rf   rÝ  rÞ  r   rÊ  rÚ   rT  r¿   r­   Úlstmr1  s     €r9   r:   Ú#LSTMwithHiddenDynamicModel.__init__,  sR   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H—M‘M ! QÓ'×*Ñ*´·±Ð*Ð=ˆ�	r<   c                 ó.   • U R                  X5      u  pX4$ rK   )rn  )r8   rŸ  Úhids      r9   r	  Ú"LSTMwithHiddenDynamicModel.forward1  s   € Ø—‘˜1Ó"‰ˆØˆvˆr<   )rn  rÊ  r8  r\  rÿ  s   @r9   rl  rl  +  s   ø† ÷>÷
ð r<   rl  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	Ú	ConvModeli6  r~  c                 ó¢   >• [         TU ]  5         [        R                  R	                  SSSSS9R                  [        R                  S9U l        g ©Nr¯  r¼   F©r"  rò   )r±  r:   rf   rÚ   ÚConv2dr¿   r­   Úconvr  s    €r9   r:   ÚConvModel.__init__7  s<   ø€ Ü‰ÑÔÜ—H‘H—O‘O A q¨!°%�OÐ8×;Ñ;Ä%Ç+Á+Ð;ÐNˆ�	r<   c                 ó(   • U R                  U5      nU$ rK   ©ry  r#  s     r9   r	  ÚConvModel.forward;  ó   € Ø�I‰I�a‹LˆØˆr<   .c                 ó6   • [         R                  " SSSS5      4$ ©Nrr   r¯  r¼   r(  rM   s    r9   r)  ÚConvModel.get_example_inputs?  ó   € Ü—
’
˜1˜a  AÓ&Ð(Ð(r<   r|  r,  r-  rÿ  s   @r9   rt  rt  6  s'   ø† ÷Oòð) E¨#¨s¨(¡O÷ )ò )r<   rt  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚConvTransposeModeliC  r~  c                 ó¢   >• [         TU ]  5         [        R                  R	                  SSSSS9R                  [        R                  S9U l        g rv  )r±  r:   rf   rÚ   ÚConvTranspose2dr¿   r­   ry  r  s    €r9   r:   ÚConvTransposeModel.__init__D  s?   ø€ Ü‰ÑÔÜ—H‘H×,Ñ,¨Q°°1¸5Ð,ÐA×DÑDÌ5Ï;É;ÐDÐWˆ�	r<   c                 ó(   • U R                  U5      nU$ rK   r|  r#  s     r9   r	  ÚConvTransposeModel.forwardH  r~  r<   .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  Ú%ConvTransposeModel.get_example_inputsL  r‚  r<   r|  r,  r-  rÿ  s   @r9   r„  r„  C  s'   ø† ÷Xòð) E¨#¨s¨(¡O÷ )ò )r<   r„  c                   óF   ^ • \ rS rSrU 4S jrS rS\\S4   4S jrSr	U =r
$ )ÚAnnotatedConvModeliP  c                 ó:  >• [         TU ]  5         [        R                  R                  R                  U5      U l        [        R                  R                  SSSSS9R                  [        R                  S9U l        [        5       U l        [        5       U l        g rv  )r±  r:   rf   rÝ  rÞ  r   rÊ  rÚ   rx  r¿   r­   ry  r   rª  r   rÃ  r1  s     €r9   r:   ÚAnnotatedConvModel.__init__Q  sj   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H—O‘O A q¨!°%�OÐ8×;Ñ;Ä%Ç+Á+Ð;ÐNˆŒ	Ü“[ˆŒ
Ü"“}ˆ�r<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   ©rª  ry  rÃ  r#  s     r9   r	  ÚAnnotatedConvModel.forwardX  ó.   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�L‰L˜‹OˆØˆr<   r~  .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  Ú%AnnotatedConvModel.get_example_inputs^  r‚  r<   ©ry  rÃ  rÊ  rª  r-  rÿ  s   @r9   r�  r�  P  ó&   ø† õ%òð) E¨#¨s¨(¡O÷ )ò )r<   r�  c                   óF   ^ • \ rS rSrU 4S jrS rS\\S4   4S jrSr	U =r
$ )ÚAnnotatedConvTransposeModelib  c                 ó:  >• [         TU ]  5         [        R                  R                  R                  U5      U l        [        R                  R                  SSSSS9R                  [        R                  S9U l        [        5       U l        [        5       U l        g rv  )r±  r:   rf   rÝ  rÞ  r   rÊ  rÚ   r†  r¿   r­   ry  r   rª  r   rÃ  r1  s     €r9   r:   Ú$AnnotatedConvTransposeModel.__init__c  sm   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H×,Ñ,¨Q°°1¸5Ð,ÐA×DÑDÌ5Ï;É;ÐDÐWˆŒ	Ü“[ˆŒ
Ü"“}ˆ�r<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   r‘  r#  s     r9   r	  Ú#AnnotatedConvTransposeModel.forwardj  r“  r<   r~  .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  Ú.AnnotatedConvTransposeModel.get_example_inputsp  r‚  r<   r–  r-  rÿ  s   @r9   r™  r™  b  r—  r<   r™  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚConvBnModelit  r~  c                 ó   >• [         TU ]  5         [        R                  R	                  SSSSS9R                  [        R                  S9U l        [        R                  R                  S5      R                  [        R                  S9U l	        g rv  )
r±  r:   rf   rÚ   rx  r¿   r­   ry  ÚBatchNorm2dÚbnr  s    €r9   r:   ÚConvBnModel.__init__u  sd   ø€ Ü‰ÑÔÜ—H‘H—O‘O A q¨!°%�OÐ8×;Ñ;Ä%Ç+Á+Ð;ÐNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ð?ˆ�r<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   ©ry  r¤  r#  s     r9   r	  ÚConvBnModel.forwardz  ó!   € Ø�I‰I�a‹LˆØ�G‰G�A‹JˆØˆr<   .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  ÚConvBnModel.get_example_inputs  r‚  r<   ©r¤  ry  r,  r-  rÿ  s   @r9   r¡  r¡  t  s'   ø† ÷@ò
ð
) E¨#¨s¨(¡O÷ )ò )r<   r¡  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚAnnotatedConvBnModeliƒ  r~  c                 ór  >• [         TU ]  5         [        U l        [        R
                  R                  SSSSS9R                  [        R                  S9U l	        [        R
                  R                  S5      R                  [        R                  S9U l        [        5       U l        [        5       U l        g rv  )r±  r:   r   rÊ  rf   rÚ   rx  r¿   r­   ry  r£  r¤  r   rª  r   rÃ  r  s    €r9   r:   ÚAnnotatedConvBnModel.__init__„  s}   ø€ Ü‰ÑÔÜ&ˆŒÜ—H‘H—O‘O A q¨!°%�OÐ8×;Ñ;Ä%Ç+Á+Ð;ÐNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ð?ˆŒÜ“[ˆŒ
Ü"“}ˆ�r<   c                 óŽ   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ rK   )rª  ry  r¤  rÃ  r#  s     r9   r	  ÚAnnotatedConvBnModel.forwardŒ  s;   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�G‰G�A‹JˆØ�L‰L˜‹OˆØˆr<   .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  Ú'AnnotatedConvBnModel.get_example_inputs“  r‚  r<   )r¤  ry  rÃ  rÊ  rª  r,  r-  rÿ  s   @r9   r®  r®  ƒ  s&   ø† ÷%òð) E¨#¨s¨(¡O÷ )ò )r<   r®  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚConvBnReLUModeli—  r~  c                 óR  >• [         TU ]  5         [        R                  R	                  SSSSS9R                  [        R                  S9U l        [        R                  R                  S5      R                  [        R                  S9U l	        [        R                  " SS9U l        g ©Nr¯  r¼   Frw  rò   Trã   )r±  r:   rf   rÚ   rx  r¿   r­   ry  r£  r¤  ÚReLUrc  r  s    €r9   r:   ÚConvBnReLUModel.__init__˜  st   ø€ Ü‰ÑÔÜ—H‘H—O‘O A q¨!°%�OÐ8×;Ñ;Ä%Ç+Á+Ð;ÐNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ð?ˆŒÜ—G’G DÑ)ˆ�	r<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   ©ry  r¤  rc  r#  s     r9   r	  ÚConvBnReLUModel.forwardž  s.   € Ø�I‰I�a‹LˆØ�G‰G�A‹JˆØ�I‰I�a‹LˆØˆr<   .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  Ú"ConvBnReLUModel.get_example_inputs¤  r‚  r<   ©r¤  ry  rc  r,  r-  rÿ  s   @r9   r¶  r¶  —  s&   ø† ÷*òð) E¨#¨s¨(¡O÷ )ò )r<   r¶  c                   óP   ^ • \ rS rSrS	U 4S jjrS rS rS\\S4   4S jr	Sr
U =r$ )
ÚAnnotatedConvBnReLUModeli¨  c                 óê  >• [         TU ]  5         [        R                  R                  R                  U5      U l        [        R                  R                  SSSSS9R                  [        R                  S9U l        [        R                  R                  S5      R                  [        R                  S9U l        [        R                  " SS9U l        [!        5       U l        [%        5       U l        g r¸  )r±  r:   rf   rÝ  rÞ  r   rÊ  rÚ   rx  r¿   r­   ry  r£  r¤  r¹  rc  r   rª  r   rÃ  r1  s     €r9   r:   Ú!AnnotatedConvBnReLUModel.__init__©  s¢   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H—O‘O A q¨!°%�OÐ8×;Ñ;Ä%Ç+Á+Ð;ÐNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ð?ˆŒÜ—G’G DÑ)ˆŒ	Ü“[ˆŒ
Ü"“}ˆ�r<   c                 ó°   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU$ rK   )rª  ry  r¤  rc  rÃ  r#  s     r9   r	  Ú AnnotatedConvBnReLUModel.forward²  sH   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�G‰G�A‹JˆØ�I‰I�a‹LˆØ�L‰L˜‹OˆØˆr<   c                 óØ   • U R                   (       a-  [        R                  R                  R	                  U / SQ/SS9  g [        R                  R                  R                  U / SQ/SS9  g )Nr¼  Trã   ©Útrainingrf   rÝ  rÞ  Úfuse_modules_qatÚfuse_modulesrM   s    r9   Ú
fuse_modelÚ#AnnotatedConvBnReLUModel.fuse_modelº  s[   € à�=�=Ü�H‰H×!Ñ!×2Ñ2ØÒ-Ð.¸ð 3ò ô �H‰H×!Ñ!×.Ñ.ØÒ-Ð.¸ð /ò r<   r~  .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  Ú+AnnotatedConvBnReLUModel.get_example_inputsÅ  r‚  r<   )r¤  ry  rÃ  rÊ  rª  rc  r8  )r[   r\   r]   r^   r:   r	  rÌ  r  r.   r)  ra   rþ  rÿ  s   @r9   rÂ  rÂ  ¨  s+   ø† ÷%òò	ð) E¨#¨s¨(¡O÷ )ò )r<   rÂ  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚTwoLayerConvModeliÉ  r~  c                 ó"  >• [         TU ]  5         [        R                  R	                  SSSSS9R                  [        R                  S9U l        [        R                  R	                  SSSSS9R                  [        R                  S9U l        g )Nr¯  r¼   Frw  rò   rr   )	r±  r:   rf   rÚ   rx  r¿   r­   Úconv1Úconv2r  s    €r9   r:   ÚTwoLayerConvModel.__init__Ê  sj   ø€ Ü‰ÑÔÜ—X‘X—_‘_ Q¨¨1°5�_Ð9×<Ñ<Ä5Ç;Á;Ð<ÐOˆŒ
Ü—X‘X—_‘_ Q¨¨1°5�_Ð9×<Ñ<Ä5Ç;Á;Ð<ÐOˆ�
r<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   ©rÓ  rÔ  r#  s     r9   r	  ÚTwoLayerConvModel.forwardÏ  ó!   € Ø�J‰J�q‹MˆØ�J‰J�q‹MˆØˆr<   .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  Ú$TwoLayerConvModel.get_example_inputsÔ  r‚  r<   r×  r,  r-  rÿ  s   @r9   rÑ  rÑ  É  s'   ø† ÷Pò
ð
) E¨#¨s¨(¡O÷ )ò )r<   rÑ  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚTwoLayerLinearModeliØ  r~  c                 ó"  >• [         TU ]  5         [        R                  R	                  SS5      R                  [        R                  S9U l        [        R                  R	                  SS5      R                  [        R                  S9U l        g rD  rF  r  s    €r9   r:   ÚTwoLayerLinearModel.__init__Ù  rI  r<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   rO  r#  s     r9   r	  ÚTwoLayerLinearModel.forwardÞ  ó!   € Ø�H‰H�Q‹KˆØ�H‰H�Q‹KˆØˆr<   .c                 ó2   • [         R                  " SS5      4$ r'  r(  rM   s    r9   r)  Ú&TwoLayerLinearModel.get_example_inputsã  r+  r<   rO  r,  r-  rÿ  s   @r9   rÝ  rÝ  Ø  s&   ø† ÷?ò
ð
# E¨#¨s¨(¡O÷ #ò #r<   rÝ  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚLinearModelWithSubmoduleiç  r~  c                 óx   >• [         TU ]  5         [        5       U l        [        R
                  " SS5      U l        g rK  )r±  r:   rÝ  ÚsubmrÚ   rñ  Úfcr  s    €r9   r:   Ú!LinearModelWithSubmodule.__init__è  s)   ø€ Ü‰ÑÔÜ'Ó)ˆŒ	Ü—)’)˜A˜q“/ˆ�r<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   )rè  ré  r#  s     r9   r	  Ú LinearModelWithSubmodule.forwardí  r©  r<   .c                 ó6   • U R                   R                  5       $ rK   )rè  r)  rM   s    r9   r)  Ú+LinearModelWithSubmodule.get_example_inputsò  ó   € Ø�y‰y×+Ñ+Ó-Ð-r<   )ré  rè  r,  r-  rÿ  s   @r9   ræ  ræ  ç  s&   ø† ÷"ò
ð
. E¨#¨s¨(¡O÷ .ò .r<   ræ  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚAnnotatedTwoLayerLinearModeliö  r~  c                 ó¤  >• [         TU ]  5         [        R                  R	                  SS5      R                  [        R                  S9U l        [        [        R                  R	                  SS5      R                  [        R                  S95      U l	        [        R                  R                  R                  S5      U R                  l        g )Nr¼   rE  rò   r  )r±  r:   rf   rÚ   rñ  r¿   r­   r  r   rG  rÝ  rÞ  r   rÊ  r  s    €r9   r:   Ú%AnnotatedTwoLayerLinearModel.__init__÷  s„   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆŒÜ¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ð KÓLˆŒÜ Ÿ8™8×0Ñ0×DÑDÀXÓNˆ�‰Õr<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   rO  r#  s     r9   r	  Ú$AnnotatedTwoLayerLinearModel.forwardý  râ  r<   .c                 ó2   • [         R                  " SS5      4$ r'  r(  rM   s    r9   r)  Ú/AnnotatedTwoLayerLinearModel.get_example_inputs  r+  r<   rO  r,  r-  rÿ  s   @r9   rñ  rñ  ö  s'   ø† ÷Oòð
# E¨#¨s¨(¡O÷ #ò #r<   rñ  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚActivationsTestModeli  c                 ó*  >• [         TU ]  5         [        R                  R                  R                  S5      U l        [        R                  R                  R                  5       U l        [        R                  R                  5       R                  [        R                  S9U l        [        R                  R                  5       R                  [        R                  S9U l        [        R                  R                  R!                  5       U l        g )Nr  rò   )r±  r:   rf   rÝ  rÞ  r   rÊ  r   rª  rÚ   Ú	Hardswishr¿   r­   Ú	hardswishÚELUÚelur   rÃ  r  s    €r9   r:   ÚActivationsTestModel.__init__  s§   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓJˆŒÜ—X‘X×*Ñ*×4Ñ4Ó6ˆŒ
ÜŸ™×+Ñ+Ó-×0Ñ0´u·{±{Ð0ÐCˆŒÜ—8‘8—<‘<“>×$Ñ$¬5¯;©;Ð$Ð7ˆŒÜ—x‘x×,Ñ,×8Ñ8Ó:ˆ�r<   c                 óŽ   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ rK   )rª  rü  rþ  rÃ  r#  s     r9   r	  ÚActivationsTestModel.forward  s<   € Ø�J‰J�q‹MˆØ�N‰N˜1ÓˆØ�H‰H�Q‹KˆØ�L‰L˜‹OˆØˆr<   )rÃ  rþ  rü  rÊ  rª  r,  r\  rÿ  s   @r9   rù  rù    s   ø† ÷;÷ð r<   rù  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚLinearReluModeli  r~  c                 óè   >• [         TU ]  5         [        R                  R	                  SS5      R                  [        R                  S9U l        [        R                  R                  5       U l	        g r  ©
r±  r:   rf   rÚ   rñ  r¿   r­   ré  r¹  rc  r  s    €r9   r:   ÚLinearReluModel.__init__  sG   ø€ Ü‰ÑÔÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ð=ˆŒÜ—H‘H—M‘M“Oˆ�	r<   c                 óF   • U R                  U R                  U5      5      nU$ rK   ©rc  ré  r#  s     r9   r	  ÚLinearReluModel.forward  ó   € Ø�I‰I�d—g‘g˜a“jÓ!ˆØˆr<   .c                 ó2   • [         R                  " SS5      4$ r'  r(  rM   s    r9   r)  Ú"LinearReluModel.get_example_inputs!  r+  r<   ©ré  rc  r,  r-  rÿ  s   @r9   r  r    s&   ø† ÷$ò
ð# E¨#¨s¨(¡O÷ #ò #r<   r  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚLinearReluLinearModeli%  r~  c                 óh  >• [         TU ]  5         [        R                  R	                  SS5      R                  [        R                  S9U l        [        R                  R                  5       U l	        [        R                  R	                  SS5      R                  [        R                  S9U l
        g rD  ©r±  r:   rf   rÚ   rñ  r¿   r­   r  r¹  rc  rG  r  s    €r9   r:   ÚLinearReluLinearModel.__init__&  óo   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆŒÜ—H‘H—M‘M“OˆŒ	Ü—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆ�r<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   ©r  rc  rG  r#  s     r9   r	  ÚLinearReluLinearModel.forward,  ó.   € Ø�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØˆr<   .c                 ó2   • [         R                  " SS5      4$ r'  r(  rM   s    r9   r)  Ú(LinearReluLinearModel.get_example_inputs2  r+  r<   ©r  rG  rc  r,  r-  rÿ  s   @r9   r  r  %  s&   ø† ÷?òð# E¨#¨s¨(¡O÷ #ò #r<   r  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚLinearReluAddModeli6  r~  c                 óh  >• [         TU ]  5         [        R                  R	                  SS5      R                  [        R                  S9U l        [        R                  R                  5       U l	        [        R                  R	                  SS5      R                  [        R                  S9U l
        g r  r  r  s    €r9   r:   ÚLinearReluAddModel.__init__7  r  r<   c                 óà   • U R                  U5      nU R                  U5      n[        R                  " US5      nU R	                  U5      n[        R
                  R                  5       U l        U$ rK  ©r  rc  rf   r“  rG  rÚ   r¹  r#  s     r9   r	  ÚLinearReluAddModel.forward=  óN   € Ø�H‰H�Q‹KˆØ�I‰I�a‹LˆÜ�IŠI�a˜‹OˆØ�H‰H�Q‹KˆÜ—H‘H—M‘M“OˆŒ	Øˆr<   .c                 ó2   • [         R                  " SS5      4$ r'  r(  rM   s    r9   r)  Ú%LinearReluAddModel.get_example_inputsE  r+  r<   r  r,  r-  rÿ  s   @r9   r  r  6  s&   ø† ÷?òð# E¨#¨s¨(¡O÷ #ò #r<   r  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚLinearBnLeakyReluModeliI  c                 óÒ   >• [         TU ]  5         [        R                  " SS5      U l        [        R
                  " S5      U l        [        R                  " S5      U l        Xl	        g )Nr¼   g{®Gáz„?)
r±  r:   rÚ   rñ  ÚlinearÚBatchNorm1dÚbn1dÚ	LeakyReLUÚ
leaky_reluÚwith_bn)r8   r-  rÀ  s     €r9   r:   ÚLinearBnLeakyReluModel.__init__J  sD   ø€ Ü‰ÑÔÜ—i’i  1“oˆŒÜ—N’N 1Ó%ˆŒ	ÜŸ,š, tÓ,ˆŒØ�r<   c                 óŽ   • U R                  U5      nU R                  (       a  U R                  U5      nU R                  U5      nU$ rK   )r(  r-  r*  r,  r#  s     r9   r	  ÚLinearBnLeakyReluModel.forwardQ  s6   € Ø�K‰K˜‹NˆØ�<�<Ø—	‘	˜!“ˆAØ�O‰O˜AÓˆØˆr<   r~  .c                 ó2   • [         R                  " SS5      4$ r'  r(  rM   s    r9   r)  Ú)LinearBnLeakyReluModel.get_example_inputsX  r+  r<   )r*  r,  r(  r-  rü  r-  rÿ  s   @r9   r&  r&  I  s&   ø† ÷òð# E¨#¨s¨(¡O÷ #ò #r<   r&  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚLinearTanhModeli\  r~  c                 óŽ   >• [         TU ]  5         [        R                  " SS5      U l        [        R
                  " 5       U l        g rK  )r±  r:   rÚ   rñ  r(  ÚTanhrf  r  s    €r9   r:   ÚLinearTanhModel.__init__]  s,   ø€ Ü‰ÑÔÜ—i’i  1“oˆŒÜ—G’G“Iˆ�	r<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   ©r(  rf  r#  s     r9   r	  ÚLinearTanhModel.forwardb  s!   € Ø�K‰K˜‹NˆØ�I‰I�a‹LˆØˆr<   .c                 ó2   • [         R                  " SS5      4$ r'  r(  rM   s    r9   r)  Ú"LinearTanhModel.get_example_inputsg  r+  r<   r9  r,  r-  rÿ  s   @r9   r4  r4  \  s&   ø† ÷ò
ð
# E¨#¨s¨(¡O÷ #ò #r<   r4  c                   óT   ^ • \ rS rSr     SU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚConvBnAddReluModelik  c                 ó<  >• [         TU ]  5         [        R                  " SSS5      U l        [        R                  " SSS5      U l        [        R                  " S5      U l        [        R                  " 5       U l	        Xl
        X l        X@l        X0l        XPl        g )Nr¼   )rn  rn  )r±  r:   rÚ   rx  ry  rÔ  r£  r¤  r¹  rc  r-  Ú	with_reluÚtwo_convÚ	left_convÚuse_torch_add)r8   r-  r@  rB  rA  rC  rÀ  s         €r9   r:   ÚConvBnAddReluModel.__init__l  so   ø€ ô 	‰ÑÔÜ—I’I˜a  FÓ+ˆŒ	Ü—Y’Y˜q ! VÓ,ˆŒ
Ü—.’. Ó#ˆŒÜ—G’G“IˆŒ	ØŒØ"ŒØ ŒØ"ŒØ*Õr<   c                 óÀ  • U R                   (       Ga	  U R                  (       aŽ  U R                  (       aF  [        R                  " U R                  U R                  U5      5      U R                  U5      5      nGOA[        R                  " U R                  U5      U R                  U5      5      nGO
U R                  (       a4  U R                  U R                  U5      5      U R                  U5      -   nGOÅU R                  U5      U R                  U5      -   nGO U R                  (       aí  U R                  (       ap  U R                  (       a7  [        R                  " U R                  U R                  U5      5      U5      nGO6[        R                  " U R                  U5      U5      nGOU R                  (       a5  [        R                  " X R                  U R                  U5      5      5      nOÈ[        R                  " X R                  U5      5      nO¢U R                  (       aJ  U R                  (       a$  U R                  U R                  U5      5      U-   nO\U R                  U5      U-   nOGU R                  (       a#  X R                  U R                  U5      5      -   nOX R                  U5      -   nU R                  (       a  U R                  U5      nU$ rK   )rA  rC  r-  rf   r“  r¤  ry  rÔ  rB  r@  rc  )r8   Úx1Úx2rŸ  s       r9   r	  Ú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Øˆr<   r~  .c                 óf   • [         R                  " SSSS5      [         R                  " SSSS5      4$ )Nrr   r¼   r¯  rn  r(  rM   s    r9   r)  Ú%ConvBnAddReluModel.get_example_inputs¦  s+   € Ü—
’
˜1˜a  AÓ&¬¯
ª
°1°a¸¸AÓ(>Ð?Ð?r<   )	r¤  ry  rÔ  rB  rc  rA  rC  r-  r@  )TTTTTr-  rÿ  s   @r9   r>  r>  k  s;   ø† ð ØØØØ÷+ò&%ðN@ E¨#¨s¨(¡O÷ @ò @r<   r>  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚConvReluModeli«  r~  c                 óê   >• [         TU ]  5         [        R                  R	                  SSS5      R                  [        R                  S9U l        [        R                  R                  5       U l	        g )Nr¯  r¼   rò   )
r±  r:   rf   rÚ   rx  r¿   r­   ré  r¹  rc  r  s    €r9   r:   ÚConvReluModel.__init__¬  sI   ø€ Ü‰ÑÔÜ—(‘(—/‘/ ! Q¨Ó*×-Ñ-´E·K±KÐ-Ð@ˆŒÜ—H‘H—M‘M“Oˆ�	r<   c                 óF   • U R                  U R                  U5      5      nU$ rK   r  r#  s     r9   r	  ÚConvReluModel.forward±  r
  r<   .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  Ú ConvReluModel.get_example_inputsµ  r‚  r<   r  r,  r-  rÿ  s   @r9   rL  rL  «  s&   ø† ÷$ò
ð) E¨#¨s¨(¡O÷ )ò )r<   rL  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚConvReluConvModeliº  r~  c                 ól  >• [         TU ]  5         [        R                  R	                  SSS5      R                  [        R                  S9U l        [        R                  R                  5       U l	        [        R                  R	                  SSS5      R                  [        R                  S9U l
        g ©Nr¯  r¼   rò   rr   ©r±  r:   rf   rÚ   rx  r¿   r­   r  r¹  rc  rG  r  s    €r9   r:   ÚConvReluConvModel.__init__»  ós   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 a¨Ó+×.Ñ.´U·[±[Ð.ÐAˆŒÜ—H‘H—M‘M“OˆŒ	Ü—8‘8—?‘? 1 a¨Ó+×.Ñ.´U·[±[Ð.ÐAˆ�r<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   r  r#  s     r9   r	  ÚConvReluConvModel.forwardÁ  r  r<   .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  Ú$ConvReluConvModel.get_example_inputsÇ  r‚  r<   r  r,  r-  rÿ  s   @r9   rT  rT  º  s'   ø† ÷Bòð) E¨#¨s¨(¡O÷ )ò )r<   rT  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚConvReluAddModeliÌ  r~  c                 ól  >• [         TU ]  5         [        R                  R	                  SSS5      R                  [        R                  S9U l        [        R                  R                  5       U l	        [        R                  R	                  SSS5      R                  [        R                  S9U l
        g rV  rW  r  s    €r9   r:   ÚConvReluAddModel.__init__Í  rY  r<   c                 óà   • U R                  U5      nU R                  U5      n[        R                  " US5      nU R	                  U5      n[        R
                  R                  5       U l        U$ rK  r   r#  s     r9   r	  ÚConvReluAddModel.forwardÓ  r"  r<   .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  Ú#ConvReluAddModel.get_example_inputsÛ  r‚  r<   r  r,  r-  rÿ  s   @r9   r_  r_  Ì  s'   ø† ÷Bòð) E¨#¨s¨(¡O÷ )ò )r<   r_  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚNormalizationTestModeliß  c                 óf  >• [         TU ]  5         [        R                  R                  R                  5       U l        [        R                  R                  SS5      R                  [        R                  S9U l        [        R                  R                  S5      U l        [        R                  R                  SS5      U l        [        R                  R!                  S5      U l        [        R                  R%                  S5      U l        [        R                  R)                  S5      U l        g )Nr¼   rE  rò   rn  )r±  r:   rf   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    €r9   r:   Ú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ˆÕr<   c                 óp  • U R                  U5      nU R                  U5      nU R                  U5      nU R                  UR	                  S5      R                  SSS5      5      nU R                  U5      nU R                  UR	                  S5      5      nU R                  UR	                  S5      5      nU$ )Nr¥   rr   r¯  )	rª  r  rj  rl  rž  Úrepeatrn  rp  rr  r#  s     r9   r	  Ú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ˆØˆr<   )r  rl  rn  rp  rr  rj  rª  r,  r\  rÿ  s   @r9   rg  rg  ß  s   ø† ÷:÷ð r<   rg  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚNestedModeliõ  c                 óÞ   >• [         TU ]  5         [        5       U l        [	        5       U l        [        R                  R                  SS5      R                  [        R                  S9U l        g r  )r±  r:   r  Úsub1rÝ  Úsub2rf   rÚ   rñ  r¿   r­   Úfc3r  s    €r9   r:   ÚNestedModel.__init__ö  sJ   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü'Ó)ˆŒ	Ü—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆ�r<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   ©rz  r{  r|  r#  s     r9   r	  ÚNestedModel.forwardü  ó.   € Ø�I‰I�a‹LˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØˆr<   ©r|  rz  r{  r,  r\  rÿ  s   @r9   rx  rx  õ  s   ø† ÷?÷ð r<   rx  c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚAnnotatedNestedModeli  c                 ó   >• [         TU ]  5         [        5       U l        [	        5       U l        [        [        R                  R                  SS5      R                  [        R                  S95      U l        [        U R                  l        [        U R
                  R                  5      U R
                  l        US:X  a   [         U R
                  R                  l        g [        U R
                  R                  l        g )Nr¼   rò   r  )r±  r:   r  rz  rÝ  r{  r   rf   rÚ   rñ  r¿   r­   r|  r   rÊ  r  r   r1  s     €r9   r:   Ú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Õ!r<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   r  r#  s     r9   r	  ÚAnnotatedNestedModel.forward  r�  r<   r‚  r\  rÿ  s   @r9   r„  r„    s   ø† õ
4÷ð r<   r„  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚAnnotatedSubNestedModeli  c                 óV  >• [         TU ]  5         [        5       U l        [	        [        5       5      U l        [	        [        R                  R                  SS5      R                  [        R                  S95      U l        [        U R                  l        [        U R                  l        g r  )r±  r:   r  rz  r   rÝ  r{  rf   rÚ   rñ  r¿   r­   r|  r   rÊ  r  s    €r9   r:   Ú AnnotatedSubNestedModel.__init__  sm   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü Ô!4Ó!6Ó7ˆŒ	Ü¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ð KÓLˆŒÜ*ˆ�‰ÔÜ+ˆ�	‰	Õr<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   r  r#  s     r9   r	  ÚAnnotatedSubNestedModel.forward   r�  r<   r‚  r,  r\  rÿ  s   @r9   rŠ  rŠ    s   ø† ÷,÷ð r<   rŠ  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú AnnotatedCustomConfigNestedModeli'  c                 ó¶  >• [         TU ]  5         [        5       U l        [	        5       U l        [        [        R                  R                  SS5      R                  [        R                  S95      U l        [        U R                  l        [        U R
                  l        [        R                  [        R                   S.n[#        [$        R&                  " S0 UD6[(        S9nX R
                  R*                  l        [        U R
                  R*                  5      U R
                  l        [        U R
                  R,                  5      U R
                  l        g )Nr¼   rò   )rð   rÛ  rÝ  rb   )r±  r:   r  rz  rÝ  r{  r   rf   rÚ   rñ  r¿   r­   r|  r   rÊ  rõ   Úper_tensor_affiner   r
   rç  r   r  rG  )r8   Úcustom_optionsÚcustom_qconfigrÀ  s      €r9   r:   Ú)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ˆ�	‰	�r<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   r  r#  s     r9   r	  Ú(AnnotatedCustomConfigNestedModel.forward:  r�  r<   r‚  r,  r\  rÿ  s   @r9   r�  r�  '  s   ø† ÷4÷$ð r<   r�  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚQuantSubModeliA  c                 óD  >• [         TU ]  5         [        5       U l        [	        [        5       5      U l        [        U R                  l        [        R                  R                  SS5      R                  [        R                  S9U l        [        U R                  l        g r  )r±  r:   r  rz  r   rÝ  r{  r   rÊ  rf   rÚ   rñ  r¿   r­   r|  r  s    €r9   r:   ÚQuantSubModel.__init__B  sh   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü Ô!4Ó!6Ó7ˆŒ	Ü+ˆ�	‰	ÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆŒÜ*ˆ�‰Õr<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   r  r#  s     r9   r	  ÚQuantSubModel.forwardJ  r�  r<   r‚  r,  r\  rÿ  s   @r9   r™  r™  A  s   ø† ÷+÷ð r<   r™  c                   ó8   ^ • \ rS rSrSU 4S jjrS rS rSrU =r$ )ÚInnerModuleiQ  c                 ó®  >• [         TU ]  5         [        R                  R	                  SS5      R                  [        R                  S9U l        [        R                  R                  5       U l	        [        R                  R	                  SS5      R                  [        R                  S9U l
        [        R                  R                  5       U l        g rD  )r±  r:   rf   rÚ   rñ  r¿   r­   r  r¹  Úrelu1rG  Úrelu2r  s    €r9   r:   ÚInnerModule.__init__R  s€   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆŒÜ—X‘X—]‘]“_ˆŒ
Ü—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆŒÜ—X‘X—]‘]“_ˆ�
r<   c           	      ó~   • U R                  U R                  U R                  U R                  U5      5      5      5      $ rK   )r¢  rG  r¡  r  r#  s     r9   r	  ÚInnerModule.forwardY  s+   € Ø�z‰z˜$Ÿ(™( 4§:¡:¨d¯h©h°q«kÓ#:Ó;Ó<Ð<r<   c                 óF  • / n[        U R                  5       5      n[        U5       H•  u  nu  pE[        U[        R
                  R                  5      (       d  M3  U[        U5      S-
  :¼  a    OR[        X#S-      S   [        R
                  R                  5      (       d  Mz  UR                  XBUS-      S   /5        M—     U R                  (       a)  [        R                  R                  R                  XSS9  g [        R                  R                  R                  XSS9  g )Nrr   r   Trã   )r¡  r×  r½   rQ   rf   rÚ   rñ  rö   r¹  r®   rÉ  rÝ  rÞ  rÊ  rË  )r8   Úfusable_layersr×  r®  Úcurrent_nameÚlayers         r9   rË  ÚInnerModule.fuse_modules\  sá   € ØˆÜ˜d×1Ñ1Ó3Ó4ˆÜ*3°NÖ*CÑ&ˆCÑ&�,Ü˜%¤§¡§¡×1Ó1Øœ#˜nÓ-°Ñ1Ó1ÙÜ˜n°1©WÑ5°aÑ8¼%¿(¹(¿-¹-×HÓHØ"×)Ñ)¨<ÈÈaÉÑ9PÐQRÑ9SÐ*TÖUñ +Dð �=�=Ü�H‰H×!Ñ!×2Ñ2°4ÐQUÐ2ÒVä�H‰H×!Ñ!×.Ñ.¨tÈTÐ.ÒRr<   )r  rG  r¡  r¢  r,  )	r[   r\   r]   r^   r:   r	  rË  ra   rþ  rÿ  s   @r9   rŸ  rŸ  Q  s   ø† ÷%ò=÷Sð Sr<   rŸ  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚFunctionalLinearil  r~  c                 óŽ   >• [         TU ]  5         [        R                  " S5      U l        [        R
                  " S5      U l        g )N)r¼   r¼   r¼   )r±  r:   rf   r³  r!  re  r"  r  s    €r9   r:   ÚFunctionalLinear.__init__m  s-   ø€ Ü‰ÑÔÜ—j’j Ó(ˆŒÜ—K’K “Nˆ�	r<   c                 óX   • [         R                  " XR                  U R                  5      $ rK   )ÚFr(  r!  r"  r#  s     r9   r	  ÚFunctionalLinear.forwardr  s   € Ü�xŠx˜Ÿ;™;¨¯	©	Ó2Ð2r<   .c                 ó2   • [         R                  " SS5      4$ r'  r(  rM   s    r9   r)  Ú#FunctionalLinear.get_example_inputsu  r+  r<   )r"  r!  r,  r-  rÿ  s   @r9   r¬  r¬  l  s&   ø† ÷#ò
3ð# E¨#¨s¨(¡O÷ #ò #r<   r¬  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	Ú SingleLayerFunctionalLinearModeliy  r~  c                 ó@   >• [         TU ]  5         [        5       U l        g rK   )r±  r:   r¬  Úlinear1r  s    €r9   r:   Ú)SingleLayerFunctionalLinearModel.__init__z  s   ø€ Ü‰ÑÔÜ'Ó)ˆ�r<   c                 ó(   • U R                  U5      nU$ rK   ©r·  r#  s     r9   r	  Ú(SingleLayerFunctionalLinearModel.forward~  s   € Ø�L‰L˜‹OˆØˆr<   .c                 ó6   • U R                   R                  5       $ rK   ©r·  r)  rM   s    r9   r)  Ú3SingleLayerFunctionalLinearModel.get_example_inputs‚  ó   € Ø�|‰|×.Ñ.Ó0Ð0r<   rº  r,  r-  rÿ  s   @r9   rµ  rµ  y  s&   ø† ÷*òð1 E¨#¨s¨(¡O÷ 1ò 1r<   rµ  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚTwoLayerFunctionalLinearModeli†  r~  c                 ó^   >• [         TU ]  5         [        5       U l        [        5       U l        g rK   ©r±  r:   r¬  r·  Úlinear2r  s    €r9   r:   Ú&TwoLayerFunctionalLinearModel.__init__‡  ó"   ø€ Ü‰ÑÔÜ'Ó)ˆŒÜ'Ó)ˆ�r<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   ©r·  rÄ  r#  s     r9   r	  Ú%TwoLayerFunctionalLinearModel.forwardŒ  s!   € Ø�L‰L˜‹OˆØ�L‰L˜‹OˆØˆr<   .c                 ó6   • U R                   R                  5       $ rK   r½  rM   s    r9   r)  Ú0TwoLayerFunctionalLinearModel.get_example_inputs‘  r¿  r<   rÈ  r,  r-  rÿ  s   @r9   rÁ  rÁ  †  s&   ø† ÷*ò
ð
1 E¨#¨s¨(¡O÷ 1ò 1r<   rÁ  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚFunctionalLinearAddModeli•  r~  c                 ó^   >• [         TU ]  5         [        5       U l        [        5       U l        g rK   rÃ  r  s    €r9   r:   Ú!FunctionalLinearAddModel.__init__–  rÆ  r<   c                 óx   • U R                  U5      n[        R                  " US5      nU R                  U5      nU$ rK  )r·  rf   r“  rÄ  r#  s     r9   r	  Ú FunctionalLinearAddModel.forward›  s0   € Ø�L‰L˜‹OˆÜ�IŠI�a˜‹OˆØ�L‰L˜‹OˆØˆr<   .c                 ó6   • U R                   R                  5       $ rK   r½  rM   s    r9   r)  Ú+FunctionalLinearAddModel.get_example_inputs¡  r¿  r<   rÈ  r,  r-  rÿ  s   @r9   rÍ  rÍ  •  s&   ø† ÷*ò
ð1 E¨#¨s¨(¡O÷ 1ò 1r<   rÍ  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚFunctionalLinearReluModeli¥  r~  c                 ó@   >• [         TU ]  5         [        5       U l        g rK   )r±  r:   r¬  r(  r  s    €r9   r:   Ú"FunctionalLinearReluModel.__init__¦  s   ø€ Ü‰ÑÔÜ&Ó(ˆ�r<   c                 óT   • U R                  U5      n[        R                  " U5      nU$ rK   )r(  r°  rc  r#  s     r9   r	  Ú!FunctionalLinearReluModel.forwardª  s!   € Ø�K‰K˜‹NˆÜ�FŠF�1‹IˆØˆr<   .c                 ó6   • U R                   R                  5       $ rK   )r(  r)  rM   s    r9   r)  Ú,FunctionalLinearReluModel.get_example_inputs¯  s   € Ø�{‰{×-Ñ-Ó/Ð/r<   )r(  r,  r-  rÿ  s   @r9   rÕ  rÕ  ¥  s&   ø† ÷)òð
0 E¨#¨s¨(¡O÷ 0ò 0r<   rÕ  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚFunctionalLinearReluLinearModeli³  r~  c                 ó’   >• [         TU ]  5         [        5       U l        [        R
                  " 5       U l        [        5       U l        g rK   )r±  r:   r¬  r·  rÚ   r¹  rc  rÄ  r  s    €r9   r:   Ú(FunctionalLinearReluLinearModel.__init__´  s/   ø€ Ü‰ÑÔÜ'Ó)ˆŒÜ—G’G“IˆŒ	Ü'Ó)ˆ�r<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   )r·  rc  rÄ  r#  s     r9   r	  Ú'FunctionalLinearReluLinearModel.forwardº  s.   € Ø�L‰L˜‹OˆØ�I‰I�a‹LˆØ�L‰L˜‹OˆØˆr<   .c                 ó6   • U R                   R                  5       $ rK   r½  rM   s    r9   r)  Ú2FunctionalLinearReluLinearModel.get_example_inputsÀ  r¿  r<   )r·  rÄ  rc  r,  r-  rÿ  s   @r9   rÝ  rÝ  ³  s&   ø† ÷*òð1 E¨#¨s¨(¡O÷ 1ò 1r<   rÝ  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚFunctionalConv2diÄ  r~  c                 óÌ   >• [         TU ]  5         [        R                  " SSSS5      U l        [        R                  " S5      U l        SU l        SU l        SU l        SU l	        g )Nr¯  ©rr   rr   )r   r   rr   )
r±  r:   rf   r³  r!  r"  ÚstrideÚpaddingÚdilationr   r  s    €r9   r:   ÚFunctionalConv2d.__init__Å  sO   ø€ Ü‰ÑÔÜ—j’j  A q¨!Ó,ˆŒÜ—J’J˜q“MˆŒ	ØˆŒØˆŒØˆŒØˆ�r<   c           	      ó²   • [         R                  " UU R                  U R                  U R                  U R
                  U R                  U R                  5      $ rK   )r°  Úconv2dr!  r"  rè  ré  rê  r   r#  s     r9   r	  ÚFunctionalConv2d.forwardÎ  s@   € Ü�xŠxØØ�K‰KØ�I‰IØ�K‰KØ�L‰LØ�M‰MØ�K‰Kó
ð 	
r<   .c                 ó6   • [         R                  " SSSS5      4$ r€  r(  rM   s    r9   r)  Ú#FunctionalConv2d.get_example_inputsÙ  r‚  r<   )r"  rê  r   ré  rè  r!  r,  r-  rÿ  s   @r9   rå  rå  Ä  s&   ø† ÷ò	
ð) E¨#¨s¨(¡O÷ )ò )r<   rå  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚSingleLayerFunctionalConvModeliÝ  r~  c                 ó@   >• [         TU ]  5         [        5       U l        g rK   )r±  r:   rå  rÓ  r  s    €r9   r:   Ú'SingleLayerFunctionalConvModel.__init__Þ  s   ø€ Ü‰ÑÔÜ%Ó'ˆ�
r<   c                 ó(   • U R                  U5      nU$ rK   ©rÓ  r#  s     r9   r	  Ú&SingleLayerFunctionalConvModel.forwardâ  s   € Ø�J‰J�q‹MˆØˆr<   .c                 ó6   • U R                   R                  5       $ rK   ©rÓ  r)  rM   s    r9   r)  Ú1SingleLayerFunctionalConvModel.get_example_inputsæ  ó   € Ø�z‰z×,Ñ,Ó.Ð.r<   rö  r,  r-  rÿ  s   @r9   rò  rò  Ý  s&   ø† ÷(òð/ E¨#¨s¨(¡O÷ /ò /r<   rò  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚTwoLayerFunctionalConvModeliê  r~  c                 ó^   >• [         TU ]  5         [        5       U l        [        5       U l        g rK   )r±  r:   rå  rÓ  rÔ  r  s    €r9   r:   Ú$TwoLayerFunctionalConvModel.__init__ë  s"   ø€ Ü‰ÑÔÜ%Ó'ˆŒ
Ü%Ó'ˆ�
r<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   r×  r#  s     r9   r	  Ú#TwoLayerFunctionalConvModel.forwardð  rÙ  r<   .c                 ó6   • U R                   R                  5       $ rK   rù  rM   s    r9   r)  Ú.TwoLayerFunctionalConvModel.get_example_inputsõ  rû  r<   r×  r,  r-  rÿ  s   @r9   rý  rý  ê  s&   ø† ÷(ò
ð
/ E¨#¨s¨(¡O÷ /ò /r<   rý  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚFunctionalConvReluModeliù  r~  c                 ó@   >• [         TU ]  5         [        5       U l        g rK   )r±  r:   rå  ry  r  s    €r9   r:   Ú FunctionalConvReluModel.__init__ú  s   ø€ Ü‰ÑÔÜ$Ó&ˆ�	r<   c                 óT   • U R                  U5      n[        R                  " U5      nU$ rK   )ry  r°  rc  r#  s     r9   r	  ÚFunctionalConvReluModel.forwardþ  s!   € Ø�I‰I�a‹LˆÜ�FŠF�1‹IˆØˆr<   .c                 ó6   • U R                   R                  5       $ rK   )ry  r)  rM   s    r9   r)  Ú*FunctionalConvReluModel.get_example_inputs	  rï  r<   r|  r,  r-  rÿ  s   @r9   r  r  ù  s&   ø† ÷'òð
. E¨#¨s¨(¡O÷ .ò .r<   r  c                   óJ   ^ • \ rS rSrSU 4S jjrS rS\\S4   4S jrSr	U =r
$ )	ÚFunctionalConvReluConvModeli	  r~  c                 ó’   >• [         TU ]  5         [        5       U l        [        R
                  " 5       U l        [        5       U l        g rK   )r±  r:   rå  rÓ  rÚ   r¹  rc  rÔ  r  s    €r9   r:   Ú$FunctionalConvReluConvModel.__init__	  s/   ø€ Ü‰ÑÔÜ%Ó'ˆŒ
Ü—G’G“IˆŒ	Ü%Ó'ˆ�
r<   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rK   )rÓ  rc  rÔ  r#  s     r9   r	  Ú#FunctionalConvReluConvModel.forward	  s.   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�J‰J�q‹MˆØˆr<   .c                 ó6   • U R                   R                  5       $ rK   rù  rM   s    r9   r)  Ú.FunctionalConvReluConvModel.get_example_inputs	  rû  r<   )rÓ  rÔ  rc  r,  r-  rÿ  s   @r9   r  r  	  s&   ø† ÷(òð/ E¨#¨s¨(¡O÷ /ò /r<   r  c                   ó<   ^ • \ rS rSrSrSU 4S jjrS rS rSrU =r	$ )ÚSkipQuantModeli	  úNWe can skip quantization by explicitly
setting qconfig of a submodule to None
c                 óÀ   >• [         TU ]  5         [        5       U l        [        R
                  R                  SS5      R                  [        R                  S9U l	        g r  )
r±  r:   rŸ  rz  rf   rÚ   rñ  r¿   r­   ré  r  s    €r9   r:   ÚSkipQuantModel.__init__	  s?   ø€ Ü‰ÑÔÜ“=ˆŒÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ð=ˆ�r<   c                 óB   • U R                  U R                  U5      5      $ rK   ©ré  rz  r#  s     r9   r	  ÚSkipQuantModel.forward"	  ó   € Ø�w‰w�t—x‘x “{Ó#Ð#r<   c                 ó8   • U R                   R                  5         g rK   )rz  rË  rM   s    r9   rË  ÚSkipQuantModel.fuse_modules%	  s   € Ø�‰×ÑÕr<   r  r,  ©
r[   r\   r]   r^   r_   r:   r	  rË  ra   rþ  rÿ  s   @r9   r  r  	  s   ø† ñ÷>ò
$÷ ð  r<   r  c                   ó8   ^ • \ rS rSrSrU 4S jrS rS rSrU =r	$ )ÚAnnotatedSkipQuantModeli)	  r  c                 óP  >• [         TU ]  5         [        R                  R                  R                  U5      U l        [        [        5       5      U l	        [        R                  R                  SS5      R                  [        R                  S9U l        S U R                  l        g r  )r±  r:   rf   rÝ  rÞ  r   rÊ  r   rŸ  rz  rÚ   rñ  r¿   r­   ré  r1  s     €r9   r:   Ú AnnotatedSkipQuantModel.__init__.	  sk   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ¤£Ó.ˆŒÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ð=ˆŒàˆ�‰�r<   c                 óB   • U R                  U R                  U5      5      $ rK   r  r#  s     r9   r	  ÚAnnotatedSkipQuantModel.forward6	  r  r<   c                 óL   • U R                   R                  R                  5         g rK   )rz  rå   rË  rM   s    r9   rË  Ú$AnnotatedSkipQuantModel.fuse_modules9	  s   € Ø�‰�‰×$Ñ$Õ&r<   )ré  rÊ  rz  r  rÿ  s   @r9   r!  r!  )	  s   ø† ñõò$÷'ð 'r<   r!  c                   ó6   ^ • \ rS rSrSrSU 4S jjrS rSrU =r$ )ÚQuantStubModeli=	  ú=A Module with manually inserted `QuantStub` and `DeQuantStub`c                 ó:  >• [         TU ]  5         [        R                  R                  R                  S5      U l        [        5       U l        [        5       U l
        [        R                  R                  SS5      R                  [        R                  S9U l        g )Nr8  r¼   rò   )r±  r:   rf   rÝ  rÞ  r   rÊ  r   rª  r   rÃ  rÚ   rñ  r¿   r­   ré  r  s    €r9   r:   ÚQuantStubModel.__init__@	  sd   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓKˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ð=ˆ�r<   c                 óh   • U R                  U5      nU R                  U5      nU R                  U5      $ rK   )rª  ré  rÃ  r#  s     r9   r	  ÚQuantStubModel.forwardG	  s*   € Ø�J‰J�q‹MˆØ�G‰G�A‹JˆØ�|‰|˜A‹Ðr<   )rÃ  ré  rÊ  rª  r,  ©	r[   r\   r]   r^   r_   r:   r	  ra   rþ  rÿ  s   @r9   r)  r)  =	  s   ø† ÙH÷>÷ð r<   r)  c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚManualLinearQATModeliM	  r*  c                 óº  >• [         TU ]  5         [        R                  R                  R                  U5      U l        [        5       U l        [        5       U l
        [        R                  R                  SS5      R                  [        R                  S9U l        [        R                  R                  SS5      R                  [        R                  S9U l        g ©Nr¼   rr   rò   rq   )r±  r:   rf   rÝ  rÞ  r   rÊ  r   rª  r   rÃ  rÚ   rñ  r¿   r­   r  rG  r1  s     €r9   r:   ÚManualLinearQATModel.__init__P	  sŒ   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×DÑDÀWÓMˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆŒÜ—8‘8—?‘? 1 bÓ)×,Ñ,´5·;±;Ð,Ð?ˆ�r<   c                 óŠ   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      $ rK   )rª  r  rG  rÃ  r#  s     r9   r	  ÚManualLinearQATModel.forwardX	  s7   € Ø�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�H‰H�Q‹KˆØ�|‰|˜A‹Ðr<   )rÃ  r  rG  rÊ  rª  r/  rÿ  s   @r9   r1  r1  M	  s   ø† ÙHõ@÷ð r<   r1  c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚManualDropoutQATModeli_	  r*  c                 ó‚  >• [         TU ]  5         [        R                  R                  R                  U5      U l        [        5       U l        [        5       U l
        [        R                  R                  SS5      R                  [        R                  S9U l        [        R                  R!                  S5      U l        g )Nr¼   rr   rò   ç      à?)r±  r:   rf   rÝ  rÞ  r   rÊ  r   rª  r   rÃ  rÚ   rñ  r¿   r­   r  rá  Údropoutr1  s     €r9   r:   ÚManualDropoutQATModel.__init__b	  sz   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×DÑDÀWÓMˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆŒÜ—x‘x×'Ñ'¨Ó,ˆ�r<   c                 óŠ   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      $ rK   )rª  r  r;  rÃ  r#  s     r9   r	  ÚManualDropoutQATModel.forwardj	  s7   € Ø�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�L‰L˜‹OˆØ�|‰|˜A‹Ðr<   )rÃ  r;  r  rÊ  rª  r/  rÿ  s   @r9   r8  r8  _	  s   ø† ÙHõ-÷ð r<   r8  c                   ó6   ^ • \ rS rSrSrSU 4S jjrS rSrU =r$ )ÚManualLinearDynamicQATModeliq	  z,A Module that uses a dynamic QAT by default.c                 óJ  >• [         TU ]  5         U=(       d    [        U l        [        R
                  R                  SS5      R                  [        R                  S9U l	        [        R
                  R                  SS5      R                  [        R                  S9U l
        g r3  )r±  r:   r   rÊ  rf   rÚ   rñ  r¿   r­   r  rG  ©r8   rÊ  rÀ  s     €r9   r:   Ú$ManualLinearDynamicQATModel.__init__t	  sk   ø€ Ü‰ÑÔØ×=Ô"=ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ð>ˆŒÜ—8‘8—?‘? 1 bÓ)×,Ñ,´5·;±;Ð,Ð?ˆ�r<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   rO  r#  s     r9   r	  Ú#ManualLinearDynamicQATModel.forwardz	  râ  r<   )r  rG  rÊ  rK   r/  rÿ  s   @r9   r@  r@  q	  s   ø† Ù7÷@÷ð r<   r@  c                   ó6   ^ • \ rS rSrSrSU 4S jjrS rSrU =r$ )ÚManualConvLinearQATModeli€	  zhA module with manually inserted `QuantStub` and `DeQuantStub`
and contains both linear and conv modules
c                 óJ  >• [         TU ]  5         U(       a  UO([        R                  R                  R                  S5      U l        [        5       U l        [        5       U l
        [        R                  R                  SSSS9R                  [        R                  S9U l        [        R                  R!                  SS5      R                  [        R                  S9U l        [        R                  R!                  SS5      R                  [        R                  S9U l        g )Nr8  r¯  rr   )r  rò   é@   rq   )r±  r:   rf   rÝ  rÞ  r   rÊ  r   rª  r   rÃ  rÚ   rx  r¿   r­   ry  rñ  r  rG  rB  s     €r9   r:   Ú!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Ð-Ð@ˆ�r<   c                 óì   • U R                  U5      nU R                  U5      nUR                  SS5      R                  5       nU R	                  U5      nU R                  U5      nU R                  U5      $ )Nr¥   rI  )rª  ry  r«   ru  r  rG  rÃ  r#  s     r9   r	  Ú 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‹Ðr<   )ry  rÃ  r  rG  rÊ  rª  rK   r/  rÿ  s   @r9   rG  rG  €	  s   ø† ñ÷A÷ð r<   rG  c                   ó0   ^ • \ rS rSrSrSU 4S jjrSrU =r$ )ÚManualConvLinearSymmQATModeli›	  z`Same as ManualConvLinearQATModule but with Symmetric Quantization.
Supported only with qnnpack.
c                 ó,   >• [         TU ]  [        5        g rK   )r±  r:   r   r  s    €r9   r:   Ú%ManualConvLinearSymmQATModel.__init__ 	  s   ø€ Ü‰ÑÔ>Õ?r<   rb   r,  )r[   r\   r]   r^   r_   r:   ra   rþ  rÿ  s   @r9   rN  rN  ›	  s   ø† ñ÷@õ @r<   rN  c                   ó’   ^ • \ rS rSrS	U 4S jjr  S
S\R                  S\R                  S-  S\R                  S-  4S jjrSrU =r	$ )ÚManualEmbeddingBagLineari¤	  Nc                 óL  >• [         TU ]  5         [        R                  " SSSS9U l        [
        U R                  l        [        5       U l        [        5       U l
        [        R                  " SS5      R                  [        R                  S9U l        [!        S5      U l        g )Nrq   é   r~   )rÔ  rÕ  r×  rr   rò   r8  )r±  r:   rÚ   rä  Úembr	   rÊ  r   rª  r   rÃ  rñ  r¿   rf   r­   r(  r   r  s    €r9   r:   Ú!ManualEmbeddingBagLinear.__init__¥	  sp   ø€ Ü‰ÑÔÜ—?’?°"ÀBÈUÑSˆŒÜ8ˆ�‰ÔÜ“[ˆŒ
Ü"“}ˆŒÜ—i’i  AÓ&×)Ñ)´·±Ð)Ð<ˆŒÜ.¨yÓ9ˆ�r<   r  rì  Úper_sample_weightsc                 óŒ   • U R                  XU5      nU R                  U5      nU R                  U5      nU R                  U5      $ rK   )rU  rª  r(  rÃ  )r8   r  rì  rW  rŸ  s        r9   r	  Ú ManualEmbeddingBagLinear.forward®	  s=   € ð �H‰H�UÐ%7Ó8ˆØ�J‰J�q‹MˆØ�K‰K˜‹NˆØ�|‰|˜A‹Ðr<   )rÃ  rU  r(  rÊ  rª  r,  rû  ©
r[   r\   r]   r^   r:   rf   r   r	  ra   rþ  rÿ  s   @r9   rR  rR  ¤	  sL   ø† ÷:ð (,Ø26ñ		à�|‰|ð	ð —‘ Ñ$ð	ð "ŸL™L¨4Ñ/÷		ó 	r<   rR  c                   ój   ^ • \ rS rSrSrSU 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )	ÚDeFusedEmbeddingBagLineariº	  zþ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
r~  c                 ót  >• [         TU ]  5         [        R                  " SSS9U l        [
        U R                  l        [        R                  U l	        [        5       U l        [        5       U l        [        R                  " SS5      R                  [        R                   S9U l        [%        S5      U l        g )Nrq   rT  rÚ  rr   rò   r8  )r±  r:   rÚ   rå  rU  r	   rÊ  rf   r~   Ú
bagging_opr   rª  r   rÃ  rñ  r¿   r­   r(  r   r  s    €r9   r:   Ú"DeFusedEmbeddingBagLinear.__init__Â	  sy   ø€ Ü‰ÑÔÜ—<’<¨rÀÑDˆŒÜ8ˆ�‰ÔÜŸ)™)ˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—i’i  AÓ&×)Ñ)´·±Ð)Ð<ˆŒÜ.¨yÓ9ˆ�r<   r  c                 ó¦   • U R                  U R                  U5      SS9nU R                  U5      nU R                  U5      nU R	                  U5      $ ©Nrr   r›  )r^  rU  rª  r(  rÃ  )r8   r  rŸ  s      r9   r	  Ú!DeFusedEmbeddingBagLinear.forwardÌ	  sD   € Ø�O‰O˜DŸH™H U›O°ˆOÐ3ˆØ�J‰J�q‹MˆØ�K‰K˜‹NˆØ�|‰|˜A‹Ðr<   )r^  rÃ  rU  r(  rÊ  rª  r,  )r[   r\   r]   r^   r_   r:   rf   r   r	  ra   rþ  rÿ  s   @r9   r\  r\  º	  s-   ø† ñ÷:ð˜UŸ\™\ð ¨e¯l©l÷ ò r<   r\  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚSubModelForFusioniÓ	  c                 óü   >• [         TU ]  5         [        R                  " SSSS S9R	                  [
        R                  S9U l        [        R                  " S5      R	                  [
        R                  S9U l	        g )Nrn  rr   rw  rò   )
r±  r:   rÚ   rx  r¿   rf   r­   ry  r£  r¤  r  s    €r9   r:   ÚSubModelForFusion.__init__Ô	  sX   ø€ Ü‰ÑÔÜ—I’I˜a  A¨DÑ1×4Ñ4¼5¿;¹;Ð4ÐGˆŒ	Ü—.’. Ó#×&Ñ&¬U¯[©[Ð&Ð9ˆ�r<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   r§  r#  s     r9   r	  ÚSubModelForFusion.forwardÙ	  r©  r<   r¬  r,  r\  rÿ  s   @r9   rd  rd  Ó	  s   ø† ÷:÷
ð r<   rd  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚSubModelWithoutFusioniß	  c                 óø   >• [         TU ]  5         [        R                  " SSSS S9R	                  [
        R                  S9U l        [        R                  " SS9R	                  [
        R                  S9U l	        g )Nrn  rr   rw  rò   Frã   )
r±  r:   rÚ   rx  r¿   rf   r­   ry  r¹  rc  r  s    €r9   r:   ÚSubModelWithoutFusion.__init__à	  sX   ø€ Ü‰ÑÔÜ—I’I˜a  A¨DÑ1×4Ñ4¼5¿;¹;Ð4ÐGˆŒ	Ü—G’G EÑ*×-Ñ-´E·K±KÐ-Ð@ˆ�	r<   c                 óB   • U R                  U R                  U5      5      $ rK   )rc  ry  r#  s     r9   r	  ÚSubModelWithoutFusion.forwardå	  s   € Ø�y‰y˜Ÿ™ 1›Ó&Ð&r<   )ry  rc  r,  r\  rÿ  s   @r9   rj  rj  ß	  s   ø† ÷A÷
'ð 'r<   rj  c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚModelForFusionié	  c                 óˆ  >• [         TU ]  5         [        R                  " SSSS S9R	                  [
        R                  S9U l        [        R                  " S5      R	                  [
        R                  S9U l	        [        R                  " SS9R	                  [
        R                  S9U l        [        5       U l        [        5       U l        [        R                   " SS	5      R	                  [
        R                  S9U l        [%        5       U l        [)        5       U l        Xl        [        R.                  " SSS
S S9R	                  [
        R                  S9U l        [        R                  " SS9R	                  [
        R                  S9U l        [        R4                  " S5      R	                  [
        R                  S9U l        [        R                  " SS9R	                  [
        R                  S9U l        [        R:                  " SSS5      R	                  [
        R                  S9U l        [        R>                  " S5      R	                  [
        R                  S9U l         [        R                  " SS9R	                  [
        R                  S9U l!        S U R                  l        S U R"                  l        g )Nr¯  rn  rr   rw  rò   Trã   é$   rq   )rr   rr   rr   F)"r±  r:   rÚ   rx  r¿   rf   r­   rÓ  r£  Úbn1r¹  r¡  rd  rz  rj  r{  rñ  ré  r   rª  r   rÃ  rÊ  ÚConv3drÔ  r¢  ÚBatchNorm3dÚbn2Úrelu3ÚConv1dÚconv3r)  Úbn3Úrelu4rB  s     €r9   r:   Ú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Ð-Ð@ˆŒ
à ˆ�	‰	ÔØˆ�‰�r<   c                 óÌ  • UR                  S5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nUR                  S5      nUR                  S5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nUR                  SS5      R                  5       nU R                  U5      nU R                  U5      nU R!                  U5      nU R#                  U5      nU R%                  U5      nU R                  U5      nU$ )Nrn  r¥   rr  )r•  rª  ry  rz  r{  rž  rÓ  rs  r¡  rz  rÃ  r{  rø   ru  ré  rÔ  r¢  rv  rw  ©r8   rŸ  Úys      r9   r	  Ú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ˆØˆr<   )rs  rv  rz  rÓ  rÔ  ry  rÃ  ré  rÊ  rª  r¡  r¢  rw  r{  rz  r{  r\  rÿ  s   @r9   rp  rp  é	  s   ø† õ÷,ð r<   rp  c                   ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )Ú
ConvBNReLUi
  c           
      ó    >• [         TU ]  [        R                  " SSSSSS9[        R                  " S5      [        R
                  " SS95        g )Nr¯  rr   Frw  rã   )r±  r:   rÚ   rx  r£  r¹  r  s    €r9   r:   ÚConvBNReLU.__init__
  s;   ø€ Ü‰ÑÜ�IŠI�a˜˜A˜q uÑ-¬r¯~ª~¸aÓ/@Ä"Ç'Â'ÐRWÑBXõ	
r<   rb   r,  )r[   r\   r]   r^   r:   ra   rþ  rÿ  s   @r9   r‚  r‚  
  s   ø† ÷
õ 
r<   r‚  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚModelWithSequentialFusioni
  c                 ó  >• [         TU ]  5         [        R                  " SSS5      U l        [        R
                  " SS9U l        [        S5       Vs/ s H  n[        5       PM     nn[        R                  " U6 U l
        [        R                  " SS5      [        R
                  " SS9/n[        R                  " U6 U l        [        R                  " 5       U l        [        5       U l        [!        5       U l        g s  snf )Nr¯  rr   Frã   é,  rq   )r±  r:   rÚ   rx  rÓ  r¹  r¡  rv   r‚  rÜ  Úfeaturesrñ  Ú
classifierÚseqr   rª  r   rÃ  )r8   r…   ÚlayersÚheadrÀ  s       €r9   r:   Ú"ModelWithSequentialFusion.__init__ 
  s®   ø€ Ü‰ÑÔÜ—Y’Y˜q ! QÓ'ˆŒ
Ü—W’W UÑ+ˆŒ
Ü(-¨a¬Ó1ª 1”*–,©ˆÐ1ÜŸš vÐ.ˆŒÜ—	’	˜#˜rÓ"¤B§G¢G°EÑ$:Ð;ˆÜŸ-š-¨Ð.ˆŒÜ—=’=“?ˆŒÜ“[ˆŒ
Ü"“}ˆ�ùò 2s   ÁC=c                 ó"  • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      n[        R
                  " US5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ )N)r¥   rˆ  )	rª  rÓ  r¡  r‰  rf   rø   rŠ  r‹  rÃ  r#  s     r9   r	  Ú!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ˆØˆr<   )rŠ  rÓ  rÃ  r‰  rª  r¡  r‹  r,  r\  rÿ  s   @r9   r†  r†  
  s   ø† ÷
%÷	ð 	r<   r†  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚModelForFusionWithBiasi8
  c                 óz  >• [         TU ]  5         [        R                  " SSSSS9R	                  [
        R                  S9U l        [        R                  " S5      R	                  [
        R                  S9U l	        [        R                  " SS9R	                  [
        R                  S9U l        [        R                  " SSSSS9R	                  [
        R                  S9U l        [        R                  " S5      R	                  [
        R                  S9U l        [        5       U l        [!        5       U l        g )	Nr¯  rn  r¼   Trw  rò   rã   rr   )r±  r:   rÚ   rx  r¿   rf   r­   rÓ  r£  rs  r¹  r¡  rÔ  rv  r   rª  r   rÃ  r  s    €r9   r:   Ú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Ð'Ð:ˆŒÜ“[ˆŒ
Ü"“}ˆ�r<   c                 óô   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nU$ rK   )rª  rÓ  rs  r¡  rÔ  rv  rÃ  r#  s     r9   r	  Ú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ˆØˆr<   )rs  rv  rÓ  rÔ  rÃ  rª  r¡  r,  r\  rÿ  s   @r9   r’  r’  8
  s   ø† ÷%÷ð r<   r’  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚModelForLinearBNFusioniN
  c                 ó\  >• [         TU ]  5         [        R                  " SS5      U l        [        R
                  " S5      U l        [        R                  R                  U R                  R                  5        [        R                  R                  U R                  R                  5        g )Né   rq   )r±  r:   rÚ   rñ  ré  r)  r¤  ÚinitÚuniform_r!  r"  r  s    €r9   r:   ÚModelForLinearBNFusion.__init__O
  sd   ø€ Ü‰ÑÔÜ—)’)˜B Ó#ˆŒÜ—.’. Ó$ˆŒÜ
�‰×Ñ˜Ÿ™Ÿ™Ô(Ü
�‰×Ñ˜Ÿ™Ÿ™Õ&r<   c                 óB   • U R                  U R                  U5      5      $ rK   ©r¤  ré  r#  s     r9   r	  ÚModelForLinearBNFusion.forwardV
  s   € Ø�w‰w�t—w‘w˜q“zÓ"Ð"r<   rŸ  r,  r\  rÿ  s   @r9   r˜  r˜  N
  s   ø† ÷'÷#ð #r<   r˜  c                   ó    • \ rS rSrS rS rSrg)ÚDummyObserveriZ
  c                 ó   • g)N©ç      ð?r   rb   rM   s    r9   Úcalculate_qparamsÚDummyObserver.calculate_qparams[
  s   € Ør<   c                 ó   • U$ rK   rb   r#  s     r9   r	  ÚDummyObserver.forward^
  s   € Øˆr<   rb   N)r[   r\   r]   r^   r¦  r	  ra   rb   r<   r9   r¢  r¢  Z
  s   † òõr<   r¢  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚModelForConvTransposeBNFusionib
  c                 ór  >• [         TU ]  5         [        R                  " SSS5      U l        [        R
                  " S5      U l        [        R                  " SSS5      U l        [        R                  " S5      U l
        [        R                  " SSS5      U l        [        R                  " S5      U l        g )Nr¯  rr   )r±  r:   rÚ   ÚConvTranspose1drÓ  r)  rs  r†  rÔ  r£  rv  ÚConvTranspose3dry  ru  rz  r  s    €r9   r:   Ú&ModelForConvTransposeBNFusion.__init__c
  s€   ø€ Ü‰ÑÔÜ×'Ò'¨¨1¨aÓ0ˆŒ
Ü—>’> !Ó$ˆŒÜ×'Ò'¨¨1¨aÓ0ˆŒ
Ü—>’> !Ó$ˆŒÜ×'Ò'¨¨1¨aÓ0ˆŒ
Ü—>’> !Ó$ˆ�r<   c                 ó  • U R                  U5      nU R                  U5      nUR                  S5      nU R                  U5      nU R	                  U5      nUR                  S5      nU R                  U5      nU R                  U5      nU$ )Nrn  )rÓ  rs  rž  rÔ  rv  ry  rz  r#  s     r9   r	  Ú%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ˆØˆr<   )rs  rv  rz  rÓ  rÔ  ry  r,  r\  rÿ  s   @r9   r«  r«  b
  s   ø† ÷%÷	ð 	r<   r«  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚModelWithFunctionalsix
  c                 óò   >• [         TU ]  5         [        R                  " 5       U l        [        R                  " 5       U l        [        R                  " 5       U l        [        R                  " 5       U l        g rK   )r±  r:   ré  ÚFloatFunctionalÚmycatÚmyaddÚ
myadd_reluÚmymatmulr  s    €r9   r:   ÚModelWithFunctionals.__init__y
  sN   ø€ Ü‰ÑÔÜ×(Ò(Ó*ˆŒ
Ü×(Ò(Ó*ˆŒ
Ü×-Ò-Ó/ˆŒÜ×+Ò+Ó-ˆ�r<   c                 óö   • U R                   R                  XU/5      nU R                  R                  X"5      nU R                  R                  X35      nU R                  R                  XDR                  5      nU$ rK   )	r¶  r€  r·  r“  r¸  Úadd_relur¹  ÚmatmulÚT)r8   rŸ  r  Úzr�  Úus         r9   r	  ÚModelWithFunctionals.forward„
  s]   € Ø�J‰J�N‰N˜A !˜9Ó%ˆØ�J‰J�N‰N˜1Ó ˆØ�O‰O×$Ñ$ QÓ*ˆØ�M‰M× Ñ  §C¡CÓ(ˆð
 ˆr<   )r·  r¸  r¶  r¹  r,  r\  rÿ  s   @r9   r³  r³  x
  s   ø† ÷.÷	ð 	r<   r³  c                   ó8   ^ • \ rS rSrSU 4S jjrS rS rSrU =r$ )Ú
ResNetBasei�
  c                 ó
  >• [         TU ]  5         [        R                  nSn[        R                  " X"SSS9U l        U" U5      U l        [        R                  " 5       U l        [        R                  " 5       U l	        [        R                  R                  5       U l        [        R                  R                  5       U l        [        R                   " S5      U l        [        R                  R%                  US5      U l        g )Nr¯  rç  Frw  rr   )r±  r:   rÚ   r£  rx  rÓ  rs  r¹  r¡  r¢  rf   ÚIdentityÚ
downsampler"  rµ  ÚmyopÚAdaptiveAvgPool2dÚavgpoolrñ  ré  ©r8   Ú
norm_layerÚinplanesrÀ  s      €r9   r:   ÚResNetBase.__init__‘
  s¦   ø€ Ü‰ÑÔÜ—^‘^ˆ
ØˆÜ—Y’Y˜x°6ÀÑFˆŒ
Ù˜hÓ'ˆŒÜ—W’W“YˆŒ
Ü—W’W“YˆŒ
ÜŸ(™(×+Ñ+Ó-ˆŒÜ—L‘L×0Ñ0Ó2ˆŒ	Ü×+Ò+¨FÓ3ˆŒÜ—(‘(—/‘/ (¨AÓ.ˆ�r<   c                 óX  • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  R                  X#5      nU R                  U5      nU R                  U5      n[        R                  " US5      nU R                  U5      nU$ )Nrr   )rÓ  rs  r¡  rÆ  rÇ  r“  r¢  rÉ  rf   Úflattenré  ©r8   rŸ  rŠ  Úidentitys       r9   r	  Ú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ˆØˆ
r<   c                 óØ   • U R                   (       a-  [        R                  R                  R	                  U / SQ/SS9  g [        R                  R                  R                  U / SQ/SS9  g )N)rÓ  rs  r¡  Trã   rÈ  rM   s    r9   rÌ  ÚResNetBase.fuse_modelª
  s[   € à�=�=Ü�H‰H×!Ñ!×2Ñ2ØÒ0Ð1¸4ð 3ò ô �H‰H×!Ñ!×.Ñ.ØÒ0Ð1¸4ð /ò r<   )rÉ  rs  rÓ  rÆ  ré  rÇ  r¡  r¢  r,  )	r[   r\   r]   r^   r:   r	  rÌ  ra   rþ  rÿ  s   @r9   rÃ  rÃ  �
  s   ø† ÷/ò
÷	ð 	r<   rÃ  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚModelMultipleOpsi¶
  c                 ót  >• [         TU ]  5         [        R                  nSn[        R                  " X"SSS9U l        [        R                  " X"SSS9U l        U" U5      U l        [        R                  " 5       U l	        [        R                  " 5       U l
        [        R                  R                  5       U l        [        R                  R                  5       U l        [        R                  R                  5       U l        [        R$                  " S5      U l        [        R(                  " SS5      U l        g ©Nr¯  rç  Frw  )rì   rì   rT  é   )r±  r:   rÚ   r£  rx  rÓ  rÔ  rs  r¹  r¡  r¢  rf   rÅ  rÆ  r"  rµ  Úskip_addr€  rÈ  rÉ  rñ  ré  rÊ  s      €r9   r:   Ú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 Ó"ˆ�r<   c                 óþ  • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  R                  X#5      nU R                  U5      nU R                  U5      nU R                  U5      n[        R                  R                  R                  USS5      nU R                  R                  X"/5      nUR                  SS5      nU R                  U5      nU$ ©Nrn  r¥   rT  )rÓ  rs  r¡  rÆ  rÚ  r“  r¢  rÉ  rÔ  rf   rÚ   Ú
functionalÚ
max_pool2dr€  rø   ré  rÐ  s       r9   r	  ÚModelMultipleOps.forwardÆ
  sÇ   € Ø�j‰j˜‹mˆØ�h‰h�s‹mˆØ�j‰j˜‹oˆØ—?‘? 1Ó%ˆØ�m‰m×Ñ Ó.ˆØ�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ˆØˆ
r<   )
rÉ  rs  r€  rÓ  rÔ  rÆ  ré  r¡  r¢  rÚ  r,  r\  rÿ  s   @r9   rÖ  rÖ  ¶
  s   ø† ÷#÷ð r<   rÖ  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚModelMultipleOpsNoAvgPooliÚ
  c                 ó.  >• [         TU ]  5         [        R                  nSn[        R                  " X"SSS9U l        [        R                  " X"SSS9U l        U" U5      U l        [        R                  " 5       U l	        [        R                  " 5       U l
        [        R                  R                  5       U l        [        R                  R                  5       U l        [        R                  " S5      U l        [        R"                  " SS5      U l        g rØ  )r±  r:   rÚ   r£  rx  rÓ  rÔ  rs  r¹  r¡  r¢  r"  rµ  rÚ  r€  Ú	MaxPool2dÚmaxpoolrñ  ré  rÊ  s      €r9   r:   Ú"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 Ó"ˆ�r<   c                 óþ  • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  R                  X#5      nU R                  U5      nU R                  U5      nU R                  U5      n[        R                  R                  R                  USS5      nU R                  R                  X"/5      nUR                  SS5      nU R                  U5      nU$ rÝ  )rÓ  rs  r¡  rÔ  rÚ  r“  r¢  rå  rf   rÚ   rÞ  rß  r€  rø   ré  )r8   rŸ  rŠ  Úskips       r9   r	  Ú!ModelMultipleOpsNoAvgPool.forwardé
  sÆ   € Ø�j‰j˜‹mˆØ�h‰h�s‹mˆØ�j‰j˜‹oˆØ�z‰z˜!‹}ˆØ�m‰m×Ñ Ó*ˆØ�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ˆØˆ
r<   )	rs  r€  rÓ  rÔ  ré  rå  r¡  r¢  rÚ  r,  r\  rÿ  s   @r9   râ  râ  Ú
  s   ø† ÷#÷ð r<   râ  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚEmbeddingBagModuleiù
  c                 ón   >• [         TU ]  5         [        R                  R	                  SSSSSS9U l        g )Nrq   rT  TFr~   rØ  )r±  r:   rf   rÚ   rä  rU  r  s    €r9   r:   ÚEmbeddingBagModule.__init__ú
  s8   ø€ Ü‰ÑÔÜ—8‘8×(Ñ(ØØØ $Ø$Øð )ð 
ˆ�r<   c                 ó&   • U R                  XU5      $ rK   ©rU  )r8   rë  rì  rW  s       r9   r	  ÚEmbeddingBagModule.forward  s   € Ø�x‰x˜Ð*<Ó=Ð=r<   rï  r,  r\  rÿ  s   @r9   rë  rë  ù
  s   ø† ÷
÷>ð >r<   rë  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚEmbeddingModulei  c                 óh   >• [         TU ]  5         [        R                  R	                  SSS9U l        g ©Nrq   rT  rÚ  ©r±  r:   rf   rÚ   rå  rU  r  s    €r9   r:   ÚEmbeddingModule.__init__	  s)   ø€ Ü‰ÑÔÜ—8‘8×%Ñ%°RÀrÐ%ÐJˆ�r<   c                 ó$   • U R                  U5      $ rK   rï  ©r8   rë  s     r9   r	  ÚEmbeddingModule.forward  s   € Ø�x‰x˜Ó Ð r<   rï  r,  r\  rÿ  s   @r9   rò  rò    s   ø† ÷K÷!ð !r<   rò  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚEmbeddingWithStaticLineari  c                 ó.  >• [         TU ]  5         [        R                  R	                  SSS9U l        [        R                  R                  SS5      U l        [        U R
                  l	        [        U l	        [        5       U l        [        5       U l        g )Nrq   rT  rÚ  rì   rn  )r±  r:   rf   rÚ   rä  rU  rñ  ré  r   rÊ  r   r   rª  r   rÃ  r  s    €r9   r:   Ú"EmbeddingWithStaticLinear.__init__  sd   ø€ Ü‰ÑÔÜ—8‘8×(Ñ(¸È"Ð(ÐMˆŒÜ—(‘(—/‘/ ! QÓ'ˆŒÜ<ˆ�‰ÔÜ&ˆŒÜ“[ˆŒ
Ü"“}ˆ�r<   c                 óÂ   • U R                  X5      nU R                  U5      nU R                  U5      nU R                  U5      n[        R
                  " U/U/-   SS9nU$ ra  )rU  rª  ré  rÃ  rf   r€  )r8   rë  rì  Ú	linear_inrU  Úq_xré  r‰  s           r9   r	  Ú!EmbeddingWithStaticLinear.forward  sV   € Ø�h‰h�wÓ(ˆØ�j‰j˜Ó#ˆØ�W‰W�S‹\ˆØ�\‰\˜"ÓˆÜ—9’9˜b˜T S E™\¨qÑ1ˆØˆr<   )rÃ  rU  ré  rÊ  rª  r,  r\  rÿ  s   @r9   rû  rû    s   ø† ÷%÷ð r<   rû  c                   ó‚   ^ • \ rS rSr  SU 4S jjrS\R                  S\R                  S\R                  4S jrSrU =r	$ )	ÚDenseTopMLPi$  r~  c                 ó  >• [         TU ]  5         [        R                  " [        R                  " X5      5      U l        [        R                  " [        R                  " X#-   U5      [        R                  " XE5      5      U l        g rK   )r±  r:   rÚ   rÜ  rñ  Ú	dense_mlpÚtop_mlp)r8   Ú	dense_dimÚ	dense_outrÕ  Ú
top_out_inÚtop_out_outrÀ  s         €r9   r:   ÚDenseTopMLP.__init__%  s[   ø€ ô 	‰ÑÔäŸšÜ�IŠI�iÓ+ó
ˆŒô —}’}Ü�IŠI�iÑ/°Ó<Ü�IŠI�jÓ.ó
ˆ�r<   Úsparse_featureÚdensec                 ó~   • U R                  U5      n[        R                  " U/U/-   SS9nU R                  U5      nU$ ra  )r  rf   r€  r  )r8   r  r  Údense_featurer‰  rŠ  s         r9   r	  ÚDenseTopMLP.forward2  s?   € ð
 Ÿ™ uÓ-ˆÜ—9’9˜m˜_°Ð/?Ñ?ÀQÑGˆà�l‰l˜8Ó$ˆØˆ
r<   )r  r  r,  rZ  rÿ  s   @r9   r  r  $  sB   ø† ð
à	÷
ð	àŸ™ð	ð �|‰|ð	ð 
�‰÷		ò 	r<   r  c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚEmbBagWrapperi@  c                 óV   >• [         TU ]  5         [        R                  " XSS9U l        g )Nr~   )r×  )r±  r:   rÚ   rä  Úemb_bag)r8   rÔ  rÕ  rÀ  s      €r9   r:   ÚEmbBagWrapper.__init__A  s    ø€ Ü‰ÑÔÜ—’ ~È5ÑQˆ�r<   c                 ó$   • U R                  X5      $ rK   ©r  )r8   rë  rì  s      r9   r	  ÚEmbBagWrapper.forwardE  s   € Ø�|‰|˜GÓ-Ð-r<   r  r\  rÿ  s   @r9   r  r  @  s   ø† õR÷.ð .r<   r  c                   ó²   ^ • \ rS rSrSrSrSrSrSrSr	Sr
SU 4S jjrS	\R                  S
\R                  S\R                  S\R                  4S jrSrU =r$ )ÚSparseNNModeliI  rq   r¼   rì   rn  rr   r~  c                 óø   >• [         TU ]  5         [        U R                  U R                  5      U l        [        U R                  U R                  U R                  U R                  U R                  5      U l        g rK   )r±  r:   r  Ú_NUM_EMBEDDINGSÚ_EMBEDDING_DIMÚmodel_sparser  Ú
_DENSE_DIMÚ_DENSE_OUTPUTÚ_TOP_OUT_INÚ_TOP_OUT_OUTÚ	dense_topr  s    €r9   r:   ÚSparseNNModel.__init__R  s`   ø€ Ü‰ÑÔä)¨$×*>Ñ*>À×@SÑ@SÓTˆÔÜ$Ø�O‰OØ×ÑØ×ÑØ×ÑØ×Ñó
ˆ�r<   Úsparse_indicesÚsparse_offsetsr  c                 óJ   • U R                  X5      nU R                  XC5      nU$ rK   )r  r#  )r8   r%  r&  r  r  rŠ  s         r9   r	  ÚSparseNNModel.forward^  s'   € ð ×*Ñ*¨>ÓJˆØ�n‰n˜^Ó3ˆàˆ
r<   )r#  r  r,  )r[   r\   r]   r^   r  r  r  r   r!  r"  Ú_TOP_MLP_DIMr:   rf   r   r	  ra   rþ  rÿ  s   @r9   r  r  I  sk   ø† Ø€OØ€NØ€JØ€MØ€KØ€LØ€L÷

ð	àŸ™ð	ð Ÿ™ð	ð �|‰|ð		ð
 
�‰÷	ò 	r<   r  c                   óä  • \ rS rSr " S S\R
                  R                  5      r " S S\R
                  R                  5      r " S S\R
                  R                  5      r	 " S S	\R
                  R                  5      r
 " S
 S\R
                  R                  5      r " S S\R
                  R                  5      r " S S\R
                  R                  5      r " S S\R
                  R                  5      r " S S\R
                  R                  5      r " S S\R
                  R                  5      r " S S\R
                  R                  5      r " S S\R
                  R                  5      r " S S\R
                  R                  5      r " S S\R
                  R                  5      r " S S\R
                  R                  5      r " S  S!\R
                  R                  5      r " S" S#\R
                  R                  5      r " S$ S%\R
                  R                  5      r " S& S'\R
                  R                  5      r " S( S)\R
                  R                  5      r " S* S+\R
                  R                  5      r " S, S-\R
                  R                  5      r " S. S/\R
                  R                  5      r " S0 S1\R
                  R                  5      rS2rg3)4ÚTestHelperModulesij  c            
       óœ   • \ rS rSrS\R
                  S\R
                  S\R
                  S\R
                  S\R
                  4
S jrS rS	rg
)ÚTestHelperModules.ControlFlowik  ÚxsÚpred1Úpred2r  r~  c           
      óh  ^^^^	• S[         R                  S[         R                  4S jm	S[         R                  S[         R                  4S jmS[         R                  S[         R                  S[         R                  4UU	4S jjmS[         R                  S[         R                  4S jmS[         R                  S	[         R                  S[         R                  S[         R                  S[         R                  4
UU4S
 jjn[         R                  " XD5      n[        R                  " XQX#U5      $ )Nr  r~  c                 ó:   • X -   n [         R                  " X 5      n U $ rK   ©rf   Úmm©r  s    r9   Útrue_nestedÚ:TestHelperModules.ControlFlow.forward.<locals>.true_nesteds  s   € Ø‘E�Ü—H’H˜Q“N�Ø�r<   c                 ó.   • [         R                  " X 5      $ rK   r3  r5  s    r9   Úfalse_nestedÚ;TestHelperModules.ControlFlow.forward.<locals>.false_nestedx  s   € Ü—x’x “~Ð%r<   rŸ  r0  c                 ó@   >• [         R                  " UTTU /5      nX-   $ rK   )r   Úcond)rŸ  r0  r¿  r9  r6  s      €€r9   Útrue_fnÚ6TestHelperModules.ControlFlow.forward.<locals>.true_fn{  s"   ø€ Ü ×%Ò% e¨[¸,ÈÈÓL�Ø‘u�r<   c                 ó"   • U R                  5       $ rK   )Úcos)rŸ  r…   s     r9   Úfalse_fnÚ7TestHelperModules.ControlFlow.forward.<locals>.false_fn  s   € Ø—u‘u“w�r<   r/  c                 ó€   >• U R                  5       n [        R                  " UTTX2/5      nX-   n U R                  5       $ rK   )r@  r   r<  Úsin)rŸ  r/  r0  r  rA  r=  s       €€r9   Úmap_fnÚ5TestHelperModules.ControlFlow.forward.<locals>.map_fn‚  s:   ø€ ð —E‘E“G�Ü ×%Ò% e¨W°hÀÀ
ÓK�Ø‘E�Ø—u‘u“w�r<   )rf   r   r4  r   ru  )
r8   r.  r/  r0  r  rE  rA  r9  r=  r6  s
         @@@@r9   r	  Ú%TestHelperModules.ControlFlow.forwardl  sï   û€ ðœuŸ|™|ð ´·±ô ð
&¤§¡ð &´·±ô &ðœ5Ÿ<™<ð ´·±ð ÄÇÁ÷ ð ðœEŸL™Lð ´·±ô ð	Ü—<‘<ð	ä—|‘|ð	ô —|‘|ð	ô —<‘<ð		ô
 —‘÷	ð 	ô —’˜“ˆAÜ×#Ò# F°¸aÓ@Ð@r<   c                 ó¶   • [         R                  " SS5      [         R                  " S/5      [         R                  " S/5      [         R                  " SS5      4$ )Nrn  F)rf   Úonesr÷   rM   s    r9   r¸  Ú,TestHelperModules.ControlFlow.example_inputs�  sD   € ä—
’
˜1˜aÓ Ü—’˜e˜WÓ%Ü—’˜e˜WÓ%Ü—
’
˜1˜aÓ ð	ð r<   rb   N)	r[   r\   r]   r^   rf   r   r	  r¸  ra   rb   r<   r9   ÚControlFlowr-  k  sW   † ð"	Aà—‘ð"	Að —<‘<ð"	Að —<‘<ð	"	Að
 �|‰|ð"	Að �\‰\ô"	AõH	r<   rK  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú%TestHelperModules.Conv2dPropAnnotatoni˜  c                 ó¸   >• [         TU ]  5         [        R                  R	                  SSS5      U l        [        R                  R                  SS5      U l        g ©Nr¯  )r±  r:   rf   rÚ   rx  ry  rñ  r(  r  s    €r9   r:   Ú.TestHelperModules.Conv2dPropAnnotaton.__init__™  s<   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜŸ(™(Ÿ/™/¨!¨QÓ/ˆD�Kr<   c                 óÄ   • U R                  U5      nUR                  SS5      n[        R                  R                  R                  USS5      nU R                  U5      nU$ )Nr¥   r¯  g      à¿r:  )ry  r«   rf   rÚ   rÞ  Úhardtanhr(  r#  s     r9   r	  Ú-TestHelperModules.Conv2dPropAnnotaton.forwardž  sN   € Ø—	‘	˜!“ˆAØ—‘�r˜1“ˆAÜ—‘×#Ñ#×,Ñ,¨Q°°cÓ:ˆAØ—‘˜A“ˆAØˆHr<   )ry  r(  r,  r\  rÿ  s   @r9   ÚConv2dPropAnnotatonrM  ˜  s   ø† ÷	0÷
	ð 	r<   rT  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú)TestHelperModules.Conv2dWithObsSharingOpsi¥  c                 óü   >• [         TU ]  5         [        R                  R	                  SSS5      U l        [        R                  R                  5       U l        [        R                  R                  S5      U l	        g ©Nr¯  rç  )
r±  r:   rf   rÚ   rx  ry  ÚHardtanhrR  rÈ  Úadaptive_avg_pool2dr  s    €r9   r:   Ú2TestHelperModules.Conv2dWithObsSharingOps.__init__¦  sQ   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜ!ŸH™H×-Ñ-Ó/ˆDŒMÜ',§x¡x×'AÑ'AÀ&Ó'IˆDÕ$r<   c                 ó˜   • U R                  U5      nU R                  U5      nU R                  U5      n[        R                  " U5      nU$ rK   )ry  rZ  rR  rf   Úmeanr#  s     r9   r	  Ú1TestHelperModules.Conv2dWithObsSharingOps.forward¬  s?   € Ø—	‘	˜!“ˆAØ×(Ñ(¨Ó+ˆAØ—‘˜aÓ ˆAÜ—
’
˜1“ˆAØˆHr<   )rZ  ry  rR  r,  r\  rÿ  s   @r9   ÚConv2dWithObsSharingOpsrV  ¥  s   ø† ÷	J÷	ð 	r<   r_  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú,TestHelperModules.Conv2dWithTwoLinearPermutei³  c                 ó   >• [         TU ]  5         [        R                  R	                  SSS5      U l        [        R                  R                  SSSS9U l        [        R                  R                  SS5      U l        g )Nr¯  é   rE  Frw  ©	r±  r:   rf   rÚ   rx  ry  rñ  r·  rÄ  r  s    €r9   r:   Ú5TestHelperModules.Conv2dWithTwoLinearPermute.__init__´  óV   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨2¨qÓ1ˆDŒIÜ Ÿ8™8Ÿ?™?¨2¨q°u˜?Ð=ˆDŒLÜ Ÿ8™8Ÿ?™?¨1¨aÓ0ˆD�Lr<   c                 ó’   • U R                  U5      n[        R                  " US5      nU R                  U R	                  U5      5      $ ©N©r   rn  r¯  rr   )ry  rf   ÚpermuterÄ  r·  ©r8   rŸ  Úconv_outÚpermute_outs       r9   r	  Ú4TestHelperModules.Conv2dWithTwoLinearPermute.forwardº  s7   € Ø—y‘y “|ˆHÜŸ-š-¨°,Ó?ˆKØ—<‘< §¡¨[Ó 9Ó:Ð:r<   ©ry  r·  rÄ  r,  r\  rÿ  s   @r9   ÚConv2dWithTwoLinearPermutera  ³  ó   ø† ÷	1÷	;ð 	;r<   rp  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú%TestHelperModules.Conv2dWithTwoLineari¿  c                 ó   >• [         TU ]  5         [        R                  R	                  SSS5      U l        [        R                  R                  SSSS9U l        [        R                  R                  SS5      U l        g )Nr¯  rc  rI  rE  Frw  rd  r  s    €r9   r:   Ú.TestHelperModules.Conv2dWithTwoLinear.__init__À  rf  r<   c                 ó’   • U R                  U5      n[        R                  " US5      nU R                  U R	                  U5      5      $ )N)rn  rI  )ry  rf   rø   rÄ  r·  )r8   rŸ  rl  Úreshape_outs       r9   r	  Ú-TestHelperModules.Conv2dWithTwoLinear.forwardÆ  s7   € Ø—y‘y “|ˆHÜŸ-š-¨°'Ó:ˆKØ—<‘< §¡¨[Ó 9Ó:Ð:r<   ro  r,  r\  rÿ  s   @r9   ÚConv2dWithTwoLinearrs  ¿  rq  r<   ry  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú$TestHelperModules.ConvLinearWPermuteiË  c                 ó¸   >• [         TU ]  5         [        R                  R	                  SSS5      U l        [        R                  R                  SS5      U l        g )Nr¯  rE  )r±  r:   rf   rÚ   rx  ry  rñ  r·  r  s    €r9   r:   Ú-TestHelperModules.ConvLinearWPermute.__init__Ì  s<   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜ Ÿ8™8Ÿ?™?¨1¨aÓ0ˆD�Lr<   c                 ót   • U R                  U5      n[        R                  " US5      nU R                  U5      $ rh  )ry  rf   rj  r·  rk  s       r9   r	  Ú,TestHelperModules.ConvLinearWPermute.forwardÑ  s.   € Ø—y‘y “|ˆHÜŸ-š-¨°,Ó?ˆKØ—<‘< Ó,Ð,r<   )ry  r·  r,  r\  rÿ  s   @r9   ÚConvLinearWPermuter{  Ë  s   ø† ÷	1÷
	-ð 	-r<   r€  c                   ó8   ^ • \ rS rSrSU 4S jjrS rS rSrU =r$ )Ú!TestHelperModules.TwoLinearModuleiÖ  c                 ó´   >• [         TU ]  5         [        R                  R	                  SSSS9U l        [        R                  R	                  SS5      U l        g )NrE  rc  Frw  )r±  r:   rf   rÚ   rñ  r·  rÄ  r  s    €r9   r:   Ú*TestHelperModules.TwoLinearModule.__init__×  s>   ø€ Ü‰GÑÔÜ Ÿ8™8Ÿ?™?¨1¨b°u˜?Ð=ˆDŒLÜ Ÿ8™8Ÿ?™?¨2¨qÓ1ˆD�Lr<   c                 óB   • U R                  U R                  U5      5      $ rK   )rÄ  r·  r#  s     r9   r	  Ú)TestHelperModules.TwoLinearModule.forwardÜ  s   € Ø—<‘< §¡¨Q£Ó0Ð0r<   c                 ó2   • [         R                  " SS5      4$ )Nrn  rE  ©rf   ÚrandnrM   s    r9   r¸  Ú0TestHelperModules.TwoLinearModule.example_inputsß  s   € Ü—K’K  1Ó%Ð'Ð'r<   rÈ  r,  ©	r[   r\   r]   r^   r:   r	  r¸  ra   rþ  rÿ  s   @r9   ÚTwoLinearModuler‚  Ö  s   ø† ÷	2ò
	1÷	(ð 	(r<   rŒ  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚTestHelperModules.ConvMaxPool2diâ  c                 ó¸   >• [         TU ]  5         [        R                  R	                  SSS5      U l        [        R                  R                  SS5      U l        g )Nrn  rr   )r±  r:   rf   rÚ   rx  ry  rä  Úpoolr  s    €r9   r:   Ú(TestHelperModules.ConvMaxPool2d.__init__ã  s>   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜŸ™×*Ñ*¨1¨aÓ0ˆD�Ir<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   ©ry  r�  r#  s     r9   r	  Ú'TestHelperModules.ConvMaxPool2d.forwardè  s!   € Ø—	‘	˜!“ˆAØ—	‘	˜!“ˆAØˆHr<   r“  r,  r\  rÿ  s   @r9   ÚConvMaxPool2drŽ  â  s   ø† ÷	1÷
	ð 	r<   r•  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú+TestHelperModules.ConvWithAdaptiveAvgPool2dií  c                 ó¶   >• [         TU ]  5         [        R                  R	                  SSS5      U l        [        R                  R                  S5      U l        g rX  )r±  r:   rf   rÚ   rx  ry  rÈ  rZ  r  s    €r9   r:   Ú4TestHelperModules.ConvWithAdaptiveAvgPool2d.__init__î  s=   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜ',§x¡x×'AÑ'AÀ&Ó'IˆDÕ$r<   c                 óJ   • U R                  U5      nU R                  U5      nU$ rK   )ry  rZ  r#  s     r9   r	  Ú3TestHelperModules.ConvWithAdaptiveAvgPool2d.forwardó  s$   € Ø—	‘	˜!“ˆAØ×(Ñ(¨Ó+ˆAØˆHr<   )rZ  ry  r,  r\  rÿ  s   @r9   ÚConvWithAdaptiveAvgPool2dr—  í  s   ø† ÷	J÷
	ð 	r<   rœ  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú TestHelperModules.ConvWithBNReluiø  c                 óŠ  >• [         TU ]  5         [        R                  R                  [        R                  R
                  [        R                  R                  S.n[        R                  R                  [        R                  R                  [        R                  R                  S.nXb   " SSSXES9U l
        U(       a  Xr   " S5      U l        O#[        R                  R                  5       U l        U(       a$  [        R                  R                  5       U l        g [        R                  R                  5       U l        g )Nr°  r¯  )r"  ré  )r±  r:   rf   rÚ   rx  rx  rt  r)  r£  ru  ry  r¤  rÅ  r¹  rc  )	r8   rc  rp  r¤  r"  ré  ÚconvsÚbnsrÀ  s	           €r9   r:   Ú)TestHelperModules.ConvWithBNRelu.__init__ù  sÂ   ø€ Ü‰GÑÔÜŸ™Ÿ™¬E¯H©H¯O©OÄÇÁÇÁÑPˆEä—8‘8×'Ñ'Ü—8‘8×'Ñ'Ü—8‘8×'Ñ'ñˆCð
 š
 1 a¨°ÑGˆDŒIæØš( 1›+�•äŸ(™(×+Ñ+Ó-�”ÞÜ!ŸH™HŸM™M›O�•	ä!ŸH™H×-Ñ-Ó/�•	r<   c                 óh   • U R                  U5      nU R                  U5      nU R                  U5      $ rK   r¼  r#  s     r9   r	  Ú(TestHelperModules.ConvWithBNRelu.forward  s*   € Ø—	‘	˜!“ˆAØ—‘˜“
ˆAØ—9‘9˜Q“<Ðr<   rÀ  )rn  TTr   r\  rÿ  s   @r9   ÚConvWithBNRelurž  ø  s   ø† ÷	0÷&	 ð 	 r<   r¥  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú!TestHelperModules.ConvTWithBNRelui  c                 ó&  >• [         TU ]  5         [        R                  R                  [        R                  R
                  S.n[        R                  R                  [        R                  R                  S.nXR   " SSSUS9U l        U(       a  Xb   " S5      U l	        O#[        R                  R                  5       U l	        U(       a$  [        R                  R                  5       U l        g [        R                  R                  5       U l        g )N)rr   rn  r¯  rw  )r±  r:   rf   rÚ   r­  r†  r)  r£  Úconvtr¤  rÅ  r¹  rc  )r8   rc  rp  r¤  r"  Úconvtsr¡  rÀ  s          €r9   r:   Ú*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æØš( 1›+�•äŸ(™(×+Ñ+Ó-�”ÞÜ!ŸH™HŸM™M›O�•	ä!ŸH™H×-Ñ-Ó/�•	r<   c                 óh   • U R                  U5      nU R                  U5      nU R                  U5      $ rK   )r©  r¤  rc  r#  s     r9   r	  Ú)TestHelperModules.ConvTWithBNRelu.forward!  s*   € Ø—
‘
˜1“ˆAØ—‘˜“
ˆAØ—9‘9˜Q“<Ðr<   )r¤  r©  rc  )rn  TTr\  rÿ  s   @r9   ÚConvTWithBNRelur§    s   ø† ÷	0÷	 ð 	 r<   r®  c                   ó8   ^ • \ rS rSrSU 4S jjrS rS rSrU =r$ )Ú"TestHelperModules.Conv2dThenConv1di&  c                 óº   >• [         TU ]  5         [        R                  R	                  SSS5      U l        [        R                  R                  SSS5      U l        g rO  )r±  r:   rf   rÚ   rx  rš  rx  rí  r  s    €r9   r:   Ú+TestHelperModules.Conv2dThenConv1d.__init__'  s>   ø€ Ü‰GÑÔÜŸ(™(Ÿ/™/¨!¨Q°Ó2ˆDŒKÜŸ(™(Ÿ/™/¨!¨Q°Ó2ˆD�Kr<   c                 ól   • U R                  U5      nUR                  S5      nU R                  U5      nU$ r”   )rí  r•  rš  r#  s     r9   r	  Ú*TestHelperModules.Conv2dThenConv1d.forward,  s.   € Ø—‘˜A“ˆAØ—	‘	˜!“ˆAØ—‘˜A“ˆAØˆHr<   c                 ó6   • [         R                  " SSSS5      4$ r€  rˆ  rM   s    r9   r¸  Ú1TestHelperModules.Conv2dThenConv1d.example_inputs2  s   € Ü—K’K  1 a¨Ó+Ð-Ð-r<   )rš  rí  r,  r‹  rÿ  s   @r9   ÚConv2dThenConv1dr°  &  s   ø† ÷	3ò
	÷	.ð 	.r<   r·  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚTestHelperModules.Conv2dWithCati5  c                 óº   >• [         TU ]  5         [        R                  R	                  SSS5      U l        [        R                  R	                  SSS5      U l        g rO  ©r±  r:   rf   rÚ   rx  rÓ  rÔ  r  s    €r9   r:   Ú(TestHelperModules.Conv2dWithCat.__init__6  ó>   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨A¨qÓ1ˆDŒJÜŸ™Ÿ™¨¨A¨qÓ1ˆD�Jr<   c                 óv   • U R                  U5      nU R                  U5      n[        R                  " X/SS9nU$ ra  ©rÓ  rÔ  rf   r€  )r8   rŸ  r  r¿  s       r9   r	  Ú'TestHelperModules.Conv2dWithCat.forward;  s3   € Ø—
‘
˜1“ˆAØ—
‘
˜1“ˆAÜ—	’	˜1˜& aÑ(ˆAØˆHr<   r×  r,  r\  rÿ  s   @r9   ÚConv2dWithCatr¹  5  s   ø† ÷	2÷
	ð 	r<   rÁ  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú"TestHelperModules.Conv2dWithTwoCatiA  c                 óº   >• [         TU ]  5         [        R                  R	                  SSS5      U l        [        R                  R	                  SSS5      U l        g rO  r»  r  s    €r9   r:   Ú+TestHelperModules.Conv2dWithTwoCat.__init__B  r½  r<   c                 ó¬   • U R                  U5      nU R                  U5      n[        R                  " X/SS9nX4-   n[        R                  " Xe/5      nU$ ra  r¿  ©r8   rF  rG  Úx3Úx4r  r¿  r�  s           r9   r	  Ú*TestHelperModules.Conv2dWithTwoCat.forwardG  sJ   € Ø—‘˜B“ˆBØ—‘˜B“ˆBÜ—	’	˜2˜(¨Ñ*ˆAØ‘ˆAÜ—	’	˜1˜&Ó!ˆAØˆHr<   r×  r,  r\  rÿ  s   @r9   ÚConv2dWithTwoCatrÃ  A  s   ø† ÷	2÷
	ð 	r<   rË  c                   ó8   ^ • \ rS rSrSU 4S jjrS rS rSrU =r$ )Ú!TestHelperModules.Conv2dWithSplitiO  c                 óº   >• [         TU ]  5         [        R                  R	                  SSS5      U l        [        R                  R	                  SSS5      U l        g rO  r»  r  s    €r9   r:   Ú*TestHelperModules.Conv2dWithSplit.__init__P  r½  r<   c                 ó„   • U R                  U5      n[        R                  " USSS9u  p#[        R                  " X#/SS9nU$ )Nrn  rr   r›  )rÓ  rf   Úsplitr€  )r8   rŸ  rF  rG  r  s        r9   r	  Ú)TestHelperModules.Conv2dWithSplit.forwardU  s:   € Ø—
‘
˜1“ˆAä—[’[  A¨1Ñ-‰FˆBÜ—	’	˜2˜(¨Ñ*ˆAØˆHr<   c                 ó6   • [         R                  " SSSS5      4$ )Nrr   r¯  rc  rˆ  rM   s    r9   r¸  Ú0TestHelperModules.Conv2dWithSplit.example_inputs\  ó   € Ü—K’K  1 b¨"Ó-Ð/Ð/r<   r×  r,  r‹  rÿ  s   @r9   ÚConv2dWithSplitrÍ  O  s   ø† ÷	2ò
	÷	0ð 	0r<   rÖ  c                   ó   • \ rS rSrS rSrg)ÚTestHelperModules.ThreeAddi_  c                 ó   • X-   nX4-   nXV-   nU$ rK   rb   rÇ  s           r9   r	  Ú"TestHelperModules.ThreeAdd.forward`  s   € Ø‘ˆAØ‘ˆAØ‘ˆAØˆHr<   rb   N©r[   r\   r]   r^   r	  ra   rb   r<   r9   ÚThreeAddrØ  _  s   † õ	r<   rÜ  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú!TestHelperModules.EmbeddingModuleif  c                 óh   >• [         TU ]  5         [        R                  R	                  SSS9U l        g rô  rõ  r  s    €r9   r:   Ú*TestHelperModules.EmbeddingModule.__init__g  s)   ø€ Ü‰GÑÔÜ—x‘x×)Ñ)¸È2Ð)ÐNˆD�Hr<   c                 ó$   • U R                  U5      $ rK   rï  rø  s     r9   r	  Ú)TestHelperModules.EmbeddingModule.forwardk  s   € Ø—8‘8˜GÓ$Ð$r<   rï  r,  r\  rÿ  s   @r9   rò  rÞ  f  s   ø† ÷	O÷	%ð 	%r<   rò  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú+TestHelperModules.EmbeddingConvLinearModulein  c                 óþ   >• [         TU ]  5         [        R                  R	                  SSS9U l        [        R                  R                  SSS5      U l        [        R                  R                  SS5      U l	        g )Nrq   rE  rÚ  rc  )rr   r¯  )
r±  r:   rf   rÚ   rå  rU  rx  ry  rñ  r(  r  s    €r9   r:   Ú4TestHelperModules.EmbeddingConvLinearModule.__init__o  sW   ø€ Ü‰GÑÔÜ—x‘x×)Ñ)¸È1Ð)ÐMˆDŒHÜŸ™Ÿ™¨¨2¨vÓ6ˆDŒIÜŸ(™(Ÿ/™/¨"¨aÓ0ˆD�Kr<   c                 ó  • U R                  U5      n[        R                  " USS9n[        R                  " US5      nU R	                  U5      n[        R                  " US5      n[        R
                  " USS9nU R                  U5      $ )Nr   r›  )r   r¯  rr   rn  ri  )rU  rf   rž  rj  ry  r•  r(  )r8   rë  Ú
embeddingsrl  s       r9   r	  Ú3TestHelperModules.EmbeddingConvLinearModule.forwardu  sm   € ØŸ™ 'Ó*ˆJÜŸš¨¸Ñ;ˆJÜŸš z°<Ó@ˆJØ—y‘y Ó,ˆHÜ—}’} X¨|Ó<ˆHÜ—}’} X°1Ñ5ˆHØ—;‘;˜xÓ(Ð(r<   )ry  rU  r(  r,  r\  rÿ  s   @r9   ÚEmbeddingConvLinearModulerä  n  s   ø† ÷	1÷	)ð 	)r<   rê  c                   ó   • \ rS rSrS rSrg)ÚTestHelperModules.AddInplaceAddi~  c                 ó   • X-   nX-  nU$ rK   rb   r~  s      r9   r	  Ú'TestHelperModules.AddInplaceAdd.forward  ó   € Ø‘ˆAØ‰FˆAØˆHr<   rb   NrÛ  rb   r<   r9   ÚAddInplaceAddrì  ~  ó   † õ	r<   rð  c                   ó   • \ rS rSrS rSrg)ÚTestHelperModules.MulInplaceMuli„  c                 ó   • X-  nX-  nU$ rK   rb   r~  s      r9   r	  Ú'TestHelperModules.MulInplaceMul.forward…  rï  r<   rb   NrÛ  rb   r<   r9   ÚMulInplaceMulró  „  rñ  r<   rö  c                   ó   • \ rS rSrS rSrg)ÚTestHelperModules.AddMulScalariŠ  c                 ó.   • US-   nUS-  nUS-  nUS-  nU$ rO  rb   r#  s     r9   r	  Ú&TestHelperModules.AddMulScalar.forward‹  s+   € Ø�A‘ˆAØ�A‘ˆAØ�‰FˆAØ�‰FˆAØˆHr<   rb   NrÛ  rb   r<   r9   ÚAddMulScalarrø  Š  s   † õ	r<   rû  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú+TestHelperModules.ConvBnReLU2dAndLinearReLUi’  c                 óà   >• [         TU ]  5         [        R                  SS9U l        [
        R                  R                  SSSS9U l        [
        R                  R                  5       U l
        g )NT)rc  r¯  rE  Frw  )r±  r:   r+  r¥  Úconv_bn_relurf   rÚ   rñ  r(  r¹  rc  r  s    €r9   r:   Ú4TestHelperModules.ConvBnReLU2dAndLinearReLU.__init__“  sO   ø€ Ü‰GÑÔÜ 1× @Ñ @ÀdÐ @Ð KˆDÔÜŸ(™(Ÿ/™/¨!¨Q°U˜/Ð;ˆDŒKÜŸ™Ÿ™›ˆD�Ir<   c                 óx   • U R                  U5      n[        R                  " US5      nU R                  U5      nU$ rh  )rÿ  rf   rj  r(  )r8   rŸ  rm  Ú
linear_outs       r9   r	  Ú3TestHelperModules.ConvBnReLU2dAndLinearReLU.forward™  s6   € Ø×!Ñ! !Ó$ˆAÜŸ-š-¨¨<Ó8ˆKØŸ™ [Ó1ˆJØÐr<   )rÿ  r(  rc  r,  r\  rÿ  s   @r9   ÚConvBnReLU2dAndLinearReLUrý  ’  s   ø† ÷	(÷	ð 	r<   r  c                   ó8   ^ • \ rS rSrSU 4S jjrS rS rSrU =r$ )Ú!TestHelperModules.GroupwiseConv2diŸ  c                 ól   >• [         TU ]  5         [        R                  R	                  SSSSS9U l        g )Nrì   r¯  rn  )r   )r±  r:   rf   rÚ   rx  ry  r  s    €r9   r:   Ú*TestHelperModules.GroupwiseConv2d.__init__   s*   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨a¸˜Ð:ˆD�Ir<   c                 ó$   • U R                  U5      $ rK   r|  r#  s     r9   r	  Ú)TestHelperModules.GroupwiseConv2d.forward¤  s   € Ø—9‘9˜Q“<Ðr<   c                 ó6   • [         R                  " SSSS5      4$ )Nrn  rì   rq   rˆ  rM   s    r9   r¸  Ú0TestHelperModules.GroupwiseConv2d.example_inputs§  rÕ  r<   r|  r,  r‹  rÿ  s   @r9   ÚGroupwiseConv2dr  Ÿ  s   ø† ÷	;ò	 ÷	0ð 	0r<   r  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú!TestHelperModules.LinearReluModeliª  c                 óè   >• [         TU ]  5         [        R                  R	                  SS5      R                  [        R                  S9U l        [        R                  R                  5       U l	        g r  r  r  s    €r9   r:   Ú*TestHelperModules.LinearReluModel.__init__«  sG   ø€ Ü‰GÑÔÜ—h‘h—o‘o a¨Ó+×.Ñ.´U·[±[Ð.ÐAˆDŒGÜŸ™Ÿ™›ˆD�Ir<   c                 óF   • U R                  U R                  U5      5      nU$ rK   r  r#  s     r9   r	  Ú)TestHelperModules.LinearReluModel.forward°  s   € Ø—	‘	˜$Ÿ'™' !›*Ó%ˆAØˆHr<   r  r,  r\  rÿ  s   @r9   r  r  ª  s   ø† ÷	(÷
	ð 	r<   r  rb   N) r[   r\   r]   r^   rf   rÚ   r  rK  rT  r_  rp  ry  r€  rŒ  r•  rœ  r¥  r®  r·  rÁ  rË  rÖ  rÜ  rò  rê  rð  rö  rû  r  r  r  ra   rb   r<   r9   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ô˜%Ÿ(™(Ÿ/™/÷ r<   r+  Únonec                 ó    • US;  a  [        SU 35      e " S S[        R                  R                  5      nU" XX#XE5      R	                  5       $ )a—  
Generate a linear module using onednn.qlinear_pointwise directly
with static quantization parameters (no choose_qparams at runtime).
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
    epilogue: oneDNN qlinear pointwise post op, e.g. none/relu/gelu
    output_dtype: output dtype used by onednn.qlinear_pointwise
Return:
    An instance of the quantized linear module
)r  rc  ÚgeluúUnsupported epilogue: c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )Ú._static_quantized_linear_module.<locals>.ModeliÎ  c           
      óx  >• [         TU ]  5         [        R                  R                  R
                  R                  USS[        R                  " [        R                  5      R                  [        R                  S9u  U l        U l        U R                  R                  5       R                  5       U R                  R                  5       R                  5       sU l        U l        [        R                  R!                  X!U5      U l        [        R                  R                  R%                  U R"                  R&                  [        R(                  S9u  U l        U l        U R*                  R                  5       R/                  [        R                  5      R1                  5       U l        U R,                  R                  5       R/                  [        R2                  5      R1                  5       U l        [        R                  R                  R4                  R7                  U R"                  R&                  U R*                  U R,                  SSS[        R(                  S9U l        U(       a  U R"                  R:                  U l        OS U l        SU l        SU l         X`l!        XPl"        SU l#        S	U l$        g )
Nr   é   ©r   r¡  r�  rð   rò   é€ÿÿÿ©Úaxisr   r¡  rð   r¥  rb   r  )%r±  r:   rf   rH  Úquantized_decomposedÚchoose_qparamsr÷   r�  r’  r�  r  Úx_scaler©  Údetachr{   rÚ   rñ  r(  Úchoose_qparams_per_tokenr!  r”  Úw_scalesÚw_zpsr¿   r•  r�  rù   ÚdefaultÚqwr"  r  Úy_scaleÚy_zpÚoutput_dtypeÚpost_opÚunary_post_op_argsÚpost_op_algo)r8   ÚNÚKr"  Úexample_inputÚepiloguer+  rÀ  s          €r9   r:   Ú7_static_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˜$œ)ÜŸ(™(Ÿ/™/¨!°Ó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ŒGö ØŸ™×)Ñ)�•à�”àˆDŒLØˆDŒIØ ,ÔØ#ŒLØ&(ˆDÔ#Ø &ˆDÕr<   c                 ó¤  • [         R                  R                  R                  U R                  S 5      nUR                  5       (       aY  [         R                  R                  R                  R                  UU R                  U R                  SS[         R                  S9nOUn[         R                  R                  R                  R                  UU R                  U R                  UU R                  U R                  U R                  U R                   U R"                  U R$                  U R&                  U R(                  U R*                  5      $ )Nr   éÿ   ©r   r¡  rð   )rf   rH  rB  Úqlinear_prepackr(  Úis_floating_pointr   rô   r'  r"  r©  r  Úqlinear_pointwiser%  r&  r  r)  r*  r+  r,  r-  r.  )r8   rŸ  Ú	qw_packedÚqxs       r9   r	  Ú6_static_quantized_linear_module.<locals>.Model.forwardý  sø   € ÜŸ	™	×(Ñ(×8Ñ8¸¿¹À$ÓGˆIØ×"Ñ"×$Ñ$Ü—Y‘Y×3Ñ3×GÑG×OÑOØØ—L‘LØ—I‘IØØ!ÜŸ+™+ð Pð ‘ð �Ü—9‘9×#Ñ#×5Ñ5×=Ñ=ØØ—‘Ø—	‘	ØØ—‘Ø—
‘
Ø—‘Ø—‘Ø—	‘	Ø×!Ñ!Ø—‘Ø×'Ñ'Ø×!Ñ!óð r<   )r  r(  r+  r,  r.  r(  r-  r%  r&  r"  r©  r)  r*  r\  rÿ  s   @r9   ÚModelr  Î  s   ø† õ,	'÷\	ð 	r<   r=  ©rs  rf   rÚ   r  rN  )r/  r0  r"  r1  r2  r+  r=  s          r9   Ú_static_quantized_linear_moduler?  ´  sQ   € ð. Ð/Ó/ÜÐ5°h°ZÐ@ÓAÐAôJ”—‘—‘ô JñX ��t¨HÓC×HÑHÓJÐJr<   r“  c           
      óÒ   • US;  a  [        SU 35      eUS;  a  [        SU 35      e " S S[        R                  R                  5      nU" U UUUUUUU5      R	                  5       $ )N)r  rc  r  )r“  r~   zUnsupported binary post op: c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )Ú5_static_quantized_linear_binary_module.<locals>.Modeli,  c	           
      óÎ  >• [         TU ]  5         [        R                  R                  R
                  R                  USS[        R                  " [        R                  5      R                  [        R                  S9u  U l        U l        U R                  R                  5       R                  5       U R                  R                  5       R                  5       sU l        U l        [        R                  R!                  X!U5      U l        [        R                  R                  R%                  U R"                  R&                  [        R(                  S9u  U l        U l        U R*                  R                  5       R/                  [        R                  5      R1                  5       U l        U R,                  R                  5       R/                  [        R2                  5      R1                  5       U l        [        R                  R                  R4                  R7                  U R"                  R&                  U R*                  U R,                  SSS[        R(                  S9U l        U(       a  U R"                  R:                  U l        OS U l        U[        R                  [        R(                  4;   aù  U R#                  U5      U-   n	SS[        R                  pËn
U[        R(                  :X  a  SS[        R(                  pËn
[        R                  R                  R
                  R                  U	U
U[        R                  " [        R                  5      R                  US9u  pÞUR                  5       R                  5       UR                  5       R                  5       sU l        U l         OSu  U l        U l         X€l!        X`l"        SU l#        Xpl$        S	U l%        S
U l&        g )Nr   r  r  rò   r  r  r¤  r¥  rb   rº   )'r±  r:   rf   rH  r   r!  r÷   r�  r’  r�  r  r"  r©  r#  r{   rÚ   rñ  r(  r$  r!  r”  r%  r&  r¿   r•  r�  rù   r'  r(  r"  r  r)  r*  r+  Úbinary_post_opÚbinary_alphaÚunary_post_opr-  Úunary_post_op_algo)r8   r/  r0  r"  r1  Úexample_binary_inputrD  r2  r+  Úexample_outÚqminÚqmaxÚqdtyper)  r*  rÀ  s                  €r9   r:   Ú>_static_quantized_linear_binary_module.<locals>.Model.__init__-  sÌ  ø€ ô ‰GÑÔÜ&+§i¡i×&DÑ&D×&SÑ&S×&ZÑ&ZØØØÜ—K’K¤§¡Ó.×2Ñ2Ü—k‘kð '[ð 'Ñ#ˆDŒL˜$œ)ð —‘×#Ñ#Ó%×*Ñ*Ó,Ø—	‘	× Ñ Ó"×'Ñ'Ó)ð $ˆDŒL˜$œ)ô  Ÿ(™(Ÿ/™/¨!°Ó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ŒGö ØŸ™×)Ñ)�•à�”à¤§¡¬U¯Z©ZÐ8Ó8ð #Ÿk™k¨-Ó8Ð;OÑO�Ø&'¨¬e¯k©k˜F�Ø¤5§:¡:Ó-Ø*.°´U·Z±Z �DÜ %§	¡	× >Ñ >× MÑ M× TÑ TØØ"Ø"ÜŸš¤E§M¡MÓ2×6Ñ6Ø ð !Uð !‘�ð +2¯.©.Ó*:×*?Ñ*?Ó*AÀ4Ç;Á;Ã=×CUÑCUÓCWÐ'�”˜d�ià*0Ñ'�”˜dœià ,ÔØ"0ÔØ #ˆDÔØ!)ÔØ&(ˆDÔ#Ø&(ˆDÕ#r<   c                 óÞ  • [         R                  R                  R                  U R                  S 5      nSu  pEUR                  5       (       aY  [         R                  R                  R                  R                  UU R                  U R                  SS[         R                  S9nOUn[         R                  R                  R                  R                  UU R                  U R                  UU R                  U R                  UU R                   U R"                  U R$                  U R&                  UUU R(                  U R*                  U R,                  U R.                  U R0                  5      $ )Nr¤  r   r  r6  )rf   rH  rB  r7  r(  r8  r   rô   r'  r"  r©  r  r9  Úbinaryr%  r&  r  r)  r*  r+  rD  rE  rF  r-  rG  )r8   rŸ  rS   r:  Úother_scaleÚother_zpr;  s          r9   r	  Ú=_static_quantized_linear_binary_module.<locals>.Model.forwardr  s  € ÜŸ	™	×(Ñ(×8Ñ8¸¿¹À$ÓGˆIØ$*Ñ!ˆKØ×"Ñ"×$Ñ$Ü—Y‘Y×3Ñ3×GÑG×OÑOØØ—L‘LØ—I‘IØØ!ÜŸ+™+ð Pð ‘ð �Ü—9‘9×#Ñ#×5Ñ5×<Ñ<ØØ—‘Ø—	‘	ØØ—‘Ø—
‘
ØØ—‘Ø—‘Ø—	‘	Ø×!Ñ!ØØØ×#Ñ#Ø×!Ñ!Ø×"Ñ"Ø×'Ñ'Ø×'Ñ'ó%ð r<   )r  rE  rD  r(  r+  r(  rF  rG  r-  r%  r&  r"  r©  r)  r*  r\  rÿ  s   @r9   r=  rB  ,  s   ø† õC	)÷J!	ð !	r<   r=  r>  )	r/  r0  r"  r1  rH  rD  r2  r+  r=  s	            r9   Ú&_static_quantized_linear_binary_modulerS    sƒ   € ð Ð'Ó'ÜÐ5°h°ZÐ@ÓAÐAØ˜^Ó+ÜÐ;¸NÐ;KÐLÓMÐMôg”—‘—‘ô gñR Ø	Ø	ØØØØØØó	÷ �dƒfð	r<   )r£   rK   )rì   rc  )rì   é    )Òr_   rf   Ú'torch.ao.nn.intrinsic.quantized.dynamicrÝ  rÚ   Ú	intrinsicr"  rW  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ý  ÚImportErrorrP  r2  r  rÐ   r$  Útypingr.   Úcollections.abcr/   Únumpyrd  Útorch._dynamoÚ_dynamorT  Útorch.testingr0   r2   rh   rm   ÚCrossEntropyLossÚ_default_loss_fnrŠ   rŒ   r¶   rÆ   rÔ   r×   rá   ræ   ré   r  r  r5  r<  r@  rE  rL  rQ  rW  r\  ÚtorchvisionÚHAS_TORCHVISIONÚskipIfÚskip_if_no_torchvisionrb  r�  rl  rŒ  r™  r«  r­  r  r  r  r/  r:  rB  rQ  r^  rl  rt  r„  r�  r™  r¡  r®  r¶  rÂ  rÑ  rÝ  ræ  rñ  rù  r  r  r  r&  r4  r>  rL  rT  r_  rg  rx  r„  rŠ  r�  r™  rŸ  r¬  rµ  rÁ  rÍ  rÕ  rÝ  rå  rò  rý  r  r  r  r!  r)  r1  r8  r@  rG  rN  rR  r\  rd  rj  rp  rÜ  r‚  r†  r’  r˜  r¢  r«  r³  rÃ  rÖ  râ  rë  rò  rû  r  r  r  r+  r’  r?  rS  rb   r<   r9   Ú<module>ru     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ð^
 Ø—’ôfKð^ ØØ—’õAøðsf ó ØƒFðûð` ó ØƒOðús$   Â,"j" Å0j1 ê"j.ê-j.ê1j=ê<j=