Ë
    [^(h%» ã                   óè  — d Z ddlmZ ddlZddlmZ ddlmc mZ ddl	m
c mc mc mc mZ ddlm
c mc mZ ddlm
c mc mc mZ ddlmZ ddlmZ ddlmZmZ ddlmZ ddlmZmZm Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z& dd	l'm(Z( dd
l)m*Z*m+Z+ ddlm,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZCmDZDmEZE ddlFmGZG ddlHmIZI 	 ddlJmKZKmLZLmMZMmNZN ddlOmPZPmQZQ ddlRmSZS ddlTmUZU dZVddlXZXddlYZYddlZZZddl[Z[ddl\Z\ddl]Z^ddl_m`Z` ddlambZbmcZcmdZdmeZe ddlfmgZh ddlim
c mjc mkc mlZm ddlnm
c mjc mkc moZp ddlimqZq ddlnmrZr ddlsZs G d„ d«      Ztd„ Zud„ Zvej
                  jï                  «       Zxexfd„Zy G d„ d«      ZzdØd „Z{d!„ Z|d"„ Z}d#„ Z~d$„ Zd%„ Z€dÙd&„Z�d'„ Z‚d(„ Zƒd)„ Z„d*„ Z…d+„ Z†d,„ Z‡d-„ Zˆd.„ Z‰d/„ ZŠd0„ Z‹	 ddlŒZŒdZ� e\�j                  e� d1«      Z�d2„ Z�e^�j"                  dfd3„Z’dÚd4„Z“	 dÛd5„Z”d6„ Z• G d7„ d8e«      Z– G d9„ d:e–«      Z— G d;„ d<e–«      Z˜ G d=„ d>ej
                  �j2                  «      Zš G d?„ d@ej
                  �j2                  «      Z› G dA„ dBej
                  �j2                  «      Zœ G dC„ dDe�j2                  «      Z� G dE„ dFej
                  �j2                  «      Zž G dG„ dHej
                  �j2                  «      ZŸ G dI„ dJej
                  �j2                  «      Z  G dK„ dLej
                  �j2                  «      Z¡ G dM„ dNej
                  �j2                  «      Z¢ G dO„ dPej
                  �j2                  «      Z£ G dQ„ dRej
                  �j2                  «      Z¤ G dS„ dTej
                  �j2                  «      Z¥ G dU„ dVej
                  �j2                  «      Z¦ G dW„ dXej
                  �j2                  «      Z§ G dY„ dZej
                  �j2                  «      Z¨ G d[„ d\ej
                  �j2                  «      Z© G d]„ d^ej
                  �j2                  «      Zª G d_„ d`e�j2                  «      Z« G da„ dbej
                  �j2                  «      Z¬ G dc„ ddej
                  �j2                  «      Z­ G de„ dfej
                  �j2                  «      Z® G dg„ dhej
                  �j2                  «      Z¯ G di„ djej
                  �j2                  «      Z° G dk„ dlej
                  �j2                  «      Z± G dm„ dnej
                  �j2                  «      Z² G do„ dpej
                  �j2                  «      Z³ G dq„ drej
                  �j2                  «      Z´ G ds„ dtej
                  �j2                  «      Zµ G du„ dvej
                  �j2                  «      Z¶ G dw„ dxej
                  �j2                  «      Z· G dy„ dzej
                  �j2                  «      Z¸ G d{„ d|ej
                  �j2                  «      Z¹ G d}„ d~ej
                  �j2                  «      Zº G d„ d€ej
                  �j2                  «      Z» G d�„ d‚ej
                  �j2                  «      Z¼ G dƒ„ d„ej
                  �j2                  «      Z½ G d…„ d†ej
                  �j2                  «      Z¾ G d‡„ dˆej
                  �j2                  «      Z¿ G d‰„ dŠej
                  �j2                  «      ZÀ G d‹„ dŒej
                  �j2                  «      ZÁ G d�„ dŽe�j2                  «      ZÂ G d�„ d�e�j2                  «      ZÃ G d‘„ d’ej
                  �j2                  «      ZÄ G d“„ d”ej
                  �j2                  «      ZÅ G d•„ d–ej
                  �j2                  «      ZÆ G d—„ d˜e�j2                  «      ZÇ G d™„ dše�j2                  «      ZÈ G d›„ dœej
                  �j2                  «      ZÉ G d�„ džej
                  �j2                  «      ZÊ G dŸ„ d ej
                  �j2                  «      ZË G d¡„ d¢ej
                  �j2                  «      ZÌ G d£„ d¤ej
                  �j2                  «      ZÍ G d¥„ d¦ej
                  �j2                  «      ZÎ G d§„ d¨ej
                  �j2                  «      ZÏ G d©„ dªeÏ«      ZÐ G d«„ d¬e�j2                  «      ZÑ G d­„ d®e�j2                  «      ZÒ G d¯„ d°e�j2                  «      ZÓ G d±„ d²e�j2                  «      ZÔ G d³„ d´e�j2                  «      ZÕ G dµ„ d¶e�j¬                  «      Z× G d·„ d¸e�j2                  «      ZØ G d¹„ dºe�j2                  «      ZÙ G d»„ d¼e�j2                  «      ZÚ G d½„ d¾ej
                  �j2                  «      ZÛ G d¿„ dÀe�j2                  «      ZÜ G dÁ„ dÂej
                  �j2                  «      ZÝ G dÃ„ dÄej
                  �j2                  «      ZÞ G dÅ„ dÆej
                  �j2                  «      Zß G dÇ„ dÈej
                  �j2                  «      Zà G dÉ„ dÊej
                  �j2                  «      Zá G dË„ dÌej
                  �j2                  «      Zâ G dÍ„ dÎej
                  �j2                  «      Zã G dÏ„ dÐe�j2                  «      Zä G dÑ„ dÒe�j2                  «      Zå G dÓ„ dÔe�j2                  «      Zæ G dÕ„ dÖ«      Zç	 dÜd×„Zèy# eW$ r dZVY �	Œðw xY w# eW$ r dZ�Y �	Œ+w xY w)Ýz‡Importing this file includes common utility methods and base clases for
checking quantization api and properties of resulting modules.
é    )Úcontrol_flowN)Ú_FusedModule)ÚTestCaseÚTEST_WITH_ROCM)Úexport_for_training)Ú	QuantTypeÚdefault_dynamic_qat_qconfigÚdefault_embedding_qat_qconfigÚ%default_symmetric_qnnpack_qat_qconfig)Ú#_convert_to_reference_decomposed_fxÚconvert_pt2eÚprepare_pt2eÚprepare_qat_pt2e)Úget_executorch_backend_config)ÚXNNPACKQuantizerÚ!get_symmetric_quantization_config)ÚQuantWrapperÚ	QuantStubÚDeQuantStubÚdefault_qconfigÚdefault_dynamic_qconfigÚdefault_per_channel_qconfigÚQConfigÚdefault_observerÚdefault_weight_observerÚpropagate_qconfig_ÚconvertÚget_default_qconfigÚquantize_dynamic_jitÚquantize_jitÚ!float_qparams_weight_only_qconfigÚget_default_qat_qconfigÚPerChannelMinMaxObserverÚdefault_dynamic_quant_observerÚquantizeÚQConfigMappingÚget_default_qconfig_mappingÚget_default_qat_qconfig_mapping)Ú)get_default_dynamic_quant_module_mappingsÚ$get_default_qconfig_propagation_listÚget_default_qat_module_mappings)Úoverride_quantized_engine)Ú_load_for_lite_interpreter)Ú
prepare_fxÚprepare_qat_fxÚ
convert_fxÚconvert_to_reference_fx)ÚNSSingleResultValuesTypeÚ
NSSubgraph)ÚNode)ÚGraphModuleTF)Ú	FileCheck)ÚCallableÚAnyÚUnionÚOptional)ÚX86InductorQuantizer)ÚXPUInductorQuantizerc                   óX   — e Zd ZdZd„ Zed„ «       Zed„ «       Zed„ «       Zd„ Z	d„ Z
d„ Zy	)
ÚNodeSpecz( Used for checking GraphModule Node
    c                 ó    — || _         || _        y)z¿
        op: call_function | call_module
        target:
          for call_function, target would be a function
          for call_module, target would be the type of PyTorch module
        N)ÚopÚtarget)Úselfr@   rA   s      úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/testing/_internal/common_quantization.pyÚ__init__zNodeSpec.__init__X   s   € ð ˆŒØˆ�ó    c                 ó   — t        d|«      S )NÚcall_function©r>   ©ÚclsrA   s     rC   rG   zNodeSpec.call_functionb   s   € ä˜¨Ó0Ð0rE   c                 ó   — t        d|«      S )NÚcall_methodrH   rI   s     rC   rL   zNodeSpec.call_methodf   ó   € ä˜ vÓ.Ð.rE   c                 ó   — t        d|«      S )NÚcall_modulerH   rI   s     rC   rO   zNodeSpec.call_modulej   rM   rE   c                 óD   — t        | j                  | j                  f«      S ©N)Úhashr@   rA   ©rB   s    rC   Ú__hash__zNodeSpec.__hash__n   s   € Ü�T—W‘W˜dŸk™kÐ*Ó+Ð+rE   c                 ó–   — t        |t        «      st        S | j                  |j                  k(  xr | j                  |j                  k(  S rQ   )Ú
isinstancer>   ÚNotImplementedr@   rA   )rB   Úothers     rC   Ú__eq__zNodeSpec.__eq__q   s7   € Ü˜%¤Ô*Ü!Ð!à�w‰w˜%Ÿ(™(Ñ"ÒB t§{¡{°e·l±lÑ'BÐBrE   c                 ó^   — t        | j                  «      dz   t        | j                  «      z   S )Nú )Úreprr@   rA   rS   s    rC   Ú__repr__zNodeSpec.__repr__w   s#   € Ü�D—G‘G‹}˜sÑ"¤T¨$¯+©+Ó%6Ñ6Ð6rE   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   ÚclassmethodrG   rL   rO   rT   rY   r]   © rE   rC   r>   r>   U   sX   „ ñòð ñ1ó ð1ð ñ/ó ð/ð ñ/ó ð/ò,òCó7rE   r>   c                  óX   — t         j                  j                  «       r
t        sddgS dgS )NÚcpuÚcuda)Útorchrf   Úis_availabler   rc   rE   rC   Úget_supported_device_typesri   z   s&   € Ü#Ÿj™j×5Ñ5Ô7ÅˆE�6ˆ?Ð[ÐUZÐT[Ð[rE   c                 ó   — |D ]  } | |Ž  Œ	 y)z†
    Default evaluation function takes a torch.utils.data.Dataset or a list of
    input Tensors and run the model on the dataset
    Nrc   )ÚmodelÚ
calib_dataÚinps      rC   Útest_only_eval_fnrn   }   s   € ð
 ò ˆÙˆsŠñrE   c                 ó  — t         j                  j                  | j                  «       d¬«      }d\  }}}t	        d«      D ]Á  }| j                  «        |D ]ª  \  }}	|j                  «         | |«      }
 ||
|	«      }|j                  «        |j                  «        ||j                  «       z  }t        j                  |
d«      \  }}||	j                  d«      z  }|||	k(  j                  «       j                  «       z  }Œ¬ ŒÃ |||fS )zh
    Default train function takes a torch.utils.data.Dataset and train the model
    on the dataset
    gü©ñÒMbP?©Úlr)r   r   r   é
   é   r   )rg   ÚoptimÚAdamÚ
parametersÚrangeÚtrainÚ	zero_gradÚbackwardÚstepÚitemÚmaxÚsizeÚsum)rk   Ú
train_dataÚloss_fnÚ	optimizerÚ
train_lossÚcorrectÚtotalÚ_ÚdatarA   ÚoutputÚlossÚ	predicteds                rC   Útest_only_train_fnr‹   †   sû   € ô
 —‘× Ñ  ×!1Ñ!1Ó!3¸Ð Ó>€IØ!(Ñ€J�˜Ü�2‹Yò :ˆØ�‰Œà&ò 		:‰LˆD�&Ø×ÑÔ!Ù˜4“[ˆFÙ˜6 6Ó*ˆDØ�M‰MŒOØ�N‰NÔØ˜$Ÿ)™)›+Ñ%ˆJÜ Ÿ9™9 V¨QÓ/‰LˆAˆyØ�V—[‘[ “^Ñ#ˆEØ˜	 VÑ+×0Ñ0Ó2×7Ñ7Ó9Ñ9‰Gñ		:ð:ð �w Ð%Ð%rE   c                   ó,   — e Zd ZdZdd„Zd„ Zdd„Zd„ Zy)	ÚAverageMeterz1Computes and stores the average and current valuec                 ó@   — || _         || _        | j                  «        y rQ   )ÚnameÚfmtÚreset)rB   r�   r�   s      rC   rD   zAverageMeter.__init__ž   s   € ØˆŒ	ØˆŒØ�
‰
�rE   c                 ó<   — d| _         d| _        d| _        d| _        y ©Nr   )ÚvalÚavgr   ÚcountrS   s    rC   r‘   zAverageMeter.reset£   s   € ØˆŒØˆŒØˆŒØˆ�
rE   c                 ó¨   — || _         | xj                  ||z  z  c_        | xj                  |z  c_        | j                  | j                  z  | _        y rQ   )r”   r   r–   r•   )rB   r”   Úns      rC   ÚupdatezAverageMeter.update©   s<   € ØˆŒØ�Š�C˜!‘GÑ�Ø�
Š
�a‰�
Ø—8‘8˜dŸj™jÑ(ˆ�rE   c                 ó~   — d| j                   z   dz   | j                   z   dz   } |j                  di | j                  ¤ŽS )Nz{name} {valz} ({avgz})rc   )r�   ÚformatÚ__dict__)rB   Úfmtstrs     rC   Ú__str__zAverageMeter.__str__¯   s;   € Ø §¡Ñ)¨IÑ5¸¿¹Ñ@À4ÑGˆØˆv�}‰}Ñ-˜tŸ}™}Ñ-Ð-rE   N)z:f©rs   )r^   r_   r`   ra   rD   r‘   r™   rž   rc   rE   rC   r�   r�   œ   s   „ Ù;óò
ó)ó.rE   r�   c                 óþ  — t        j                  «       5  t        |«      }|j                  d«      }| j	                  |ddd«      \  }}|j                  «       }|j                  |j                  dd«      j                  |«      «      }g }|D ]X  }	|d|	 j                  d«      j                  «       j                  dd¬«      }
|j                  |
j                  d|z  «      «       ŒZ |cddd«       S # 1 sw Y   yxY w)zNComputes the accuracy over the k top predictions for the specified values of kr   rs   TéÿÿÿÿN)Úkeepdimg      Y@)rg   Úno_gradr}   r~   ÚtopkÚtÚeqÚviewÚ	expand_asÚfloatr   ÚappendÚmul_)rˆ   rA   r¤   ÚmaxkÚ
batch_sizer†   Úpredr„   ÚresÚkÚ	correct_ks              rC   Úaccuracyr²   ´   sß   € ä	�‰‹ñ Ü�4‹yˆØ—[‘[ “^ˆ
à—+‘+˜d A t¨TÓ2‰ˆˆ4Ø�v‰v‹xˆØ—'‘'˜&Ÿ+™+ a¨Ó,×6Ñ6°tÓ<Ó=ˆàˆØò 	;ˆAØ  ˜×(Ñ(¨Ó,×2Ñ2Ó4×8Ñ8¸ÀDÐ8ÓIˆIØ�J‰J�y—~‘~ e¨jÑ&8Ó9Õ:ð	;ð ÷÷ ò ús   •CC3Ã3C<c                 ó^  — | j                  «        t        |d¬«      D ]�  \  }\  }}t        dd¬«       |j                  |«      |j                  |«      }} | |«      }	 ||	|«      }
|j	                  «        |
j                  «        |j                  «        t        |	|d¬«       ||k\  sŒ� y  y )Nrs   )Ústartú.Ú )Úend)rs   é   )r¤   )rx   Ú	enumerateÚprintÚtory   rz   r{   r²   )rk   Ú	criterionr‚   Údata_loaderÚdeviceÚntrain_batchesÚcntÚimagerA   rˆ   r‰   s              rC   Útrain_one_epochrÂ   Ä   sŸ   € Ø	‡K�K„MÜ )¨+¸QÔ ?ò 
Ñˆ‰_ˆe�VÜˆc�rÕØŸ™ Ó(¨&¯)©)°FÓ*;ˆvˆÙ�u“ˆÙ˜ Ó(ˆØ×ÑÔØ�‰ŒØ�‰ÔÜ�˜ fÕ-Ø�.Ó Ùð
ð rE   c                 ó€   — dt         j                  d<   dt         j                  d<   t        j                  d| |¬«       y )NÚ	localhostÚMASTER_ADDRÚ12355ÚMASTER_PORTÚgloo©ÚrankÚ
world_size)ÚosÚenvironÚdistÚinit_process_grouprÉ   s     rC   Ú	ddp_setuprÐ   Ó   s2   € Ø +„B‡J�Jˆ}ÑØ '„B‡J�Jˆ}Ñô 	×Ñ˜F¨¸*ÖErE   c                  ó,   — t        j                  «        y rQ   )rÎ   Údestroy_process_grouprc   rE   rC   Úddp_cleanuprÓ   Ú   s   € Ü×ÑÕ rE   c                 ó\  — t        | |«       |j                  «        t        j                  j                  j                  || g¬«      }|j                  | «       |}t        j                  j                  |j                  «       d¬«      }t        |t        |t        | d«       t        «        y )N)Ú
device_idsg-Cëâ6?rp   rs   )rÐ   rf   rg   ÚnnÚparallelÚDistributedDataParallelr»   rt   ÚSGDrv   rÂ   r¼   ÚdatasetrÓ   )rÊ   rË   ÚpreparedÚmodel_with_ddpr‚   s        rC   Úrun_ddprÝ   Ý   s}   € Üˆd�JÔØ‡M�M„OÜ�x‰x× Ñ ×8Ñ8¸ÈtÈfÐ8ÓU€HØ‡K�K�ÔØ€NÜ—‘—‘ × 9Ñ 9Ó ;À�ÓG€IÜ�N¤I¨y¼'À4ÈÔKÜ…MrE   c                 ó0   — t        | t        «       d¬«       y )NT©Úinplace)r   r)   )Úmodules    rC   Úconvert_dynamicrâ   è   s   € ÜˆFÔ=Ó?ÈÖNrE   c                 ó   — t        | |«       y rQ   )r   )rk   Úqconfig_dicts     rC   Úprepare_dynamicrå   ë   s   € Ü�u˜lÕ+rE   c                 ó4  — ||z  }||z  }d\  }}t        j                  ||| |f|z   «      }|||z
  j                  «       z  }t        j                  |||t         j                  ¬«      }||z  }|	|z  }	|d | }|	d | }	d\  }}t        j                  ||||f|z   «      }t        j                  dd|f«      }|rôddt        |«      z  z   }t        j                  |t         j                  ¬«      }t        j                  |	t         j                  ¬«      } |j                  |Ž |j                  «        |j                  |Ž z
  j                  «       z  }||z  |j                  «       z  }t        j                  ||j                  «       |j                  «       dt         j                  ¬«      }nb|d   ||	d   z
  j                  «       z  }||d   z  |j                  «       z  }t        j                  ||d   |	d   t         j                  ¬«      }|||||
r|fS d fS )	N©r   é   ©ÚscaleÚ
zero_pointÚdtype)éûÿÿÿr¸   r   rr   )r¡   rs   rŸ   ©rì   )rg   Ú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                                rC   Ú_make_conv_test_inputr  î   s/  € ð
 (¨&Ñ0€KØ)¨FÑ2€Là!'Ñ€[�+Ü�]‰]Ø�[Ø	�[Ð"Ð%;Ñ;ó=€Fð 	�6˜LÑ(×/Ñ/Ó1Ñ1€AÜ
×
#Ñ
#Ø	� \¼¿¹ôG€Cð ˜Ñ$€GØ ,Ñ.€Là�m�|Ð$€GØ  Ð.€Lð ")Ñ€[�+ô �]‰]Ø�[Ø	Ð,Ð.°Ñ<ó>€Fô �]‰]˜1˜b < /Ó2€FáØ˜D¤3 {Ó#3Ñ3Ñ3ˆÜŸ,™, w´e·k±kÔBˆÜ$Ÿ|™|¨LÄÇÁÔLÐØ#ˆO×#Ñ# WÐ-Ø�L‰L‹NÐ9Ð1×9Ñ9¸7ÐCÑCÇUÁUÃWñMˆà�oÑ%¨¯©«Ñ6ˆÜ×(Ñ(Øˆ×%Ñ%Ó'Ð)=×)BÑ)BÓ)DÀaÜ—+‘+ô‰ð �A‰J˜& <°¡?Ñ2×9Ñ9Ó;Ñ;ˆØ�g˜a‘jÑ  6§<¡<£>Ñ1ˆÜ×'Ñ'Ø�W˜Q‘Z¨L¸©OÄ5Ç;Á;ôPˆð ˆs�A�s¡˜AÐ4Ð4¨tÐ4Ð4rE   c                 ó¼   — d\  }}t        j                  |||«      }| ||z
  j                  «       z  }t        j                  || |t         j                  ¬«      }||fS )Nrç   ré   )rg   rï   r©   rð   rñ   )rê   rë   Úsizesr  r  r  r	  r
  s           rC   Ú!_make_conv_add_extra_input_tensorr  #  sd   € Ø!'Ñ€[�+Ü�]‰]ØØØó€Fð
 	�˜*Ñ$×+Ñ+Ó-Ñ-€AÜ
×
#Ñ
#Ø	� :´U·\±\ôC€Càˆcˆ6€MrE   c                 óÖ   ‡ ‡— dŠt        ‰ t        «      r6dt        j                  j                  j
                  vrd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )NzrQuantized operations require FBGEMM. FBGEMM is only optimized for CPUs with instruction set support AVX2 or newer.ÚfbgemmTc                  óŒ   •— dt         j                  j                  j                  vrt	        j
                  ‰«      ‚ ‰| i |¤Ž y )Nr  ©rg   ÚbackendsÚ	quantizedÚsupported_enginesÚunittestÚSkipTest©ÚargsÚkwargsÚfnÚreasons     €€rC   ÚwrapperzskipIfNoFBGEMM.<locals>.wrapper7  ó9   ø€ àœ5Ÿ>™>×3Ñ3×EÑEÑEÜ×#Ñ# FÓ+Ð+á�Ð˜ÓrE   ©
rV   Útyperg   r  r  r  Ú__unittest_skip__Ú__unittest_skip_why__Ú	functoolsÚwraps©r%  r'  r&  s   ` @rC   ÚskipIfNoFBGEMMr0  /  sd   ù€ ð B€FÜ�"”dÔØœ5Ÿ>™>×3Ñ3×EÑEÑEØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð
 €NrE   c                 óÖ   ‡ ‡— dŠt        ‰ t        «      r6dt        j                  j                  j
                  vrd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nú%Quantized operations require QNNPACK.ÚqnnpackTc                  óŒ   •— dt         j                  j                  j                  vrt	        j
                  ‰«      ‚ ‰| i |¤Ž y ©Nr3  r  r"  s     €€rC   r'  z skipIfNoQNNPACK.<locals>.wrapperG  s9   ø€ àœEŸN™N×4Ñ4×FÑFÑFÜ×#Ñ# FÓ+Ð+á�Ð˜ÓrE   r)  r/  s   ` @rC   ÚskipIfNoQNNPACKr6  ?  sa   ù€ Ø4€FÜ�"”dÔØœEŸN™N×4Ñ4×FÑFÑFØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð
 €NrE   c                 óÖ   ‡ ‡— dŠt        ‰ t        «      r6dt        j                  j                  j
                  vrd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nr2  r3  Tc                  óÌ   •— dt         j                  j                  j                  vrt	        j
                  ‰«      ‚t        d«      5   ‰| i |¤Ž d d d «       y # 1 sw Y   y xY wr5  )rg   r  r  r  r   r!  r,   r"  s     €€rC   r'  z#withQNNPACKBackend.<locals>.wrapperY  sV   ø€ àœEŸN™N×4Ñ4×FÑFÑFÜ×#Ñ# FÓ+Ð+Ü& yÓ1ñ 	 Ù�Ð˜Ò÷	 ÷ 	 ñ 	 ús   Á	AÁA#r)  r/  s   ` @rC   ÚwithQNNPACKBackendr9  O  sc   ù€ ð 5€FÜ�"”dÔØœEŸN™N×4Ñ4×FÑFÑFØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð €NrE   c                 óÖ   ‡ ‡— dŠt        ‰ t        «      r6dt        j                  j                  j
                  vrd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nz$Quantized operations require ONEDNN.ÚonednnTc                  óŒ   •— dt         j                  j                  j                  vrt	        j
                  ‰«      ‚ ‰| i |¤Ž y )Nr;  r  r"  s     €€rC   r'  zskipIfNoONEDNN.<locals>.wrapperj  r(  rE   r)  r/  s   ` @rC   ÚskipIfNoONEDNNr=  b  sa   ù€ Ø3€FÜ�"”dÔØœ5Ÿ>™>×3Ñ3×EÑEÑEØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð
 €NrE   c                 óÚ   ‡ ‡— dŠt        ‰ t        «      r8t        j                  j                  j                  «       sd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nz*Quantized operations require BF16 support.Tc                  ó�   •— t         j                  j                  j                  «       st	        j
                  ‰«      ‚ ‰| i |¤Ž y rQ   )rg   ÚopsÚmkldnnÚ_is_mkldnn_bf16_supportedr   r!  r"  s     €€rC   r'  z#skipIfNoONEDNNBF16.<locals>.wrapperz  s7   ø€ ä�y‰y×Ñ×9Ñ9Ô;Ü×#Ñ# FÓ+Ð+á�Ð˜ÓrE   )
