Ë
    L²já  ã                   ót  — d dl Z d dlZd dlmZ d dlmZ d dlZd dlZd dlZd dl	m
Z
  e j                  e«      ZdgZ	 ddej                  j                   dee   deed	f   d
eeef   dz  deeeeef   f   f
d„Z	 ddddœdej                  j                   deed	f   d
eeef   dz  dededeeedz  f   fd„Zy)é    N)ÚIterable)ÚAny)Úlog_export_usageÚreport_exportabilityÚmodelÚtarget_submodulesÚargs.ÚkwargsÚreturnc                 óÔ  ‡
‡— |xs i }g }i Š
| j                  «       D ��ci c]  \  }}||“Œ
 c}}Šˆ
ˆfd„}	 | j                  «       D ],  \  }}||v sŒ|j                  |j                  |d¬«      «       Œ.  | |i |¤Ž |D ]  }	|	j                  «        Œ ‰
S c c}}w # t        $ r$}t	        j
                  d|› �d¬«       Y d}~ŒGd}~ww xY w# |D ]  }	|	j                  «        Œ w xY w)a~  
    Generate inputs for targeting submdoules in the given model. Note that if two submodules refer to the same obj, this
    function doesn't work.

    Args:
        model: root model.
        inputs: inputs to the root model.
        target_submodules: submodules that we want to generate inputs for.

    Returns:
        A dict that maps from submodule name to its inputs.
    c                 ó   •— ||f‰‰|    <   y ©N© )ÚmoduleÚmodule_argsÚmodule_kwargsÚresultsÚsubmodule_to_namess      €€úR/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_export/tools.pyÚpre_forwardz4_generate_inputs_for_submodules.<locals>.pre_forward*   s   ø€ Ø/:¸MÐ.JˆÐ" 6Ñ*Ò+ó    T)Úwith_kwargszDFailed to generate submodule inputs because of the following error:
é   )Ú
stacklevelN)Únamed_modulesÚappendÚregister_forward_pre_hookÚ	ExceptionÚwarningsÚwarnÚremove)r   r   r	   r
   ÚhandlesÚnameÚmodr   ÚeÚhr   r   s             @@r   Ú_generate_inputs_for_submodulesr'      s
  ù€ ð$ Š\�r€Fà€GØ€GØ5:×5HÑ5HÓ5J×K©	¨¨c˜#˜t™)ÓKÐõKðØ×,Ñ,Ó.ò 	‰IˆD�#ØÐ(Ò(Ø—‘Ø×1Ñ1°+È4Ð1ÓPõð	ñ
 	ˆtÐ�vÒð ò 	ˆAØ�H‰H�Jð	à€Nùó) Løô ò 
Ü�‰ØSÐTUÐSVÐWØ÷	
ò 	
ûð
ûð ò 	ˆAØ�H‰H�Jñ	ús4    B¸B Á,B Â	CÂ'CÃC ÃCÃC ÃC'TF©ÚstrictÚpre_dispatchr$   r)   r*   c                ó  ‡‡‡‡‡‡— t        d¬«       |xs i }| j                  «       D ��cg c]  \  }}|dk7  sŒ|‘Œ }}}t        | |||«      Št        «       Ši Šˆˆˆˆˆˆfd„Š ‰| d||«       t        «       }‰j	                  «       D ]3  }	|	€Œt        |	«      j                  d«      d   }
|j                  |
«       Œ5 t        j                  dt        |«      «       |D ]  }t        j                  |«       Œ ‰S c c}}w )aš  
    Report exportability issues for a module in one-shot.

    Args:
        mod: root module.
        args: args to the root module.
        kwargs: kwargs to the root module.
    Returns:
        A dict that maps from submodule name to the exception that was raised when trying to export it.
        `None` means the module is exportable without issue.
    Sample output:
        {
            '': UnsupportedOperatorException(func=<OpOverload(op='testlib.op_missing_meta', overload='default')>),
            'submod_1': UnsupportedOperatorException(func=<OpOverload(op='testlib.op_missing_meta', overload='default')>),
            'submod_2': None
        }
    zexport.report_exportability)ÚeventÚ c                 ó  •— t        | «      ‰v ry ‰j                  t        | «      «       |€|�K	 t        j                  j                  j                  | ||‰‰¬«       d ‰|<   t        j                  d|«       y | j                  «       D ]3  \  }}|dk(  r|n|› d|› �}‰j                  |d«      \  }	}
 ‰|||	|
