ó
    CC˜j2·  ã                  ó†  • S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKrSSKrSSKJr  SSKJr  SSKJrJrJrJr  SSKrSSKJr  SSKrSSKJr  SSK J!r!  SS	K"J#r#  SS
KJ$r$  SSK%J&r&  SSK'J(r(  SSK)J*r*J+r+  SSK,J-r-  SSKJ.r.J/r/J0r0  \(       a  SSK1J2r2J3r3  SSK4J5r5  SSK6J7r7  \
Rp                  " \95      r:\" S5      r;\" S5      r<\<R{                  5       r>\>(       a  SSK?r@/ rASrBSrC\>(       a`  / SQrA\@Rˆ                  RŠ                  RŒ                  R�                  5       R‘                  SS5      rCSR“                  S \A 5       5      rJS\J S3rB/ SQrK " S S 5      rLSDS! jrMS"rN " S# S$\O5      rP " S% S&5      rQ\R¤                  SDS' j5       rSS(S).SES* jjrTS(S).SES+ jjrUSDS, jrVSFS- jrW " S. S/\X5      rYSGS0 jrZ  SH         SIS1 jjr[ SJS(S(S2.             SKS3 jjjr\SLS4 jr]        SMS5 jr^      SNS6 jr_ SJS(S(S2.             SOS7 jjjr`      SPS8 jraSQS9 jrb\b" \RÆ                  5      rd\b" \RÊ                  " S:5      5      rf\b" S5      rg\b" S(5      rh\b" S(5      ri " S; S<5      rj " S= S>5      rkSRS? jrl " S@ SA5      rm   SS         STSB jjrnSUSC jrog)Vaã  
Debug utilities for TorchDynamo compilation and execution.

This module provides various debugging tools and utilities for TorchDynamo, including:

- Minification support for reducing test cases while preserving bugs
- Input/output handling via InputReader and InputWriter for reproducible testing
- Accuracy checking between original and compiled models
- Neural network module string conversion via NNModuleToString
- Profiling tools and system information collection
- Buck build system integration for Meta-internal testing