rV   r*  rg   r@  rA  rB  r+  r,  r-  r.  r/  s   ` @rC   ÚskipIfNoONEDNNBF16rC  r  s_   ù€ Ø9€FÜ�"”dÔÜ�y‰y×Ñ×9Ñ9Ô;Ø#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð
 €NrE   c                 óÖ   ‡ ‡— dŠt        ‰ t        «      r6dt        j                  j                  j
                  vrd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nz!Quantized operations require X86.Úx86Tc                  óŒ   •— dt         j                  j                  j                  vrt	        j
                  ‰«      ‚ ‰| i |¤Ž y )NrE  r  r"  s     €€rC   r'  zskipIfNoX86.<locals>.wrapperŠ  s9   ø€ àœŸ™×0Ñ0×BÑBÑBÜ×#Ñ# FÓ+Ð+á�Ð˜ÓrE   r)  r/  s   ` @rC   ÚskipIfNoX86rG  ‚  sa   ù€ Ø0€FÜ�"”dÔØœŸ™×0Ñ0×BÑBÑBØ#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð
 €NrE   c                 ó²   ‡ ‡— dŠt        ‰ t        «      r$t        j                  «       sd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nzdynamo doesn't support.Tc                  óh   •— t        j                  «       st        j                  ‰«      ‚ ‰| i |¤Ž y rQ   )ÚtorchdynamoÚis_dynamo_supportedr   r!  r"  s     €€rC   r'  z&skipIfNoDynamoSupport.<locals>.wrapperš  s-   ø€ ä×.Ñ.Ô0Ü×#Ñ# FÓ+Ð+á�Ð˜ÓrE   )rV   r*  rJ  rK  r+  r,  r-  r.  r/  s   ` @rC   ÚskipIfNoDynamoSupportrL  ’  sU   ù€ Ø&€FÜ�"”dÔÜ×.Ñ.Ô0Ø#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð
 €NrE   c                 ó²   ‡ ‡— dŠt        ‰ t        «      r$t        j                  «       sd‰ _        ‰‰ _        ‰ S t        j                  ‰ «      ˆ ˆfd„«       }|S )Nzinductor doesn't support.Tc                  óh   •— t        j                  «       st        j                  ‰«      ‚ ‰| i |¤Ž y rQ   )rJ  Úis_inductor_supportedr   r!  r"  s     €€rC   r'  z(skipIfNoInductorSupport.<locals>.wrapperª  s-   ø€ ä×0Ñ0Ô2Ü×#Ñ# FÓ+Ð+á�Ð˜ÓrE   )rV   r*  rJ  rO  r+  r,  r-  r.  r/  s   ` @rC   ÚskipIfNoInductorSupportrP  ¢  sU   ù€ Ø(€FÜ�"”dÔÜ×0Ñ0Ô2Ø#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä‡_�_�RÓô ó ð ð
 €NrE   zno torchvisionc                 ó„   — |r t         j                  j                  | |«      S t         j                  j                  | «      S rQ   )rg   ÚjitÚtraceÚscript)rk   Útracingr‡   s      rC   Úget_script_modulerV  ¹  s-   € Ù+2Œ5�9‰9�?‰?˜5 $Ó'ÐO¼¿	¹	×8HÑ8HÈÓ8OÐOrE   c                 óÈ   — t        j                  | j                  d   dz   f|¬«      }| |dd t        j                  t        j
                  ||¬«      «      }|r|dd S |dd S )z6
    Convert lengths to offsets for embedding_bag
    r   rs   rî   Nr¡   )ÚnpÚzerosÚshaperg   Ú
from_numpyÚcumsum)r¥   Úoffset_typeÚuse_begin_offsetÚtts       rC   Úlengths_to_offsetsr`  ¼  sb   € ô 
�‰�1—7‘7˜1‘: ‘>Ð#¨;Ô	7€BØ€B€q€r€FÜ	×	Ñ	œ"Ÿ)™) B¨kÔ:Ó	;€BÙØ�#�2ˆwˆØˆaˆbˆ6€MrE   c           	      ó  — | j                  «       dk(  sJ ‚| j                  dd«      j                  «       } |dkD  sJ ‚| j                  d   |z  dk(  sJ ‚| j	                  d|«      }t        j                  |«      j                  «       dk(  sJ ‚|j                  dd¬«      }|j                  dd¬«      }d|z  dz
  }d}||z
  j                  d¬«      |z  }t        j                  |«      j                  «       dk(  sJ ‚||d|dz
  z  z  z   }	t        j                  |	«      j                  «       dk(  sJ ‚|j                  |«      j                  |«      j                  «       j                  ||«      }
t        j                  |
«      j                  «       dk(  sJ ‚|
j                  t
        j                   ¬	«      j	                  | j                  «      }
|
j"                  t        j"                  d
«      k7  r9|
d d …d d d…f   dz  |
d d …dd d…f   z  j                  t
        j$                  «      }
|j'                  | j                  d   d«      }|	j'                  | j                  d   d«      }	t        j(                  |j	                  |j+                  d«      |j+                  d«      d«      |	j	                  |	j+                  d«      |	j+                  d«      d«      gd«      j                  dd«      j                  «       }|
|fS )Né   r   rs   r¡   T©Údimr¢   g�íµ ÷Æ°>©Úminrî   re   rè   )rd  Ú	transposeÚ
contiguousrZ  rô   rg   Ú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ÚscalesrY  ÚoutÚscales_and_zeross               rC   Ú_group_quantize_tensorr  È  sž  € Ø�5‰5‹7�aŠ<Ðˆ<Ø	�‰�A�qÓ×$Ñ$Ó&€AØ˜!ÒÐÐØ�7‰7�2‰;˜Ñ%¨Ò*Ð*Ð*à�y‰y˜˜\Ó*€HÜ�;‰;�xÓ ×$Ñ$Ó&¨!Ò+Ð+Ð+à�m‰m ¨4ˆmÓ0€GØ�m‰m ¨4ˆmÓ0€GØ�5‰j˜1‰n€GØ€GØ˜Ñ×&Ñ&¨4Ð&Ó0°7Ñ:€FÜ�;‰;�vÓ×"Ñ"Ó$¨Ò)Ð)Ð)à�f  e¨a¡iÑ 0Ñ1Ñ1€EÜ�;‰;�uÓ×!Ñ!Ó# qÒ(Ð(Ð(à
�,‰,�wÓ
×
#Ñ
# FÓ
+×
1Ñ
1Ó
3×
:Ñ
:¸7ÀGÓ
L€CÜ�;‰;�sÓ×ÑÓ! QÒ&Ð&Ð&à
�&‰&”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Ó>ðð ó	
÷ ‰)�A�q‹/Ÿ*™*›,ð ð Ð Ð Ð rE   c                 ób  — | j                  dd«      j                  «       } | j                  «       dk(  sJ ‚|dkD  sJ ‚| j                  d   |z  dk(  sJ ‚| j	                  d|«      }|j                  «       j                  dd¬«      }t        j                  |j                  «      j                  }d|dz
  z  dz
  }|j                  |¬«      |z  }t        j                  |«      }|j                  t        j                  «      j	                  | j                  d   d«      }|j                  t        j                  «      j	                  | j                  d   d«      }|j	                  dd«      }|j	                  dd«      }d|z  dz
  }|j                  |«      j!                  d«      j                  t        j"                  «      j                  |¬	«      }	|	d d …dd d…f   d
z  |	d d …d d d…f   z  j                  t        j$                  «      }
|j'                  «       j                  «       }|
|fS )Nr   rs   rb  r¡   Trc  re  g      !@)r}   rè   )rg  rh  rd  rZ  rô   Úabsrj  rg   Úfinforì   Úepsrl  Ú
zeros_liker»   Úfloat32rn  ÚaddÚint8rr  Úsqueeze)rt  ru  Ú	groupsizerw  rx  rƒ  rz  r|  rY  Úw_int8Ú	out_uint8r~  s               rC   Ú _group_quantize_tensor_symmetricrŒ  ó  sá  € ð
 	
�‰�A�qÓ×$Ñ$Ó&€AØ�5‰5‹7�aŠ<Ðˆ<Ø�qŠ=Ðˆ=Ø�7‰7�2‰;˜Ñ" aÒ'Ð'Ð'à�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ÐàÐ&Ð&Ð&rE   c                 ó�  — | j                   }| j                  «       } t        j                  t        j                  «      j
                  }t        j                  | d¬«      \  }}t        j                  |t        j                  |«      «      }t        j                  |t        j                  |«      «      }	|j                  }
t        j                  | |	«      }	|	t        ||z
  «      dz  z  }t        j                  ||¬«      j                  | j                   «      }t        j                  |j                  «       t        j                  |
¬«      }| |j!                  d«      z  }t        j"                  |«      }||j!                  d«      z   }t        j                  |||«      j                  |«      }||j                  |«      |fS )Nrs   ©rd  rb  re  )rì   r¾   r¡   )rì   r©   rg   r‚  r…  rƒ  Úaminmaxrf  r„  r}   r¾   rl  r»   rY  r~   Úint64Ú	unsqueezero  )ÚxÚ	quant_minÚ	quant_maxÚtarget_dtypeÚx_dtyperƒ  ry  rx  Úmin_val_negÚmax_val_posr¾   r|  Úzero_pointsÚx_divÚx_roundÚx_zpÚquants                    rC   Ú!_dynamically_quantize_per_channelrž    sb  € ð �g‰g€GØ	�‰‹	€AÜ
�+‰+”e—m‘mÓ
$×
(Ñ
(€Cô —}‘} Q¨AÔ.Ñ€GˆWô —)‘)˜G¤U×%5Ñ%5°gÓ%>Ó?€KÜ—)‘)˜G¤U×%5Ñ%5°gÓ%>Ó?€KØ×Ñ€Fô —)‘)˜[˜L¨+Ó6€KØœE )¨iÑ"7Ó8¸1Ñ<Ñ=€Fä�[‰[˜ SÔ)×,Ñ,¨Q¯W©WÓ5€FÜ—+‘+˜k×.Ñ.Ó0¼¿¹ÈFÔS€Kð �× Ñ  Ó$Ñ$€EÜ�k‰k˜%Ó €GØ�[×*Ñ*¨2Ó.Ñ.€DÜ�K‰K˜˜i¨Ó3×6Ñ6°|ÓD€Eà�&—)‘)˜GÓ$ kÐ1Ð1rE   c            
       óp  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd!d„Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd"d„Zd„ Zd„ Z	 	 d#d„Z	 	 	 d$d„Zd%d„ZerRdeeeeef   f   deeeeeef   eeef   f   f   dededdf
d„Zdeeeeeee f   f   f   ddfd„Z!	 	 	 	 	 	 	 	 	 	 	 d&d„Z"e#jH                  fd „Z%ˆ xZ&S )'ÚQuantizationTestCasec                 óî  •— t         ‰| �  «        t        d«      D �cg c])  }t        j                  ddt        j
                  ¬«      g‘Œ+ c}| _        t        d«      D �cg c]O  }t        j                  ddt        j
                  ¬«      t        j                  dddt        j                  ¬«      g‘ŒQ c}| _	        t        d«      D �cg c]*  }t        j                  dddt        j
                  ¬«      g‘Œ, c}| _
        t        d«      D �cg c]+  }t        j                  ddddt        j
                  ¬«      g‘Œ- c}| _        t        d«      D �cg c],  }t        j                  dddddt        j
                  ¬«      g‘Œ. c}| _        t        d«      D �cg c]P  }t        j                  dddt        j
                  ¬«      t        j                  ddd	t        j                  ¬«      g‘ŒR c}| _        t        d«      D �cg c]Q  }t        j                  ddddt        j
                  ¬«      t        j                  ddd	t        j                  ¬«      g‘ŒS c}| _        t        d«      D �cg c]R  }t        j                  dddddt        j
                  ¬«      t        j                  ddd	t        j                  ¬«      g‘ŒT c}| _        | j                  | j                  | j                  d
œ| _        t"        j$                  t"        j&                  g| _        t"        j*                  t"        j$                  t"        j&                  g| _        y c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )Nrb  r¸   rî   r   rs   )rb  é   rr   rŸ   )rs   rb  r¢  )ÚsuperÚsetUprw   rg   Úrandr©   rl   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)rB   r†   Ú	__class__s     €rC   r¤  zQuantizationTestCase.setUp6  s¬  ø€ Ü‰‰ŒÜJOÐPQË(ÖSÀQœEŸJ™J q¨!´5·;±;Ô?Ò@ÒSˆŒÜw|Ð}~Ówö  AÐrsœEŸJ™J q¨!´5·;±;Ô?ÄÇÁÈqÐRSÐUYÔaf×akÑakÔAlÒmò  AˆŒä%*¨1£Xö/Ø !ô #ŸZ™Z¨¨1¨b¼¿¹ÔDÒEò /ˆÔô &+¨1£Xö/Ø !ô #ŸZ™Z¨¨1¨b°"¼E¿K¹KÔHÒIò /ˆÔô &+¨1£Xö/Ø !ô #ŸZ™Z¨¨1¨a°°A¼U¿[¹[ÔIÒJò /ˆÔô ,1°«8ö"5à&'ô $)§:¡:¨a°°B¼e¿k¹kÔ#JÜ#(§=¡=°°A°tÄ5Ç:Á:Ô#Nò#Pò "5ˆÔô
 ,1°«8ö"5à&'ô $)§:¡:¨a°°B¸Ä%Ç+Á+Ô#NÜ#(§=¡=°°A°tÄ5Ç:Á:Ô#Nò#Pò "5ˆÔô
 ,1°«8ö"5à&'ô $)§:¡:¨a°°A°q¸!Ä5Ç;Á;Ô#OÜ#(§=¡=°°A°tÄ5Ç:Á:Ô#Nò#Pò "5ˆÔð #'×"2Ñ"2Ø"&×"2Ñ"2Ø"&×"2Ñ"2ñ4ˆÔô
 $-×#3Ñ#3´Y·]±]Ð"CˆÔä )× 1Ñ 1´9×3CÑ3CÄYÇ]Á]ÐSˆÕùò3 Tùò Aùò/ùò/ùò/ùò"5ùò"5ùò"5s3   �.MÁ AMÃ	/MÄ0MÅ1M#ÆAM(ÈAM-É-AM2c                 óp   — | j                  t        |d«      «       | j                  t        |d«      «       y)z�Checks the module does not contain child
            modules for quantization preparation, e.g.
            quant, dequant and observer
        r�  ÚdequantN)ÚassertFalseÚhasattr©rB   rá   s     rC   ÚcheckNoPrepModulesz'QuantizationTestCase.checkNoPrepModulesS  s.   € ð
 	×Ñœ ¨Ó1Ô2Ø×Ñœ ¨Ó3Õ4rE   c                 ó†   — | j                  t        |d«      «       |j                  «       D ]  }| j                  |«       Œ y)z3Checks the module does not contain qconfig
        ÚqconfigN)rµ  r¶  ÚchildrenÚcheckNoQconfig)rB   rá   Úchilds      rC   r¼  z#QuantizationTestCase.checkNoQconfig[  s=   € ð 	×Ñœ ¨Ó3Ô4à—_‘_Ó&ò 	'ˆEØ×Ñ Õ&ñ	'rE   c                 ó¦   — | j                  t        |d«      «       | j                  t        |d«      «       | j                  t        |d«      «       y)zˆChecks the module contains child
            modules for quantization preparation, e.g.
            quant, dequant and observer
        rá   r�  r´  N)Ú
assertTruer¶  r·  s     rC   ÚcheckHasPrepModulesz(QuantizationTestCase.checkHasPrepModulesc  s=   € ð
 	�‰œ ¨Ó1Ô2Ø�‰œ ¨Ó0Ô1Ø�‰œ ¨	Ó2Õ3rE   Nc           	      ó  — |€
t        «       }|€i }|j                  di «      }d„ }t        |d«      rÂ|j                  �¶ ||«      r1t	        |t
        j                  j                  «      st        |«      |v st        |«      |j                  «       v rbt	        |t
        j                  j                  j                  «      s4| j                  t        |d«      dt        t        |«      «      z   dz   «       t        |«      t        «       j!                  «       vrst        |«      |j!                  «       vrWt	        |t"        «      sF|j%                  «       D ]2  }t        |«      t        j&                  fv rŒ | j)                  |||«       Œ4 yyyy)zrChecks the module or module's leaf descendants
            have observers in preparation for quantization
        NÚ%float_to_observed_custom_module_classc                 óV   — d}| j                  «       D ]  \  }}|dk7  sŒ|dz  }Œ |dk(  S )Nr   Úactivation_post_processrs   )Únamed_children)rá   Úsubmodule_name_countr�   r†   s       rC   Úis_leaf_modulez;QuantizationTestCase.checkObservers.<locals>.is_leaf_modulew  sE   € Ø#$Ð Ø!×0Ñ0Ó2ò .‘��aØÐ4Ó4Ø(¨AÑ-Ñ(ð.ð (¨1Ñ,Ð,rE   rº  rÄ  zmodule: z do not have observer)r*   Úgetr¶  rº  rV   rg   rÖ   Ú
Sequentialr*  ÚkeysÚaoÚquantizationr   r¿  Ústrr+   Úvaluesr   r»  ÚDropoutÚcheckObservers)rB   rá   Úpropagate_qconfig_listÚprepare_custom_config_dictÚ&float_to_observed_module_class_mappingrÇ  r½  s          rC   rÐ  z#QuantizationTestCase.checkObserversl  sa  € ð "Ð)Ü%IÓ%KÐ"Ø%Ð-Ø)+Ð&Ø1K×1OÑ1OÐPwÐy{Ó1|Ð.ò	-ô �6˜9Ô%¨&¯.©.Ð*DÙ˜FÔ#¬J°v¼u¿x¹x×?RÑ?RÔ,SÜ�V“Ð 6Ñ6Ü�‹<ÐA×FÑFÓHÑHÜ˜&¤%§(¡(×"7Ñ"7×"CÑ"CÔDØ�O‰OœG FÐ,EÓFØ&¬¬T°&«\Ó):Ñ:Ð=TÑTôVô �‹<Ô>Ó@×GÑGÓIÑIÜ�‹<ÐE×LÑLÓNÑNÜ˜&¤,Ô/ØŸ™Ó*ò _�Ü˜“;¤2§:¡: ,Ñ.ØØ×#Ñ# EÐ+AÐC]Õ^ñ_ð 0ð Oð JrE   c                 óÐ   — | j                  t        |j                  «      t        j                  «       | j                  t        |j
                  «      t        j                  «       y)zZChecks that mod has nn.Quantize and
            nn.DeQuantize submodules inserted
        N)ÚassertEqualr*  r�  ÚnnqÚQuantizer´  Ú
DeQuantize©rB   Úmods     rC   ÚcheckQuantDequantz&QuantizationTestCase.checkQuantDequant�  s=   € ð 	×Ñœ˜cŸi™i›¬#¯,©,Ô7Ø×Ñœ˜cŸk™kÓ*¬C¯N©NÕ;rE   c                 óŒ   — | j                  t        |j                  «      t        j                  «       | j                  |«       y)zªChecks that mod has been swapped for an nnq.Linear
            module, the bias is qint32, and that the module
            has Quantize and DeQuantize submodules
        N)rÕ  r*  rá   rÖ  ÚLinearrÛ  rÙ  s     rC   ÚcheckWrappedQuantizedLinearz0QuantizationTestCase.checkWrappedQuantizedLinear–  s/   € ð
 	×Ñœ˜cŸj™jÓ)¬3¯:©:Ô6Ø×Ñ˜sÕ#rE   c                 óV   — | j                  t        |«      t        j                  «       y rQ   )rÕ  r*  rÖ  rÝ  rÙ  s     rC   ÚcheckQuantizedLinearz)QuantizationTestCase.checkQuantizedLinearž  s   € Ø×Ñœ˜c›¤C§J¡JÕ/rE   c                 ó¢   — | j                  t        |«      t        j                  «       | j                  |j                  j
                  |«       y©úcChecks that mod has been swapped for an nnqd.Linear
            module, the bias is float.
        N)rÕ  r*  ÚnnqdrÝ  Ú_packed_paramsrì   ©rB   rÚ  rì   s      rC   ÚcheckDynamicQuantizedLinearz0QuantizationTestCase.checkDynamicQuantizedLinear¡  s8   € ð 	×Ñœ˜c›¤D§K¡KÔ0Ø×Ñ˜×+Ñ+×1Ñ1°5Õ9rE   c                 ó¢   — | j                  t        |«      t        j                  «       | j                  |j                  j
                  |«       yrâ  )rÕ  r*  ÚnniqdÚ
LinearReLUrå  rì   ræ  s      rC   ÚcheckDynamicQuantizedLinearReluz4QuantizationTestCase.checkDynamicQuantizedLinearRelu¨  s:   € ð 	×Ñœ˜c›¤E×$4Ñ$4Ô5Ø×Ñ˜×+Ñ+×1Ñ1°5Õ9rE   c                 óÜ  ‡ — |j                  «       }t        j                  «       }t        j                  ||«       |j                  d«       t        j                  |d¬«      }|j                  |«        ||Ž } ||Ž }ˆ fd„}	 |	||«       t        j                  «       }t        j                  ||«       |j                  d«       t        j                  |d¬«      }
 |
|Ž } |	||«       y )Nr   F)Úweights_onlyc                 ó  •— ‰j                  | d   |d   «       t        | d   t        «      r=‰j                  | d   d   |d   d   «       ‰j                  | d   d   |d   d   «       y ‰j                  | d   |d   «       y )Nr   rs   )rÕ  rV   Útuple)Úref_outÚload_outrB   s     €rC   Úcheck_outputszEQuantizationTestCase.check_eager_serialization.<locals>.check_outputs»  s�   ø€ Ø×Ñ˜W Q™Z¨°!©Ô5Ü˜' !™*¤eÔ,Ø× Ñ  ¨¡¨A¡°¸±¸A±Ô?Ø× Ñ  ¨¡¨A¡°¸±¸A±Õ?à× Ñ  ¨¡¨X°a©[Õ9rE   )Ú
state_dictÚioÚBytesIOrg   ÚsaveÚseekÚloadÚload_state_dict)rB   Ú	ref_modelÚloaded_modelr’  Ú
model_dictr  Úloaded_dictrð  rñ  rò  Úloadeds   `          rC   Úcheck_eager_serializationz.QuantizationTestCase.check_eager_serialization¯  s¾   ø€ à×)Ñ)Ó+ˆ
Ü�J‰J‹LˆÜ�
‰
�:˜qÔ!Ø	�‰ˆqŒ	ä—j‘j °Ô7ˆØ×$Ñ$ [Ô1Ù˜Q�-ˆÙ Ð#ˆô	:ñ 	�g˜xÔ(Ü�J‰J‹LˆÜ�
‰
�9˜aÔ Ø	�‰ˆqŒ	ä—‘˜A¨EÔ2ˆÙ˜1�:ˆÙ�g˜xÕ(rE   c                 óð   — |j                  «       }|j                  «       }| j                  ||j                  «       z  t	        «       «       | j                  ||j                  «       z  t	        «       «       y rQ   )Ú
get_weightÚget_biasrÕ  rÊ  Úset)rB   rú  Úweight_keysÚ	bias_keysÚweightÚbiass         rC   Úcheck_weight_bias_apiz*QuantizationTestCase.check_weight_bias_apiÌ  sX   € Ø×%Ñ%Ó'ˆØ×!Ñ!Ó#ˆØ×Ñ˜ v§{¡{£}Ñ4´c³eÔ<Ø×Ñ˜ T§Y¡Y£[Ñ0´#³%Õ8rE   c                 ó  — t         j                  dt         j                  di}| j                  t	        |«      |«       |j
                  D ]5  }| j                  |j                  j                  «       d   d   ||   «       Œ7 y)zfChecks that mod has been swapped for an nnqd.LSTM type
            module, the bias is float.
        Úquantized_dynamicÚquantized_fp16r   N)rg   rø   Úfloat16rÕ  r*  Ú_all_weight_valuesÚparamÚ__getstate__©rB   rÚ  Úreference_module_typerì   Úwt_dtype_mapÚpacked_paramss         rC   ÚcheckDynamicQuantizedLSTMz.QuantizationTestCase.checkDynamicQuantizedLSTMÒ  sw   € ô Ÿ™Ð%8¼%¿-¹-ÐIYÐZˆØ×Ñœ˜c›Ð$9Ô:Ø ×3Ñ3ò 	\ˆMØ×Ñ˜]×0Ñ0×=Ñ=Ó?ÀÑBÀ1ÑEÀ|ÐTYÑGZÕ[ñ	\rE   c                 ój   — | j                  t        |«      t        j                  j                  «       y rQ   )rÕ  r*  rg   rÖ   rÝ  rÙ  s     rC   ÚcheckLinearz QuantizationTestCase.checkLinearÛ  s   € Ø×Ñœ˜c›¤E§H¡H§O¡OÕ4rE   c                 ó   — t         j                  dt         j                  di}| j                  t	        |«      |«       t        |d«      rE|j                  D ]5  }| j                  |j                  j                  «       d   d   ||   «       Œ7 yy)rã  r
  r  r  r   N)	rg   rø   r  rÕ  r*  r¶  r  r  r  r  s         rC   ÚcheckDynamicQuantizedModulez0QuantizationTestCase.checkDynamicQuantizedModuleÞ  s‡   € ô Ÿ™Ð%8¼%¿-¹-ÐIYÐZˆØ×Ñœ˜c›Ð$9Ô:Ü�3Ð,Ô-Ø!$×!7Ñ!7ò `�Ø× Ñ  ×!4Ñ!4×!AÑ!AÓ!CÀAÑ!FÀqÑ!IÈ<ÐX]ÑK^Õ_ñ`ð .rE   c                 óØ   — t         j                  j                  |«      }| j                  ||||«       t         j                  j	                  ||d   «      }| j                  ||||«       y r“   )rg   rR  rT  Ú_checkScriptablerS  )rB   Úorig_modrl   Úcheck_save_loadÚscriptedÚtraceds         rC   ÚcheckScriptablez$QuantizationTestCase.checkScriptableè  sX   € Ü—9‘9×#Ñ# HÓ-ˆØ×Ñ˜h¨°*¸oÔNô —‘—‘ ¨:°a©=Ó9ˆØ×Ñ˜h¨°
¸OÕLrE   c                 ó  — | j                  |||«       t        j                  «       }t        j                  j                  ||«       |j                  d«       t        j                  j                  |«      }|r| j                  |||«       y y r“   )Ú"_checkModuleCorrectnessAgainstOrigrô  rõ  rg   rR  rö  r÷  rø  )rB   r  Ú
script_modrl   r  ÚbufferÚ
loaded_mods          rC   r  z%QuantizationTestCase._checkScriptableñ  sl   € Ø×/Ñ/°¸*ÀjÔQô —‘“ˆÜ�	‰	�‰�z 6Ô*à�‰�AŒÜ—Y‘Y—^‘^ FÓ+ˆ
ñ Ø×3Ñ3°H¸jÈ*ÕUð rE   c                 óJ   — |D ]  } ||Ž } ||Ž }| j                  ||«       Œ  y rQ   )rÕ  )rB   r  Útest_modrl   rm   Ú
ref_outputÚscripted_outputs          rC   r!  z7QuantizationTestCase._checkModuleCorrectnessAgainstOrigÿ  s3   € Øò 	:ˆCÙ! 3˜ˆJÙ&¨˜nˆOØ×Ñ˜_¨jÕ9ñ	:rE   c
           	      ó  — |rt        dt        |«      «       dt        t        j                  j
                  j                  «      i}