«       Œ5 y # t        $ rC}t        |«      j                  d«      d   }t        j                  d||«       |‰|<   Y d }~ŒŽd }~ww xY w)	Nr(   zSuccessfully exported `%s`ú
r   z(Failed exporting `%s` with exception: %sr-   ú.)NN)ÚtypeÚaddÚtorchÚexportÚ_traceÚ_exportÚlogÚinfor   ÚreprÚsplitÚwarningÚnamed_childrenÚget)r   Úmodule_namer	   r
   r%   Ú	short_msgr#   ÚsubmodÚsub_module_nameÚsubmod_argsÚsubmod_kwargsr*   Úreportr)   Úsubmod_inputsÚtried_module_typesÚ
try_exports              €€€€€€r   rG   z(report_exportability.<locals>.try_exportc   s1  ø€ ô �‹<Ð-Ñ-ØØ×Ñœt F›|Ô,àÐ˜vÐ1ð(Ü—‘×#Ñ#×+Ñ+ØØØØ!Ø!-ð ,ô ð '+��{Ñ#Ü—‘Ð5°{ÔCØð #×1Ñ1Ó3ò 	L‰LˆD�&Ø&1°RÒ&7™dÀ¸}ÈAÈdÈVÐ=TˆOà)6×):Ñ):Ø ó*Ñ&ˆK˜ñ �v˜°¸]ÕKð	Lð 	øô! ò (Ü  ›GŸM™M¨$Ó/°Ñ2�	Ü—‘Ø>ÀÈYôð '(��{Ö#ûð(ús   ¯A	C  Ã 	DÃ	9DÄDz\nr   zFound %d export issues:)r   r   r'   ÚsetÚvaluesr9   r:   r2   r7   r;   Úlen)r$   r	   r
   r)   r*   r#   Ú_Úall_submod_namesÚunique_issuesÚ	exceptionÚkeyÚissuerD   rE   rF   rG   s      ``       @@@@r   r   r   ?   s   ý€ ô4 Ð8Õ9àŠ\�r€Fà,/×,=Ñ,=Ó,?×N¡  qÀ4È2Ã:šÐNÐÑNÜ3°CÐ9IÈ4ÐQWÓX€Mä›ÐØ*,€F÷#ñ #ñJ ˆs�B˜˜fÔ%ä“E€MØ—]‘]“_ò #ˆ	ØÑ Ü�y“/×'Ñ'¨Ó.¨qÑ1ˆCØ×Ñ˜cÕ"ð#ô
 ‡K�KÐ)¬3¨}Ó+=Ô>Øò ˆÜ�‰�EÕðð €Mùóo Os
   ¬C=ºC=r   )Úloggingr   Úcollections.abcr   Útypingr   r3   Útorch.exportÚtorch.export._traceÚtorch._utils_internalr   Ú	getLoggerÚ__name__r7   Ú__all__ÚnnÚModuleÚstrÚtupleÚdictr'   Úboolr   r   r   r   r   ú<module>r`      s(  ðã Û Ý $Ý ã Û Û Ý 2ð €g×Ñ˜Ó!€à!Ð
"€ð %)ñ	*Ø�8‰8�?‰?ð*à ‘}ð*ð ��S�‰/ð*ð ��c�‰N˜TÑ!ð	*ð
 
ˆ#ˆu�S˜#�X‰Ð
Ñó*ð` %)ðUð
 ØòUØ	�‰�‰ðUà
��S�‰/ðUð ��c�‰N˜TÑ!ðUð
 ðUð ðUð 
ˆ#ˆy˜4ÑÐ
Ñ ôUr   