Key classes:
- InputReader/InputWriter: Handle serialization of model inputs/outputs
- NNModuleToString: Converts nn.Modules to string representations
- BuckTargetWriter: Manages Buck build system integration
é    )ÚannotationsN)ÚCounter)Úimport_module)ÚAnyÚcastÚTYPE_CHECKINGÚTypeVar)ÚTensor)Úrand_strided)Únormalize_path_separator)Úis_float_dtype)ÚStorageWeakRef)ÚConfigModule)ÚContentStoreReaderÚContentStoreWriteré   )Úconfig)Úclone_inputsÚget_debug_dirÚ	warn_once)ÚCallableÚSequence)Útqdm)ÚUntypedStorageÚTztorch._inductor.configÚ )z1//caffe2/torch/fb/sparsenn:sparsenn_operators_gpuz-//caffe2/torch/fb/sparsenn:sparsenn_operatorsz///deeplearning/fbgemm/fbgemm_gpu:sparse_ops_cpuz+//deeplearning/fbgemm/fbgemm_gpu:sparse_opszfbcode:ú//Ú
c              #  ó.   #   • U  H  nS U S3v •  M     g7f)z    "ú",N© )Ú.0Úxs     Ú§C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\torch/_dynamo/debug_utils.pyÚ	<genexpr>r%   Y   s   é € Ð Cº
°1 5¨¨¨2¥º
ùó   ‚zfor _extra_dep in [
zY
]:
    try:
        torch.ops.load_library(_extra_dep)
    except OSError:
        pass
)Úbuck2Úrunz@mode/dev-nosanc                  ó6   • \ rS rSrSS jrSS jrS	S
S jjrSrg)ÚBuckTargetWriteréf   c                ó,  • [         R                  R                  [         R                  R                  U5      5      u  U l        U l        U R
                  R                  SS5      U l        U R                  R                  SS5       SU R                   3U l        U R                  U R                  R                  S5      S  U l        U R                  SS  U l        U R                  nX"R                  S5      S  SS  nSU S	U R                   3U l	        g )
Nz.pyr   Ú/Ú.zfbcode.é   zfbcode/r   Ú:)
ÚosÚpathÚsplitÚabspathÚsubdirÚpy_fileÚreplaceÚtargetÚfindÚcmd_line_path)ÚselfÚfilenameÚtmps      r$   Ú__init__ÚBuckTargetWriter.__init__g   sÜ   € Ü$&§G¡G§M¡M´"·'±'·/±/À(Ó2KÓ$LÑ!ˆŒ�T”\Ø—l‘l×*Ñ*¨5°"Ó5ˆŒð —{‘{×*Ñ*¨3°Ó4Ð5°Q°t·{±{°mÐDˆŒ	Ø—I‘I˜dŸi™iŸn™n¨YÓ7Ð9Ð:ˆŒ	Ø—I‘I˜a˜b�MˆŒ	ð �k‰kˆØ—(‘(˜9Ó%Ð'Ð(¨¨Ð,ˆØ! #  a¨¯© }Ð5ˆÕó    c                óð   • SR                  [         Vs/ s H	  nSU S3PM     sn5      n[        R                  " SU R                   SU R
                   S[         SU SU R                   S	35      $ s  snf )
Nr   z	        "r    za
load("@fbcode_macros//build_defs:python_binary.bzl", "python_binary")

python_binary(
    name="z",
    srcs = ["z©"],
    compile = False,
    deps = [
        "//caffe2:torch",
        "//caffe2:libtorch",
        "//caffe2/functorch:functorch",
        "//triton:triton",
        "z",
    ],
    cpp_deps = [
z
    ],
    main_module = "z",
    par_style = "xar",
)
)ÚjoinÚ
extra_depsÚtextwrapÚdedentr8   r6   Ú
cur_targetr2   )r;   r#   Úextra_cpp_depss      r$   ÚbuildÚBuckTargetWriter.buildu   sŽ   € ØŸ™½zÓ#Jºz¸! i°¨s°"Ó$5¹zÑ#JÓKˆÜ�Šðð �;‰;ˆ-ð Ø�l‰lˆ^ð 
ô ˆð ð Ð ð à—I‘I�;ð ð#ó
ð 	
ùò $Ks   ”A3c                ód  • [         R                  R                  U R                  S5      n[	        US5       nUR                  U R                  5       5        S S S 5        [        U R                  /-   nU(       a%  [        R                  SSR                  U5      5        U$ ! , (       d  f       NP= f)NÚTARGETSÚwzFFound an example that reproduces the error. Run this cmd to repro - %sÚ )r1   r2   rB   r5   ÚopenÚwriterH   ÚBUCK_CMD_PREFIXr:   ÚlogÚwarning)r;   Ú	print_msgÚtarget_fileÚfdÚ	cmd_splits        r$   rO   ÚBuckTargetWriter.write�   s�   € Ü—g‘g—l‘l 4§;¡;°	Ó:ˆÜ�+˜sÔ# rØ�H‰H�T—Z‘Z“\Ô"÷ $ô $ t×'9Ñ'9Ð&:Ñ:ˆ	ÞÜ�K‰KØXØ—‘˜Ó#ôð Ð÷ $Õ#ús   · B!Â!
B/)r:   r2   r6   r5   r8   N)r<   ÚstrÚreturnÚNone©rY   rX   )T)rS   ÚboolrY   ú	list[str])Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r>   rH   rO   Ú__static_attributes__r!   r@   r$   r*   r*   f   s   † ô6ô
÷4ñ r@   r*   c                 ó(  • [         R                  R                  [        5       S5      n U c-  [        R
                  " 5        S[        R                  " 5        3n [         R                  R                  U 5      (       d  [         R                  " U SS9  U $ )NÚminifierz
/minifier_T)Úexist_ok)
r1   r2   rB   r   ÚtempfileÚ
gettempdirÚgetpassÚgetuserÚexistsÚmakedirs)r2   s    r$   Úminifier_dirrl   �   se   € Ü�7‰7�<‰<œ›¨Ó4€DØ�|Ü×%Ò%Ó'Ð(¨
´7·?²?Ó3DÐ2EÐFˆÜ�7‰7�>‰>˜$×ÑÜ
�Š�D 4Ò(Ø€Kr@   é   c                  ó   • \ rS rSrSrg)ÚUnsupportedNNModuleErroré©   r!   N©r^   r_   r`   ra   rb   r!   r@   r$   ro   ro   ©   ó   † Úr@   ro   c                  óˆ  • \ rS rSrSS1r1 SkrSS1rSr\R                  R                  \R                  R                  \R                  R                  \R                  R                  \R                  R                  \R                  R                  \R                  R                   \R                  R"                  \R                  R$                  \R                  R&                  \R                  R(                  \R                  R*                  \R                  R,                  \R                  R.                  \R                  R0                  \R                  R2                  \R                  R4                  \R                  R6                  \R                  R8                  \R                  R:                  \R                  R<                  /r\ SS j5       r!\ SS	 j5       r"\ SS
 j5       r#\ SS j5       r$\ SS j5       r%\ SS j5       r&\ SS j5       r'\ SS j5       r(\ SS.     SS jj5       r)\ SS.SS jj5       r*Sr+g)ÚNNModuleToStringé­   z0torch.ao.quantization.fake_quantize.FakeQuantizezAtorch.ao.quantization.fake_quantize.FusedMovingAvgObsFakeQuantize>   ú#torch.ao.nn.qat.modules.conv.Conv1dú#torch.ao.nn.qat.modules.conv.Conv2dú#torch.ao.nn.qat.modules.conv.Conv3dú5torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBn1dú5torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBn2dú5torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBn3dú7torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvReLU1dú7torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvReLU2dú7torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvReLU3dú9torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBnReLU1dú9torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBnReLU2dú9torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBnReLU3dz%torch.ao.nn.qat.modules.linear.Linearz8torch.ao.nn.intrinsic.qat.modules.linear_relu.LinearReLU)ÚfbgemmÚx86ÚqnnpackÚonednnc                ó>  • [        5       nU R                  5        HY  u  p#[        U[        R                  R
                  5      (       a  M0  [        R                  U5      b  MH  UR                  U5        M[     [        U5      S:”  a  [        R                  SU5        gg)Nr   z2Cannot safely convert some modules to strings - %sFT)ÚsetÚnamed_childrenÚ
isinstanceÚtorchÚfxÚGraphModulert   Ú_module_constructor_stringÚaddÚlenrQ   rR   )ÚgmÚcant_convertÚ_Úmodules       r$   Úcan_convert_to_stringÚ&NNModuleToString.can_convert_to_stringã   s�   € ä“uˆØ×*Ñ*Ö,‰IˆAô ˜&¤%§(¡(×"6Ñ"6×7Ñ7ÙÜ×:Ñ:¸6ÓBÓJØ× Ñ  Ö(ñ -ô ˆ|Ó˜qÓ Ü�K‰KØDÀlôð Ør@   c                ó\   • [        U 5      R                   S[        U 5      R                   3$ ©Nr.   )Útyper_   r^   )r“   s    r$   Ú_module_type_nameÚ"NNModuleToString._module_type_nameõ   s)   € ä�v“,×)Ñ)Ð*¨!¬D°«L×,AÑ,AÐ+BÐCÐCr@   c                ó8   • U R                    SU R                   3$ r—   )r_   r^   )Útype_s    r$   Ú
_type_nameÚNNModuleToString._type_nameù   s   € à×"Ñ"Ð# 1 U§^¡^Ð$4Ð5Ð5r@   c                ó´  • [         R                  U 5      nU[         R                  ;  a  g U R                  n[	        [
        U R                  5      n[	        [
        U R                  5      n[        USS5      (       a  US-  nUS-  S-   nS[         R                  [        U5      5       3SU< 3SU< 3SU R                  < 3S	U R                  < 3S
U R                  < 3/n[        US5      (       a  UR                  SUR                   < 35        [        US5      (       a  UR                  SUR"                  < 35        U SSR%                  U5       S3$ )NÚreduce_rangeFé   r   z	observer=z
quant_min=z
quant_max=údtype=zqscheme=zis_dynamic=zreduce_range=Úch_axiszch_axis=Ú(ú, Ú))rt   r™   Úfake_quant_modulesÚactivation_post_processr   ÚintÚ	quant_minÚ	quant_maxÚgetattrr�   r˜   ÚdtypeÚqschemeÚ
is_dynamicÚhasattrÚappendr    r£   rB   )r“   Úmodule_typeÚobserverrª   r«   Úargss         r$   Ú_fake_quant_constructorÚ(NNModuleToString._fake_quant_constructorý   sJ  € ä&×8Ñ8¸Ó@ˆØÔ.×AÑAÓAØà×1Ñ1ˆÜœ˜f×.Ñ.Ó/ˆ	Üœ˜f×.Ñ.Ó/ˆ	Ü�8˜^¨U×3Ñ3Ø˜‰NˆIØ! A™¨Ñ)ˆIàÔ(×3Ñ3´D¸³NÓCÐDÐEØ˜™Ð&Ø˜™Ð&Ø�V—\‘\Ñ$Ð%Ø�v—~‘~Ñ(Ð)Ø˜&×+Ñ+Ñ.Ð/ð
ˆô �8˜^×,Ñ,Ø�K‰K˜-¨×(=Ñ(=Ñ'@ÐAÔBÜ�8˜Y×'Ñ'Ø�K‰K˜( 8×#3Ñ#3Ñ"6Ð7Ô8Ø�˜a §	¡	¨$£Ð0°Ð2Ð2r@   c                ó  • [        U SS 5      n[        R                   HN  n [        R                  R
                  R                  U5      n[        U5      [        U5      :X  d  MG  SU< S3s  $    g ! [         a     M`  f = f)NÚqconfigz6qconfig=torch.ao.quantization.get_default_qat_qconfig(r¦   )	r¬   rt   Údefault_qat_qconfig_backendsrŠ   ÚaoÚquantizationÚget_default_qat_qconfigÚAssertionErrorÚrepr)r“   r¸   ÚbackendÚdefault_qconfigs       r$   Ú_qat_qconfig_constructorÚ)NNModuleToString._qat_qconfig_constructor  sƒ   € ä˜& )¨TÓ2ˆÜ'×DÔDˆGðÜ"'§(¡(×"7Ñ"7×"OÑ"OÐPWÓ"X�ô �G‹}¤ _Ó 5Õ5ðØ‘{ !ð%òñ Eð øô "ó Úðús   ¢)A1Á1
A?Á>A?c           
     óœ  • [         R                  U 5      nU[         R                  ;  a  g [         R                  U 5      nUc  g [	        U R
                  5      [	        U R                  5      SU R                  < 3SU R                  < 3SU R                  < 3SU R                  < 3SU R                  < 3SU R                  S L 3SU R                  < 3/	n[        U SS 5      nUb>  UR                  S	UR                   < 3S
UR"                  < 3SU R$                  < 3/5        UR'                  U5        U SSR)                  U5       S3$ )Nzkernel_size=zstride=zpadding=z	dilation=zgroups=úbias=zpadding_mode=Úbnzeps=z	momentum=z
freeze_bn=r¤   r¥   r¦   )rt   r™   Úqat_conv_modulesrÁ   r¾   Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingÚdilationÚgroupsÚbiasÚpadding_moder¬   ÚextendÚepsÚmomentumÚ	freeze_bnr±   rB   )r“   r²   r¸   r´   rÅ   s        r$   Ú_qat_conv_constructorÚ&NNModuleToString._qat_conv_constructor&  sP  € ä&×8Ñ8¸Ó@ˆØÔ.×?Ñ?Ó?ØÜ"×;Ñ;¸FÓCˆØ‰?Øô �×#Ñ#Ó$Ü�×$Ñ$Ó%Ø˜6×-Ñ-Ñ0Ð1Ø�f—m‘mÑ&Ð'Ø�v—~‘~Ñ(Ð)Ø˜Ÿ™Ñ*Ð+Ø�f—m‘mÑ&Ð'Ø�F—K‘K tÐ+Ð,Ð-Ø˜F×/Ñ/Ñ2Ð3ð

ˆô �V˜T 4Ó(ˆØ‰>Ø�K‰Kà˜2Ÿ6™6™*Ð%Ø §¡™Ð/Ø  ×!1Ñ!1Ñ 4Ð5ðôð 	�‰�GÔØ�˜a §	¡	¨$£Ð0°Ð2Ð2r@   c                ó,  • [         R                  U 5      nU[         R                  ;  a  g [         R                  U 5      nUc  g [	        U R
                  5      [	        U R                  5      SU R                  S L 3U/nU SSR                  U5       S3$ )NrÄ   r¤   r¥   r¦   )	rt   r™   Úqat_linear_modulesrÁ   r¾   Úin_featuresÚout_featuresrÎ   rB   )r“   r²   r¸   r´   s       r$   Ú_qat_linear_constructorÚ(NNModuleToString._qat_linear_constructorF  s–   € ä&×8Ñ8¸Ó@ˆØÔ.×AÑAÓAØÜ"×;Ñ;¸FÓCˆØ‰?Øô �×#Ñ#Ó$Ü�×$Ñ$Ó%Ø�F—K‘K tÐ+Ð,Ð-Øð	
ˆð �˜a §	¡	¨$£Ð0°Ð2Ð2r@   c                ó‚   • [        U 5      [        R                  ;  a  g [        SU 3SS5        g! [         a     gf = f)NFzmod = z<module repr>ÚexecT)r˜   rt   Ú
safe_reprsÚcompileÚSyntaxError)r“   Ú
module_strs     r$   Ú_can_emit_module_constructorÚ-NNModuleToString._can_emit_module_constructorW  sI   € ä�‹<Ô/×:Ñ:Ó:Øð	Ü�f˜Z˜LÐ)¨?¸FÔCð øô ó 	Ùð	ús    1 ±
>½>F©Úallow_unsafe_reprc               ó  • [        U 5      n[        R                  X5      (       a  U$ [        R                  U 5      =(       d1    [        R	                  U 5      =(       d    [        R                  U 5      nUb  U$ U(       a  U$ g ©N)r¾   rt   râ   rµ   rÔ   rÚ   )r“   rå   rá   Úconstructor_strs       r$   r�   Ú+NNModuleToString._module_constructor_stringb  sy   € ô ˜&“\ˆ
Ü×8Ñ8¸×LÑLØÐä×4Ñ4°VÓ<÷ @Ü×5Ñ5°fÓ=÷@ä×7Ñ7¸Ó?ð 	ð
 Ñ&Ø"Ð"ÞØÐØr@   c               ó˜   ^^^^^^^• SSK Jm  Sm0 m/ mS	UUU4S jjmS
UUUU4S jjmST" U 5       3nSSR                  TU/-   5      -   $ )Nr   )Ú
_addindentú    c                ó¼   >• [        U5      T;   a  T[        U5         $ U  S[        T5       3nUT[        U5      '   T" U5      nTR                  SU SU 35        U$ )Nr’   zclass z(torch.nn.Module):
)Úidr�   r±   )Ú	name_hintÚsubÚ
class_nameÚbodyÚemit_module_bodyÚsubgraph_classesÚsubgraph_defss       €€€r$   Úregister_subgraphÚ3NNModuleToString.convert.<locals>.register_subgraphƒ  ss   ø€ ô �#‹wÐ*Ó*Ø'¬¨3«Ñ0Ð0Ø%˜; a¬Ð,<Ó(=Ð'>Ð?ˆJØ(2ÐœR ›WÑ%Ù# CÓ(ˆDØ× Ñ  6¨*¨Ð5IÈ$ÈÐ!PÔQØÐr@   c                óÎ  >• T STS-   S3nU R                  5        Hè  u  p#[        U[        R                  R                  5      (       a  T" X#5      nUTS-   SU SU S3-  nMI  [
        R                  UTS9nUc  [        SU< 35      e[        UR                  5       S 5      nUb  UO[        UR                  5       S 5      nUb,  UR                  R                  S	:w  a  U S
UR                   S3nUTS-   SU SU S3-  nMê     U R                  R                  5        GH  u  p‰U	c  M  U	R                  5       [         ::  aF  SSKJn
  U
R&                  [         :  a   [)        SU
R&                   S[          S35      e[+        U	5      nOh[        R,                  " U	5      (       a'  S[/        U	R0                  5       SU	R2                   S3nO&S[/        U	R0                  5       SU	R2                   S3nU	R                  R                  S	:w  a  U S
U	R                   S3nUTS-   SU SU S3-  nGM     U R4                  R                  5        Ho  u  pÍUc  M
  SnUR                  R                  S	:w  a  SUR                   S3nS[/        UR0                  5       SUR2                   U S3nUTS-   SU SU S3-  nMq     UT" U R6                  [9        T5      5       S3-  nU$ )Nzdef __init__(self) -> None:
r¡   zsuper().__init__()
zself.z = z()
rä   z!Cannot convert module to string: Úcpuz.to("z")r   r   )Ú
PRINT_OPTSzPRINT_OPTS.threshold (z() must be >= MAX_CONSTANT_NUMEL_INLINE (r¦   ztorch.randn(z, dtype=ztorch.randint(1, size=zself.register_buffer('z', z)
r   z
, device="Ú"ztorch.nn.Parameter(torch.randn(z)))rˆ   r‰   rŠ   r‹   rŒ   rt   r�   ro   ÚnextÚ
parametersÚbuffersÚdevicer˜   Ú_buffersÚitemsÚnumelÚMAX_CONSTANT_NUMEL_INLINEÚtorch._tensor_strrú   Ú	thresholdr½   r¾   Úis_floating_pointÚlistÚshaper­   Ú_parametersÚcoder�   )r“   Ú	model_strÚmodule_nameÚchildrñ   rá   Úexample_paramÚexample_tensorÚbuffer_nameÚbufferrú   Ú
tensor_strÚ
param_nameÚparamÚmaybe_devicerë   rå   rö   Útabs                  €€€€r$   ró   Ú2NNModuleToString.convert.<locals>.emit_module_bodyŽ  s;  ø€ à�%Ð4°S¸1±W°IÐ=QÐRð ð '-×&;Ñ&;Ö&=Ñ"�Ü˜e¤U§X¡X×%9Ñ%9×:Ñ:Ù!2°;Ó!F�JØ C¨!¡G 9¨E°+°¸cÀ*ÀÈTÐ!RÑR�IÙÜ-×HÑHØÐ->ð Ið �
ð Ñ%Ü2Ø;¸E¹9ÐEóð ô
 !% U×%5Ñ%5Ó%7¸Ó >�ð %Ñ0ñ "ä˜eŸm™m›o¨tÓ4ð ð
 "Ñ-°.×2GÑ2G×2LÑ2LÐPUÓ2UØ$. <¨u°^×5JÑ5JÐ4KÈ2Ð!N�JØ  a¡˜y¨¨k¨]¸#¸j¸\ÈÐLÑL’	ñ- '>ð0 (.§¡×'<Ñ'<×'>Ñ#�Ø‘>Ùà—<‘<“>Ô%>Ó>Ý<à!×+Ñ+Ô.GÓGÜ,Ø4°Z×5IÑ5IÐ4Jð K:Ü:SÐ9TÐTUðWóð ô "& f£‘JÜ×,Ò,¨V×4Ñ4à&¤t¨F¯L©LÓ'9Ð&:¸(À6Ç<Á<À.ÐPQÐRñ ð $:¼$¸v¿|¹|Ó:LÐ9MÈXÐV\×VbÑVbÐUcÐcdÐ!e�JØ—=‘=×%Ñ%¨Ó.Ø$. <¨u°V·]±]°OÀ2Ð!F�JØØ˜Q‘w�iÐ5°k°]À#ÀjÀ\ÐQTÐUñ“	ñ+ (?ð2 &,×%7Ñ%7×%=Ñ%=Ö%?Ñ!�
Ø‘=ÙØ!�Ø—<‘<×$Ñ$¨Ó-Ø%/°·±¨~¸QÐ#?�LØ>¼tÀEÇKÁKÓ?PÐ>QÐQYÐZ_×ZeÑZeÐYfÐgsÐftÐtvÐw�
Ø  a¡˜y¨¨j¨\¸¸Z¸LÈÐKÑK’	ñ &@ð ™J v§{¡{´C¸³HÓ=Ð>¸bÐAÑAˆIØÐr@   zclass Repro(torch.nn.Module):
z
from torch.nn import *
r   )rï   rX   rð   útorch.fx.GraphModulerY   rX   ©r“   útorch.nn.ModulerY   rX   )Útorch.nn.modules.modulerë   rB   )	r�   rå   Úrepro_classrë   ró   rö   rô   rõ   r  s	    ` @@@@@@r$   ÚconvertÚNNModuleToString.convertt  s_   þ€ å6àˆð ,.ÐØ#%ˆ÷		ñ 		÷@	ò @	ðD 8Ñ8HÈÓ8LÐ7MÐNˆà+¨d¯i©i¸ÈÈÑ8UÓ.VÑVÐVr@   r!   N)r�   r  rY   r\   r  )rœ   ztype[object]rY   rX   )r“   r  rY   ú
str | None)r“   r  rá   rX   rY   r\   )r“   r  rå   r\   rY   r  )r�   r  rå   r\   rY   rX   ),r^   r_   r`   ra   r§   rÆ   r×   r¹   rŠ   ÚnnÚLinearÚConv1dÚConv2dÚConv3dÚBatchNorm1dÚBatchNorm2dÚBatchNorm3dÚ	LayerNormÚDropoutÚSoftmaxÚReLUÚGELUÚIdentityÚ	MaxPool2dÚ	EmbeddingÚTanhÚConvTranspose1dÚGLUÚLSTMÚFlattenÚAdaptiveAvgPool2drÞ   Ústaticmethodr”   r™   r�   rµ   rÁ   rÔ   rÚ   râ   r�   r  rb   r!   r@   r$   rt   rt   ­   s%  † à:ØKðÐò
Ðð  	0ØBðÐð $JÐ ð 	�‰�‰Ø�‰�‰Ø�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰�‰Ø�‰× Ñ Ø�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×"Ñ"ð+€Jð0 óó ðð" óDó ðDð ó6ó ð6ð ó3ó ð3ð2 óó ðð ó3ó ð3ð> ó3ó ð3ð  óó ðð à>CñØðØ7;ðà	ôó ðð" ØGLö ]Wó ó]Wr@   rt   c                 óŽ  • [         R                  R                  5       (       d  gSn  [         R                  R                  cl  [
        R                  " SS/5      nUR                  5       R                  S5      nSR                  U Vs/ s H  o3S:w  d  M
  SU S3PM     sn5      nX S3-  n OU S	-  n  [        S [        [         R                  R                  5       5       5       5      nU S-  n UR                  5        H  u  pgU SU SU S3-  n M     U S-  n U $ s  snf ! [        [
        R                  4 a    U S
-  n  NŽf = f)Nz:# torch.cuda.is_available()==False, no GPU info collected
z# CUDA Info: 
Únvccz	--versionr   r   z# z 
z'# Not searching for nvcc on ROCM setup
z# nvcc not found
c              3  ó`   #   • U  H$  n[         R                  R                  U5      v •  M&     g 7frç   )rŠ   ÚcudaÚget_device_name)r"   Úis     r$   r%   Ú,_cuda_system_info_comment.<locals>.<genexpr>æ  s&   é € ð Ú/O¨!Œ�
‰
×"Ñ" 1×%Ð%Ò/Oùs   ‚,.z# GPU Hardware Info: 
z : )rŠ   r:  Úis_availableÚversionÚhipÚ
subprocessÚcheck_outputÚdecoder3   rB   ÚOSErrorÚCalledProcessErrorr   ÚrangeÚdevice_countr  )r  Úcuda_version_outÚcuda_version_linesÚsÚcommentÚ	gpu_namesÚnameÚcounts           r$   Ú_cuda_system_info_commentrO  Õ  sJ  € ä�:‰:×"Ñ"×$Ñ$ØLà!€Ið	*Ü�=‰=×ÑÑ$Ü)×6Ò6¸ÀÐ7LÓMÐØ!1×!8Ñ!8Ó!:×!@Ñ!@ÀÓ!FÐØ—g‘gÑ4FÓRÒ4F¨qÈrÉ'›{  A 3 c›{Ñ4FÑRÓSˆGØ˜9 B˜Ñ'‰IàÐCÑC‰Iô ñ Ü/4´U·Z±Z×5LÑ5LÓ5NÔ/Oóó €Ið Ð*Ñ*€IØ —‘Ö(‰ˆØ�r˜$˜˜s 5 '¨Ð-Ñ-Š	ñ )à�Ñ€IØÐùò Søô ”Z×2Ñ2Ð3ó *ØÐ)Ñ)Š	ð*ús0   ¨A!D" Â		DÂ
DÂ D" Â/D" ÄD" Ä"EÅEF)Ústable_outputc                óp  ^^^• U (       a  g/ SQm/ SQmSS/mSUUU4S jjn[         R                  R                  5        VVs/ s H-  u  p#U" U5      (       d  M  SU SUR                  S	S
5       S	3PM/     nnnUR	                  S T 5       5        SR                  U5      n[        SU S35      $ s  snnf )zd
Generate a string configuration for environment variables related to Dynamo, Inductor, and Triton.
z+# env var omitted due to stable_output=True)ÚTORCHÚDYNAMOÚINDUCTORÚTRITON)ÚTRITON_LIBDEVICE_PATHÚTRITON_PTXAS_PATHÚTRITON_LIBCUDA_PATHÚTORCHDYNAMO_REPRO_AFTERÚTORCHDYNAMO_REPRO_LEVELc                ó`   >^ • [        U 4S jT 5       5      =(       a    T T;  =(       a    T T;  $ )Nc              3  ó,   >#   • U  H	  oT;   v •  M     g 7frç   r!   )r"   ÚstringÚkeys     €r$   r%   Ú;generate_env_vars_string.<locals>.filter.<locals>.<genexpr>þ  s   øé € Ð7ªJ &˜#–ªJùs   ƒ)Úany)r^  Ú
allow_listÚrepro_env_varsÚ	skip_lists   `€€€r$   ÚfilterÚ(generate_env_vars_string.<locals>.filterü  s0   ù€ äÔ7©JÓ7Ó7÷ *Ø˜9Ñ$÷*à˜>Ñ)ð	
r@   zos.environ['z'] = 'Ú'rû   c              3  ó.   #   • U  H  nS U S3v •  M     g7f)zos.environ.pop('z', None)Nr!   )r"   r^  s     r$   r%   Ú+generate_env_vars_string.<locals>.<genexpr>	  s   é € ÐSÂN¸SÐ*¨3¨%¨xÕ8ÂNùr&   r   z
import os
z
    )r^  rX   rY   r\   )r1   Úenvironr  r7   rÐ   rB   r   )	rP  rd  r^  ÚvalueÚconfig_linesÚconfig_stringra  rb  rc  s	         @@@r$   Úgenerate_env_vars_stringrm  ñ  sÊ   ú€ ö Ø<â:€JÚU€IØ/Ð1JÐK€N÷
ñ 
ô Ÿ*™*×*Ñ*Ô,ôâ,‰JˆCÙ�#�;ó 	AˆL˜˜˜V E§M¡M°#°sÓ$;Ð#<¸AÓ@Ù,ð ñ ð ×ÑÑSÁNÓSÔSØ—I‘I˜lÓ+€MÜ#ð )à€ð ð%ó 	ð 	ùós   ÁB2ÁB2c                ó„  • SS K nSS KnSSKJn  U (       a  g/ nUR                  R                  5        HT  n[        U[        5      (       d  M  UR                  5       nU(       d  M3  UR                  SUR                   SU 35        MV     SR                  U5      nUR                  R                  R                  R                  5       nSUR                  R                   R                  5        SUR"                  R                   R                  5        SUR$                  R                   R                  5        SU SU S3$ )Nr   )Úcommonz*# config omitted due to stable_output=Truezimport r   z~import torch._dynamo.config
import torch._inductor.config
import torch._functorch.config
import torch.fx.experimental._config
)Útorch._functorch.configÚtorch._inductor.configÚtorch._inductor.codegenro  Úcustom_backend_codegen_configsÚvaluesr‰   r   Úcodegen_configr±   r^   rB   r‹   ÚexperimentalÚ_configÚ_dynamor   Ú	_inductorÚ
_functorch)rP  rŠ   ro  Úextra_codegen_configsÚcru  Úextra_codegen_configs_strÚexperimental_configs           r$   Úgenerate_config_stringr    s&  € Û"Û!Ý.æØ;ð
 ÐØ×2Ñ2×9Ñ9Ö;ˆÜ�aœ×&Ó&Ø×-Ñ-Ó/ˆNßˆ~Ø%×,Ñ,¨w°q·z±z°lÀ"À^ÐDTÐ-UÖVñ	 <ð
 !%§	¡	Ð*?Ó @ÐàŸ(™(×/Ñ/×7Ñ7×FÑFÓHÐðð
 ‡�×Ñ×$Ñ$Ó&Ð 'ð (Ø‡�×Ñ×&Ñ&Ó(Ð )ð *Ø×Ñ×Ñ×'Ñ'Ó)Ð *ð +ØÐ ð ØÐ ð ð
ð 
r@   c                 óR   • [         R                  R                  [        5       S5      $ )Nzminifier_launcher.py)r1   r2   rB   rl   r!   r@   r$   Úget_minifier_repro_pathr�  3  s   € Ü�7‰7�<‰<œ›Ð(>Ó?Ð?r@   c                óh  • [        5       n[        R                  SU5        [        (       a  [	        U5      R                  5          [        US5       nUR                  U 5        S S S 5        g ! , (       d  f       g = f! [         a)  n[        R                  S5        [        SU 35      UeS nAff = f)NzWriting minified repro to:
%srL   r   zCould not write to )
r�  rQ   rR   Úuse_buckr*   rO   rN   rD  Ú	exceptionÚNotImplementedError)ÚcontentsÚminified_repro_pathrU   Úes       r$   Úhelper_for_dump_minifyr‰  7  s”   € Ü1Ó3ÐÜ‡K�KÐ0Ð2EÔFç‚xÜÐ,Ó-×3Ñ3Ô5ðVÜÐ% sÔ+¨rØ�H‰H�XÔ÷ ,×+Ö+ûô ó VÜ�‰�bÔÜ!Ð$7Ð8KÐ7LÐ"MÓNÐTUÐUûðVús6   ÁA> ÁA-Á$A> Á-
A;Á7A> Á;A> Á>
B1Â$B,Â,B1c                  ó   • \ rS rSrSrg)ÚAccuracyErroriF  r!   Nrq   r!   r@   r$   r‹  r‹  F  rr   r@   r‹  c                óÖ   • [        U 5      n[        [        U 5      5       HE  n[        X   [        R
                  5      (       d  M&  X   R                  X   R                  5        MG     U$ )zÖ
This clone inputs is different from utils clone_input. In case of minifier,
all the tensors are leaf tensors while creating a new graph. So, we set the
requires_grad field w/o checking the leafness of the tensor.
)r   rF  r�   r‰   rŠ   r
   Úrequires_grad_Úrequires_grad)Úexample_inputsÚcloned_inputsÚidxs      r$   Úclone_inputs_retaining_gradnessr’  J  sX   € ô ! Ó0€MÜ”S˜Ó(Ö)ˆÜ�mÑ(¬%¯,©,×7Ó7ØÑ×-Ñ-¨nÑ.A×.OÑ.OÖPñ *ð Ðr@   c                óX  • SSK JnJnJn  [        R
                  " U 5      n U(       d  [        U5      n[        U S5      (       a  U R                  S5        [        U SS5      (       a  U " U5      OU " U6 nU(       a  U$ U" U5      (       a  U" U5      nUR                  5         U" XSU5      $ )zÓ
Runs a forward and possibly backward iteration for a given mod and args.

When disable_clone is True, we will use args as-is without cloning.
This is higher fidelity but we may destroy the args in the process.
r   )Úcollect_resultsÚreduce_to_scalar_lossÚrequires_bwd_passÚ	zero_gradTÚ_boxed_callFN)Útestingr”  r•  r–  ÚcopyÚdeepcopyr’  r°   r—  r¬   Úbackward)	r�   r´   Úonly_fwdÚdisable_cloner”  r•  r–  ÚoutÚlosss	            r$   Úrun_fwd_maybe_bwdr¡  W  s“   € ÷ SÑRä	�Š�rÓ	€BÞÜ.¨tÓ4ˆäˆr�;×ÑØ
�‰�TÔô ˜b -°×7Ñ7‰"ˆTŒ(¹RÀ¸Y€CæØˆ
Ù˜×ÑÙ$ SÓ)ˆØ�‰ŒÙ˜2 D¨$Ó/Ð/r@   ©Úrequire_fp64Úignore_non_fpc          	     óÌ  • SSK Jn  [        XU5      nSn[        R                  (       a8   [        [        R                  " U 5      [        U5      5      u  pš[        XšU5      n [        XU5      nU" UUU[        R                  SUS9nU$ ! [         a*    U(       a  [        S5      e[        R                  S5         N[f = f! [         a    [        R                  S5         gf = f)	aI  
Check two models have same accuracy.

require_fp64: if True, raise an error if we unable to calculate the fp64 reference
ignore_non_fp: if True, do not compare outputs which are not floating point.  This
    is mostly useful for the minifier (which wants to avoid quantizing floating point
    error into integer/boolean error)
r   )ÚsameNzfCould not generate fp64 outputs, workaround with torch._dynamo.config.same_two_models_use_fp64 = FalsezCould not generate fp64 outputsz�While minifying the program in accuracy minification mode, ran into a runtime exception which is likely an unrelated issue. Skipping this graph.T)ÚtolÚ	equal_nanr¤  )Úutilsr¦  r¡  r   Úsame_two_models_use_fp64Úcast_to_fp64rš  r›  r’  Ú	ExceptionÚRuntimeErrorrQ   rR   r„  Úrepro_tolerance)r�   Úopt_gmr�  r�  r£  r¤  r¦  ÚrefÚfp64_refÚ
fp64_modelÚfp64_examplesÚresÚpassings                r$   Úsame_two_modelsr¶  w  sì   € õ" ä
˜B°Ó
9€Cà€HÜ×&×&ð
	;Ü(4Ü—’˜bÓ!Ô#BÀ>Ó#Ró)Ñ%ˆJô )¨ÀHÓMˆHð
Ü ¸ÓAˆñ ØØØÜ×"Ñ"ØØ#ñ€Gð €Nøô7 ó 	;ÞÜ"Ø|óð ô �K‰KÐ9Ö:ð	;ûô ó ô 	�‰ð$ô	
ñ
 ðús#   «7B
 Á#C Â
1B>Â=B>ÃC#Ã"C#c                óN  • U R                   R                   GH_  nUR                  S:X  a×  UR                  [        R
                  R                  R                  R                  L aœ  [        UR                  5      S:w  a!  [        S[        UR                  5       35      e[        UR                  S   5      (       aE  UR                  S   [        R                  :w  a$  UR                  S   [        R                  4Ul
        UR                  S:X  d  Mý  UR                  R                  S5      nUc  GM  [        U5      (       d  GM1  [!        UR                  5      n[        R                  US'   X1l        GMb     U R                   R#                  5         U R%                  5         U $ )NÚcall_functionr¡   z"Expected node to have 2 args, got r   r   r­   )ÚgraphÚnodesÚopr8   rŠ   ÚopsÚprimsÚconvert_element_typeÚdefaultr�   r´   r½   r   Úfloat64ÚkwargsÚgetÚdictÚlintÚ	recompile)ÚmodelÚnoder­   Ú
new_kwargss       r$   Úcast_dtype_args_to_fp64rÉ  ±  s"  € Ø—‘×!Õ!ˆà�G‰G�Ó&Ø—‘œuŸy™yŸ™×CÑC×KÑKÒKä�4—9‘9‹~ Ó"Ü$Ø8¼¸T¿Y¹Y»Ð8HÐIóð ô ˜dŸi™i¨™l×+Ñ+°·	±	¸!±ÄÇÁÓ0MØ!ŸY™Y q™\¬5¯=©=Ð9�”	Ø�7‰7�oÕ%Ø—K‘K—O‘O GÓ,ˆEØÔ ¤^°E×%:Ô%:Ü! $§+¡+Ó.�
Ü&+§m¡m�
˜7Ñ#Ø(—ñ! "ð$ 
‡K�K×ÑÔØ	‡O�OÔØ€Lr@   c                ó�   ^ • SSK Jn  UR                  T 5      nT [        R                  :X  a  [        U5      nU" U 4S jU5      nX4$ )Nr   )Útree_mapc                ó’   >• [        U [        R                  5      (       a&  U R                  5       (       a  U R	                  T5      $ U $ rç   )r‰   rŠ   r
   r  Úto)r#   r­   s    €r$   Ú<lambda>Úcast_to.<locals>.<lambda>Õ  s<   ø€ Ü�aœŸ™×&Ñ&¨1×+>Ñ+>×+@Ñ+@ð —$‘$�u“+ð àðr@   )Útorch.utils._pytreerË  rÍ  rŠ   rÀ  rÉ  )r­   rÆ  ÚinputsrË  s   `   r$   Úcast_torÒ  É  sK   ø€ õ -à�H‰H�U‹O€EØ”—‘Óô (¨Ó.ˆáô	ð 	ó	€Fð ˆ=Ðr@   c                ó6   • [        [        R                  X5      $ rç   )rÒ  rŠ   rÀ  )rÆ  rÑ  s     r$   r«  r«  Ý  s   € ô ”5—=‘= %Ó0Ð0r@   c          	     óÀ   •  U" [         R                  " U 5      [        U5      5      n[        U UUUUUS9(       + $ ! [         a    [
        R                  S5         gf = f)Nr¢  z�While minifying the program in accuracy minification mode, ran into a runtime exception which is likely an unrelated issue. Skipping this graphF)rš  r›  r’  r¶  r¬  rQ   r„  )r�   r�  Úcompiler_fnr�  r£  r¤  Úcompiled_gms          r$   Úbackend_accuracy_failsr×  ã  st   € ðÙ!Ü�MŠM˜"ÓÔ>¸~ÓNó
ˆô #ØØØØØ%Ø'ñ
ô 
ð 	
øô ó ô 	�‰ð#ô	
ñ
 ðús   ‚8; »AÁAc               ó8   • U b  U $ [         R                  " U5      $ rç   )r©  Úmake_contiguous_strides_for)rÊ   r  s     r$   Ú_stride_or_defaultrÚ    s   € ð
 Ñ'ˆ6ÐU¬U×-NÒ-NÈuÓ-UÐUr@   c                ó   ^ • U 4S j$ )Nc                ó   >• U b  U $ T$ rç   r!   )r#   Úds    €r$   rÎ  Ú_mk_defaulter.<locals>.<lambda>  s   ø€ ˜!™-�QÐ.¨QÐ.r@   r!   )rÝ  s   `r$   Ú_mk_defaulterrß    s	   ø€ Ü.Ð.r@   rù   c                  ó€   • \ rS rSrSS jrSSS.         SS jjrSS jrSS jrSS jrSS	 jr	SS
 jr
SS jrSrg)ÚNopInputReaderi  c                ó   • SU l         g )Nr   ©Útotal)r;   s    r$   r>   ÚNopInputReader.__init__   s	   € Øˆ�
r@   N©rÿ   Ú
dtype_hintc               ó.   • U =R                   S-  sl         g ©Nr   rã  )r;   Ústorage_hashÚnbytesrÿ   rç  s        r$   ÚstorageÚNopInputReader.storage#  s   € ð 	�
Š
�a‰Ž
r@   c                ó   • g rç   r!   ©r;   r´   rÁ  s      r$   ÚtensorÚNopInputReader.tensor-  ó   € Ør@   c                ó   • g rç   r!   rï  s      r$   ÚsymintÚNopInputReader.symint0  rò  r@   c                ó   • g rç   r!   ©r;   rM  s     r$   ÚconstÚNopInputReader.const3  rò  r@   c                ó   • g rç   r!   r÷  s     r$   ÚunsupportedÚNopInputReader.unsupported6  rò  r@   c                ó   • g rç   r!   )r;   Údevice_typeÚdevice_indexs      r$   Ú	generatorÚNopInputReader.generator9  rò  r@   c                ó.   • U =R                   S-  sl         g ré  rã  ©r;   Úscript_class_names     r$   ÚopaqueÚNopInputReader.opaque<  s   € Ø�
Š
�a‰Ž
r@   rã  ©rY   rZ   )
rê  r  rë  r©   rÿ   ú)torch._prims_common.DeviceLikeType | Nonerç  útorch.dtype | NonerY   rZ   )r´   r   rÁ  r   rY   ztorch.Tensor | None)r´   r   rÁ  r   rY   ú
int | None©rM  rX   rY   rZ   )rþ  rX   rÿ  r©   rY   rZ   ©r  rX   rY   rZ   ©r^   r_   r`   ra   r>   rì  rð  rô  rø  rû  r   r  rb   r!   r@   r$   rá  rá    sc   † ôð =AØ)-ñà ðð ðð
 :ðð 'ðð 
õôôôôô÷r@   rá  c                  óÖ   • \ rS rSr SSS.     SS jjjrSSS.         SS jjr SSSSSS.                 SS jjjrSS	.SS
 jjrSS jrSS jr	SS jr
SS jrSrg)ÚInputReaderiB  N)Úpbarc               óx   • Uc  [         R                  S5        Ub  [        U5      OS U l        / U l        X l        g )Nz0no save_dir specified, will generate random data)rQ   rR   r   Ústorer´   r  )r;   Úsave_dirr  s      r$   r>   ÚInputReader.__init__C  s7   € ð ÑÜ�K‰KÐJÔKØ5=Ñ5IÔ'¨Ô1ÈtˆŒ
Ø!ˆŒ	Ø�	r@   ræ  c               óÜ  • U R                   b  U R                   R                  S5        [        U5      n[        U5      nU R                  bP  UbM   U R                  R                  U5      nX5R                  :w  a   [        R                  SX5R                  5        U$ [        SU S35        X$R                  -  4n[        S US9n[        XgXC5      R                  5       $ ! [         a     NNf = f)Nr   zdevice mismatch: %s != %szcould not load z , generating random data instead©r  )r  ÚupdateÚ_device_or_defaultÚ_dtype_or_defaultr  Úread_storagerÿ   rQ   rR   ÚFileNotFoundErrorr   ÚitemsizerÚ  r   Úuntyped_storage)r;   rê  rë  rÿ   rç  rì  r  rÊ   s           r$   rì  ÚInputReader.storageP  sÛ   € ð �9‰9Ñ Ø�I‰I×Ñ˜QÔÜ# FÓ+ˆÜ& zÓ2ˆ
Ø�:‰:Ñ! lÑ&>ð
ØŸ*™*×1Ñ1°,Ó?�ð Ÿ^™^Ó+Ü—K‘KÐ ;¸VÇ^Á^ÔTð �Ü�O L >Ð1QÐRÔSØ×.Ñ.Ñ.Ð0ˆÜ# D°Ñ6ˆÜ˜E¨:Ó>×NÑNÓPÐPøô %ó Ùðús   ÁC Ã
C+Ã*C+)Ústorage_offsetr­   rŽ  Úis_leafc               óš  • [        X2S9n[        U5      n[        U5      n[        U5      n[	        U5      n[
        R                  " / XQR                  US9n	[
        R                  " 5          U	R                  XX#5        S S S 5        U(       dk  [
        R                  " 5          U	R                  [
        R                  S9n	S S S 5        [
        R                  " 5          U	R                  XX#5        S S S 5        [
        R                  R                  R                  U	5      U:w  a8  [!        S[
        R                  R                  R                  U	5       SU 35      e[
        R"                  R%                  X˜5        U R&                  R)                  U	5        U	$ ! , (       d  f       GN"= f! , (       d  f       Nñ= f! , (       d  f       NÒ= f)Nr  )r­   rÿ   rŽ  )Úmemory_formatz/Tensor leaf status mismatch: safe_is_leaf(t) = z, expected )rÚ  Ú_storage_offset_or_defaultr  Ú_is_leaf_or_defaultÚ_requires_grad_or_defaultrŠ   rð  rÿ   Úno_gradÚset_Úenable_gradÚcloneÚpreserve_formatÚ_subclassesÚ
meta_utilsÚsafe_is_leafr½   Ú_utilsÚset_tensor_metadatar´   r±   )
r;   rì  r  rÊ   r  r­   rŽ  r   ÚmetadataÚts
             r$   rð  ÚInputReader.tensorm  sM  € ô $ FÑ8ˆÜ3°NÓCˆÜ! %Ó(ˆÜ% gÓ.ˆÜ1°-Ó@ˆÜ�LŠLØ�e§N¡NÀ-ñ
ˆô �]Š]�_Ø�F‰F�7¨EÔ:÷ æä×"Ò"Õ$Ø—G‘G¬%×*?Ñ*?�GÐ@�÷ %ä—’•Ø—‘�w°Ô>÷ !ä×Ñ×'Ñ'×4Ñ4°QÓ7¸7ÓBÜ ØAÜ×$Ñ$×/Ñ/×<Ñ<¸QÓ?Ð@ÀÈGÈ9ðVóð ô 	�‰×(Ñ(¨Ô5Ø�	‰	×Ñ˜ÔØˆ÷ Ž_ú÷ %Õ$úç •ús$   Á+FÂ"F+ÃF<Æ
F(Æ+
F9Æ<
G
)Úexprc               óº   • U R                   R                  U5        Ub<  [        U S5      (       d  0 U l        X R                  [	        U R                   5      S-
  '   U$ )NÚsymint_exprsr   )r´   r±   r°   r5  r�   )r;   Úvalr3  s      r$   rô  ÚInputReader.symint’  sO   € Ø�	‰	×Ñ˜ÔØÑÜ˜4 ×0Ñ0Ø46�Ô!Ø48×Ñœc $§)¡)›n¨qÑ0Ñ1Øˆ
r@   c                ó:   • U R                   R                  S 5        g rç   ©r´   r±   r÷  s     r$   rø  ÚInputReader.constš  ó   € Ø�	‰	×Ñ˜Õr@   c                ó:   • U R                   R                  S 5        g rç   r9  r÷  s     r$   rû  ÚInputReader.unsupported�  r;  r@   c                ó�   • [         R                  " X5      n[         R                  " US9nU R                  R	                  U5        U$ )N)rÿ   )rŠ   rÿ   Ú	Generatorr´   r±   )r;   rþ  rÿ  rÿ   Úgens        r$   r   ÚInputReader.generator   s5   € Ü—’˜kÓ8ˆÜ�oŠo VÑ,ˆØ�	‰	×Ñ˜ÔØˆ
r@   c                ó:   • U R                   R                  S 5        g rç   r9  r  s     r$   r  ÚInputReader.opaque¦  r;  r@   )r´   r  r  r5  rç   )r  r  r  ztqdm | NonerY   rZ   )
rê  r  rë  r©   rÿ   r  rç  r	  rY   r   )rì  r   r  útorch._prims_common.ShapeTyperÊ   ú%torch._prims_common.StrideType | Noner  r
  r­   r	  rŽ  úbool | Noner   rF  r0  r   rY   útorch.Tensor)r6  r   r3  r  rY   r   r  )rþ  rX   rÿ  r©   rY   r   r  r  r!   r@   r$   r  r  B  s  † à%)ðØBFñØ"ðØ4?ðà	öð$ =AØ)-ñQà ðQð ðQð
 :ðQð 'ðQð 
õQðB 9=ð	#ð &*Ø$(Ø%)Ø#ñ#àð#ð -ð#ð 6ð	#ð #ð#ð "ð#ð #ð#ð ð#ð ð#ð 
ö#ðJ 6:÷ ôôô÷r@   r  c                ó¶   • [        U [        R                  5      (       a0  SSKJn  U" 5       R                  U R                  R                  5      $ [        U 5      $ )Nr   )ÚSymExprPrinter)	r‰   rŠ   ÚSymIntÚ%torch.fx.experimental.symbolic_shapesrI  ÚdoprintrÇ  r3  r¾   )rë  rI  s     r$   Ú_serialize_storage_nbytesrM  ¶  s>   € Ü�&œ%Ÿ,™,×'Ñ'ÝHáÓ×'Ñ'¨¯©×(8Ñ(8Ó9Ð9Ü�‹<Ðr@   c                  óŽ   • \ rS rSrSS.SS jjrSS jrSSS.       SS jjrSS	 jrSS
 jrSS jr	SS jr
SS jrSS jrSrg)ÚInputWriteri¾  F©Ústable_hashc               ó†   • / U l         [        R                  " 5       U l        Xl        Ub	  [        XS9OS U l        0 U l        g )NrP  )Ú_linesÚ	itertoolsrN  Ústorage_counterr  r   r  Úseen_storages)r;   r  rQ  s      r$   r>   ÚInputWriter.__init__¿  sC   € Ø!#ˆŒä(ŸšÓ0ˆÔØ Œð Ñ#ô ˜xÒAàð 	Œ
ð
 9;ˆÕr@   c                ór   • S/nUR                  S U R                   5       5        UR                  S5        U$ )Nzdef load_args(reader):c              3  ó,   #   • U  H
  nS U 3v •  M     g7f)rì   Nr!   )r"   Úls     r$   r%   Ú$InputWriter.lines.<locals>.<genexpr>Ï  s   é € Ð1¢[ �4˜�s•¢[ùs   ‚zload_args._version = 0)rÐ   rS  r±   )r;   Úrs     r$   ÚlinesÚInputWriter.linesË  s8   € à$ð
ˆð 	
�‰Ñ1 T§[¢[Ó1Ô1ð 	
�‰Ð)Ô*Øˆr@   N)Údevice_hintrç  c          
     ó~  • [        U5      nU R                  R                  U5      nUb  U$ S[        U R                  5       3nSn[        S 5      [        U5      :w  a  SU< 3nSnUR                  nUR                  S:X  a  Uc  [        S5      eUn[        S 5      U:w  a  SU< 3nUR                  5       n	[        U	5      n
S nU R                  b5  UR                  R                  S:w  a  U R                  R                  U5      nU R                  R                  U SU< SU
 U U S	35        XPR                  U'   U$ )
NÚbufr   z, dtype_hint=Úmetaz:device_hint must be provided when storage device is 'meta'z	, device=z = reader.storage(r¥   r¦   )r   rV  rÂ  rü   rU  r  rÿ   r˜   r½   r  rë  rM  r  Úwrite_storagerS  r±   )r;   r  r_  rç  ÚwsÚvÚmaybe_dtype_hintr  rÿ   rë  Únbytes_sourcerê  s               r$   rì  ÚInputWriter.storageÚ  sX  € ô ˜OÓ,ˆØ×Ñ×"Ñ" 2Ó&ˆØ‰=ØˆHØ”$�t×+Ñ+Ó,Ð-Ð.ˆØÐÜ˜TÓ"Ô&7¸
Ó&CÓCØ!.¨z©nÐ=Ðð ˆØ ×'Ñ'ˆØ�;‰;˜&Ó ØÑ"Ü$ØPóð ð !ˆFÜ˜dÓ# vÓ-Ø& v¡jÐ1ˆLØ ×'Ñ'Ó)ˆÜ1°&Ó9ˆØˆØ�:‰:Ñ! o×&<Ñ&<×&AÑ&AÀVÓ&KØŸ:™:×3Ñ3°OÓDˆLØ�‰×ÑØˆcÐ# LÑ#3°2°m°_À\ÀNÐScÐRdÐdeÐfô	
ð "#×Ñ˜2ÑØˆr@   c                ó”  • SSK JnJn  U R                  UR	                  5       UR
                  UR                  S9n/ nU" U" [        S UR                  S9UR                  5       5      5      (       d1  UR                  [        [        UR                  5       5      5      5        [        S 5      UR
                  :w  a  UR                  SUR
                  < 35        U" [        S 5      UR                  5       :H  5      (       d#  UR                  SUR                  5       < 35        [         R"                  R%                  U5      nU(       a&  UR'                  S UR)                  5        5       5        [+        S 5      UR,                  :w  a  UR                  SUR,                  < 35        [         R.                  R0                  R3                  U5      n[5        S 5      U:w  a  UR                  S	U< 35        U R6                  R                  S
SR9                  U[        [        UR                  5      5      /UQ5      -   SU 3-   5        g )Nr   )Ústatically_known_trueÚsym_eq)rç  r_  r  r¢   zstorage_offset=c              3  ó6   #   • U  H  u  pU S U< 3v •  M     g7f)Ú=Nr!   )r"   Úkre  s      r$   r%   Ú%InputWriter.tensor.<locals>.<genexpr>  s   é € ÐIÒ1H©¨˜1˜#˜Q˜q™e�Ò1Hùs   ‚zrequires_grad=zis_leaf=zreader.tensor(r¥   ú)  # )rK  rj  rk  rì  r  r­   rÿ   rÚ  r  rÊ   r±   rX   Útupler  r#  r  rŠ   r.  Úget_tensor_metadatarÐ   r  r%  rŽ  r+  r,  r-  r$  rS  rB   )	r;   rM  r1  rj  rk  rì  r´   Útensor_metadatar   s	            r$   rð  ÚInputWriter.tensor   sÊ  € ßWà—,‘,Ø×ÑÓ¨A¯G©GÀÇÁð ð 
ˆð ˆá$ÙÔ% d°!·'±'Ñ:¸A¿H¹H»JÓG÷
ñ 
ð �K‰KœœE !§(¡(£*Ó-Ó.Ô/Ü˜TÓ" a§g¡gÓ-Ø�K‰K˜& §¡¡Ð,Ô-Ù$Ü& tÓ,°×0@Ñ0@Ó0BÑB÷
ñ 
ð �K‰K˜/¨!×*:Ñ*:Ó*<Ñ)?Ð@ÔAÜŸ,™,×:Ñ:¸1Ó=ˆÞØ�K‰KÑI°×1FÑ1FÔ1HÓIÔIÜ$ TÓ*¨a¯o©oÓ=Ø�K‰K˜.¨¯©Ñ(;Ð<Ô=Ü×#Ñ#×.Ñ.×;Ñ;¸AÓ>ˆÜ˜tÓ$¨Ó/Ø�K‰K˜( 7¡+Ð.Ô/Ø�‰×ÑØØ�i‰i˜¤#¤e¨A¯G©G£nÓ"5Ð=¸Ð=Ó>ñ?à�d�Vˆnñõ	
r@   c                ó,  • U R                   R                  SU< S[        U5       35        [        U[        [
        45      (       aÎ  U R                   R                  S5        [        U5       Hˆ  u  p4U SU S3n[        U[        R                  5      (       a  U R                  XT5        M?  [        U[        [        R                  45      (       a  U R                  XT5        Mw  U R                  XT5        MŠ     U R                   R                  S5        g g )Nzreader.unsupported(z#)  # unsupported type for dumping: z"""Ú[Ú])rS  r±   r˜   r‰   r  rq  Ú	enumeraterŠ   r
   rð  r©   rJ  rô  rû  )r;   rM  Úargr<  ÚaÚname_is         r$   rû  ÚInputWriter.unsupported   sÖ   € à�‰×ÑØ! $¡Ð)LÌTÐRUËYÈKÐXô	
ô
 �cœD¤%˜=×)Ñ)Ø�K‰K×Ñ˜uÔ%Ü! #ž‘�Ø ˜6  1 # Q˜�Ü˜a¤§¡×.Ñ.Ø—K‘K Ö*Ü ¤C¬¯©Ð#6×7Ñ7Ø—K‘K Ö*à×$Ñ$ VÖ/ñ 'ð �K‰K×Ñ˜uÕ%ð *r@   c                óJ   • U R                   R                  SU< SU S35        g )Nzreader.const(rp  z!, filtered out during compilation©rS  r±   r÷  s     r$   rø  ÚInputWriter.const4  s'   € Ø�‰×ÑØ˜D™8 5¨¨Ð.OÐPõ	
r@   c                ó>  • [        U[        R                  5      (       a\  [        UR                  R
                  5      nUR                  R                  nU R                  R                  SU< SU< SU 35        g U R                  R                  SU< SU 35        g )Nzreader.symint(z, expr=rp  )	r‰   rŠ   rJ  rX   rÇ  r3  ÚhintrS  r±   )r;   rM  r6  Úexpr_strr�  s        r$   rô  ÚInputWriter.symint:  sw   € Ü�cœ5Ÿ<™<×(Ñ(Ü˜3Ÿ8™8Ÿ=™=Ó)ˆHØ—8‘8—=‘=ˆDØ�K‰K×Ñ °©x°w¸x¹lÈ%ÐPTÈvÐVÕWà�K‰K×Ñ °©w°e¸D¸6ÐBÕCr@   c                ó�   • UR                   nU R                  R                  SUR                  < SUR                  < SU 35        g )Nzreader.generator(r¥   rp  )rÿ   rS  r±   r˜   Úindex)r;   rM  ry  rÿ   s       r$   r   ÚInputWriter.generatorB  s<   € Ø—‘ˆØ�‰×ÑØ §¡™¨b°·±Ñ0@ÀÀdÀVÐLõ	
r@   c                óH   • U R                   R                  SU< SU 35        g )Nzreader.opaque(rp  r~  )r;   rM  r  s      r$   r  ÚInputWriter.opaqueH  s#   € Ø�‰×Ñ˜^Ð,=Ñ+@ÀÀdÀVÐLÕMr@   )rS  r  rV  rU  r  )r  r  rQ  r\   rY   rZ   )rY   r]   )r  r   r_  r  rç  r	  rY   rX   )rM  rX   r1  rG  rY   rZ   )rM  rX   ry  r   rY   rZ   r  )rM  rX   r6  r   rY   rZ   )rM  rX   ry  ztorch._C.GeneratorrY   rZ   )rM  rX   r  rX   rY   rZ   )r^   r_   r`   ra   r>   r]  rì  rð  rû  rø  rô  r   r  rb   r!   r@   r$   rO  rO  ¾  sf   † ØDI÷ 
;ôð& BFØ)-ñ$à'ð$ð ?ð	$ð
 'ð$ð 
õ$ôL
ô@&ô(
ôDô
÷Nr@   rO  c           	     óú  ^^^^• SSK Jn  UR                  5        VVs0 s H  u  pVXe_M	     nnnSR                  UR	                  5       5      n[
        R                  " U 5      n	SU S3n
SU S3nSn " S	 S
5      n0 nU=(       d    0 mSUU4S jjmSUU4S jjnU R                  nUR                  " 5        H¤  u  nnUS:X  a  M  [        R                  " UU5      nU(       a>  UR                  5       u  nn[        UR                  S5      5      nUU   nU" UU5      UU'   [        R                  " UU5      nU(       d  MŠ  T" UR                  S5      5      UU'   M¦     S[
        R                  " U 5      R                  ;   aq  U" 5       nUUS'   [        R                   " X©5       HK  nUR                  5       u  nnnn[        UR                  S5      5      nUU   n[#        UUU" UU5      5        MM     U$ s  snnf )aÞ  
Takes in a function which has been printed with print_readable() and constructs kwargs to run it.

Handles Tensor inputs, Symints, and a graph module which might have tensor constants.

Consider a function `forward` defined as follows:

def forward(self, primals_1: "f32[1001, 6]", primals_2: "f32[s0]", primals_3: "Sym(s0)",):
    _tensor_constant0: "i64[4190]" = self._tensor_constant0
    # Further implementation

kwargs = aot_graph_input_parser(forward)
forward(**kwargs)
r   )Údtype_abbrsÚ|z(_tensor_constant\d+): \"(z0)\[\s*(.*?)\s*\]\" = self\.(_tensor_constant\d+)r¤   z)\[\s*(.*?)\s*\]zSym\((s\d+)\)c                  ó   • \ rS rSrSrSrg)Ú/aot_graph_input_parser.<locals>.TensorContainerip  z#Container for tensors as attributesr!   N)r^   r_   r`   ra   Ú__doc__rb   r!   r@   r$   ÚTensorContainerr�  p  s   † Ü-r@   r�  rY   c                ó|   >^ • [         R                  " T T;   =(       d    TS LU 4S j5        TR                  T T5      $ )Nc                 ó   >• T  S3$ )Nz; not in symbolic_shapes and default sym shape not passed inr!   )rô  s   €r$   rÎ  Ú=aot_graph_input_parser.<locals>.get_sym_int.<locals>.<lambda>{  s   ø€ �v�hÐYÑZr@   )rŠ   Ú_checkrÂ  )rô  Údefault_sym_shapeÚsym_shapes_dicts   `€€r$   Úget_sym_intÚ+aot_graph_input_parser.<locals>.get_sym_intx  s;   ù€ Ü�ŠØ�oÑ%×FÐ):À$Ð)FÜZô	
ð ×"Ñ" 6Ð+<Ó=Ð=r@   c                óÂ  >• / n/ n[        U 5       Hj  u  pEUR                  5       nSU;   a,  T" U5      nUR                  U5        UR                  U5        MG  U(       d  MP  UR                  [        U5      5        Ml     UR                  (       a  [
        R                  O[
        R                  nU" X!T
S9nU H"  n	[
        R                  R                  X‰5        M$     U$ )NrJ  )r­   rÿ   )
rx  Ústripr±   r©   r  rŠ   ÚrandnÚzerosrx  Úmark_dynamic)r  r­   Úresolved_shapeÚdynamic_dimsr<  ÚdimrJ  ÚconstructorrŸ  rÝ  rÿ   r–  s             €€r$   Ú
gen_tensorÚ*aot_graph_input_parser.<locals>.gen_tensor  s³   ø€ àˆØˆÜ Ö&‰FˆAØ—)‘)“+ˆCØ�c‹zÙ Ó$�Ø×%Ñ% aÔ(Ø×#Ñ# AÖ&ç�3Ø"×)Ñ)¬#¨c«(Ö3ñ 'ð &+×%<×%<”e—k’kÄ%Ç+Á+ˆÙ˜.¸fÑEˆÛˆAÜ�M‰M×&Ñ& sÖ.ñ àˆ
r@   Ú,r   r;   )rô  rX   rY   r©   )r  rD  r­   útorch.dtyperY   r
   )Útorch.utils._dtype_abbrsrŠ  r  rB   rt  ÚinspectÚ	getsourceÚ__annotations__ÚreÚsearchrÍ   rq  r3   ÚgroupÚ	signaturerý   ÚfinditerÚsetattr)Úfuncrÿ   Ú
sym_shapesr”  rŠ  r^  rj  Ú	dtype_mapÚdtype_patternÚsourceÚtensor_assignment_regexÚtensor_regexÚsym_shape_regexr�  rÁ  r¡  r   r  Ú
annotationÚmatchÚ	data_typeÚ	shape_strr  r­   Ú	containerÚ	attr_namer’   r–  r•  s    ` `                       @@r$   Úaot_graph_input_parserr½  L  sñ  û€ õ* 5ð &1×%6Ñ%6Ô%8ô)Ú%8‘z�sˆŠ
Ñ%8ð ñ )ð Ÿ™ +×"4Ñ"4Ó"6Ó7€Mô ×Ò˜tÓ$€Fð "<¸M¸?ÐJzÐ{ÐØ˜�Ð&6Ð7€LØ&€O÷.ñ .ð  €Fà&0×&6°B€O÷>ð >÷ð ð* ×&Ñ&€KØ(×.Ò.Ö0Ñˆˆzà�HÓÙä—	’	˜,¨
Ó3ˆÞØ#(§<¡<£>Ñ ˆI�yÜ˜)Ÿ/™/¨#Ó.Ó/ˆEØ˜iÑ(ˆEá& u¨eÓ4ˆF�5‰Mä—	’	˜/¨:Ó6ˆßˆ5Ù'¨¯©°A«Ó7ˆF�5‹Mñ 1ð" ”×"Ò" 4Ó(×3Ñ3Ó3Ù#Ó%ˆ	Ø"ˆˆv‰Ü—[’[Ð!8ÖAˆEØ16·±³Ñ.ˆI�y )¨QÜ˜)Ÿ/™/¨#Ó.Ó/ˆEØ˜iÑ(ˆEä�I˜y©*°U¸EÓ*BÖCñ Bð €Mùó[)s   žG7c                óú   ^ ^• [         R                  " 5       m[        R                  R	                  [        R                  R                  T 5      5      m SU4S jjnSU U4S jjn[        R                  " U5        U$ )z†
Decorator to cProfile a given function and save the result to disk on process exit.

Args:
    filename: filename to save profile to
c                óN   >^ • [         R                  " T 5      SU U4S jj5       nU$ )Nc                 ó€   >• TR                  5          T" U 0 UD6TR                  5         $ ! TR                  5         f = frç   )ÚenableÚdisable)r´   rÁ  ÚfnÚprofs     €€r$   ÚwrapperÚ3profile_to_file.<locals>.decorator.<locals>.wrapper¾  s1   ø€ à�K‰KŒMðÙ˜4Ð* 6Ñ*à—‘•ø�—‘•ús   “+ «=)r´   r   rÁ  r   rY   r   )Ú	functoolsÚwraps)rÃ  rÅ  rÄ  s   ` €r$   Ú	decoratorÚ"profile_to_file.<locals>.decorator½  s%   ù€ Ü	�Š˜Ó	÷	ó 
ð	ð ˆr@   c            	     óœ   >• TR                  T 5        [        R                  R                  [        R
                  " ST  ST  S35      5        g )Nz!                Wrote profile to z+, view with:

                    snakeviz z

                )Ú
dump_statsÚsysÚstderrrO   rD   rE   )r<   rÄ  s   €€r$   Úsave_itÚ profile_to_file.<locals>.save_itÈ  sK   ø€ Ø�‰˜Ô!Ü�
‰
×ÑÜ�OŠOð"Ø"* ð ,à&˜Zð (ðóõ		
r@   )rÃ  r   rY   r   r  )ÚcProfileÚProfiler1   r2   r4   Ú
expanduserÚatexitÚregister)r<   rÉ  rÏ  rÄ  s   `  @r$   Úprofile_to_filerÖ  ³  sW   ù€ ô ×ÒÓ€DÜ�w‰w�‰œrŸw™w×1Ñ1°(Ó;Ó<€H÷	÷
ð 
ô ‡O‚O�GÔØÐr@   r[   )rP  r\   rY   rX   )r†  rX   rY   rZ   )r�  úSequence[Any]rY   ú	list[Any])FF)
r�   r  r´   r×  r�  r\   rž  r\   rY   r   )F)r�   r  r¯  r  r�  r×  r�  r\   r£  r\   r¤  r\   rY   r\   )rÆ  r  rY   r  )r­   r¤  rÆ  r  rÑ  rØ  rY   ú&tuple[torch.fx.GraphModule, list[Any]])rÆ  r  rÑ  rØ  rY   rÙ  )r�   r  r�  r×  rÕ  zACallable[[torch.fx.GraphModule, list[Any]], torch.fx.GraphModule]r�  r\   r£  r\   r¤  r\   rY   r\   )rÊ   rE  r  rD  rY   ztorch._prims_common.StrideType)rÝ  r   rY   zCallable[[T | None], T])rë  zint | torch.SymIntrY   rX   )r:  NN)
r¯  z&Callable[[list[Tensor]], list[Tensor]]rÿ   rX   r°  zdict[str, int] | Noner”  r
  rY   zdict[str, Any])r<   rX   rY   zCallable[[T], T])prŽ  Ú
__future__r   rÔ  rš  rÑ  rÇ  rh   r¦  rT  Úloggingr1   r©  rA  rÍ  rf   rD   Úcollectionsr   Ú	importlibr   Útypingr   r   r   r	   rŠ   Útorch._prims_commonÚ_prims_commonr©  Útorch._subclasses.meta_utilsr
   Útorch._dynamo.testingr   Útorch._inductor.cpp_builderr   r   Ú torch.multiprocessing.reductionsr   Útorch.utils._config_moduler   Útorch.utils._content_storer   r   r   r   r   r   r   Úcollections.abcr   r   Ú	torch.hubr   Útorch.storager   Ú	getLoggerr^   rQ   r   Úinductor_configÚ	is_fbcoderƒ  Úlibfb.py.build_infoÚlibfbrC   Úextra_importsrF   ÚpyÚ
build_infoÚ	BuildInfoÚget_build_ruler7   rB   Ú_extra_deps_listrP   r*   rl   r  r½   ro   rt   ÚcacherO  rm  r  r�  r‰  r¬  r‹  r’  r¡  r¶  rÉ  rÒ  r«  r×  rÚ  rß  Úfloat32r  rÿ   r  r#  r%  r$  rá  r  rM  rO  r½  rÖ  r!   r@   r$   Ú<module>r÷     sÑ  ðñõ$ #ã Û Û Û Û Û Û Û Û 	Û 	Û Û 
Û Û Ý Ý #ß 4Ó 4ã Ý #Û #Ý Ý .Ý @Ý .Ý ;Ý 3ß Må ß 9Ñ 9ö ß2åÝ,ð ×Ò˜Ó!€áˆCƒL€ñ  Ð 8Ó9€Ø×$Ñ$Ó&€æÛð €
Ø€Ø€
Þò€Jð —‘×$Ñ$×.Ñ.×=Ñ=Ó?×GÑGÈ	ÐSWÓX€Jð
 —y‘yÑ C¹
Ó CÓCÐà
Ð 0Ð1ð 2ð 	ð ò 6€÷4ñ 4ônð Ð ô	˜~ô 	÷eWñ eWðP	 ‡�óó ðð6 7<÷ 	ð@ 5:÷ ôD@ôVô	�Iô 	ô
ð  Øð	0Øð0à
ð0ð ð0ð ð	0ð
 	õ0ðH ð	7ð Øñ7Øð7à ð7ð "ð7ð ð	7ð ð7ð ð7ð 
ö7ôtð0ØðØ3ðØ=Fðà+ôð(1Øð1Ø)2ð1à+ô1ð ð	ð ØñØðà!ðð Sðð ð	ð ðð ðð 
öðRVØ1ðVð )ðVð $ô	Vô/ñ " %§-¡-Ó0Ð Ù" 5§<¢<°Ó#6Ó7Ð Ù*¨1Ó-Ð Ù)¨%Ó0Ð Ù# EÓ*Ð ÷ñ ÷Feñ eôh÷KNñ KNð` Ø(,Ø$(ð	dØ
0ðdàðdð &ðdð "ð	dð
 õdõN#r@   