|r|j                  «       }|rd|	€t        n|	i}
t        |||d   «      j                  «       }|rt        d|j                  «       i }i }dD ]`  }|r t        ||
|¬«      ||<    ||   |«      ||<   Œ%t        j                  |«      }t        ||
t        |gd|¬«      ||<    ||   |d   Ž ||<   Œb |r2t        d	|d
   j                  «       t        d|d   j                  «       |rM| j!                  |d
   |d   «       t#        «       j%                  |«      j'                  |d   j                  «       |d   S )NzTesting:r¶   r   zinput graph:)TF)ÚdebugF)rà   r*  zdebug graph:Tznon debug graph:)rº   rÍ  r   rg   r  r  ÚengineÚevalr   rV  Úgraphr   ÚcopyÚdeepcopyr    rn   rÕ  r6   ÚcheckÚrun)rB   rá   ÚinputsÚquantized_oprU  r*  r0  Ú	eval_modeÚdynamicrº  rä   rk   ÚmodelsÚoutputsÚinputs_copys                  rC   ÚcheckGraphModeOpz%QuantizationTestCase.checkGraphModeOp  sˆ  € áÜ�*œc &›kÔ*ØÔ/´·±×0HÑ0H×0OÑ0OÓPÐQˆáØ—[‘[“]ˆFÙØ¸7¸?Õ 7ÐPWÐXˆLÜ! &¨'°6¸!±9Ó=×BÑBÓDˆÙÜ�. %§+¡+Ô.ØˆØˆØ"ò 	;ˆEÙÜ 4°U¸LÐPUÔ V��u‘à!. ¨¡¨vÓ!6�˜’ô #Ÿm™m¨FÓ3�Ü ,Ø˜<Ô):¸[¸MÐSXØô!!��u‘ð "/ ¨¡°°q±	Ð!:�˜’ð	;ñ Ü�. &¨¡,×"4Ñ"4Ô5ÜÐ$ f¨U¡m×&9Ñ&9Ô:áà×Ñ˜W T™]¨G°E©NÔ;ô ‹K×Ñ˜lÓ+ß™˜F 5™M×/Ñ/Ô0à�e‰}ÐrE   c           	      ó<  — i }g }t        |j                  d¬«      «      }|j                  j                  D ]©  }d}	|j                  dk(  s|j                  dk(  r!t        |j                  |j                  «      }	n;|j                  dk(  r,t        |j                  t        ||j                     «      «      }	|	€Œ‚|j                  |	«       |	|v r||	xx   dz  cc<   Œ¥d||	<   Œ« |�#| j                  ||v dt        |«      z   d	z   «       |�©|j                  «       D ]–  \  }}
|
d
k7  ri| j                  ||v dt        |«      z   dz   «       | j                  ||   |
k(  dt        |«      z   dz   t        |
«      z   dz   t        ||   «      z   «       Œt| j                  ||vdt        |«      z   dz   «       Œ˜ |�id
}|D ]   }	|t        |«      k(  r y|	||   k(  sŒ|dz  }Œ" | j                  |t        |«      k(  d| j                  |d¬«      z   dz   t        |«      z   «       yy)a   Check if GraphModule contains the target node
        Args:
            graph_module: the GraphModule instance we want to check
            expected_node, expected_node_occurrence, expected_node_list:
               see docs for checkGraphModeFxOp
        F©Úremove_duplicateNrG   rL   rO   rs   znode:z not found in the graph moduler   zCheck failed for node:z
 not foundz Expected occurrence:z Found occurrence:z! expected no occurrence but foundzCheck failed for graph:)Ú	print_strzExpected ordered list:)ÚdictÚnamed_modulesr-  Únodesr@   r>   rA   r*  rª   r¿  rÍ  Úitemsrò   ÚprintGraphModule)rB   Úgraph_moduleÚexpected_nodeÚexpected_node_occurrenceÚexpected_node_listÚnodes_in_graphÚ	node_listÚmodulesÚnoder˜   Ú
occurrenceÚ	cur_indexs               rC   ÚcheckGraphModuleNodesz*QuantizationTestCase.checkGraphModuleNodes2  sq  € ð ˆØˆ	Ü�|×1Ñ1À5Ð1ÓIÓJˆØ ×&Ñ&×,Ñ,ò 	*ˆDØˆAØ�w‰w˜/Ò)¨T¯W©W¸Ò-EÜ˜TŸW™W d§k¡kÓ2‘Ø—‘˜MÒ)Ü˜TŸW™W¤d¨7°4·;±;Ñ+?Ó&@ÓA�à‰}Ø× Ñ  Ô#Ø˜Ñ&Ø" 1Ó%¨Ñ*Ô%à()�N 1Ò%ð	*ð Ð$Ø�O‰O˜M¨^Ð;¸WÄsÈ=ÓGYÑ=YØ<ñ>=ô >ð $Ð/Ø-E×-KÑ-KÓ-Mò =Ñ)�˜zØ ’?Ø—O‘OØ%¨Ð7Ø0´3°}Ó3EÑEØ$ñ%ô&ð —O‘OØ& }Ñ5¸ÑCØ0´3°}Ó3EÑEØ/ñ0Ü25°j³/ñBà,ñ-ä/2°>À-Ñ3PÓ/QñRõSð —O‘OØ%¨^Ð;Ø0´3°}Ó3EÑEØ;ñ<õ=ð=ð" Ð)ØˆIØò #�Ø¤Ð$6Ó 7Ò7ÙØÐ*¨9Ñ5Ó5Ø ‘N‘Ið	#ð
 �O‰OØœSÐ!3Ó4Ñ4Ø)Ø×%Ñ% l¸eÐ%ÓDñEà(ñ)ô Ð&Ó'ñ(õ)ð *rE   c                 óì  — t        |j                  d¬«      «      }g }|j                  j                  D ]Ÿ  }dj	                  t        t        |j                  |j                  |j                  |j                  |j                  g«      «      }|j                  dk(  r'|dt        t        ||j                     «      «      z   z  }|j                  |«       Œ¡ dj	                  |«      }|rt        |«       |S )NFr;  r[   rO   z module type: ú
)r>  r?  r-  r@  ÚjoinÚmapr\   r@   r�   rA   r#  r$  r*  rª   rº   )rB   rC  r=  rI  Ú
node_infosr˜   Ú	node_infoÚstr_to_prints           rC   rB  z%QuantizationTestCase.printGraphModuler  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 Ó,ˆÙÜ�,ÔØÐrE   Úmatched_subgraph_pairsÚexpected_typesÚgm_aÚgm_bÚreturnc                 ó0  — dt         dt        dt        t        t        f   fd„}| j                  t        |«      t        |«      k(  dt        |«      › dt        |«      › �«       |j                  «       D ]¡  \  }}|\  }}	|\  }
}|	\  }}||   \  }} ||j                  |«      } ||j                  |«      } ||j                  |«      } ||j                  |«      }|
|u xr ||u xr
 ||u xr ||u }| j                  |d|› d|
|||f› d	||||f› �«       Œ£ y
)aÛ  
            Verifies that the types specified in expected_types match
            the underlying objects pointed to by the nodes in matched_subgraph_pairs.

            An example successful test case:

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

            The function tests for key equivalence, and verifies types with
            instance checks.
            rJ  ÚgmrY  c                 óš   — | j                   dk(  r!t        || j                  «      }t        |«      S | j                   dv sJ ‚| j                  S )NrO   )rG   rL   )r@   ÚgetattrrA   r*  )rJ  r[  rÚ  s      rC   Ú_get_underlying_op_typez]QuantizationTestCase.assert_types_for_matched_subgraph_pairs.<locals>._get_underlying_op_type•  sG   € ð —7‘7˜mÒ+Ü! " d§k¡kÓ2�CÜ ›9Ð$àŸ7™7Ð&FÑFÐFÐFØŸ;™;Ð&rE   z-Expected length of results to match, but got ú and zType mismatch at z: expected z, got N)
r4   r5   r9   r7   rÍ  r¿  rò   rA  Ú
start_nodeÚend_node)rB   rU  rV  rW  rX  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                        rC   Ú'assert_types_for_matched_subgraph_pairsz<QuantizationTestCase.assert_types_for_matched_subgraph_pairs�  s„  € ð('Üð'Ü +ð'ä”x¤�}Ñ%ó'ð �O‰OÜÐ*Ó+¬s°>Ó/BÑBØ?ÄÐDZÓ@[Ð?\Ð\aÔbeÐftÓbuÐavÐwôð '×,Ñ,Ó.ò ‘��1Ø56Ñ2Ð Ð"2Ø3CÑ0Ð  .Ø3CÑ0Ð  .Ø)?ÀÑ)BÑ&�
˜Já#:¸:×;PÑ;PÐRVÓ#WÐ Ù#:¸:×;PÑ;PÐRVÓ#WÐ Ù!8¸×9LÑ9LÈdÓ!S�Ù!8¸×9LÑ9LÈdÓ!S�Ø/Ð3CÐCò 7Ø# ~Ð5ò7à%Ð)9Ð9ò7ð $ ~Ð5ð ð —‘ØØ'¨ s¨+Ð7GÈÐYiÐkyÐ6zÐ5{ð |Ø,¨nÐ>NÐP^Ð_Ð`ðbõñrE   Úact_compare_dictc                 ó¸  — |j                  «       D �]F  \  }}|j                  «       D �],  \  }}| j                  t        |«      dk(  d|› d�«       |j                  «       \  }}t	        t        ||   «      «      D �]Ö  }||   |   }	||   |   }
| j                  |	d   |	d   k(  d|› d|› d|› d�«       | j                  t        |	d   «      t        |
d   «      k(  d|› d|› d|› d	�«       |t
        j                  j                  k(  xr d
|	d   v xs d
|
d   v }|�s�t	        t        |	d   «      «      D �]r  }|	d   |   }|
d   |   }t        |t        j                  «      r;| j                  |j                  |j                  k(  d|› d|› d|› d�d|› d�z   «       Œit        |t        «      rE|d   }|d   }| j                  |j                  |j                  k(  d|› d|› d|› d�d|› d�z   «       Œ¾t        |t        «      sJ dt        |«      › �«       ‚t        |«      dk(  sJ ‚t        |d   «      dk(  sJ ‚|d   j                  |d   j                  k(  sJ ‚|d   d   j                  |d   d   j                  k(  sJ ‚|d   d   j                  |d   d   j                  k(  r�ŒsJ ‚ |	d   }|
d   }|	d   }|
d   }|	d   t
        j                  j                  k(  r*| j                  ||k(  «       | j                  ||k(  «       �Œ�|	d   t
        j                   j                  k(  s�Œ¯| j                  ||k7  «       | j                  ||k7  «       �ŒÙ �Œ/ �ŒI y)a  
            Verifies that the act_compare_dict (output of Numeric Suite APIs) is valid:
            1. for each layer, results are recorded for two models
            2. number of seen tensors match
            3. shapes of each pair of seen tensors match
            rb  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_typer[   zhave a shape mismatch at idx rµ   r   zunhandled type rs   Úref_node_nameÚprev_node_nameN)rA  r¿  rò   rÊ  rw   r2   ÚWEIGHTÚvaluerV   rg   ÚTensorrZ  Úlistrï  r*  ÚNODE_OUTPUTÚ
NODE_INPUT)rB   rq  Ú
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                      rC   Úassert_ns_compare_dict_validz1QuantizationTestCase.assert_ns_compare_dict_valid·  sû  € ð 4D×3IÑ3IÓ3Kó >QÑ/�
Ð/Ø/B×/HÑ/HÓ/Jó =QÑ+�K Ø—O‘OÜ˜J›¨1Ñ,Ø   Ð,UÐVôXð 2<·±Ó1BÑ.�L ,Ü#(¬¨Z¸Ñ-EÓ)FÓ#Gó 8Q˜Ø'1°,Ñ'?ÀÑ'H˜Ø'1°,Ñ'?ÀÑ'H˜ØŸ™Ø(¨Ñ0°LÀÑ4HÑHØ$ Z L°°<°.ÀÀlÀ^ÐSnÐoôqð Ÿ™Ü ¨XÑ 6Ó7Ü ¨XÑ 6Ó7ñ8à$ Z L°°<°.ÀÀlÀ^ð  TAð  BôCð (Ô+C×+JÑ+J×+PÑ+PÑPò à (¨LÐ9PÑ,QÐ Qò !RØ (¨LÐ9PÑ,QÐ Qð	 4ò  ;Ü',¬S°¸hÑ1GÓ-HÓ'Ió X Ø+7¸Ñ+AÀ#Ñ+F Ø+7¸Ñ+AÀ#Ñ+F Ü#-¨h¼¿¹Ô#EØ$(§O¡OØ(0¯©¸(¿.¹.Ñ(HØ*0°°¸B¸|¸nÈEÐR^ÐQ_Ð_`Ð(aØ*GÈÀuÈAÐ(Nñ)Oõ%Pô &0°¼$Ô%?Ø/7¸©{ HØ/7¸©{ HØ$(§O¡OØ(0¯©¸(¿.¹.Ñ(HØ*0°°¸B¸|¸nÈEÐR^ÐQ_Ð_`Ð(aØ*GÈÀuÈAÐ(Nñ)Oõ%Pô
 ,6°hÄÔ+Fð %KØ*9¼$¸x».Ð9IÐ(Jó%KÐ+Fä+.¨x«=¸AÒ+=Ð$=Ð+=Ü+.¨x¸©{Ó+;¸qÒ+@Ð$@Ð+@Ø+3°A©;×+<Ñ+<ÀÈÁ×@QÑ@QÒ+QÐ$QÐ+QØ+3°A©;°q©>×+?Ñ+?À8ÈAÁ;ÈqÁ>×CWÑCWÒ+WÐ$WÐ+WØ+3°A©;°q©>×+?Ñ+?À8ÈAÁ;ÈqÁ>×CWÑCWÔ+WÐ$WÐ+Wð-Xð2 +7°Ñ*G˜Ø*6°Ñ*G˜Ø+7Ð8HÑ+IÐ(Ø+7Ð8HÑ+IÐ(Ø'¨Ñ/Ô3K×3WÑ3W×3]Ñ3]Ò]Ø ŸO™O¨OÐ?OÑ,OÔPØ ŸO™O¨OÐ?OÑ,OÖPØ)¨&Ñ1Ô5M×5XÑ5X×5^Ñ5^Ô^Ø ŸO™O¨OÐ?OÑ,OÔPØ ŸO™O¨OÐ?OÑ,OÖPòq8Qò=Qñ>QrE   c                 ó<  — t        |«      t        k(  r|d   }|t        j                  k(  r>t	        t
        j                  j                  j                  «      }|j                  «        n€|t        j                  k(  r>t        t
        j                  j                  j                  «      }|j                  «        n/t        }t        «       j                  |«      }|j                  «        |t        j                  k(  rt         }nt"        }|	�Ft        |	«      t        t$        fv sJ d«       ‚t'        |	t        «      r|	}nt        j(                  |	«      } ||||||¬«      }|t        j*                  k(  s ||Ž  |r8t-        «        t-        d|«       t-        d|«       t-        «        t-        d|«       | j/                  ||
||«       t1        j2                  |«      }t5        t1        j2                  |«      «      }t7        t1        j2                  |«      «      } ||Ž } ||Ž }t1        j2                  |«      }t1        j2                  |«      }|r|n|}|r1t-        «        t-        d|«       | j9                  |«       t-        «        | j/                  ||||«       |||||dœ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*  rz  r   r®  r(   rg   r  r  r+  rx   r­  r'   r,  r   r&   Ú
set_globalr/   r.   r>  rV   Ú	from_dictr°  rº   rM  r.  r/  r0   r1   rB  )rB   rk   r2  Ú
quant_typerD  rE  rF  Ú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                              rC   ÚcheckGraphModeFxOpz'QuantizationTestCase.checkGraphModeFxOp  sE  € ôn �F‹|œtÒ#Ø ™�àœYŸ]™]Ò*Ü"AÄ%Ç.Á.×BZÑBZ×BaÑBaÓ"b�Ø—‘•Øœy×/Ñ/Ò/Ü"=¼e¿n¹n×>VÑ>V×>]Ñ>]Ó"^�Ø—
‘
•ä1�Ü"0Ó"2×"=Ñ"=¸gÓ"F�Ø—
‘
”àœYŸ]™]Ò*Ü(‘ä$�ð #Ð.ÜÐ/Ó0´^ÄTÐ4JÑJð OØNóOÐJäÐ1´>ÔBØ&9‘Oä&4×&>Ñ&>Ð?RÓ&S�OÙØ�Ø%Ø&;Ø-ô	/ˆHð
 ¤×!2Ñ!2Ò2Ù˜&Ñ!áÜ”Ü�o zÔ2ÜÐ)¨5Ô1Ü”ÜÐ)¨8Ô4à×&Ñ&ØÐ/Ø0Ð2LôNô !Ÿ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Ü”Ø×&Ñ&Ø Ð0HÐJ\ô^à -Ø!,Ø+@Ø(.Ø2Bñ	Dð DrE   c	                 ó€  — |r||g}	n|g}	|j                  «       }
t        j                  «       }t        j                  |
|«       |j                  d«       t        j                  |«      }t        j                  j                  j                  }|
D ]{  }t        |
|   t        j                  j                  «      sŒ+t        ||   t        j                  j                  «      sJ ‚ ||
|   «      } |||   «      }| j                  ||«       Œ} |rt        j                  ||dd|¬«      }nt        j                   |||¬«      }| j#                  |||	«       |j%                  |«       | j                   ||j&                  j(                  «       ||j&                  j(                  «      «       | j+                  ||	gd¬«       |r%t        j,                  j                  ||ddd¬«      }n!t        j,                  j!                  ||¬	«      }|r<t/        j0                  |t        j2                  d¬
«      }t5        t6        |¬«      |_        t;        |«        ||	Ž  |r"t        j                  j=                  |«      }d}n!t        j                   j=                  |«      }d} ||	Ž  | j?                  |tA        |«      v «       y )Nr   Tr   )Ú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õ  rg   rö  r÷  rø  r@  r  Úembedding_bag_unpackrV   Ú_CÚScriptObjectrÕ  rÖ  ÚEmbeddingBagÚ	Embeddingrÿ  rù  rå  Ú_packed_weightr  rÖ   r#   Ú	with_argsÚ per_channel_affine_float_qparamsr   r$   rº  rå   Ú
from_floatr¿  rÍ  )rB   Úqembr«  r¬  ÚindicesÚoffsetsÚset_qconfigÚ
is_emb_bagrì   r2  Úemb_dictr  rý  Úembedding_unpackÚkeyÚ
emb_weightÚloaded_weightÚloaded_qembÚfloat_embeddingÚfloat_qparams_observerÚq_embeddingbagÚexpected_names                         rC   ÚcheckEmbeddingSerializationz0QuantizationTestCase.checkEmbeddingSerialization}  sp  € ñ Ø˜wÐ'‰Fà�YˆFØ—?‘?Ó$ˆÜ�J‰J‹LˆÜ�
‰
�8˜QÔØ	�‰ˆqŒ	Ü—j‘j “mˆÜ Ÿ9™9×.Ñ.×CÑCÐàò 	<ˆCÜ˜( 3™-¬¯©×)>Ñ)>Õ?Ü! +¨cÑ"2´E·H±H×4IÑ4IÔJÐJÐJÙ-¨h°s©mÓ<�
Ù 0°¸SÑ1AÓ B�Ø× Ñ  ¨]Õ;ð	<ñ Ü×*Ñ*¸.ÐXeØ?CÈ%ÐW\ô^‰Kô Ÿ-™-°~ÐUbÐjoÔpˆKØ×&Ñ& t¨[¸&ÔAà×#Ñ# KÔ0Ø×ÑÑ)¨$×*=Ñ*=×*LÑ*LÓMÙ)¨+×*DÑ*D×*SÑ*SÓTô	Vð
 	×Ñ˜T F 8¸TÐÔBñ Ü#Ÿh™h×3Ñ3À>ÐanØHLÐafÐmrð 4ó t‰Oô $Ÿh™h×0Ñ0ÀÐ^kÐ0ÓlˆOáÜ%=×%GÑ%GÈeÜPU×PvÑPvØPQô&SÐ"ô '.Ô9WØ5Kô'MˆOÔ#ô 	˜Ô(á˜Ñ ÙÜ ×-Ñ-×8Ñ8¸ÓIˆNØ3‰Mä Ÿ]™]×5Ñ5°oÓFˆNØ0ˆMá˜Ñà�‰˜¬¨^Ó)<Ð<Õ=rE   ©NN©F)FFTTFN)NNN©T)NNNFFNNNNNN)'r^   r_   r`   r¤  r¸  r¼  rÀ  rÐ  rÛ  rÞ  rà  rç  rë  rÿ  r  r  r  r  r  r  r!  r9  rM  rB  ÚHAS_FXr>  rÍ  rï  r3   r7   r5   rp  r8   rŽ  r©  rg   rñ   rÐ  Ú__classcell__©r²  s   @rC   r   r   5  sw  ø„ ôTò:5ò'ò4ó!_òF<ò$ò0ò:ò:ò)ò:9ò\ò5ò`óMòVò:ð SXØLPó*ð\ Ø%)Ø#ó	>)ó@ñ ð4	à$(¨¨e°JÀ
Ð4JÑ.KÐ)KÑ$Lð4	ð !  e¨E°(¸HÐ2DÑ,EÀuÈXÐW_ÐM_ÑG`Ð,`Ñ&aÐ!aÑbð4	ð ð	4	ð
 ð4	ð ó4	ðlH	Qà" 3¨¨S°$°s¸C°x±.Ð-@Ñ(AÐ#AÑBðH	Qð óH	Qð^ #Ø)-Ø#'Ø"Ø!&Ø$(Ø&*Ø15Ø+/Ø&*Ø#óy	Dðz DIÇ<Á<÷?>rE   r   c                   ó’   — e Zd Zdeej
                  j                     fd„Zdej
                  j                  dej                  fd„Z	y)ÚQuantizationLiteTestCaseÚmodel_classc                 óæ   — d}t        |«      5  t        j                  j                  j	                  |«      } |di |¤Ž}t        |t        | j                  g«      }d d d «       |S # 1 sw Y   S xY w)Nr3  rc   )r,   rg   rË  rÌ  r   r%   rn   rl   )rB   rÙ  r$  Úqenginerº  rk   s         rC   Ú_create_quantized_modelz0QuantizationLiteTestCase._create_quantized_model¿  sm   € àˆÜ& wÓ/ñ 	Jä—h‘h×+Ñ+×?Ñ?ÀÓHˆGÙÑ) &Ñ)ˆEÜ˜UÔ$5¸¿¹Ð7HÓIˆE÷		Jð ˆ÷	Jð ˆús   ŽAA&Á&A0rk   Úinputc                 ó”  — d}t        |«      5  t        j                  j                  |«      } ||«      }d}t	        d|dz   «      D ]Î  }	 t        j                  |j                  «       «      }|j                  d«       t        |«      }	 |	|«      }
t        j                  j                  ||
«       |	j                  |«      }t        j                  j                  ||«       |	j                  d|«      }t        j                  j                  ||«        n d d d «       y # t        $ r}||k(  r|‚Y d }~Œïd }~ww xY w# 1 sw Y   y xY w)Nr3  r¸   rs   r   Úforward)r,   rg   rR  rT  rw   rô  rõ  Ú$_save_to_buffer_for_lite_interpreterr÷  r-   ÚtestingÚassert_closerß  Ú
run_methodÚAssertionError)rB   rk   rÝ  rÛ  Úscript_moduleÚscript_module_resultÚ	max_retryÚretryr#  Úmobile_moduleÚmobile_module_resultÚmobile_module_forward_resultÚmobile_module_run_method_resultÚes                 rC   Ú_compare_script_and_mobilez3QuantizationLiteTestCase._compare_script_and_mobileÊ  s3  € ð ˆÜ& wÓ/ñ 	Ü!ŸI™I×,Ñ,¨UÓ3ˆMÙ#0°Ó#7Ð àˆIÜ˜q )¨a¡-Ó0ò �ð!ÜŸZ™Z¨×(ZÑ(ZÓ(\Ó]�FØ—K‘K ”NÜ$>¸vÓ$F�Má+8¸Ó+?Ð(ä—M‘M×.Ñ.Ð/CÐEYÔZØ3@×3HÑ3HÈÓ3OÐ0Ü—M‘M×.Ñ.Ð/CÐEaÔbà6C×6NÑ6NÈyÐZ_Ó6`Ð3Ü—M‘M×.Ñ.Ð/CÐEdÔeñ ð)÷	ð 	øô( &ò !Ø 	Ò)Ø˜ä ûð	!ú÷)	ð 	ús6   Ž<D>ÁC
D!ÄD>Ä!	D;Ä*D6Ä1D>Ä6D;Ä;D>Ä>EN)
r^   r_   r`   r*  rg   rÖ   ÚModulerÜ  ry  rî  rc   rE   rC   rØ  rØ  ¾  s<   „ ð	°4¸¿¹¿¹Ñ3Hó 	ðØ*/¯(©(¯/©/ðà*/¯,©,ôrE   rØ  c                   óö  — e Zd ZdZej
                  j                  j                  ej
                  j                  j                  j                  ej
                  j                  j                  ej
                  j                  j                  j                  ej
                  j                  j                  ej
                  j                  j                  j                  ej
                  j                  j                  ej
                  j                  j                  j                  ej
                  j                  j                  j                  ej
                  j                  j                  j                  ej
                  j                  j                  j                  ej
                  j                  j                  j                  iZ	 	 	 	 	 	 	 dd„Zd	defd„Zd	dej"                  j$                  fd„Zy)
ÚPT2EQuantizationTestCasezE
    Base QuantizationTestCase for PT2 with some helper methods.
    Nc                 ó¸  — t         j                  j                  «        |j                  «       }t	        j
                  |«      }t        d„ t        t        |«      «      D «       «      }t        |||r|nd ¬«      j                  «       }|	rt        ||«      }nt        ||«      }|
rt        d|«        ||Ž  t        |«      }|
rt        d|«        ||Ž }t        }|j!                  «       D ��ci c]  \  }}|j#                  |«      |“Œ }}}|€g }|D �cg c]  }|j#                  |«      ‘Œ }}| j%                  |||¬«       |�r|}t'        «       }t	        j
                  |«      }t)        ||||¬«      } ||Ž  t+        ||¬«      }t        |||r|nd ¬«      j                  «       }i }t,        j.                  j!                  «       D ]!  \  }}||v sŒ||   ||j#                  |«      <   Œ# |�2|j!                  «       D ��ci c]  \  }}|j#                  |«      |“Œ }}}| j%                  ||¬«        ||Ž }| j1                  ||«       |S c c}}w c c}w c c}}w )Nc              3   ól   K  — | ],  }|d k(  r!d t         j                  j                  d«      ind–— Œ. y­w)r   rd  N)rg   ÚexportÚDim)Ú.0Úis     rC   ú	<genexpr>z;PT2EQuantizationTestCase._test_quantizer.<locals>.<genexpr>  s7   è ø€ ò 
àð -.°ªFˆQ”—‘× Ñ  Ó'Ñ(¸Ó<ñ
ùs   ‚24)Údynamic_shapeszprepared model:zquantized model)rE  rF  )r’  )rE  )rg   Ú_dynamor‘   r,  r.  r/  rï  rw   rò   r   rá   r   r   rº   r   r>   rA  rG   rM  r   r.   r   rñ  Ú_MAP_TO_FX_TRACED_OPSrÕ  )rB   rk   r�  Ú	quantizerrE  rF  Úcheck_against_fx_quantÚfx_qconfig_mappingÚexport_with_dynamic_shapeÚis_qatÚis_debug_modeÚtraining_ir_node_occurrenceÚm_eagerÚmrù  Úpt2_quant_outputÚnsr°   rb  Únode_occurrencer˜   rH  rŸ  r’  Úm_copyÚm_fxÚfx_quant_outputs                              rC   Ú_test_quantizerz(PT2EQuantizationTestCase._test_quantizerø  s’  € ô 	�‰×ÑÔØ—*‘*“,ˆô �M‰M˜'Ó"ˆÜñ 
äœ3˜~Ó.Ó/ô
ó 
ˆô  ØØÙ-F™>ÈDô
÷ ‰&‹(ð	 	
ñ Ü   IÓ.‰Aä˜Q 	Ó*ˆAÙÜÐ# QÔ'á	ˆ>ÑÜ˜‹OˆÙÜÐ# QÔ'á˜nÐ-ÐÜˆà/G×/MÑ/MÓ/O÷
Ù'+ q¨!ˆB×Ñ˜QÓ Ñ"ð
ˆñ 
ð Ð%Ø!#ÐØ2DÖE¨Q�R×%Ñ% aÕ(ÐEˆ	ÐEØ×"Ñ"Ø¨ÈIð 	#ô 	
ò "Ø0ˆOÜ:Ó<ˆNÜ—]‘] 7Ó+ˆFÜØ˜¨ÈôˆDñ �.Ñ!Ü6Ø ^ôˆDô 'ØØÙ1J™~ÐPTô÷ ‰f‹hð	 ð
 !ˆOÜ0×FÑF×LÑLÓNò W‘��1ØÐ0Ò0Ø;SÐTUÑ;V�O B×$4Ñ$4°QÓ$7Ò8ðWð +Ð6à7R×7XÑ7XÓ7Z÷#Ù/3¨q°!�B×$Ñ$ QÓ'¨Ñ*ð#�ñ #ð ×&Ñ& tÀoÐ&ÔVÙ" NÐ3ˆOØ×Ñ˜_Ð.>Ô?ØˆùóI
ùò
 Fùó2#s   Ã-IÄIÈ Ir   c                 óÌ   — t         j                  j                  «        t        ||«      j	                  «       }|rt        ||«      }nt        ||«      } ||Ž  t        |«      }|S rQ   )rg   rú  r‘   r   rá   r   r   r   )rB   r  rü  r�  r   s        rC   Ú	_quantizez"PT2EQuantizationTestCase._quantizeJ  sa   € ä�‰×ÑÔäØØó
÷ ‰&‹(ð 	
ñ Ü   IÓ.‰Aä˜Q 	Ó*ˆAÙ	ˆ>ÑÜ˜‹OˆØˆrE   rY  c                 ó  —  G d„ dt         j                  j                  «      }t        «       }t	        |¬«      }|j                  |«       t        j                  dd«      f} |«       j                  «       }| j                  |||«      S )Nc                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú>PT2EQuantizationTestCase._get_pt2e_quantized_linear.<locals>.Mc                 ól   •— t         ‰| �  «        t        j                  j	                  dd«      | _        y ©Nrb  )r£  rD   rg   rÖ   rÝ  Úlinear©rB   r²  s    €rC   rD   zGPT2EQuantizationTestCase._get_pt2e_quantized_linear.<locals>.M.__init__\  s$   ø€ Ü‘Ñ Ô"Ü#Ÿh™hŸo™o¨a°Ó3�•rE   c                 ó$   — | j                  |«      S rQ   )r  ©rB   r’  s     rC   rß  zFPT2EQuantizationTestCase._get_pt2e_quantized_linear.<locals>.M.forward`  s   € Ø—{‘{ 1“~Ð%rE   ©rY  N©r^   r_   r`   rD   rß  rÕ  rÖ  s   @rC   ÚMr  [  s   ø„ õ4ö&rE   r  )Úis_per_channelrb  )	rg   rÖ   rï  r   r   r–  Úrandnr,  r  )rB   r  r  rü  Úoperator_configr�  r  s          rC   Ú_get_pt2e_quantized_linearz3PT2EQuantizationTestCase._get_pt2e_quantized_linearZ  sk   € ô	&”—‘—‘ô 	&ô %Ó&ˆ	Ü;È>ÔZˆØ×Ñ˜_Ô-ÜŸ+™+ a¨Ó+Ð-ˆÙ‹C�H‰H‹JˆØ�~‰~˜a ¨NÓ;Ð;rE   )NFNFFFNrÒ  )r^   r_   r`   ra   rg   r@  Úquantized_decomposedrð   ÚdefaultÚdequantize_per_tensorrõ   Údequantize_per_channelró   rû  r  Úboolr  Úfxr5   r  rc   rE   rC   rñ  rñ  ë  sg  „ ñð 	�	‰	×&Ñ&×:Ñ:¸E¿I¹I×<ZÑ<Z×<nÑ<n×<vÑ<vØ�	‰	×&Ñ&×<Ñ<¸e¿i¹i×>\Ñ>\×>rÑ>r×>zÑ>zØ�	‰	×&Ñ&×;Ñ;¸U¿Y¹Y×=[Ñ=[×=pÑ=p×=xÑ=xØ�	‰	×&Ñ&×=Ñ=¸u¿y¹y×?]Ñ?]×?tÑ?t×?|Ñ?|Ø�	‰	×&Ñ&×:Ñ:×AÑAÀ5Ç9Á9×CaÑCa×CuÑCu×C|ÑC|Ø�	‰	×&Ñ&×<Ñ<×CÑCÀUÇYÁY×EcÑEc×EyÑEy÷  FAñ  FAðÐð  Ø$ØØ"'ØØØ$(óPñd¸dó ñ <À%Ç(Á(×BVÑBVô <rE   rñ  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚSingleLayerLinearModelrY  c                 ó¨   •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        y ©Nr¸   rî   )r£  rD   rg   rÖ   rÝ  r»   r©   Úfc1r  s    €rC   rD   zSingleLayerLinearModel.__init__m  s6   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆ�rE   c                 ó(   — | j                  |«      }|S rQ   ©r(  r  s     rC   rß  zSingleLayerLinearModel.forwardq  ó   € Ø�H‰H�Q‹KˆØˆrE   .c                 ó0   — t        j                  dd«      fS ©Nrs   r¸   ©rg   r¥  rS   s    rC   Úget_example_inputsz)SingleLayerLinearModel.get_example_inputsu  ó   € Ü—
‘
˜1˜aÓ Ð"Ð"rE   r  ©	r^   r_   r`   rD   rß  rï  r8   r/  rÕ  rÖ  s   @rC   r%  r%  l  s!   ø„ õ?òð# E¨#¨s¨(¡O÷ #rE   r%  c                   ó<   ‡ — e Zd Zdˆ fd„	Zd„ Zdeedf   fd„Zˆ xZS )ÚAnnotatedSingleLayerLinearModelc                 ó  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        t        j                  j                  dd«      j                  t        j                  ¬«      «      | _        y r'  )r£  rD   rg   rË  rÌ  r   rº  r   rÖ   rÝ  r»   r©   r(  ©rB   rÛ  r²  s     €rC   rD   z(AnnotatedSingleLayerLinearModel.__init__y  sW   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ó KÓLˆ�rE   c                 ó(   — | j                  |«      }|S rQ   r*  r  s     rC   rß  z'AnnotatedSingleLayerLinearModel.forward~  r+  rE   rY  .c                 ó0   — t        j                  dd«      fS r-  r.  rS   s    rC   r/  z2AnnotatedSingleLayerLinearModel.get_example_inputs‚  r0  rE   ©r  r1  rÖ  s   @rC   r3  r3  x  s"   ø„ õMò
ð# E¨#¨s¨(¡O÷ #rE   r3  c                   ó<   ‡ — e Zd Zdˆ fd„	Zd„ Zdeedf   fd„Zˆ xZS )ÚSingleLayerLinearDynamicModelc                 ó  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        y r'  )r£  rD   rg   rË  rÌ  r   rº  rÖ   rÝ  r»   r©   r(  r5  s     €rC   rD   z&SingleLayerLinearDynamicModel.__init__†  sR   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆ�rE   c                 ó(   — | j                  |«      }|S rQ   r*  r  s     rC   rß  z%SingleLayerLinearDynamicModel.forward‹  r+  rE   rY  .c                 ó0   — t        j                  dd«      fS r-  r.  rS   s    rC   r/  z0SingleLayerLinearDynamicModel.get_example_inputs�  r0  rE   r8  r1  rÖ  s   @rC   r:  r:  …  s!   ø„ õ?ò
ð# E¨#¨s¨(¡O÷ #rE   r:  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearAddModelrY  c                 ó.  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        y ©Nr¸   é   rî   ©	r£  rD   rg   rÖ   rÝ  r»   r©   r(  Úfc2r  s    €rC   rD   zLinearAddModel.__init__“  ó^   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆ�rE   c                 óv   — | j                  |«      }t        j                  |d«      }| j                  |«      }|S ©Nr¸   )r(  rg   r†  rD  r  s     rC   rß  zLinearAddModel.forward˜  s0   € Ø�H‰H�Q‹KˆÜ�I‰I�a˜‹OˆØ�H‰H�Q‹KˆØˆrE   .c                 ó0   — t        j                  dd«      fS r-  r.  rS   s    rC   r/  z!LinearAddModel.get_example_inputsž  r0  rE   r  r1  rÖ  s   @rC   r?  r?  ’  s!   ø„ õ?ò
ð# E¨#¨s¨(¡O÷ #rE   r?  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚRNNDynamicModelc                 óZ  •— t         ‰| �  «        t        | _        |dk(  rCt        j
                  j                  dd«      j                  t        j                  ¬«      | _	        |dk(  rDt        j
                  j                  dd«      j                  t        j                  ¬«      | _	        y y )NÚGRUrb  rî   ÚLSTM)r£  rD   r   rº  rg   rÖ   rL  r»   r©   rÚ  rM  ©rB   Úmod_typer²  s     €rC   rD   zRNNDynamicModel.__init__¢  sz   ø€ Ü‰ÑÔÜ.ˆŒØ�uÒÜ—x‘x—|‘| A qÓ)×,Ñ,´5·;±;Ð,Ó?ˆDŒHØ�vÒÜ—x‘x—}‘} Q¨Ó*×-Ñ-´E·K±KÐ-Ó@ˆD�Hð rE   c                 ó(   — | j                  |«      }|S rQ   ©rÚ  r  s     rC   rß  zRNNDynamicModel.forwardª  r+  rE   r  rÖ  s   @rC   rJ  rJ  ¡  s   ø„ ôAörE   rJ  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚRNNCellDynamicModelc                 ó‚  •— t         ‰| �  «        t        | _        |dk(  rCt        j
                  j                  dd«      j                  t        j                  ¬«      | _	        |dk(  rCt        j
                  j                  dd«      j                  t        j                  ¬«      | _	        |dk(  rEt        j
                  j                  ddd¬«      j                  t        j                  ¬«      | _	        |dk(  rFt        j
                  j                  ddd	¬«      j                  t        j                  ¬«      | _	        y y )
NÚGRUCellrb  rî   ÚLSTMCellÚRNNReLUÚrelu)ÚnonlinearityÚRNNTanhÚtanh)r£  rD   r   rº  rg   rÖ   rU  r»   r©   rÚ  rV  ÚRNNCellrN  s     €rC   rD   zRNNCellDynamicModel.__init__¯  sì   ø€ Ü‰ÑÔÜ.ˆŒØ�yÒ Ü—x‘x×'Ñ'¨¨1Ó-×0Ñ0´u·{±{Ð0ÓCˆDŒHØ�zÒ!Ü—x‘x×(Ñ(¨¨AÓ.×1Ñ1¼¿¹Ð1ÓDˆDŒHØ�yÒ Ü—x‘x×'Ñ'¨¨1¸6Ð'ÓB×EÑEÌEÏKÉKÐEÓXˆDŒHØ�yÒ Ü—x‘x×'Ñ'¨¨1¸6Ð'ÓB×EÑEÌEÏKÉKÐEÓXˆD�Hð !rE   c                 ó(   — | j                  |«      }|S rQ   rQ  r  s     rC   rß  zRNNCellDynamicModel.forward»  r+  rE   r  rÖ  s   @rC   rS  rS  ®  s   ø„ ô
YörE   rS  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚLSTMwithHiddenDynamicModelc                 ó  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        y )Nrb  rî   )r£  rD   rg   rË  rÌ  r   rº  rÖ   rM  r»   r©   Úlstmr5  s     €rC   rD   z#LSTMwithHiddenDynamicModel.__init__À  sR   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H—M‘M ! QÓ'×*Ñ*´·±Ð*Ó=ˆ�	rE   c                 ó4   — | j                  ||«      \  }}||fS rQ   )ra  )rB   r’  Úhids      rC   rß  z"LSTMwithHiddenDynamicModel.forwardÅ  s   € Ø—‘˜1˜cÓ"‰ˆˆ3Ø�#ˆvˆrE   r8  r  rÖ  s   @rC   r_  r_  ¿  s   ø„ õ>ö
rE   r_  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )Ú	ConvModelrY  c                 ó®   •— t         ‰| �  «        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        y ©Nr¢  r¸   F©r  rî   )r£  rD   rg   rÖ   ÚConv2dr»   r©   Úconvr  s    €rC   rD   zConvModel.__init__Ê  s<   ø€ Ü‰ÑÔÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆ�	rE   c                 ó(   — | j                  |«      }|S rQ   ©rj  r  s     rC   rß  zConvModel.forwardÎ  ó   € Ø�I‰I�a‹LˆØˆrE   .c                 ó4   — t        j                  dddd«      fS ©Nrs   r¢  r¸   r.  rS   s    rC   r/  zConvModel.get_example_inputsÒ  ó   € Ü—
‘
˜1˜a  AÓ&Ð(Ð(rE   r  r1  rÖ  s   @rC   re  re  É  s"   ø„ õOòð) E¨#¨s¨(¡O÷ )rE   re  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvTransposeModelrY  c                 ó®   •— t         ‰| �  «        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        y rg  )r£  rD   rg   rÖ   ÚConvTranspose2dr»   r©   rj  r  s    €rC   rD   zConvTransposeModel.__init__Ö  s?   ø€ Ü‰ÑÔÜ—H‘H×,Ñ,¨Q°°1¸5Ð,ÓA×DÑDÌ5Ï;É;ÐDÓWˆ�	rE   c                 ó(   — | j                  |«      }|S rQ   rl  r  s     rC   rß  zConvTransposeModel.forwardÚ  rm  rE   .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  z%ConvTransposeModel.get_example_inputsÞ  rp  rE   r  r1  rÖ  s   @rC   rr  rr  Õ  s"   ø„ õXòð) E¨#¨s¨(¡O÷ )rE   rr  c                   ó:   ‡ — e Zd Zˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚAnnotatedConvModelc                 óF  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        j                  j                  dddd¬«      j                  t        j                  ¬«      | _        t        «       | _        t        «       | _        y rg  )r£  rD   rg   rË  rÌ  r   rº  rÖ   ri  r»   r©   rj  r   r�  r   r´  r5  s     €rC   rD   zAnnotatedConvModel.__init__â  sj   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü“[ˆŒ
Ü"“}ˆ�rE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   ©r�  rj  r´  r  s     rC   rß  zAnnotatedConvModel.forwardé  ó.   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�L‰L˜‹OˆØˆrE   rY  .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  z%AnnotatedConvModel.get_example_inputsï  rp  rE   r1  rÖ  s   @rC   rx  rx  á  ó!   ø„ ô%òð) E¨#¨s¨(¡O÷ )rE   rx  c                   ó:   ‡ — e Zd Zˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚAnnotatedConvTransposeModelc                 óF  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        j                  j                  dddd¬«      j                  t        j                  ¬«      | _        t        «       | _        t        «       | _        y rg  )r£  rD   rg   rË  rÌ  r   rº  rÖ   rt  r»   r©   rj  r   r�  r   r´  r5  s     €rC   rD   z$AnnotatedConvTransposeModel.__init__ó  sm   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H×,Ñ,¨Q°°1¸5Ð,ÓA×DÑDÌ5Ï;É;ÐDÓWˆŒ	Ü“[ˆŒ
Ü"“}ˆ�rE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   r{  r  s     rC   rß  z#AnnotatedConvTransposeModel.forwardú  r|  rE   rY  .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  z.AnnotatedConvTransposeModel.get_example_inputs   rp  rE   r1  rÖ  s   @rC   r€  r€  ò  r~  rE   r€  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvBnModelrY  c                 ó2  •— t         ‰| �  «        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        t        j                  j                  d«      j                  t        j                  ¬«      | _	        y rg  )
r£  rD   rg   rÖ   ri  r»   r©   rj  ÚBatchNorm2dÚbnr  s    €rC   rD   zConvBnModel.__init__  sd   ø€ Ü‰ÑÔÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ó?ˆ�rE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   ©rj  rˆ  r  s     rC   rß  zConvBnModel.forward	  ó!   € Ø�I‰I�a‹LˆØ�G‰G�A‹JˆØˆrE   .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  zConvBnModel.get_example_inputs  rp  rE   r  r1  rÖ  s   @rC   r…  r…    s"   ø„ õ@ò
ð
) E¨#¨s¨(¡O÷ )rE   r…  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚAnnotatedConvBnModelrY  c                 ó„  •— t         ‰| �  «        t        | _        t        j
                  j                  dddd¬«      j                  t        j                  ¬«      | _	        t        j
                  j                  d«      j                  t        j                  ¬«      | _        t        «       | _        t        «       | _        y rg  )r£  rD   r   rº  rg   rÖ   ri  r»   r©   rj  r‡  rˆ  r   r�  r   r´  r  s    €rC   rD   zAnnotatedConvBnModel.__init__  s}   ø€ Ü‰ÑÔÜ&ˆŒÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ó?ˆŒÜ“[ˆŒ
Ü"“}ˆ�rE   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S rQ   )r�  rj  rˆ  r´  r  s     rC   rß  zAnnotatedConvBnModel.forward  s;   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�G‰G�A‹JˆØ�L‰L˜‹OˆØˆrE   .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  z'AnnotatedConvBnModel.get_example_inputs!  rp  rE   r  r1  rÖ  s   @rC   rŽ  rŽ    s!   ø„ õ%òð) E¨#¨s¨(¡O÷ )rE   rŽ  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvBnReLUModelrY  c                 óh  •— t         ‰| �  «        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        t        j                  j                  d«      j                  t        j                  ¬«      | _	        t        j                  d¬«      | _        y ©Nr¢  r¸   Frh  rî   Trß   )r£  rD   rg   rÖ   ri  r»   r©   rj  r‡  rˆ  ÚReLUrX  r  s    €rC   rD   zConvBnReLUModel.__init__%  st   ø€ Ü‰ÑÔÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ó?ˆŒÜ—G‘G DÔ)ˆ�	rE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   ©rj  rˆ  rX  r  s     rC   rß  zConvBnReLUModel.forward+  s.   € Ø�I‰I�a‹LˆØ�G‰G�A‹JˆØ�I‰I�a‹LˆØˆrE   .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  z"ConvBnReLUModel.get_example_inputs1  rp  rE   r  r1  rÖ  s   @rC   r“  r“  $  s!   ø„ õ*òð) E¨#¨s¨(¡O÷ )rE   r“  c                   óB   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zdeedf   fd„Zˆ xZ	S )ÚAnnotatedConvBnReLUModelc                 ó   •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        j                  j                  dddd¬«      j                  t        j                  ¬«      | _        t        j                  j                  d«      j                  t        j                  ¬«      | _        t        j                  d¬«      | _        t!        «       | _        t%        «       | _        y r•  )r£  rD   rg   rË  rÌ  r   rº  rÖ   ri  r»   r©   rj  r‡  rˆ  r–  rX  r   r�  r   r´  r5  s     €rC   rD   z!AnnotatedConvBnReLUModel.__init__5  s¢   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ—H‘H—O‘O A q¨!°%�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü—(‘(×&Ñ& qÓ)×,Ñ,´5·;±;Ð,Ó?ˆŒÜ—G‘G DÔ)ˆŒ	Ü“[ˆŒ
Ü"“}ˆ�rE   c                 ó°   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|S rQ   )r�  rj  rˆ  rX  r´  r  s     rC   rß  z AnnotatedConvBnReLUModel.forward>  sH   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�G‰G�A‹JˆØ�I‰I�a‹LˆØ�L‰L˜‹OˆØˆrE   c                 óÚ   — | j                   r0t        j                  j                  j	                  | g d¢gd¬«       y t        j                  j                  j                  | g d¢gd¬«       y )Nr˜  Trß   ©Útrainingrg   rË  rÌ  Úfuse_modules_qatÚfuse_modulesrS   s    rC   Ú
fuse_modelz#AnnotatedConvBnReLUModel.fuse_modelF  sQ   € à�=Š=Ü�H‰H×!Ñ!×2Ñ2°4Ò:PÐ9QÐ[_Ð2Õ`ä�H‰H×!Ñ!×.Ñ.¨tÒ6LÐ5MÐW[Ð.Õ\rE   rY  .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  z+AnnotatedConvBnReLUModel.get_example_inputsM  rp  rE   r8  )
r^   r_   r`   rD   rß  r£  rï  r8   r/  rÕ  rÖ  s   @rC   r›  r›  4  s'   ø„ õ%òò]ð) E¨#¨s¨(¡O÷ )rE   r›  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚTwoLayerConvModelrY  c                 ó:  •— t         ‰| �  «        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        t        j                  j	                  dddd¬«      j                  t        j                  ¬«      | _        y )Nr¢  r¸   Frh  rî   rs   )	r£  rD   rg   rÖ   ri  r»   r©   Úconv1Úconv2r  s    €rC   rD   zTwoLayerConvModel.__init__Q  sj   ø€ Ü‰ÑÔÜ—X‘X—_‘_ Q¨¨1°5�_Ó9×<Ñ<Ä5Ç;Á;Ð<ÓOˆŒ
Ü—X‘X—_‘_ Q¨¨1°5�_Ó9×<Ñ<Ä5Ç;Á;Ð<ÓOˆ�
rE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   ©r¨  r©  r  s     rC   rß  zTwoLayerConvModel.forwardV  ó!   € Ø�J‰J�q‹MˆØ�J‰J�q‹MˆØˆrE   .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  z$TwoLayerConvModel.get_example_inputs[  rp  rE   r  r1  rÖ  s   @rC   r¦  r¦  P  s"   ø„ õPò
ð
) E¨#¨s¨(¡O÷ )rE   r¦  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚTwoLayerLinearModelrY  c                 ó.  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        y rA  rC  r  s    €rC   rD   zTwoLayerLinearModel.__init___  rE  rE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   ©r(  rD  r  s     rC   rß  zTwoLayerLinearModel.forwardd  ó!   € Ø�H‰H�Q‹KˆØ�H‰H�Q‹KˆØˆrE   .c                 ó0   — t        j                  dd«      fS r-  r.  rS   s    rC   r/  z&TwoLayerLinearModel.get_example_inputsi  r0  rE   r  r1  rÖ  s   @rC   r¯  r¯  ^  s!   ø„ õ?ò
ð
# E¨#¨s¨(¡O÷ #rE   r¯  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearModelWithSubmodulerY  c                 óv   •— t         ‰| �  «        t        «       | _        t	        j
                  dd«      | _        y rG  )r£  rD   r¯  ÚsubmrÖ   rÝ  Úfcr  s    €rC   rD   z!LinearModelWithSubmodule.__init__m  s)   ø€ Ü‰ÑÔÜ'Ó)ˆŒ	Ü—)‘)˜A˜q“/ˆ�rE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   )r¸  r¹  r  s     rC   rß  z LinearModelWithSubmodule.forwardr  r‹  rE   .c                 ó6   — | j                   j                  «       S rQ   )r¸  r/  rS   s    rC   r/  z+LinearModelWithSubmodule.get_example_inputsw  ó   € Ø�y‰y×+Ñ+Ó-Ð-rE   r  r1  rÖ  s   @rC   r¶  r¶  l  s!   ø„ õ"ò
ð
. E¨#¨s¨(¡O÷ .rE   r¶  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚAnnotatedTwoLayerLinearModelrY  c                 ó°  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        t        j                  j	                  dd«      j                  t        j                  ¬«      «      | _	        t        j                  j                  j                  d«      | j                  _        y )Nr¸   rB  rî   r  )r£  rD   rg   rÖ   rÝ  r»   r©   r(  r   rD  rË  rÌ  r   rº  r  s    €rC   rD   z%AnnotatedTwoLayerLinearModel.__init__{  s„   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ó KÓLˆŒÜ Ÿ8™8×0Ñ0×DÑDÀXÓNˆ�‰ÕrE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   r²  r  s     rC   rß  z$AnnotatedTwoLayerLinearModel.forward�  r³  rE   .c                 ó0   — t        j                  dd«      fS r-  r.  rS   s    rC   r/  z/AnnotatedTwoLayerLinearModel.get_example_inputs†  r0  rE   r  r1  rÖ  s   @rC   r¾  r¾  z  s"   ø„ õOòð
# E¨#¨s¨(¡O÷ #rE   r¾  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚActivationsTestModelc                 ó6  •— t         ‰| �  «        t        j                  j                  j                  d«      | _        t        j                  j                  j                  «       | _        t        j                  j                  «       j                  t        j                  ¬«      | _        t        j                  j                  «       j                  t        j                  ¬«      | _        t        j                  j                  j!                  «       | _        y )Nr  rî   )r£  rD   rg   rË  rÌ  r   rº  r   r�  rÖ   Ú	Hardswishr»   r©   Ú	hardswishÚELUÚelur   r´  r  s    €rC   rD   zActivationsTestModel.__init__Š  s§   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓJˆŒÜ—X‘X×*Ñ*×4Ñ4Ó6ˆŒ
ÜŸ™×+Ñ+Ó-×0Ñ0´u·{±{Ð0ÓCˆŒÜ—8‘8—<‘<“>×$Ñ$¬5¯;©;Ð$Ó7ˆŒÜ—x‘x×,Ñ,×8Ñ8Ó:ˆ�rE   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S rQ   )r�  rÆ  rÈ  r´  r  s     rC   rß  zActivationsTestModel.forward’  s<   € Ø�J‰J�q‹MˆØ�N‰N˜1ÓˆØ�H‰H�Q‹KˆØ�L‰L˜‹OˆØˆrE   r  r  rÖ  s   @rC   rÃ  rÃ  ‰  s   ø„ õ;örE   rÃ  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearReluModelrY  c                 óî   •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        y r'  ©
r£  rD   rg   rÖ   rÝ  r»   r©   r¹  r–  rX  r  s    €rC   rD   zLinearReluModel.__init__š  sG   ø€ Ü‰ÑÔÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ó=ˆŒÜ—H‘H—M‘M“Oˆ�	rE   c                 óF   — | j                  | j                  |«      «      }|S rQ   ©rX  r¹  r  s     rC   rß  zLinearReluModel.forwardŸ  ó   € Ø�I‰I�d—g‘g˜a“jÓ!ˆØˆrE   .c                 ó0   — t        j                  dd«      fS r-  r.  rS   s    rC   r/  z"LinearReluModel.get_example_inputs£  r0  rE   r  r1  rÖ  s   @rC   rË  rË  ™  s!   ø„ õ$ò
ð# E¨#¨s¨(¡O÷ #rE   rË  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearReluLinearModelrY  c                 ót  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        t        j                  j	                  dd«      j                  t        j                  ¬«      | _
        y rA  ©r£  rD   rg   rÖ   rÝ  r»   r©   r(  r–  rX  rD  r  s    €rC   rD   zLinearReluLinearModel.__init__¨  óo   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—H‘H—M‘M“OˆŒ	Ü—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆ�rE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   ©r(  rX  rD  r  s     rC   rß  zLinearReluLinearModel.forward®  ó.   € Ø�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØˆrE   .c                 ó0   — t        j                  dd«      fS r-  r.  rS   s    rC   r/  z(LinearReluLinearModel.get_example_inputs´  r0  rE   r  r1  rÖ  s   @rC   rÓ  rÓ  §  s!   ø„ õ?òð# E¨#¨s¨(¡O÷ #rE   rÓ  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearReluAddModelrY  c                 ót  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        t        j                  j	                  dd«      j                  t        j                  ¬«      | _
        y r'  rÕ  r  s    €rC   rD   zLinearReluAddModel.__init__¸  rÖ  rE   c                 óÞ   — | j                  |«      }| j                  |«      }t        j                  |d«      }| j	                  |«      }t        j
                  j                  «       | _        |S rG  ©r(  rX  rg   r†  rD  rÖ   r–  r  s     rC   rß  zLinearReluAddModel.forward¾  óN   € Ø�H‰H�Q‹KˆØ�I‰I�a‹LˆÜ�I‰I�a˜‹OˆØ�H‰H�Q‹KˆÜ—H‘H—M‘M“OˆŒ	ØˆrE   .c                 ó0   — t        j                  dd«      fS r-  r.  rS   s    rC   r/  z%LinearReluAddModel.get_example_inputsÆ  r0  rE   r  r1  rÖ  s   @rC   rÜ  rÜ  ·  s!   ø„ õ?òð# E¨#¨s¨(¡O÷ #rE   rÜ  c                   ó<   ‡ — e Zd Zdˆ fd„	Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearBnLeakyReluModelc                 óÎ   •— t         ‰| �  «        t        j                  dd«      | _        t        j
                  d«      | _        t        j                  d«      | _        || _	        y )Nr¸   g{®Gáz„?)
r£  rD   rÖ   rÝ  r  ÚBatchNorm1dÚbn1dÚ	LeakyReLUÚ
leaky_reluÚwith_bn)rB   ré  r²  s     €rC   rD   zLinearBnLeakyReluModel.__init__Ê  sF   ø€ Ü‰ÑÔÜ—i‘i  1“oˆŒÜ—N‘N 1Ó%ˆŒ	ÜŸ,™, tÓ,ˆŒØˆ�rE   c                 ó„   — | j                  |«      }| j                  r| j                  |«      }| j                  |«      }|S rQ   )r  ré  ræ  rè  r  s     rC   rß  zLinearBnLeakyReluModel.forwardÑ  s6   € Ø�K‰K˜‹NˆØ�<Š<Ø—	‘	˜!“ˆAØ�O‰O˜AÓˆØˆrE   rY  .c                 ó0   — t        j                  dd«      fS r-  r.  rS   s    rC   r/  z)LinearBnLeakyReluModel.get_example_inputsØ  r0  rE   rÓ  r1  rÖ  s   @rC   rã  rã  É  s!   ø„ õòð# E¨#¨s¨(¡O÷ #rE   rã  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚLinearTanhModelrY  c                 óŠ   •— t         ‰| �  «        t        j                  dd«      | _        t        j
                  «       | _        y rG  )r£  rD   rÖ   rÝ  r  ÚTanhr[  r  s    €rC   rD   zLinearTanhModel.__init__Ü  s,   ø€ Ü‰ÑÔÜ—i‘i  1“oˆŒÜ—G‘G“Iˆ�	rE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   )r  r[  r  s     rC   rß  zLinearTanhModel.forwardá  s!   € Ø�K‰K˜‹NˆØ�I‰I�a‹LˆØˆrE   .c                 ó0   — t        j                  dd«      fS r-  r.  rS   s    rC   r/  z"LinearTanhModel.get_example_inputsæ  r0  rE   r  r1  rÖ  s   @rC   rí  rí  Û  s!   ø„ õò
ð
# E¨#¨s¨(¡O÷ #rE   rí  c                   óF   ‡ — e Zd Z	 	 	 	 	 dˆ fd„	Zd„ Zdeedf   fd„Zˆ xZS )ÚConvBnAddReluModelc                 ó>  •— t         ‰| �  «        t        j                  ddd«      | _        t        j                  ddd«      | _        t        j                  d«      | _        t        j                  «       | _	        || _
        || _        || _        || _        || _        y )Nr¸   )rb  rb  )r£  rD   rÖ   ri  rj  r©  r‡  rˆ  r–  rX  ré  Ú	with_reluÚtwo_convÚ	left_convÚuse_torch_add)rB   ré  rõ  r÷  rö  rø  r²  s         €rC   rD   zConvBnAddReluModel.__init__ê  sy   ø€ ô 	‰ÑÔÜ—I‘I˜a  FÓ+ˆŒ	Ü—Y‘Y˜q ! VÓ,ˆŒ
Ü—.‘. Ó#ˆŒÜ—G‘G“IˆŒ	ØˆŒØ"ˆŒØ ˆŒØ"ˆŒØ*ˆÕrE   c                 ó@  — | j                   rø| j                  r‡| j                  rEt        j                  | j                  | j                  |«      «      | j                  |«      «      }�nt        j                  | j                  |«      | j                  |«      «      }�ná| j                  r4| j                  | j                  |«      «      | j                  |«      z   }�n¡| j                  |«      | j                  |«      z   }�n|| j                  rÛ| j                  rh| j                  r6t        j                  | j                  | j                  |«      «      |«      }�n"t        j                  | j                  |«      |«      }nü| j                  r5t        j                  || j                  | j                  |«      «      «      }n»t        j                  || j                  |«      «      }n•| j                  rE| j                  r$| j                  | j                  |«      «      |z   }nY| j                  |«      |z   }nD| j                  r$|| j                  | j                  |«      «      z   }n|| j                  |«      z   }| j                  r| j                  |«      }|S rQ   )rö  rø  ré  rg   r†  rˆ  rj  r©  r÷  rõ  rX  )rB   Úx1Úx2r’  s       rC   rß  zConvBnAddReluModel.forwardû  s¾  € Ø�=Š=Ø×!Ò!Ø—<’<ÜŸ	™	 $§'¡'¨$¯)©)°B«-Ó"8¸$¿*¹*ÀR».ÓI’AäŸ	™	 $§)¡)¨B£-°·±¸B³Ó@’Aà—<’<ØŸ™ §	¡	¨"£Ó.°·±¸B³Ñ?’AàŸ	™	 "›¨¯
©
°2«Ñ6’Aà×!Ò!Ø—>’>Ø—|’|Ü!ŸI™I d§g¡g¨d¯i©i¸«mÓ&<¸bÓAšä!ŸI™I d§i¡i°£m°RÓ8™à—|’|Ü!ŸI™I b¨$¯'©'°$·)±)¸B³-Ó*@ÓA™ä!ŸI™I b¨$¯)©)°B«-Ó8™à—>’>Ø—|’|Ø ŸG™G D§I¡I¨b£MÓ2°RÑ7™à ŸI™I b›M¨BÑ.™à—|’|Ø §¡¨¯©°2«Ó!7Ñ7™à §¡¨2£Ñ.˜Ø�>Š>Ø—	‘	˜!“ˆAØˆrE   rY  .c                 ób   — t        j                  dddd«      t        j                  dddd«      fS )Nrs   r¸   r¢  rb  r.  rS   s    rC   r/  z%ConvBnAddReluModel.get_example_inputs"  s+   € Ü—
‘
˜1˜a  AÓ&¬¯
©
°1°a¸¸AÓ(>Ð?Ð?rE   )TTTTTr1  rÖ  s   @rC   ró  ró  é  s3   ø„ àØØØØ#õ+ò"%ðN@ E¨#¨s¨(¡O÷ @rE   ró  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvReluModelrY  c                 óð   •— t         ‰| �  «        t        j                  j	                  ddd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        y )Nr¢  r¸   rî   )
r£  rD   rg   rÖ   ri  r»   r©   r¹  r–  rX  r  s    €rC   rD   zConvReluModel.__init__'  sI   ø€ Ü‰ÑÔÜ—(‘(—/‘/ ! Q¨Ó*×-Ñ-´E·K±KÐ-Ó@ˆŒÜ—H‘H—M‘M“Oˆ�	rE   c                 óF   — | j                  | j                  |«      «      }|S rQ   rÏ  r  s     rC   rß  zConvReluModel.forward,  rÐ  rE   .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  z ConvReluModel.get_example_inputs0  rp  rE   r  r1  rÖ  s   @rC   rþ  rþ  &  s!   ø„ õ$ò
ð) E¨#¨s¨(¡O÷ )rE   rþ  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvReluConvModelrY  c                 óx  •— t         ‰| �  «        t        j                  j	                  ddd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        t        j                  j	                  ddd«      j                  t        j                  ¬«      | _
        y ©Nr¢  r¸   rî   rs   ©r£  rD   rg   rÖ   ri  r»   r©   r(  r–  rX  rD  r  s    €rC   rD   zConvReluConvModel.__init__5  ós   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 a¨Ó+×.Ñ.´U·[±[Ð.ÓAˆŒÜ—H‘H—M‘M“OˆŒ	Ü—8‘8—?‘? 1 a¨Ó+×.Ñ.´U·[±[Ð.ÓAˆ�rE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   rØ  r  s     rC   rß  zConvReluConvModel.forward;  rÙ  rE   .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  z$ConvReluConvModel.get_example_inputsA  rp  rE   r  r1  rÖ  s   @rC   r  r  4  s"   ø„ õBòð) E¨#¨s¨(¡O÷ )rE   r  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚConvReluAddModelrY  c                 óx  •— t         ‰| �  «        t        j                  j	                  ddd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        t        j                  j	                  ddd«      j                  t        j                  ¬«      | _
        y r  r  r  s    €rC   rD   zConvReluAddModel.__init__F  r  rE   c                 óÞ   — | j                  |«      }| j                  |«      }t        j                  |d«      }| j	                  |«      }t        j
                  j                  «       | _        |S rG  rß  r  s     rC   rß  zConvReluAddModel.forwardL  rà  rE   .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  z#ConvReluAddModel.get_example_inputsT  rp  rE   r  r1  rÖ  s   @rC   r  r  E  s"   ø„ õBòð) E¨#¨s¨(¡O÷ )rE   r  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚNormalizationTestModelc                 ól  •— t         ‰| �  «        t        j                  j                  j                  «       | _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  d«      | _        t        j                  j                  dd«      | _        t        j                  j!                  d«      | _        t        j                  j%                  d«      | _        t        j                  j)                  d«      | _        y )Nr¸   rB  rî   rb  )r£  rD   rg   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    €rC   rD   zNormalizationTestModel.__init__X  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ˆÕrE   c                 óp  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |j	                  d«      j                  ddd«      «      }| j                  |«      }| j                  |j	                  d«      «      }| j                  |j	                  d«      «      }|S )Nr¡   rs   r¢  )	r�  r(  r  r  r‘  Úrepeatr  r  r  r  s     rC   rß  zNormalizationTestModel.forwardb  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ˆØˆrE   r  r  rÖ  s   @rC   r  r  W  s   ø„ õ:örE   r  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚNestedModelc                 óä   •— t         ‰| �  «        t        «       | _        t	        «       | _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        y r'  )r£  rD   rË  Úsub1r¯  Úsub2rg   rÖ   rÝ  r»   r©   Úfc3r  s    €rC   rD   zNestedModel.__init__m  sJ   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü'Ó)ˆŒ	Ü—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆ�rE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   ©r!  r"  r#  r  s     rC   rß  zNestedModel.forwards  ó.   € Ø�I‰I�a‹LˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØˆrE   r  r  rÖ  s   @rC   r  r  l  s   ø„ õ?örE   r  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚAnnotatedNestedModelc                 ó  •— t         ‰| �  «        t        «       | _        t	        «       | _        t        t        j                  j                  dd«      j                  t        j                  ¬«      «      | _        t        | j                  _        t        | j
                  j                  «      | j
                  _        |dk(  r t         | j
                  j                  _        y t        | j
                  j                  _        y )Nr¸   rî   r  )r£  rD   rË  r!  r¯  r"  r   rg   rÖ   rÝ  r»   r©   r#  r   rº  r(  r   r5  s     €rC   rD   zAnnotatedNestedModel.__init__z  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Õ!rE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   r%  r  s     rC   rß  zAnnotatedNestedModel.forward†  r&  rE   r  rÖ  s   @rC   r(  r(  y  s   ø„ ô
4örE   r(  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚAnnotatedSubNestedModelc                 ó\  •— t         ‰| �  «        t        «       | _        t	        t        «       «      | _        t	        t        j                  j                  dd«      j                  t        j                  ¬«      «      | _        t        | j                  _        t        | j                  _        y r'  )r£  rD   rË  r!  r   r¯  r"  rg   rÖ   rÝ  r»   r©   r#  r   rº  r  s    €rC   rD   z AnnotatedSubNestedModel.__init__�  sm   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü Ô!4Ó!6Ó7ˆŒ	Ü¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ó KÓLˆŒÜ*ˆ�‰ÔÜ+ˆ�	‰	ÕrE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   r%  r  s     rC   rß  zAnnotatedSubNestedModel.forward•  r&  rE   r  r  rÖ  s   @rC   r,  r,  Œ  s   ø„ õ,örE   r,  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )Ú AnnotatedCustomConfigNestedModelc                 óÂ  •— t         ‰| �  «        t        «       | _        t	        «       | _        t        t        j                  j                  dd«      j                  t        j                  ¬«      «      | _        t        | j                  _        t        | j
                  _        t        j                  t        j                   dœ}t#        t%        j&                  di |¤Žt(        ¬«      }|| j
                  j*                  _        t        | j
                  j*                  «      | j
                  _        t        | j
                  j,                  «      | j
                  _        y )Nr¸   rî   )rì   r²  r´  rc   )r£  rD   rË  r!  r¯  r"  r   rg   rÖ   rÝ  r»   r©   r#  r   rº  rñ   Úper_tensor_affiner   r   r¾  r   r(  rD  )rB   Úcustom_optionsÚcustom_qconfigr²  s      €rC   rD   z)AnnotatedCustomConfigNestedModel.__init__œ  sá   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü'Ó)ˆŒ	Ü¤§¡§¡°°1Ó 5× 8Ñ 8¼u¿{¹{Ð 8Ó KÓLˆŒÜ*ˆ�‰ÔÜ+ˆ�	‰	Ôô —\‘\Ü×.Ñ.ñ
ˆô !Ô,<×,FÑ,FÑ,XÈÑ,XÜ(?ôAˆà .ˆ�	‰	�‰Ôä$ T§Y¡Y§]¡]Ó3ˆ�	‰	ŒÜ$ T§Y¡Y§]¡]Ó3ˆ�	‰	�rE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   r%  r  s     rC   rß  z(AnnotatedCustomConfigNestedModel.forward¯  r&  rE   r  r  rÖ  s   @rC   r0  r0  ›  s   ø„ õ4ö&rE   r0  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚQuantSubModelc                 óJ  •— t         ‰| �  «        t        «       | _        t	        t        «       «      | _        t        | j                  _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        t        | j                  _        y r'  )r£  rD   rË  r!  r   r¯  r"  r   rº  rg   rÖ   rÝ  r»   r©   r#  r  s    €rC   rD   zQuantSubModel.__init__¶  sh   ø€ Ü‰ÑÔÜ#Ó%ˆŒ	Ü Ô!4Ó!6Ó7ˆŒ	Ü+ˆ�	‰	ÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ*ˆ�‰ÕrE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   r%  r  s     rC   rß  zQuantSubModel.forward¾  r&  rE   r  r  rÖ  s   @rC   r7  r7  µ  s   ø„ õ+örE   r7  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )ÚInnerModulec                 óº  •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        t        j                  j	                  dd«      j                  t        j                  ¬«      | _
        t        j                  j                  «       | _        y rA  )r£  rD   rg   rÖ   rÝ  r»   r©   r(  r–  Úrelu1rD  Úrelu2r  s    €rC   rD   zInnerModule.__init__Å  s€   ø€ Ü‰ÑÔÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—X‘X—]‘]“_ˆŒ
Ü—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—X‘X—]‘]“_ˆ�
rE   c           	      ó~   — | j                  | j                  | j                  | j                  |«      «      «      «      S rQ   )r>  rD  r=  r(  r  s     rC   rß  zInnerModule.forwardÌ  s+   € Ø�z‰z˜$Ÿ(™( 4§:¡:¨d¯h©h°q«kÓ#:Ó;Ó<Ð<rE   c                 ó4  — g }t        | j                  «       «      }t        |«      D ]Š  \  }\  }}t        |t        j
                  j                  «      sŒ.|t        |«      dz
  k\  r nLt        ||dz      d   t        j
                  j                  «      sŒo|j                  |||dz      d   g«       ŒŒ | j                  r-t        j                  j                  j                  | |d¬«       y t        j                  j                  j                  | |d¬«       y )Nrs   r   Trß   )rz  rÅ  r¹   rV   rg   rÖ   rÝ  rò   r–  rª   r   rË  rÌ  r¡  r¢  )rB   Úfusable_layersrÅ  r‡  Úcurrent_nameÚlayers         rC   r¢  zInnerModule.fuse_modulesÏ  sñ   € ØˆÜ˜d×1Ñ1Ó3Ó4ˆÜ*3°NÓ*Cò 	HÑ&ˆCÑ&�, Ü˜%¤§¡§¡Õ1Øœ#˜nÓ-°Ñ1Ò1ÙÜ˜n¨S°1©WÑ5°aÑ8¼%¿(¹(¿-¹-ÕHØ"×)Ñ)¨<Ø+9¸#À¹'Ñ+BÀ1Ñ+Eð+Gõ Hð	Hð �=Š=Ü�H‰H×!Ñ!×2Ñ2°4¸ÐQUÐ2ÕVä�H‰H×!Ñ!×.Ñ.¨t°^ÈTÐ.ÕRrE   r  )r^   r_   r`   rD   rß  r¢  rÕ  rÖ  s   @rC   r;  r;  Ä  s   ø„ õ%ò=öSrE   r;  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalLinearrY  c                 óŠ   •— t         ‰| �  «        t        j                  d«      | _        t        j
                  d«      | _        y )N)r¸   r¸   r¸   )r£  rD   rg   r¥  r  rY  r  r  s    €rC   rD   zFunctionalLinear.__init__à  s-   ø€ Ü‰ÑÔÜ—j‘j Ó(ˆŒÜ—K‘K “Nˆ�	rE   c                 óX   — t        j                  || j                  | j                  «      S rQ   )ÚFr  r  r  r  s     rC   rß  zFunctionalLinear.forwardå  s   € Ü�x‰x˜˜4Ÿ;™;¨¯	©	Ó2Ð2rE   .c                 ó0   — t        j                  dd«      fS r-  r.  rS   s    rC   r/  z#FunctionalLinear.get_example_inputsè  r0  rE   r  r1  rÖ  s   @rC   rE  rE  ß  s!   ø„ õ#ò
3ð# E¨#¨s¨(¡O÷ #rE   rE  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )Ú SingleLayerFunctionalLinearModelrY  c                 ó@   •— t         ‰| �  «        t        «       | _        y rQ   )r£  rD   rE  Úlinear1r  s    €rC   rD   z)SingleLayerFunctionalLinearModel.__init__ì  s   ø€ Ü‰ÑÔÜ'Ó)ˆ�rE   c                 ó(   — | j                  |«      }|S rQ   )rM  r  s     rC   rß  z(SingleLayerFunctionalLinearModel.forwardð  s   € Ø�L‰L˜‹OˆØˆrE   .c                 ó6   — | j                   j                  «       S rQ   ©rM  r/  rS   s    rC   r/  z3SingleLayerFunctionalLinearModel.get_example_inputsô  ó   € Ø�|‰|×.Ñ.Ó0Ð0rE   r  r1  rÖ  s   @rC   rK  rK  ë  s!   ø„ õ*òð1 E¨#¨s¨(¡O÷ 1rE   rK  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚTwoLayerFunctionalLinearModelrY  c                 ó^   •— t         ‰| �  «        t        «       | _        t        «       | _        y rQ   ©r£  rD   rE  rM  Úlinear2r  s    €rC   rD   z&TwoLayerFunctionalLinearModel.__init__ø  ó"   ø€ Ü‰ÑÔÜ'Ó)ˆŒÜ'Ó)ˆ�rE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   )rM  rV  r  s     rC   rß  z%TwoLayerFunctionalLinearModel.forwardý  s!   € Ø�L‰L˜‹OˆØ�L‰L˜‹OˆØˆrE   .c                 ó6   — | j                   j                  «       S rQ   rP  rS   s    rC   r/  z0TwoLayerFunctionalLinearModel.get_example_inputs  rQ  rE   r  r1  rÖ  s   @rC   rS  rS  ÷  s!   ø„ õ*ò
ð
1 E¨#¨s¨(¡O÷ 1rE   rS  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalLinearAddModelrY  c                 ó^   •— t         ‰| �  «        t        «       | _        t        «       | _        y rQ   rU  r  s    €rC   rD   z!FunctionalLinearAddModel.__init__  rW  rE   c                 óv   — | j                  |«      }t        j                  |d«      }| j                  |«      }|S rG  )rM  rg   r†  rV  r  s     rC   rß  z FunctionalLinearAddModel.forward  s0   € Ø�L‰L˜‹OˆÜ�I‰I�a˜‹OˆØ�L‰L˜‹OˆØˆrE   .c                 ó6   — | j                   j                  «       S rQ   rP  rS   s    rC   r/  z+FunctionalLinearAddModel.get_example_inputs  rQ  rE   r  r1  rÖ  s   @rC   r[  r[    s!   ø„ õ*ò
ð1 E¨#¨s¨(¡O÷ 1rE   r[  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalLinearReluModelrY  c                 ó@   •— t         ‰| �  «        t        «       | _        y rQ   )r£  rD   rE  r  r  s    €rC   rD   z"FunctionalLinearReluModel.__init__  s   ø€ Ü‰ÑÔÜ&Ó(ˆ�rE   c                 óR   — | j                  |«      }t        j                  |«      }|S rQ   )r  rH  rX  r  s     rC   rß  z!FunctionalLinearReluModel.forward  s!   € Ø�K‰K˜‹NˆÜ�F‰F�1‹IˆØˆrE   .c                 ó6   — | j                   j                  «       S rQ   )r  r/  rS   s    rC   r/  z,FunctionalLinearReluModel.get_example_inputs  s   € Ø�{‰{×-Ñ-Ó/Ð/rE   r  r1  rÖ  s   @rC   r`  r`    s!   ø„ õ)òð
0 E¨#¨s¨(¡O÷ 0rE   r`  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalLinearReluLinearModelrY  c                 ó�   •— t         ‰| �  «        t        «       | _        t	        j
                  «       | _        t        «       | _        y rQ   )r£  rD   rE  rM  rÖ   r–  rX  rV  r  s    €rC   rD   z(FunctionalLinearReluLinearModel.__init__"  s/   ø€ Ü‰ÑÔÜ'Ó)ˆŒÜ—G‘G“IˆŒ	Ü'Ó)ˆ�rE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   )rM  rX  rV  r  s     rC   rß  z'FunctionalLinearReluLinearModel.forward(  s.   € Ø�L‰L˜‹OˆØ�I‰I�a‹LˆØ�L‰L˜‹OˆØˆrE   .c                 ó6   — | j                   j                  «       S rQ   rP  rS   s    rC   r/  z2FunctionalLinearReluLinearModel.get_example_inputs.  rQ  rE   r  r1  rÖ  s   @rC   re  re  !  s!   ø„ õ*òð1 E¨#¨s¨(¡O÷ 1rE   re  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalConv2drY  c                 óÈ   •— t         ‰| �  «        t        j                  dddd«      | _        t        j                  d«      | _        d| _        d| _        d| _        d| _	        y )Nr¢  ©rs   rs   )r   r   rs   )
r£  rD   rg   r¥  r  r  ÚstrideÚpaddingÚdilationrü   r  s    €rC   rD   zFunctionalConv2d.__init__2  sO   ø€ Ü‰ÑÔÜ—j‘j  A q¨!Ó,ˆŒÜ—J‘J˜q“MˆŒ	ØˆŒØˆŒØˆŒØˆ�rE   c           	      ó°   — t        j                  || j                  | j                  | j                  | j
                  | j                  | j                  «      S rQ   )rH  Úconv2dr  r  rm  rn  ro  rü   r  s     rC   rß  zFunctionalConv2d.forward;  s8   € Ü�x‰x˜˜4Ÿ;™;¨¯	©	°4·;±;ÀÇÁÈdÏmÉmÐ]a×]hÑ]hÓiÐirE   .c                 ó4   — t        j                  dddd«      fS ro  r.  rS   s    rC   r/  z#FunctionalConv2d.get_example_inputs>  rp  rE   r  r1  rÖ  s   @rC   rj  rj  1  s"   ø„ õòjð) E¨#¨s¨(¡O÷ )rE   rj  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚSingleLayerFunctionalConvModelrY  c                 ó@   •— t         ‰| �  «        t        «       | _        y rQ   )r£  rD   rj  r¨  r  s    €rC   rD   z'SingleLayerFunctionalConvModel.__init__B  s   ø€ Ü‰ÑÔÜ%Ó'ˆ�
rE   c                 ó(   — | j                  |«      }|S rQ   )r¨  r  s     rC   rß  z&SingleLayerFunctionalConvModel.forwardF  s   € Ø�J‰J�q‹MˆØˆrE   .c                 ó6   — | j                   j                  «       S rQ   ©r¨  r/  rS   s    rC   r/  z1SingleLayerFunctionalConvModel.get_example_inputsJ  ó   € Ø�z‰z×,Ñ,Ó.Ð.rE   r  r1  rÖ  s   @rC   rt  rt  A  s!   ø„ õ(òð/ E¨#¨s¨(¡O÷ /rE   rt  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚTwoLayerFunctionalConvModelrY  c                 ó^   •— t         ‰| �  «        t        «       | _        t        «       | _        y rQ   )r£  rD   rj  r¨  r©  r  s    €rC   rD   z$TwoLayerFunctionalConvModel.__init__N  s"   ø€ Ü‰ÑÔÜ%Ó'ˆŒ
Ü%Ó'ˆ�
rE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   r«  r  s     rC   rß  z#TwoLayerFunctionalConvModel.forwardS  r¬  rE   .c                 ó6   — | j                   j                  «       S rQ   rx  rS   s    rC   r/  z.TwoLayerFunctionalConvModel.get_example_inputsX  ry  rE   r  r1  rÖ  s   @rC   r{  r{  M  s!   ø„ õ(ò
ð
/ E¨#¨s¨(¡O÷ /rE   r{  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalConvReluModelrY  c                 ó@   •— t         ‰| �  «        t        «       | _        y rQ   )r£  rD   rj  rj  r  s    €rC   rD   z FunctionalConvReluModel.__init__\  s   ø€ Ü‰ÑÔÜ$Ó&ˆ�	rE   c                 óR   — | j                  |«      }t        j                  |«      }|S rQ   )rj  rH  rX  r  s     rC   rß  zFunctionalConvReluModel.forward`  s!   € Ø�I‰I�a‹LˆÜ�F‰F�1‹IˆØˆrE   .c                 ó6   — | j                   j                  «       S rQ   )rj  r/  rS   s    rC   r/  z*FunctionalConvReluModel.get_example_inputse  r¼  rE   r  r1  rÖ  s   @rC   r€  r€  [  s!   ø„ õ'òð
. E¨#¨s¨(¡O÷ .rE   r€  c                   ó<   ‡ — e Zd Zdˆ fd„Zd„ Zdeedf   fd„Zˆ xZS )ÚFunctionalConvReluConvModelrY  c                 ó�   •— t         ‰| �  «        t        «       | _        t	        j
                  «       | _        t        «       | _        y rQ   )r£  rD   rj  r¨  rÖ   r–  rX  r©  r  s    €rC   rD   z$FunctionalConvReluConvModel.__init__i  s/   ø€ Ü‰ÑÔÜ%Ó'ˆŒ
Ü—G‘G“IˆŒ	Ü%Ó'ˆ�
rE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rQ   )r¨  rX  r©  r  s     rC   rß  z#FunctionalConvReluConvModel.forwardo  s.   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�J‰J�q‹MˆØˆrE   .c                 ó6   — | j                   j                  «       S rQ   rx  rS   s    rC   r/  z.FunctionalConvReluConvModel.get_example_inputsu  ry  rE   r  r1  rÖ  s   @rC   r…  r…  h  s!   ø„ õ(òð/ E¨#¨s¨(¡O÷ /rE   r…  c                   ó0   ‡ — e Zd ZdZdˆ fd„Zd„ Zd„ Zˆ xZS )ÚSkipQuantModelúVWe can skip quantization by explicitly
    setting qconfig of a submodule to None
    c                 óÆ   •— t         ‰| �  «        t        «       | _        t        j
                  j                  dd«      j                  t        j                  ¬«      | _	        y r'  )
r£  rD   r;  rm  rg   rÖ   rÝ  r»   r©   r¹  r  s    €rC   rD   zSkipQuantModel.__init__|  s?   ø€ Ü‰ÑÔÜ“=ˆŒÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ó=ˆ�rE   c                 óB   — | j                  | j                  |«      «      S rQ   ©r¹  rm  r  s     rC   rß  zSkipQuantModel.forward�  ó   € Ø�w‰w�t—x‘x “{Ó#Ð#rE   c                 ó8   — | j                   j                  «        y rQ   )rm  r¢  rS   s    rC   r¢  zSkipQuantModel.fuse_modules„  s   € Ø�‰×ÑÕrE   r  ©r^   r_   r`   ra   rD   rß  r¢  rÕ  rÖ  s   @rC   rŠ  rŠ  x  s   ø„ ñõ>ò
$ö rE   rŠ  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚAnnotatedSkipQuantModelr‹  c                 óV  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        t        «       «      | _	        t        j                  j                  dd«      j                  t        j                  ¬«      | _        d | j                  _        y r'  )r£  rD   rg   rË  rÌ  r   rº  r   r;  rm  rÖ   rÝ  r»   r©   r¹  r5  s     €rC   rD   z AnnotatedSkipQuantModel.__init__‹  sk   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓIˆŒÜ¤£Ó.ˆŒÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ó=ˆŒàˆ�‰�rE   c                 óB   — | j                  | j                  |«      «      S rQ   rŽ  r  s     rC   rß  zAnnotatedSkipQuantModel.forward“  r�  rE   c                 óL   — | j                   j                  j                  «        y rQ   )rm  rá   r¢  rS   s    rC   r¢  z$AnnotatedSkipQuantModel.fuse_modules–  s   € Ø�‰�‰×$Ñ$Õ&rE   r‘  rÖ  s   @rC   r“  r“  ‡  s   ø„ ñôò$ö'rE   r“  c                   ó*   ‡ — e Zd ZdZdˆ fd„Zd„ Zˆ xZS )ÚQuantStubModelúBA Module with manually inserted `QuantStub` and `DeQuantStub`
    c                 ó@  •— t         ‰| �  «        t        j                  j                  j                  d«      | _        t        «       | _        t        «       | _
        t        j                  j                  dd«      j                  t        j                  ¬«      | _        y )Nr3  r¸   rî   )r£  rD   rg   rË  rÌ  r   rº  r   r�  r   r´  rÖ   rÝ  r»   r©   r¹  r  s    €rC   rD   zQuantStubModel.__init__œ  sd   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×@Ñ@ÀÓKˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—(‘(—/‘/ ! QÓ'×*Ñ*´·±Ð*Ó=ˆ�rE   c                 óh   — | j                  |«      }| j                  |«      }| j                  |«      S rQ   )r�  r¹  r´  r  s     rC   rß  zQuantStubModel.forward£  s*   € Ø�J‰J�q‹MˆØ�G‰G�A‹JˆØ�|‰|˜A‹ÐrE   r  ©r^   r_   r`   ra   rD   rß  rÕ  rÖ  s   @rC   r˜  r˜  ™  s   ø„ ñõ>örE   r˜  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚManualLinearQATModelr™  c                 óÆ  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        «       | _        t        «       | _
        t        j                  j                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  dd«      j                  t        j                  ¬«      | _        y ©Nr¸   rs   rî   rr   )r£  rD   rg   rË  rÌ  r"   rº  r   r�  r   r´  rÖ   rÝ  r»   r©   r(  rD  r5  s     €rC   rD   zManualLinearQATModel.__init__«  sŒ   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×DÑDÀWÓMˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—8‘8—?‘? 1 bÓ)×,Ñ,´5·;±;Ð,Ó?ˆ�rE   c                 óŠ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      S rQ   )r�  r(  rD  r´  r  s     rC   rß  zManualLinearQATModel.forward³  s7   € Ø�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�H‰H�Q‹KˆØ�|‰|˜A‹ÐrE   rœ  rÖ  s   @rC   rž  rž  ¨  s   ø„ ñô@örE   rž  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚManualDropoutQATModelr™  c                 óˆ  •— t         ‰| �  «        t        j                  j                  j                  |«      | _        t        «       | _        t        «       | _
        t        j                  j                  dd«      j                  t        j                  ¬«      | _        t        j                  j!                  d«      | _        y )Nr¸   rs   rî   ç      à?)r£  rD   rg   rË  rÌ  r"   rº  r   r�  r   r´  rÖ   rÝ  r»   r©   r(  rÏ  Údropoutr5  s     €rC   rD   zManualDropoutQATModel.__init__¼  sz   ø€ Ü‰ÑÔÜ—x‘x×,Ñ,×DÑDÀWÓMˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—x‘x×'Ñ'¨Ó,ˆ�rE   c                 óŠ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      S rQ   )r�  r(  r¦  r´  r  s     rC   rß  zManualDropoutQATModel.forwardÄ  s7   € Ø�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�L‰L˜‹OˆØ�|‰|˜A‹ÐrE   rœ  rÖ  s   @rC   r£  r£  ¹  s   ø„ ñô-örE   r£  c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚManualLinearDynamicQATModelz1A Module that uses a dynamic QAT by default.
    c                 óL  •— t         ‰| �  «        |xs t        | _        t        j
                  j                  dd«      j                  t        j                  ¬«      | _	        t        j
                  j                  dd«      j                  t        j                  ¬«      | _
        y r   )r£  rD   r	   rº  rg   rÖ   rÝ  r»   r©   r(  rD  ©rB   rº  r²  s     €rC   rD   z$ManualLinearDynamicQATModel.__init__Í  sk   ø€ Ü‰ÑÔØÒ=Ô"=ˆŒÜ—8‘8—?‘? 1 aÓ(×+Ñ+´%·+±+Ð+Ó>ˆŒÜ—8‘8—?‘? 1 bÓ)×,Ñ,´5·;±;Ð,Ó?ˆ�rE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   r²  r  s     rC   rß  z#ManualLinearDynamicQATModel.forwardÓ  r³  rE   rQ   rœ  rÖ  s   @rC   r©  r©  Ê  s   ø„ ñõ@örE   r©  c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚManualConvLinearQATModelzpA module with manually inserted `QuantStub` and `DeQuantStub`
    and contains both linear and conv modules
    c                 óX  •— t         ‰| �  «        |r|n(t        j                  j                  j                  d«      | _        t        «       | _        t        «       | _
        t        j                  j                  ddd¬«      j                  t        j                  ¬«      | _        t        j                  j!                  dd«      j                  t        j                  ¬«      | _        t        j                  j!                  dd«      j                  t        j                  ¬«      | _        y )Nr3  r¢  rs   )rý   rî   é@   rr   )r£  rD   rg   rË  rÌ  r"   rº  r   r�  r   r´  rÖ   ri  r»   r©   rj  rÝ  r(  rD  r«  s     €rC   rD   z!ManualConvLinearQATModel.__init__Ü  s½   ø€ Ü‰ÑÔÙ")‘w¬u¯x©x×/DÑ/D×/\Ñ/\Ð]fÓ/gˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—H‘H—O‘O A q°a�OÓ8×;Ñ;Ä%Ç+Á+Ð;ÓNˆŒ	Ü—8‘8—?‘? 2 rÓ*×-Ñ-´E·K±KÐ-Ó@ˆŒÜ—8‘8—?‘? 2 rÓ*×-Ñ-´E·K±KÐ-Ó@ˆ�rE   c                 óì   — | j                  |«      }| j                  |«      }|j                  dd«      j                  «       }| j	                  |«      }| j                  |«      }| j                  |«      S )Nr¡   r°  )r�  rj  r§   rh  r(  rD  r´  r  s     rC   rß  z ManualConvLinearQATModel.forwardå  s\   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�F‰F�2�r‹N×%Ñ%Ó'ˆØ�H‰H�Q‹KˆØ�H‰H�Q‹KˆØ�|‰|˜A‹ÐrE   rQ   rœ  rÖ  s   @rC   r®  r®  Ø  s   ø„ ñõAörE   r®  c                   ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚManualConvLinearSymmQATModelzhSame as ManualConvLinearQATModule but with Symmetric Quantization.
    Supported only with qnnpack.
    c                 ó,   •— t         ‰| �  t        «       y rQ   )r£  rD   r   r  s    €rC   rD   z%ManualConvLinearSymmQATModel.__init__ñ  s   ø€ Ü‰ÑÔ>Õ?rE   r  )r^   r_   r`   ra   rD   rÕ  rÖ  s   @rC   r³  r³  í  s   ø„ ñ÷@ñ @rE   r³  c                   ó‚   ‡ — e Zd Zdˆ fd„Z	 	 ddej
                  deej
                     deej
                     fd„Zˆ xZS )ÚManualEmbeddingBagLinearc                 óT  •— t         ‰| �  «        t        j                  ddd¬«      | _        t
        | j                  _        t        «       | _        t        «       | _
        t        j                  dd«      j                  t        j                  ¬«      | _        t!        d«      | _        y )Nrr   é   r   )r«  r¬  r®  rs   rî   r3  )r£  rD   rÖ   r»  Úembr
   rº  r   r�  r   r´  rÝ  r»   rg   r©   r  r"   r  s    €rC   rD   z!ManualEmbeddingBagLinear.__init__õ  sp   ø€ Ü‰ÑÔÜ—?‘?°"ÀBÈUÔSˆŒÜ8ˆ�‰ÔÜ“[ˆŒ
Ü"“}ˆŒÜ—i‘i  AÓ&×)Ñ)´·±Ð)Ó<ˆŒÜ.¨yÓ9ˆ�rE   rÝ  rÃ  Úper_sample_weightsc                 óŽ   — | j                  |||«      }| j                  |«      }| j                  |«      }| j                  |«      S rQ   )r¹  r�  r  r´  )rB   rÝ  rÃ  rº  r’  s        rC   rß  z ManualEmbeddingBagLinear.forwardþ  s=   € à�H‰H�U˜GÐ%7Ó8ˆØ�J‰J�q‹MˆØ�K‰K˜‹NˆØ�|‰|˜A‹ÐrE   r  rÑ  )	r^   r_   r`   rD   rg   ry  r:   rß  rÕ  rÖ  s   @rC   r¶  r¶  ô  sC   ø„ õ:ð NRØ=Añ˜UŸ\™\ð °H¸U¿\¹\Ñ4Jð Ø$,¨U¯\©\Ñ$:÷rE   r¶  c                   ó\   ‡ — e Zd ZdZdˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚDeFusedEmbeddingBagLineara  A module to simulate QAT embedding bag with a linear layer,
    this module uses a separate embedding and bagging op, similar
    to that which is described in the EmbeddingBag documentation.

    https://pytorch.org/docs/stable/generated/torch.nn.EmbeddingBag.html
    rY  c                 ó|  •— t         ‰| �  «        t        j                  dd¬«      | _        t
        | j                  _        t        j                  | _	        t        «       | _        t        «       | _        t        j                  dd«      j                  t        j                   ¬«      | _        t%        d«      | _        y )Nrr   r¸  r±  rs   rî   r3  )r£  rD   rÖ   r¼  r¹  r
   rº  rg   r   Ú
bagging_opr   r�  r   r´  rÝ  r»   r©   r  r"   r  s    €rC   rD   z"DeFusedEmbeddingBagLinear.__init__	  sy   ø€ Ü‰ÑÔÜ—<‘<¨rÀÔDˆŒÜ8ˆ�‰ÔÜŸ)™)ˆŒÜ“[ˆŒ
Ü"“}ˆŒÜ—i‘i  AÓ&×)Ñ)´·±Ð)Ó<ˆŒÜ.¨yÓ9ˆ�rE   rÝ  c                 ó¬   — | j                  | j                  |«      d¬«      }| j                  |«      }| j                  |«      }| j	                  |«      S ©Nrs   rŽ  )r¿  r¹  r�  r  r´  )rB   rÝ  r’  s      rC   rß  z!DeFusedEmbeddingBagLinear.forward	  sD   € Ø�O‰O˜DŸH™H U›O°ˆOÓ3ˆØ�J‰J�q‹MˆØ�K‰K˜‹NˆØ�|‰|˜A‹ÐrE   r  )	r^   r_   r`   ra   rD   rg   ry  rß  rÕ  rÖ  s   @rC   r½  r½  	  s(   ø„ ñõ:ð˜UŸ\™\ð ¨e¯l©l÷ rE   r½  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚSubModelForFusionc                 ó
  •— t         ‰| �  «        t        j                  dddd ¬«      j	                  t
        j                  ¬«      | _        t        j                  d«      j	                  t
        j                  ¬«      | _	        y )Nrb  rs   rh  rî   )
r£  rD   rÖ   ri  r»   rg   r©   rj  r‡  rˆ  r  s    €rC   rD   zSubModelForFusion.__init__	  sX   ø€ Ü‰ÑÔÜ—I‘I˜a  A¨DÔ1×4Ñ4¼5¿;¹;Ð4ÓGˆŒ	Ü—.‘. Ó#×&Ñ&¬U¯[©[Ð&Ó9ˆ�rE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   rŠ  r  s     rC   rß  zSubModelForFusion.forward"	  r‹  rE   r  r  rÖ  s   @rC   rÃ  rÃ  	  s   ø„ õ:ö
rE   rÃ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚSubModelWithoutFusionc                 ó  •— t         ‰| �  «        t        j                  dddd ¬«      j	                  t
        j                  ¬«      | _        t        j                  d¬«      j	                  t
        j                  ¬«      | _	        y )Nrb  rs   rh  rî   Frß   )
r£  rD   rÖ   ri  r»   rg   r©   rj  r–  rX  r  s    €rC   rD   zSubModelWithoutFusion.__init__)	  sX   ø€ Ü‰ÑÔÜ—I‘I˜a  A¨DÔ1×4Ñ4¼5¿;¹;Ð4ÓGˆŒ	Ü—G‘G EÔ*×-Ñ-´E·K±KÐ-Ó@ˆ�	rE   c                 óB   — | j                  | j                  |«      «      S rQ   )rX  rj  r  s     rC   rß  zSubModelWithoutFusion.forward.	  s   € Ø�y‰y˜Ÿ™ 1›Ó&Ð&rE   r  r  rÖ  s   @rC   rÇ  rÇ  (	  s   ø„ õAö
'rE   rÇ  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚModelForFusionc                 óÚ  •— t         ‰| �  «        t        j                  dddd ¬«      j	                  t
        j                  ¬«      | _        t        j                  d«      j	                  t
        j                  ¬«      | _	        t        j                  d¬«      j	                  t
        j                  ¬«      | _        t        «       | _        t        «       | _        t        j                   dd	«      j	                  t
        j                  ¬«      | _        t%        «       | _        t)        «       | _        || _        t        j.                  ddd
d ¬«      j	                  t
        j                  ¬«      | _        t        j                  d¬«      j	                  t
        j                  ¬«      | _        t        j4                  d«      j	                  t
        j                  ¬«      | _        t        j                  d¬«      j	                  t
        j                  ¬«      | _        t        j:                  ddd«      j	                  t
        j                  ¬«      | _        t        j>                  d«      j	                  t
        j                  ¬«      | _         t        j                  d¬«      j	                  t
        j                  ¬«      | _!        d | j                  _        d | j"                  _        y )Nr¢  rb  rs   rh  rî   Trß   é$   rr   )rs   rs   rs   F)"r£  rD   rÖ   ri  r»   rg   r©   r¨  r‡  Úbn1r–  r=  rÃ  r!  rÇ  r"  rÝ  r¹  r   r�  r   r´  rº  ÚConv3dr©  r>  ÚBatchNorm3dÚbn2Úrelu3ÚConv1dÚconv3rå  Úbn3Úrelu4r«  s     €rC   rD   zModelForFusion.__init__2	  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Ð-Ó@ˆŒ
à ˆ�	‰	ÔØˆ�‰�rE   c                 óÌ  — |j                  d«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|j                  d«      }|j                  d«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|j                  dd«      j                  «       }| j                  |«      }| j                  |«      }| j!                  |«      }| j#                  |«      }| j%                  |«      }| j                  |«      }|S )Nrb  r¡   rÍ  )rˆ  r�  rÔ  rÕ  rÖ  r‘  r¨  rÎ  r=  r!  r´  r"  rô   rh  r¹  r©  r>  rÑ  rÒ  ©rB   r’  Úys      rC   rß  zModelForFusion.forwardH	  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ˆØˆrE   r  rÖ  s   @rC   rË  rË  1	  s   ø„ ôö,rE   rË  c                   ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )Ú
ConvBNReLUc           	      ó¦   •— t         ‰| �  t        j                  ddddd¬«      t        j                  d«      t        j
                  d¬«      «       y )Nr¢  rs   Frh  rß   )r£  rD   rÖ   ri  r‡  r–  r  s    €rC   rD   zConvBNReLU.__init__`	  s<   ø€ Ü‰ÑÜ�I‰I�a˜˜A˜q uÔ-Ü�N‰N˜1ÓÜ�G‰G˜EÔ"õ	
rE   r  )r^   r_   r`   rD   rÕ  rÖ  s   @rC   rÛ  rÛ  _	  s   ø„ ÷
ñ 
rE   rÛ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelWithSequentialFusionc                 óü  •— t         ‰| �  «        t        j                  ddd«      | _        t        j
                  d¬«      | _        t        d«      D �cg c]  }t        «       ‘Œ }}t        j                  |Ž | _
        t        j                  dd«      t        j
                  d¬«      g}t        j                  |Ž | _        t        j                  «       | _        t        «       | _        t!        «       | _        y c c}w )Nr¢  rs   Frß   é,  rr   )r£  rD   rÖ   ri  r¨  r–  r=  rw   rÛ  rÉ  ÚfeaturesrÝ  Ú
classifierÚseqr   r�  r   r´  )rB   r†   ÚlayersÚheadr²  s       €rC   rD   z"ModelWithSequentialFusion.__init__h	  s­   ø€ Ü‰ÑÔÜ—Y‘Y˜q ! QÓ'ˆŒ
Ü—W‘W UÔ+ˆŒ
Ü(-¨a«Ö1 1”*•,Ð1ˆÐ1ÜŸ™ vÐ.ˆŒÜ—	‘	˜#˜rÓ"¤B§G¡G°EÔ$:Ð;ˆÜŸ-™-¨Ð.ˆŒÜ—=‘=“?ˆŒÜ“[ˆŒ
Ü"“}ˆ�ùò 2s   ÁC9c                 ó   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }t	        j
                  |d«      }| j                  |«      }| j                  |«      }| j                  |«      }|S )N)r¡   rà  )	r�  r¨  r=  rá  rg   rô   râ  rã  r´  r  s     rC   rß  z!ModelWithSequentialFusion.forwardt	  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ˆØˆrE   r  r  rÖ  s   @rC   rÞ  rÞ  g	  s   ø„ õ
%ö	rE   rÞ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelForFusionWithBiasc                 ó   •— t         ‰| �  «        t        j                  dddd¬«      j	                  t
        j                  ¬«      | _        t        j                  d«      j	                  t
        j                  ¬«      | _	        t        j                  d¬«      j	                  t
        j                  ¬«      | _        t        j                  dddd¬«      j	                  t
        j                  ¬«      | _        t        j                  d«      j	                  t
        j                  ¬«      | _        t        «       | _        t!        «       | _        y )	Nr¢  rb  r¸   Trh  rî   rß   rs   )r£  rD   rÖ   ri  r»   rg   r©   r¨  r‡  rÎ  r–  r=  r©  rÑ  r   r�  r   r´  r  s    €rC   rD   zModelForFusionWithBias.__init__€	  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Ð'Ó:ˆŒÜ“[ˆŒ
Ü"“}ˆ�rE   c                 óô   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }| j                  |«      }|S rQ   )r�  r¨  rÎ  r=  r©  rÑ  r´  r  s     rC   rß  zModelForFusionWithBias.forwardŠ	  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ˆØˆrE   r  r  rÖ  s   @rC   rè  rè  	  s   ø„ õ%örE   rè  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelForLinearBNFusionc                 óX  •— t         ‰| �  «        t        j                  dd«      | _        t        j
                  d«      | _        t        j                  j                  | j                  j                  «       t        j                  j                  | j                  j                  «       y )Né   rr   )r£  rD   rÖ   rÝ  r¹  rå  rˆ  ÚinitÚuniform_r  r  r  s    €rC   rD   zModelForLinearBNFusion.__init__•	  sd   ø€ Ü‰ÑÔÜ—)‘)˜B Ó#ˆŒÜ—.‘. Ó$ˆŒÜ
�‰×Ñ˜Ÿ™Ÿ™Ô(Ü
�‰×Ñ˜Ÿ™Ÿ™Õ&rE   c                 óB   — | j                  | j                  |«      «      S rQ   )rˆ  r¹  r  s     rC   rß  zModelForLinearBNFusion.forwardœ	  s   € Ø�w‰w�t—w‘w˜q“zÓ"Ð"rE   r  r  rÖ  s   @rC   rì  rì  ”	  s   ø„ õ'ö#rE   rì  c                   ó   — e Zd Zd„ Zd„ Zy)ÚDummyObserverc                  ó   — y)N)g      ð?r   rc   rS   s    rC   Úcalculate_qparamszDummyObserver.calculate_qparams 	  s   € ØrE   c                 ó   — |S rQ   rc   r  s     rC   rß  zDummyObserver.forward£	  s   € ØˆrE   N)r^   r_   r`   rõ  rß  rc   rE   rC   ró  ró  Ÿ	  s   „ òórE   ró  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelForConvTransposeBNFusionc                 óf  •— t         ‰| �  «        t        j                  ddd«      | _        t        j
                  d«      | _        t        j                  ddd«      | _        t        j                  d«      | _
        t        j                  ddd«      | _        t        j                  d«      | _        y )Nr¢  rs   )r£  rD   rÖ   ÚConvTranspose1dr¨  rå  rÎ  rt  r©  r‡  rÑ  ÚConvTranspose3drÔ  rÐ  rÕ  r  s    €rC   rD   z&ModelForConvTransposeBNFusion.__init__¨	  s€   ø€ Ü‰ÑÔÜ×'Ñ'¨¨1¨aÓ0ˆŒ
Ü—>‘> !Ó$ˆŒÜ×'Ñ'¨¨1¨aÓ0ˆŒ
Ü—>‘> !Ó$ˆŒÜ×'Ñ'¨¨1¨aÓ0ˆŒ
Ü—>‘> !Ó$ˆ�rE   c                 ó  — | j                  |«      }| j                  |«      }|j                  d«      }| j                  |«      }| j	                  |«      }|j                  d«      }| j                  |«      }| j                  |«      }|S r  )r¨  rÎ  r‘  r©  rÑ  rÔ  rÕ  r  s     rC   rß  z%ModelForConvTransposeBNFusion.forward±	  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ˆØˆrE   r  r  rÖ  s   @rC   rø  rø  §	  s   ø„ õ%ö	rE   rø  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelWithFunctionalsc                 óê   •— t         ‰| �  «        t        j                  «       | _        t        j                  «       | _        t        j                  «       | _        t        j                  «       | _        y rQ   )r£  rD   rÖ  ÚFloatFunctionalÚmycatÚmyaddÚ
myadd_reluÚmymatmulr  s    €rC   rD   zModelWithFunctionals.__init__¾	  sN   ø€ Ü‰ÑÔÜ×(Ñ(Ó*ˆŒ
Ü×(Ñ(Ó*ˆŒ
Ü×-Ñ-Ó/ˆŒÜ×+Ñ+Ó-ˆ�rE   c                 óþ   — | j                   j                  |||g«      }| j                  j                  ||«      }| j                  j                  ||«      }| j                  j                  ||j                  «      }|S rQ   )	r  rs  r  r†  r  Úadd_relur  ÚmatmulÚT)rB   r’  rÙ  Úzrt  Úus         rC   rß  zModelWithFunctionals.forwardÉ	  se   € Ø�J‰J�N‰N˜A˜q !˜9Ó%ˆØ�J‰J�N‰N˜1˜aÓ ˆØ�O‰O×$Ñ$ Q¨Ó*ˆØ�M‰M× Ñ   A§C¡CÓ(ˆð
 ˆrE   r  r  rÖ  s   @rC   rþ  rþ  ½	  s   ø„ õ.ö	rE   rþ  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )Ú
ResNetBasec                 ó
  •— t         ‰| �  «        t        j                  }d}t        j                  ||dd¬«      | _         ||«      | _        t        j                  «       | _        t        j                  «       | _	        t        j                  j                  «       | _        t        j                  j                  «       | _        t        j                   d«      | _        t        j                  j%                  |d«      | _        y )Nr¢  rl  Frh  rs   )r£  rD   rÖ   r‡  ri  r¨  rÎ  r–  r=  r>  rg   ÚIdentityÚ
downsampler  r   ÚmyopÚAdaptiveAvgPool2dÚavgpoolrÝ  r¹  ©rB   Ú
norm_layerÚinplanesr²  s      €rC   rD   zResNetBase.__init__Ö	  s¨   ø€ Ü‰ÑÔÜ—^‘^ˆ
ØˆÜ—Y‘Y˜x¨°6ÀÔFˆŒ
Ù˜hÓ'ˆŒÜ—W‘W“YˆŒ
Ü—W‘W“YˆŒ
ÜŸ(™(×+Ñ+Ó-ˆŒÜ—L‘L×0Ñ0Ó2ˆŒ	Ü×+Ñ+¨FÓ3ˆŒÜ—(‘(—/‘/ (¨AÓ.ˆ�rE   c                 óX  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  j                  ||«      }| j                  |«      }| j                  |«      }t        j                  |d«      }| j                  |«      }|S )Nrs   )r¨  rÎ  r=  r  r  r†  r>  r  rg   Úflattenr¹  ©rB   r’  r}  Úidentitys       rC   rß  zResNetBase.forwardã	  sˆ   € Ø�j‰j˜‹mˆØ�h‰h�s‹mˆØ�j‰j˜‹oˆØ—?‘? 1Ó%ˆØ�i‰i�m‰m˜C Ó*ˆØ�j‰j˜‹oˆØ�l‰l˜3ÓˆÜ�m‰m˜C Ó#ˆØ�g‰g�c‹lˆØˆ
rE   c                 óÚ   — | j                   r0t        j                  j                  j	                  | g d¢gd¬«       y t        j                  j                  j                  | g d¢gd¬«       y )N)r¨  rÎ  r=  Trß   rŸ  rS   s    rC   r£  zResNetBase.fuse_modelï	  sQ   € à�=Š=Ü�H‰H×!Ñ!×2Ñ2°4Ò:SÐ9TÐ^bÐ2Õcä�H‰H×!Ñ!×.Ñ.¨tÒ6OÐ5PÐZ^Ð.Õ_rE   r  )r^   r_   r`   rD   rß  r£  rÕ  rÖ  s   @rC   r  r  Õ	  s   ø„ õ/ò
ö`rE   r  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelMultipleOpsc                 óx  •— t         ‰| �  «        t        j                  }d}t        j                  ||dd¬«      | _        t        j                  ||dd¬«      | _         ||«      | _        t        j                  «       | _	        t        j                  «       | _
        t        j                  j                  «       | _        t        j                  j                  «       | _        t        j                  j                  «       | _        t        j$                  d«      | _        t        j(                  dd«      | _        y ©Nr¢  rl  Frh  )rè   rè   r¸  é   )r£  rD   rÖ   r‡  ri  r¨  r©  rÎ  r–  r=  r>  rg   r  r  r  r   Úskip_addrs  r  r  rÝ  r¹  r  s      €rC   rD   zModelMultipleOps.__init__÷	  sÎ   ø€ Ü‰ÑÔÜ—^‘^ˆ
ØˆÜ—Y‘Y˜x¨°6ÀÔFˆŒ
Ü—Y‘Y˜x¨°6ÀÔFˆŒ
Ù˜hÓ'ˆŒÜ—W‘W“YˆŒ
Ü—W‘W“YˆŒ
ÜŸ(™(×+Ñ+Ó-ˆŒÜŸ™×4Ñ4Ó6ˆŒÜ—<‘<×/Ñ/Ó1ˆŒÜ×+Ñ+¨FÓ3ˆŒÜ—)‘)˜B Ó"ˆ�rE   c                 ó  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  j                  ||«      }| j                  |«      }| j                  |«      }| j                  |«      }t        j                  j                  j                  |dd«      }| j                  j                  ||g«      }|j                  dd«      }| j                  |«      }|S ©Nrb  r¡   r¸  )r¨  rÎ  r=  r  r   r†  r>  r  r©  rg   rÖ   Ú
functionalÚ
max_pool2drs  rô   r¹  r  s       rC   rß  zModelMultipleOps.forward
  sË   € Ø�j‰j˜‹mˆØ�h‰h�s‹mˆØ�j‰j˜‹oˆØ—?‘? 1Ó%ˆØ�m‰m×Ñ  XÓ.ˆØ�j‰j˜‹oˆØ�l‰l˜3ÓˆØ�j‰j˜‹oˆÜ�h‰h×!Ñ!×,Ñ,¨S°!°QÓ7ˆØ�h‰h�l‰l˜C ˜:Ó&ˆØ�k‰k˜"˜iÓ(ˆØ�g‰g�c‹lˆØˆ
rE   r  r  rÖ  s   @rC   r  r  ö	  s   ø„ õ#örE   r  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚModelMultipleOpsNoAvgPoolc                 ó2  •— t         ‰| �  «        t        j                  }d}t        j                  ||dd¬«      | _        t        j                  ||dd¬«      | _         ||«      | _        t        j                  «       | _	        t        j                  «       | _
        t        j                  j                  «       | _        t        j                  j                  «       | _        t        j                  d«      | _        t        j"                  dd«      | _        y r  )r£  rD   rÖ   r‡  ri  r¨  r©  rÎ  r–  r=  r>  r  r   r   rs  Ú	MaxPool2dÚmaxpoolrÝ  r¹  r  s      €rC   rD   z"ModelMultipleOpsNoAvgPool.__init__
  s¸   ø€ Ü‰ÑÔÜ—^‘^ˆ
ØˆÜ—Y‘Y˜x¨°6ÀÔFˆŒ
Ü—Y‘Y˜x¨°6ÀÔFˆŒ
Ù˜hÓ'ˆŒÜ—W‘W“YˆŒ
Ü—W‘W“YˆŒ
ÜŸ™×4Ñ4Ó6ˆŒÜ—<‘<×/Ñ/Ó1ˆŒÜ—|‘| FÓ+ˆŒÜ—)‘)˜B Ó"ˆ�rE   c                 ó  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  j                  ||«      }| j                  |«      }| j                  |«      }| j                  |«      }t        j                  j                  j                  |dd«      }| j                  j                  ||g«      }|j                  dd«      }| j                  |«      }|S r"  )r¨  rÎ  r=  r©  r   r†  r>  r)  rg   rÖ   r#  r$  rs  rô   r¹  )rB   r’  r}  Úskips       rC   rß  z!ModelMultipleOpsNoAvgPool.forward(
  sÊ   € Ø�j‰j˜‹mˆØ�h‰h�s‹mˆØ�j‰j˜‹oˆØ�z‰z˜!‹}ˆØ�m‰m×Ñ  TÓ*ˆØ�j‰j˜‹oˆØ�l‰l˜3ÓˆØ�j‰j˜‹oˆÜ�h‰h×!Ñ!×,Ñ,¨S°!°QÓ7ˆØ�h‰h�l‰l˜C ˜:Ó&ˆØ�k‰k˜"˜iÓ(ˆØ�g‰g�c‹lˆØˆ
rE   r  r  rÖ  s   @rC   r&  r&  
  s   ø„ õ#örE   r&  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚEmbeddingBagModulec                 ót   •— t         ‰| �  «        t        j                  j	                  ddddd¬«      | _        y )Nrr   r¸  TFr   r¯  )r£  rD   rg   rÖ   r»  r¹  r  s    €rC   rD   zEmbeddingBagModule.__init__8
  s7   ø€ Ü‰ÑÔÜ—8‘8×(Ñ(¸È"Ø=AÐV[Ðbgð )ó iˆ�rE   c                 ó(   — | j                  |||«      S rQ   ©r¹  )rB   rÂ  rÃ  rº  s       rC   rß  zEmbeddingBagModule.forward=
  s   € Ø�x‰x˜ Ð*<Ó=Ð=rE   r  r  rÖ  s   @rC   r-  r-  7
  s   ø„ õiö
>rE   r-  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚEmbeddingModulec                 ón   •— t         ‰| �  «        t        j                  j	                  dd¬«      | _        y ©Nrr   r¸  r±  ©r£  rD   rg   rÖ   r¼  r¹  r  s    €rC   rD   zEmbeddingModule.__init__A
  s)   ø€ Ü‰ÑÔÜ—8‘8×%Ñ%°RÀrÐ%ÓJˆ�rE   c                 ó$   — | j                  |«      S rQ   r0  ©rB   rÂ  s     rC   rß  zEmbeddingModule.forwardE
  s   € Ø�x‰x˜Ó Ð rE   r  r  rÖ  s   @rC   r2  r2  @
  s   ø„ õKö!rE   r2  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚEmbeddingWithStaticLinearc                 ó4  •— t         ‰| �  «        t        j                  j	                  dd¬«      | _        t        j                  j                  dd«      | _        t        | j
                  _	        t        | _	        t        «       | _        t        «       | _        y )Nrr   r¸  r±  rè   rb  )r£  rD   rg   rÖ   r»  r¹  rÝ  r¹  r!   rº  r   r   r�  r   r´  r  s    €rC   rD   z"EmbeddingWithStaticLinear.__init__I
  sd   ø€ Ü‰ÑÔÜ—8‘8×(Ñ(¸È"Ð(ÓMˆŒÜ—(‘(—/‘/ ! QÓ'ˆŒÜ<ˆ�‰ÔÜ&ˆŒÜ“[ˆŒ
Ü"“}ˆ�rE   c                 óÈ   — | j                  ||«      }| j                  |«      }| j                  |«      }| j                  |«      }t	        j
                  |g|gz   d¬«      }|S rÁ  )r¹  r�  r¹  r´  rg   rs  )rB   rÂ  rÃ  Ú	linear_inr¹  Úq_xr¹  rá  s           rC   rß  z!EmbeddingWithStaticLinear.forwardR
  sX   € Ø�h‰h�w Ó(ˆØ�j‰j˜Ó#ˆØ�W‰W�S‹\ˆØ�\‰\˜"ÓˆÜ—9‘9˜b˜T S E™\¨qÔ1ˆØˆrE   r  r  rÖ  s   @rC   r9  r9  H
  s   ø„ õ%örE   r9  c                   óp   ‡ — e Zd Zdˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚDenseTopMLPrY  c                 ó
  •— t         ‰| �  «        t        j                  t        j                  ||«      «      | _        t        j                  t        j                  ||z   |«      t        j                  ||«      «      | _        y rQ   )r£  rD   rÖ   rÉ  rÝ  Ú	dense_mlpÚtop_mlp)rB   Ú	dense_dimÚ	dense_outr¬  Ú
top_out_inÚtop_out_outr²  s         €rC   rD   zDenseTopMLP.__init__\
  s_   ø€ Ü‰ÑÔäŸ™Ü�I‰I�i Ó+ó
ˆŒô —}‘}Ü�I‰I�i -Ñ/°Ó<Ü�I‰I�j +Ó.ó
ˆ�rE   Úsparse_featureÚdensec                 ó‚   — | j                  |«      }t        j                  |g|gz   d¬«      }| j                  |«      }|S rÁ  )rA  rg   rs  rB  )rB   rG  rH  Údense_featurerá  r}  s         rC   rß  zDenseTopMLP.forwardg
  s?   € ð
 Ÿ™ uÓ-ˆÜ—9‘9˜m˜_°Ð/?Ñ?ÀQÔGˆà�l‰l˜8Ó$ˆØˆ
rE   r  )r^   r_   r`   rD   rg   ry  rß  rÕ  rÖ  s   @rC   r?  r?  Z
  s5   ø„ õ	
ð	àŸ™ð	ð �|‰|ð	ð 
�‰÷		rE   r?  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚEmbBagWrapperc                 ó\   •— t         ‰| �  «        t        j                  ||d¬«      | _        y )Nr   )r®  )r£  rD   rÖ   r»  Úemb_bag)rB   r«  r¬  r²  s      €rC   rD   zEmbBagWrapper.__init__u
  s"   ø€ Ü‰ÑÔÜ—‘ ~°}È5ÔQˆ�rE   c                 ó&   — | j                  ||«      S rQ   )rN  )rB   rÂ  rÃ  s      rC   rß  zEmbBagWrapper.forwardy
  s   € Ø�|‰|˜G WÓ-Ð-rE   r  rÖ  s   @rC   rL  rL  t
  s   ø„ ôRö.rE   rL  c                   ó¤   ‡ — e Zd ZdZdZdZdZdZdZdZ	dˆ fd„Z
dej                  d	ej                  d
ej                  dej                  fd„Zˆ xZS )ÚSparseNNModelrr   r¸   rè   rb  rs   rY  c                 óø   •— t         ‰| �  «        t        | j                  | j                  «      | _        t        | j                  | j                  | j                  | j                  | j                  «      | _        y rQ   )r£  rD   rL  Ú_NUM_EMBEDDINGSÚ_EMBEDDING_DIMÚmodel_sparser?  Ú
_DENSE_DIMÚ_DENSE_OUTPUTÚ_TOP_OUT_INÚ_TOP_OUT_OUTÚ	dense_topr  s    €rC   rD   zSparseNNModel.__init__…
  s]   ø€ Ü‰ÑÔä)¨$×*>Ñ*>À×@SÑ@SÓTˆÔÜ$Ø�O‰O˜T×/Ñ/°×1DÑ1DÀd×FVÑFVØ×Ñóˆ�rE   Úsparse_indicesÚsparse_offsetsrH  c                 óN   — | j                  ||«      }| j                  ||«      }|S rQ   )rU  rZ  )rB   r[  r\  rH  rG  r}  s         rC   rß  zSparseNNModel.forward�
  s+   € ð ×*Ñ*¨>¸>ÓJˆØ�n‰n˜^¨UÓ3ˆàˆ
rE   r  )r^   r_   r`   rS  rT  rV  rW  rX  rY  Ú_TOP_MLP_DIMrD   rg   ry  rß  rÕ  rÖ  s   @rC   rQ  rQ  |
  sf   ø„ Ø€OØ€NØ€JØ€MØ€KØ€LØ€Lõð
àŸ™ð
ð Ÿ™ð
ð �|‰|ð	
ð
 
�‰÷
rE   rQ  c                   óÜ  — e Zd Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z	 G d	„ d
ej                  j
                  «      Z
 G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ dej                  j
                  «      Z G d„ d ej                  j
                  «      Z G d!„ d"ej                  j
                  «      Z G d#„ d$ej                  j
                  «      Z G d%„ d&ej                  j
                  «      Z G d'„ d(ej                  j
                  «      Z G d)„ d*ej                  j
                  «      Z G d+„ d,ej                  j
                  «      Z G d-„ d.ej                  j
                  «      Z G d/„ d0ej                  j
                  «      Zy1)2ÚTestHelperModulesc            
       ó’   — e Zd Zdej                  dej                  dej                  dej                  dej                  f
d„Zd„ Zy)	úTestHelperModules.ControlFlowÚxsÚpred1Úpred2rÙ  rY  c           
      ó\  ‡‡‡‡	— dt         j                  dt         j                  fd„Š	dt         j                  dt         j                  fd„Šdt         j                  dt         j                  dt         j                  fˆˆ	fd„Šdt         j                  dt         j                  fd„Šdt         j                  d	t         j                  dt         j                  dt         j                  dt         j                  f
ˆˆfd
„}t        j                  ||«      }t        j                  |||||«      S )NrÙ  rY  c                 ó<   — | | z   } t        j                  | | «      } | S rQ   ©rg   Úmm©rÙ  s    rC   Útrue_nestedz:TestHelperModules.ControlFlow.forward.<locals>.true_nested£
  s   € Ø˜‘E�Ü—H‘H˜Q “N�Ø�rE   c                 ó.   — t        j                  | | «      S rQ   rh  rj  s    rC   Úfalse_nestedz;TestHelperModules.ControlFlow.forward.<locals>.false_nested¨
  s   € Ü—x‘x  1“~Ð%rE   r’  re  c                 ó@   •— t        j                  |‰‰| g«      }| |z   S rQ   )r   Úcond)r’  re  r	  rm  rk  s      €€rC   Útrue_fnz6TestHelperModules.ControlFlow.forward.<locals>.true_fn«
  s$   ø€ Ü ×%Ñ% e¨[¸,ÈÈÓL�Ø˜1‘u�rE   c                 ó"   — | j                  «       S rQ   )Úcos)r’  r†   s     rC   Úfalse_fnz7TestHelperModules.ControlFlow.forward.<locals>.false_fn¯
  s   € Ø—u‘u“w�rE   rd  c                 ó‚   •— | j                  «       } t        j                  |‰‰||g«      }| |z   } | j                  «       S rQ   )rr  r   ro  Úsin)r’  rd  re  rÙ  rs  rp  s       €€rC   Úmap_fnz5TestHelperModules.ControlFlow.forward.<locals>.map_fn²
  s>   ø€ ð —E‘E“G�Ü ×%Ñ% e¨W°hÀÀEÀ
ÓK�Ø˜‘E�Ø—u‘u“w�rE   )rg   ry  ri  r   rQ  )
rB   rc  rd  re  rÙ  rv  rs  rm  rp  rk  s
         @@@@rC   rß  z%TestHelperModules.ControlFlow.forward›
  så   û€ ðœuŸ|™|ð ´·±ó ð
&¤§¡ð &´·±ó &ðœ5Ÿ<™<ð ´·±ð ÄÇÁö ðœEŸL™Lð ´·±ó ðÜ—<‘<ðÜ(-¯©ðÜ=B¿\¹\ðÜNSÏlÉlðä—‘öô —‘˜˜A“ˆAÜ×#Ñ# F¨B°°u¸aÓ@Ð@rE   c                 ó®   — t        j                  dd«      t        j                  dg«      t        j                  dg«      t        j                  dd«      fS )Nrb  F)rg   Úonesró   rS   s    rC   r�  z,TestHelperModules.ControlFlow.example_inputs½
  sB   € Ü—J‘J˜q !Ó$¤e§l¡l°E°7Ó&;¼U¿\¹\È5È'Ó=RÔTY×T^ÑT^Ð_`ÐbcÓTdÐfÐfrE   N)r^   r_   r`   rg   ry  rß  r�  rc   rE   rC   ÚControlFlowrb  š
  sX   „ ð 	Aà—‘ð 	Að —<‘<ð 	Að —<‘<ð	 	Að
 �|‰|ð 	Að �\‰\ó 	AóD	grE   ry  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú%TestHelperModules.Conv2dPropAnnotatonc                 ó¸   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  dd«      | _        y ©Nr¢  )r£  rD   rg   rÖ   ri  rj  rÝ  r  r  s    €rC   rD   z.TestHelperModules.Conv2dPropAnnotaton.__init__Á
  s<   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜŸ(™(Ÿ/™/¨!¨QÓ/ˆD�KrE   c                 óÄ   — | j                  |«      }|j                  dd«      }t        j                  j                  j                  |dd«      }| j                  |«      }|S )Nr¡   r¢  g      à¿r¥  )rj  r§   rg   rÖ   r#  Úhardtanhr  r  s     rC   rß  z-TestHelperModules.Conv2dPropAnnotaton.forwardÆ
  sN   € Ø—	‘	˜!“ˆAØ—‘�r˜1“ˆAÜ—‘×#Ñ#×,Ñ,¨Q°°cÓ:ˆAØ—‘˜A“ˆAØˆHrE   r  r  rÖ  s   @rC   ÚConv2dPropAnnotatonr{  À
  s   ø„ õ	0ö
	rE   r€  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú)TestHelperModules.Conv2dWithObsSharingOpsc                 óü   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  «       | _        t        j                  j                  d«      | _	        y ©Nr¢  rl  )
r£  rD   rg   rÖ   ri  rj  ÚHardtanhr  r  Úadaptive_avg_pool2dr  s    €rC   rD   z2TestHelperModules.Conv2dWithObsSharingOps.__init__Î
  sQ   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜ!ŸH™H×-Ñ-Ó/ˆDŒMÜ',§x¡x×'AÑ'AÀ&Ó'IˆDÕ$rE   c                 ó–   — | j                  |«      }| j                  |«      }| j                  |«      }t        j                  |«      }|S rQ   )rj  r†  r  rg   Úmeanr  s     rC   rß  z1TestHelperModules.Conv2dWithObsSharingOps.forwardÔ
  s?   € Ø—	‘	˜!“ˆAØ×(Ñ(¨Ó+ˆAØ—‘˜aÓ ˆAÜ—
‘
˜1“ˆAØˆHrE   r  r  rÖ  s   @rC   ÚConv2dWithObsSharingOpsr‚  Í
  s   ø„ õ	Jö	rE   r‰  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú,TestHelperModules.Conv2dWithTwoLinearPermutec                 ó  •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  ddd¬«      | _        t        j                  j                  dd«      | _        y )Nr¢  é   rB  Frh  ©	r£  rD   rg   rÖ   ri  rj  rÝ  rM  rV  r  s    €rC   rD   z5TestHelperModules.Conv2dWithTwoLinearPermute.__init__Ü
  óV   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨2¨qÓ1ˆDŒIÜ Ÿ8™8Ÿ?™?¨2¨q°u˜?Ó=ˆDŒLÜ Ÿ8™8Ÿ?™?¨1¨aÓ0ˆD�LrE   c                 ó�   — | j                  |«      }t        j                  |d«      }| j                  | j	                  |«      «      S ©N©r   rb  r¢  rs   )rj  rg   ÚpermuterV  rM  ©rB   r’  Úconv_outÚpermute_outs       rC   rß  z4TestHelperModules.Conv2dWithTwoLinearPermute.forwardâ
  s7   € Ø—y‘y “|ˆHÜŸ-™-¨°,Ó?ˆKØ—<‘< §¡¨[Ó 9Ó:Ð:rE   r  r  rÖ  s   @rC   ÚConv2dWithTwoLinearPermuter‹  Û
  ó   ø„ õ	1ö	;rE   r—  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú%TestHelperModules.Conv2dWithTwoLinearc                 ó  •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  ddd¬«      | _        t        j                  j                  dd«      | _        y )Nr¢  r�  r°  rB  Frh  rŽ  r  s    €rC   rD   z.TestHelperModules.Conv2dWithTwoLinear.__init__è
  r�  rE   c                 ó�   — | j                  |«      }t        j                  |d«      }| j                  | j	                  |«      «      S )N)rb  r°  )rj  rg   rô   rV  rM  )rB   r’  r•  Úreshape_outs       rC   rß  z-TestHelperModules.Conv2dWithTwoLinear.forwardî
  s7   € Ø—y‘y “|ˆHÜŸ-™-¨°'Ó:ˆKØ—<‘< §¡¨[Ó 9Ó:Ð:rE   r  r  rÖ  s   @rC   ÚConv2dWithTwoLinearrš  ç
  r˜  rE   rž  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú$TestHelperModules.ConvLinearWPermutec                 ó¸   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  dd«      | _        y )Nr¢  rB  )r£  rD   rg   rÖ   ri  rj  rÝ  rM  r  s    €rC   rD   z-TestHelperModules.ConvLinearWPermute.__init__ô
  s<   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜ Ÿ8™8Ÿ?™?¨1¨aÓ0ˆD�LrE   c                 ór   — | j                  |«      }t        j                  |d«      }| j                  |«      S r‘  )rj  rg   r“  rM  r”  s       rC   rß  z,TestHelperModules.ConvLinearWPermute.forwardù
  s.   € Ø—y‘y “|ˆHÜŸ-™-¨°,Ó?ˆKØ—<‘< Ó,Ð,rE   r  r  rÖ  s   @rC   ÚConvLinearWPermuter   ó
  s   ø„ õ	1ö
	-rE   r£  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )ú!TestHelperModules.TwoLinearModulec                 óº   •— t         ‰| �  «        t        j                  j	                  ddd¬«      | _        t        j                  j	                  dd«      | _        y )NrB  r�  Frh  )r£  rD   rg   rÖ   rÝ  rM  rV  r  s    €rC   rD   z*TestHelperModules.TwoLinearModule.__init__ÿ
  s>   ø€ Ü‰GÑÔÜ Ÿ8™8Ÿ?™?¨1¨b°u˜?Ó=ˆDŒLÜ Ÿ8™8Ÿ?™?¨2¨qÓ1ˆD�LrE   c                 óB   — | j                  | j                  |«      «      S rQ   )rV  rM  r  s     rC   rß  z)TestHelperModules.TwoLinearModule.forward  s   € Ø—<‘< §¡¨Q£Ó0Ð0rE   c                 ó0   — t        j                  dd«      fS )Nrb  rB  ©rg   r  rS   s    rC   r�  z0TestHelperModules.TwoLinearModule.example_inputs  s   € Ü—K‘K  1Ó%Ð'Ð'rE   r  ©r^   r_   r`   rD   rß  r�  rÕ  rÖ  s   @rC   ÚTwoLinearModuler¥  þ
  s   ø„ õ	2ò
	1ö	(rE   r«  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )úTestHelperModules.ConvMaxPool2dc                 ó¸   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  dd«      | _        y )Nrb  rs   )r£  rD   rg   rÖ   ri  rj  r(  Úpoolr  s    €rC   rD   z(TestHelperModules.ConvMaxPool2d.__init__  s>   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜŸ™×*Ñ*¨1¨aÓ0ˆD�IrE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   )rj  r¯  r  s     rC   rß  z'TestHelperModules.ConvMaxPool2d.forward  s!   € Ø—	‘	˜!“ˆAØ—	‘	˜!“ˆAØˆHrE   r  r  rÖ  s   @rC   ÚConvMaxPool2dr­  
  s   ø„ õ	1ö
	rE   r±  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú+TestHelperModules.ConvWithAdaptiveAvgPool2dc                 ó¶   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  d«      | _        y r„  )r£  rD   rg   rÖ   ri  rj  r  r†  r  s    €rC   rD   z4TestHelperModules.ConvWithAdaptiveAvgPool2d.__init__  s=   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨aÓ0ˆDŒIÜ',§x¡x×'AÑ'AÀ&Ó'IˆDÕ$rE   c                 óJ   — | j                  |«      }| j                  |«      }|S rQ   )rj  r†  r  s     rC   rß  z3TestHelperModules.ConvWithAdaptiveAvgPool2d.forward  s$   € Ø—	‘	˜!“ˆAØ×(Ñ(¨Ó+ˆAØˆHrE   r  r  rÖ  s   @rC   ÚConvWithAdaptiveAvgPool2dr³    s   ø„ õ	Jö
	rE   r¶  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ú TestHelperModules.ConvWithBNReluc                 ó  •— t         ‰| �  «        t        j                  j                  t        j                  j
                  dœ}t        j                  j                  t        j                  j                  dœ} ||   ddd|¬«      | _        |r ||   d«      | _	        n#t        j                  j                  «       | _	        |r$t        j                  j                  «       | _        y t        j                  j                  «       | _        y ©N)rs   rb  r¢  rh  )r£  rD   rg   rÖ   rÓ  ri  rå  r‡  rj  rˆ  r  r–  rX  )rB   rX  rd  rˆ  r  ÚconvsÚbnsr²  s          €rC   rD   z)TestHelperModules.ConvWithBNRelu.__init__!  s®   ø€ Ü‰GÑÔÜŸ™Ÿ™¬E¯H©H¯O©OÑ<ˆEÜ—h‘h×*Ñ*¬u¯x©x×/CÑ/CÑDˆCØ"˜˜c™
 1 a¨°Ô6ˆDŒIáØ"˜#˜c™( 1›+�•äŸ(™(×+Ñ+Ó-�”ÙÜ!ŸH™HŸM™M›O�•	ä!ŸH™H×-Ñ-Ó/�•	rE   c                 óh   — | j                  |«      }| j                  |«      }| j                  |«      S rQ   r˜  r  s     rC   rß  z(TestHelperModules.ConvWithBNRelu.forward0  s*   € Ø—	‘	˜!“ˆAØ—‘˜“
ˆAØ—9‘9˜Q“<ÐrE   ©rb  TTr  rÖ  s   @rC   ÚConvWithBNRelur¸     ó   ø„ õ	0ö	 rE   r¿  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ú!TestHelperModules.ConvTWithBNReluc                 ó  •— t         ‰| �  «        t        j                  j                  t        j                  j
                  dœ}t        j                  j                  t        j                  j                  dœ} ||   ddd|¬«      | _        |r ||   d«      | _	        n#t        j                  j                  «       | _	        |r$t        j                  j                  «       | _        y t        j                  j                  «       | _        y rº  )r£  rD   rg   rÖ   rú  rt  rå  r‡  Úconvtrˆ  r  r–  rX  )rB   rX  rd  rˆ  r  Úconvtsr¼  r²  s          €rC   rD   z*TestHelperModules.ConvTWithBNRelu.__init__6  s²   ø€ Ü‰GÑÔÜŸ™×1Ñ1´e·h±h×6NÑ6NÑOˆFÜ—h‘h×*Ñ*¬u¯x©x×/CÑ/CÑDˆCØ$˜ ™ Q¨¨1°4Ô8ˆDŒJáØ"˜#˜c™( 1›+�•äŸ(™(×+Ñ+Ó-�”ÙÜ!ŸH™HŸM™M›O�•	ä!ŸH™H×-Ñ-Ó/�•	rE   c                 óh   — | j                  |«      }| j                  |«      }| j                  |«      S rQ   )rÄ  rˆ  rX  r  s     rC   rß  z)TestHelperModules.ConvTWithBNRelu.forwardE  s*   € Ø—
‘
˜1“ˆAØ—‘˜“
ˆAØ—9‘9˜Q“<ÐrE   r¾  r  rÖ  s   @rC   ÚConvTWithBNRelurÂ  5  rÀ  rE   rÇ  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )ú"TestHelperModules.Conv2dThenConv1dc                 óº   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j                  ddd«      | _        y r}  )r£  rD   rg   rÖ   rÓ  rs  ri  rq  r  s    €rC   rD   z+TestHelperModules.Conv2dThenConv1d.__init__K  s>   ø€ Ü‰GÑÔÜŸ(™(Ÿ/™/¨!¨Q°Ó2ˆDŒKÜŸ(™(Ÿ/™/¨!¨Q°Ó2ˆD�KrE   c                 ól   — | j                  |«      }|j                  d«      }| j                  |«      }|S r“   )rq  rˆ  rs  r  s     rC   rß  z*TestHelperModules.Conv2dThenConv1d.forwardP  s.   € Ø—‘˜A“ˆAØ—	‘	˜!“ˆAØ—‘˜A“ˆAØˆHrE   c                 ó4   — t        j                  dddd«      fS ro  r©  rS   s    rC   r�  z1TestHelperModules.Conv2dThenConv1d.example_inputsV  s   € Ü—K‘K  1 a¨Ó+Ð-Ð-rE   r  rª  rÖ  s   @rC   ÚConv2dThenConv1drÉ  J  s   ø„ õ	3ò
	ö	.rE   rÍ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )úTestHelperModules.Conv2dWithCatc                 óº   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j	                  ddd«      | _        y r}  ©r£  rD   rg   rÖ   ri  r¨  r©  r  s    €rC   rD   z(TestHelperModules.Conv2dWithCat.__init__Z  ó>   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨A¨qÓ1ˆDŒJÜŸ™Ÿ™¨¨A¨qÓ1ˆD�JrE   c                 ó|   — | j                  |«      }| j                  |«      }t        j                  ||gd¬«      }|S rÁ  ©r¨  r©  rg   rs  )rB   r’  rÙ  r	  s       rC   rß  z'TestHelperModules.Conv2dWithCat.forward_  s5   € Ø—
‘
˜1“ˆAØ—
‘
˜1“ˆAÜ—	‘	˜1˜a˜& aÔ(ˆAØˆHrE   r  r  rÖ  s   @rC   ÚConv2dWithCatrÏ  Y  s   ø„ õ	2ö
	rE   rÕ  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú"TestHelperModules.Conv2dWithTwoCatc                 óº   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j	                  ddd«      | _        y r}  rÑ  r  s    €rC   rD   z+TestHelperModules.Conv2dWithTwoCat.__init__f  rÒ  rE   c                 ó´   — | j                  |«      }| j                  |«      }t        j                  ||gd¬«      }||z   }t        j                  ||g«      }|S rÁ  rÔ  ©rB   rú  rû  Úx3Úx4rÙ  r	  rt  s           rC   rß  z*TestHelperModules.Conv2dWithTwoCat.forwardk  sP   € Ø—‘˜B“ˆBØ—‘˜B“ˆBÜ—	‘	˜2˜r˜(¨Ô*ˆAØ�R‘ˆAÜ—	‘	˜1˜a˜&Ó!ˆAØˆHrE   r  r  rÖ  s   @rC   ÚConv2dWithTwoCatr×  e  s   ø„ õ	2ö
	rE   rÝ  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )ú!TestHelperModules.Conv2dWithSplitc                 óº   •— t         ‰| �  «        t        j                  j	                  ddd«      | _        t        j                  j	                  ddd«      | _        y r}  rÑ  r  s    €rC   rD   z*TestHelperModules.Conv2dWithSplit.__init__t  rÒ  rE   c                 ó�   — | j                  |«      }t        j                  |dd¬«      \  }}t        j                  ||gd¬«      }|S )Nrb  rs   rŽ  )r¨  rg   Úsplitrs  )rB   r’  rú  rû  rÙ  s        rC   rß  z)TestHelperModules.Conv2dWithSplit.forwardy  s>   € Ø—
‘
˜1“ˆAä—[‘[  A¨1Ô-‰FˆB�Ü—	‘	˜2˜r˜(¨Ô*ˆAØˆHrE   c                 ó4   — t        j                  dddd«      fS )Nrs   r¢  r�  r©  rS   s    rC   r�  z0TestHelperModules.Conv2dWithSplit.example_inputs€  ó   € Ü—K‘K  1 b¨"Ó-Ð/Ð/rE   r  rª  rÖ  s   @rC   ÚConv2dWithSplitrß  s  s   ø„ õ	2ò
	ö	0rE   rå  c                   ó   — e Zd Zd„ Zy)úTestHelperModules.ThreeAddc                 ó$   — ||z   }||z   }||z   }|S rQ   rc   rÚ  s           rC   rß  z"TestHelperModules.ThreeAdd.forward„  s"   € Ø�R‘ˆAØ�R‘ˆAØ�A‘ˆAØˆHrE   N©r^   r_   r`   rß  rc   rE   rC   ÚThreeAddrç  ƒ  s   „ ó	rE   rê  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú!TestHelperModules.EmbeddingModulec                 ón   •— t         ‰| �  «        t        j                  j	                  dd¬«      | _        y r4  r5  r  s    €rC   rD   z*TestHelperModules.EmbeddingModule.__init__‹  s)   ø€ Ü‰GÑÔÜ—x‘x×)Ñ)¸È2Ð)ÓNˆD�HrE   c                 ó$   — | j                  |«      S rQ   r0  r7  s     rC   rß  z)TestHelperModules.EmbeddingModule.forward�  s   € Ø—8‘8˜GÓ$Ð$rE   r  r  rÖ  s   @rC   r2  rì  Š  s   ø„ õ	Oö	%rE   r2  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú+TestHelperModules.EmbeddingConvLinearModulec                 ó  •— t         ‰| �  «        t        j                  j	                  dd¬«      | _        t        j                  j                  ddd«      | _        t        j                  j                  dd«      | _	        y )Nrr   rB  r±  r�  )rs   r¢  )
r£  rD   rg   rÖ   r¼  r¹  ri  rj  rÝ  r  r  s    €rC   rD   z4TestHelperModules.EmbeddingConvLinearModule.__init__“  sW   ø€ Ü‰GÑÔÜ—x‘x×)Ñ)¸È1Ð)ÓMˆDŒHÜŸ™Ÿ™¨¨2¨vÓ6ˆDŒIÜŸ(™(Ÿ/™/¨"¨aÓ0ˆD�KrE   c                 ó  — | j                  |«      }t        j                  |d¬«      }t        j                  |d«      }| j	                  |«      }t        j                  |d«      }t        j
                  |d¬«      }| j                  |«      S )Nr   rŽ  )r   r¢  rs   rb  r’  )r¹  rg   r‘  r“  rj  rˆ  r  )rB   rÂ  Ú
embeddingsr•  s       rC   rß  z3TestHelperModules.EmbeddingConvLinearModule.forward™  sm   € ØŸ™ 'Ó*ˆJÜŸ™¨¸Ô;ˆJÜŸ™ z°<Ó@ˆJØ—y‘y Ó,ˆHÜ—}‘} X¨|Ó<ˆHÜ—}‘} X°1Ô5ˆHØ—;‘;˜xÓ(Ð(rE   r  r  rÖ  s   @rC   ÚEmbeddingConvLinearModulerð  ’  s   ø„ õ	1ö	)rE   rô  c                   ó   — e Zd Zd„ Zy)úTestHelperModules.AddInplaceAddc                 ó   — ||z   }||z  }|S rQ   rc   rØ  s      rC   rß  z'TestHelperModules.AddInplaceAdd.forward£  ó   € Ø�A‘ˆAØ�‰FˆAØˆHrE   Nré  rc   rE   rC   ÚAddInplaceAddrö  ¢  ó   „ ó	rE   rù  c                   ó   — e Zd Zd„ Zy)úTestHelperModules.MulInplaceMulc                 ó   — ||z  }||z  }|S rQ   rc   rØ  s      rC   rß  z'TestHelperModules.MulInplaceMul.forward©  rø  rE   Nré  rc   rE   rC   ÚMulInplaceMulrü  ¨  rú  rE   rþ  c                   ó   — e Zd Zd„ Zy)úTestHelperModules.AddMulScalarc                 ó.   — |dz   }|dz  }|dz  }|dz  }|S r}  rc   r  s     rC   rß  z&TestHelperModules.AddMulScalar.forward¯  s+   € Ø�A‘ˆAØ�A‘ˆAØ�‰FˆAØ�‰FˆAØˆHrE   Nré  rc   rE   rC   ÚAddMulScalarr   ®  s   „ ó	rE   r  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú+TestHelperModules.ConvBnReLU2dAndLinearReLUc                 óì   •— t         ‰| �  «        t        j                  d¬«      | _        t
        j                  j                  ddd¬«      | _        t
        j                  j                  «       | _
        y )NT)rX  r¢  rB  Frh  )r£  rD   r`  r¿  Úconv_bn_relurg   rÖ   rÝ  r  r–  rX  r  s    €rC   rD   z4TestHelperModules.ConvBnReLU2dAndLinearReLU.__init__·  sO   ø€ Ü‰GÑÔÜ 1× @Ñ @ÀdÐ @Ó KˆDÔÜŸ(™(Ÿ/™/¨!¨Q°U˜/Ó;ˆDŒKÜŸ™Ÿ™›ˆD�IrE   c                 óv   — | j                  |«      }t        j                  |d«      }| j                  |«      }|S r‘  )r  rg   r“  r  )rB   r’  r–  Ú
linear_outs       rC   rß  z3TestHelperModules.ConvBnReLU2dAndLinearReLU.forward½  s6   € Ø×!Ñ! !Ó$ˆAÜŸ-™-¨¨<Ó8ˆKØŸ™ [Ó1ˆJØÐrE   r  r  rÖ  s   @rC   ÚConvBnReLU2dAndLinearReLUr  ¶  s   ø„ õ	(ö	rE   r	  c                   ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )ú!TestHelperModules.GroupwiseConv2dc                 ór   •— t         ‰| �  «        t        j                  j	                  dddd¬«      | _        y )Nrè   r¢  rb  )rü   )r£  rD   rg   rÖ   ri  rj  r  s    €rC   rD   z*TestHelperModules.GroupwiseConv2d.__init__Ä  s*   ø€ Ü‰GÑÔÜŸ™Ÿ™¨¨1¨a¸˜Ó:ˆD�IrE   c                 ó$   — | j                  |«      S rQ   rl  r  s     rC   rß  z)TestHelperModules.GroupwiseConv2d.forwardÈ  s   € Ø—9‘9˜Q“<ÐrE   c                 ó4   — t        j                  dddd«      fS )Nrb  rè   rr   r©  rS   s    rC   r�  z0TestHelperModules.GroupwiseConv2d.example_inputsË  rä  rE   r  rª  rÖ  s   @rC   ÚGroupwiseConv2dr  Ã  s   ø„ õ	;ò	 ö	0rE   r  c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ú!TestHelperModules.LinearReluModelc                 óî   •— t         ‰| �  «        t        j                  j	                  dd«      j                  t        j                  ¬«      | _        t        j                  j                  «       | _	        y r'  rÍ  r  s    €rC   rD   z*TestHelperModules.LinearReluModel.__init__Ï  sG   ø€ Ü‰GÑÔÜ—h‘h—o‘o a¨Ó+×.Ñ.´U·[±[Ð.ÓAˆDŒGÜŸ™Ÿ™›ˆD�IrE   c                 óF   — | j                  | j                  |«      «      }|S rQ   rÏ  r  s     rC   rß  z)TestHelperModules.LinearReluModel.forwardÔ  s   € Ø—	‘	˜$Ÿ'™' !›*Ó%ˆAØˆHrE   r  r  rÖ  s   @rC   rË  r  Î  s   ø„ õ	(ö
	rE   rË  N)r^   r_   r`   rg   rÖ   rï  ry  r€  r‰  r—  rž  r£  r«  r±  r¶  r¿  rÇ  rÍ  rÕ  rÝ  rå  rê  r2  rô  rù  rþ  r  r	  r  rË  rc   rE   rC   r`  r`  ™
  så  „ ô$g�e—h‘h—o‘oô $gôL˜eŸh™hŸo™oô ô %§(¡(§/¡/ô ô
; U§X¡X§_¡_ô 
;ô
;˜eŸh™hŸo™oô 
;ô	-˜UŸX™XŸ_™_ô 	-ô
(˜%Ÿ(™(Ÿ/™/ô 
(ô	˜Ÿ™Ÿ™ô 	ô	 E§H¡H§O¡Oô 	ô ˜Ÿ™Ÿ™ô  ô* ˜%Ÿ(™(Ÿ/™/ô  ô*.˜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ô˜%Ÿ(™(Ÿ/™/õ rE   r`  c                 ó†  — d„ }|rt        j                  «       nt        j                  «       }|5  t	        | |«      j                  «       }|r|n	 ||||«      }|rt        ||«      nt        ||«      } ||Ž  t        j                  j                  j                  |«       t        |«      }	|	cd d d «       S # 1 sw Y   y xY w)Nc                 ó  — t        d„ |D «       «      }|r:t        «       }| s|rJ d«       ‚|j                  t        j                  «       «       |S t        «       }|j                  t        j                  | |¬«      «       |S )Nc              3   ó†   K  — | ]9  }t        |t        j                  «      xr |j                  j                  d k(  –— Œ; y­w)ÚxpuN)rV   rg   ry  r¾   r*  )rö  rÝ  s     rC   rø  zO_generate_qdq_quantized_model.<locals>.get_default_quantizer.<locals>.<genexpr>Ý  s:   è ø€ ò +Øô ! ¬¯©Ó5ÒT¸%¿,¹,×:KÑ:KÈuÑ:TÓTñ +ùs   ‚?AzFQAT and dynamic quantization is not supported at XPU backend currently)r   Ú
is_dynamic)Úanyr<   r–  ÚxpuiqÚ,get_default_xpu_inductor_quantization_configr;   ÚxiqÚ,get_default_x86_inductor_quantization_config)r   r  r2  Úhas_xpurü  s        rC   Úget_default_quantizerz<_generate_qdq_quantized_model.<locals>.get_default_quantizerÜ  s‡   € Üñ +Ø#)ô+ó +ˆáÜ,Ó.ˆIÙ©Ð~Ð6~Ó~Ð4Ø× Ñ ¤×!SÑ!SÓ!UÔVð Ðô -Ó.ˆIØ× Ñ Ü×@Ñ@Ø!¨jôôð
 ÐrE   )Ú
contextlibÚnullcontextrg   r£   r   rá   r   r   rË  rÌ  Úmove_exported_model_to_evalr   )
rÚ  r2  r   r  rü  r  Úmaybe_no_gradÚexport_modelÚprepare_modelÚconvert_models
             rC   Ú_generate_qdq_quantized_modelr'  Ø  s½   € òñ  17”J×*Ñ*Ô,¼E¿M¹M»O€MØ	ñ Ü*ØØó
÷ ‰&‹(ð 	ñ
 #‰IÑ(=¸fÀjÐRXÓ(Yð 	ñ
 ô ˜\¨9Ô5ä˜l¨IÓ6ð 	ñ
 	�vÑÜ�‰×Ñ×9Ñ9¸-ÔHÜ$ ]Ó3ˆØ÷!÷ ò ús   °A=B7Â7C )rŸ   rQ   )rè   r�  )rè   é    )FFN)éra   Úfunctorch.experimentalr   rg   Útorch.nnrÖ   Útorch.nn.functionalr#  rH  Ú'torch.ao.nn.intrinsic.quantized.dynamicrË  Ú	intrinsicr  r5  ré  Útorch.ao.nn.quantizedrÖ  Útorch.ao.nn.quantized.dynamicrä  Útorch.ao.nn.intrinsicr   Útorch.distributedÚdistributedrÎ   Ú$torch.testing._internal.common_utilsr   r   Útorch.exportr   Útorch.ao.quantizationr   r	   r
   r   Ú#torch.ao.quantization.quantize_pt2er   r   r   r   Ú$torch.ao.quantization.backend_configr   Ú1torch.ao.quantization.quantizer.xnnpack_quantizerr   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.testing._internal.common_quantizedr,   Útorch.jit.mobiler-   Ú!torch.ao.quantization.quantize_fxr.   r/   r0   r1   Útorch.ao.ns.fx.ns_typesr2   r3   Útorch.fx.graphr4   Útorch.fxr5   rÔ  ÚImportErrorr.  rô  r-  rÌ   r   ÚnumpyrX  Útorch.testingr6   Útypingr7   r8   r9   r:   Útorch._dynamorú  rJ  Ú6torch.ao.quantization.quantizer.x86_inductor_quantizerrÌ  rü  Úx86_inductor_quantizerr  Ú6torch.ao.quantization.quantizer.xpu_inductor_quantizerÚxpu_inductor_quantizerr  r;   r<   r   r>   ri   rn   ÚCrossEntropyLossÚ_default_loss_fnr‹   r�   r²   rÂ   rÐ   rÓ   rÝ   râ   rå   r  r  r0  r6  r9  r=  rC  rG  rL  rP  ÚtorchvisionÚHAS_TORCHVISIONÚskipIfÚskip_if_no_torchvisionrV  r�  r`  r  rŒ  rž  r   rØ  rñ  rï  r%  r3  r:  r?  rJ  rS  r_  re  rr  rx  r€  r…  rŽ  r“  r›  r¦  r¯  r¶  r¾  rÃ  rË  rÓ  rÜ  rã  rí  ró  rþ  r  r  r  r  r(  r,  r0  r7  r;  rE  rK  rS  r[  r`  re  rj  rt  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-  r2  r9  r?  rL  rQ  r`  r'  rc   rE   rC   ú<module>rO     së  ðñõ 0ã Ý ß Ð ß 7× 7Ñ 7ß #Ó #ß ,Ö ,Ý .Ý  ß Iå ,÷ó ÷ó õ÷÷Q÷ Q÷ Q÷ Q÷ Q÷ Q÷
ñ õ
õ 8ð÷ó ÷ MÝ#Ý$Ø€Fó Û 	Û Û 	ã Û Ý #ß 1Ó 1Ý #ß DÖ Dß FÖ FÝ WÝ WÛ ÷#7ñ #7òJ\òð —8‘8×,Ñ,Ó.Ð Ø2Bó &÷,.ñ .ó0ò òFò!òòOó,ò35òj
òò ò ò&ò ò ò ò ð ÛØ€Oð )˜Ÿš¨_Ð)<Ð>NÓOÐ òPð ')§h¢hÀó 	ó(!ðX ó'òB2ôBG
>˜8ô G
>ôR*Ð3ô *ôZ}<Ð3ô }<ôB
#˜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Ÿšô )ô8)˜Ÿ™Ÿšô )ô#˜%Ÿ(™(Ÿ/š/ô #ô.˜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ô #ô:@˜Ÿ™Ÿšô :@ôz)�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—’ô )ô 
/ 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Ÿšô ô*@Ð#;ô @ô˜rŸyšyô ô" §	¢	ô ô.	˜Ÿ	š	ô 	ô'˜BŸIšIô 'ô,�R—Y’Yô ,ô\
�—’ô 
ô §	¢	ô ô0˜RŸYšYô ô*	#˜RŸYšYô 	#ô�E—H‘H—O’Oô ô B§I¢Iô ô,˜5Ÿ8™8Ÿ?š?ô ô0`�—‘—’ô `ôB�u—x‘x—’ô ôF §¡§¢ô ô<>˜Ÿ™Ÿšô >ô!�e—h‘h—o’oô !ô §¡§¢ô ô$�"—)’)ô ô4.�B—I’Iô .ô�B—I’Iô ÷:}ñ }ð@
 <@ô%øðm\ ò ØƒFðûðf ò ØƒOðús$   Ã"k Æ?k& ëk#ë"k#ë&k1ë0k1