§
    ž²Åj`  ã                   ó�  — d dl Z d dlZd dlmZmZmZmZ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ef                  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ef                  deded
eeee         f         fd„ZdS )é    N)ÚAnyÚDictÚIterableÚOptionalÚTuple)Úlog_export_usageÚreport_exportabilityÚmodelÚtarget_submodulesÚargs.ÚkwargsÚreturnc                 óÒ  ‡
‡— |pi }g }i Š
d„ |                       ¦   «         D ¦   «         Šˆ
ˆfd„}	 |                       ¦   «         D ]3\  }}||v r*|                     |                     |d¬¦  «        ¦  «         Œ4 | |i |¤Ž n.# t          $ r!}t	          j        d|› �¦  «         Y d}~nd}~ww xY w|D ]}	|	                     ¦   «          Œn# |D ]}	|	                     ¦   «          Œw xY w‰
S )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                 ó   — i | ]\  }}||“Œ	S © r   )Ú.0ÚnameÚmods      úDC:\Projects\Historical\venv\Lib\site-packages\torch/_export/tools.pyú
<dictcomp>z3_generate_inputs_for_submodules.<locals>.<dictcomp>'   s   € ÐKÐKÐK©	¨¨c˜#˜tÐKÐKÐKó    c                 ó"   •— ||f‰‰|          <   d S ©Nr   )ÚmoduleÚmodule_argsÚmodule_kwargsÚresultsÚsubmodule_to_namess      €€r   Úpre_forwardz4_generate_inputs_for_submodules.<locals>.pre_forward)   s   ø€ Ø/:¸MÐ.JˆÐ" 6Ô*Ñ+Ð+Ð+r   T)Úwith_kwargszDFailed to generate submodule inputs because of the following error:
N)Únamed_modulesÚappendÚregister_forward_pre_hookÚ	ExceptionÚwarningsÚwarnÚremove)r
   r   r   r   Úhandlesr   r   r   ÚeÚhr   r   s             @@r   Ú_generate_inputs_for_submodulesr+      s|  øø€ ð$ ˆ\�r€Fà€GØ€GØKÐK°U×5HÒ5HÑ5JÔ5JÐKÑKÔKÐðKð Kð Kð Kð Kð KðØ×,Ò,Ñ.Ô.ð 	ð 	‰IˆD�#ØÐ(Ð(Ð(Ø—’Ø×1Ò1°+È4Ð1ÑPÔPñô ð øð 	ˆˆtÐ�vÐÐÐÐøÝð 
ð 
ð 
ÝŒØWÐTUÐWÐWñ	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøð
øøøð
 ð 	ð 	ˆAØ�HŠH‰JŒJˆJˆJð	ø�ð 	ð 	ˆAØ�HŠH‰JŒJˆJˆJð	øøøà€Ns0   °AB Â C	 Â
B,ÂB'Â"C	 Â'B,Â,C	 Ã	C$TF©ÚstrictÚpre_dispatchr   r-   r.   c                ó@  ‡‡‡
‡‡‡— t          d¬¦  «         |pi }d„ |                      ¦   «         D ¦   «         }t          | |||¦  «        Št          ¦   «         Ši Š
ˆˆ
ˆˆˆˆfd„Š ‰| d||¦  «         t          ¦   «         }‰
                     ¦   «         D ]A}|�=t          |¦  «                             d¦  «        d         }|                     |¦  «         ŒBt           	                    d	t          |¦  «        ¦  «         |D ]}	t           	                    |	¦  «         Œ‰
S )
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)Úeventc                 ó$   — g | ]\  }}|d k    ¯|‘ŒS )Ú r   )r   r   Ú_s      r   ú
<listcomp>z(report_exportability.<locals>.<listcomp>[   s!   € ÐNÐNÐN¡  qÀ4È2Â:À:˜À:À:À:r   c                 ór  •— t          | ¦  «        ‰v rd S ‰                     t          | ¦  «        ¦  «         |€|�¬	 t          j        j                             | ||‰‰¬¦  «         d ‰|<   t                               d|¦  «         d S # t          $ rS}t          |¦  «         
                    d¦  «        d         }t                               d||¦  «         |‰|<   Y d }~nd }~ww xY w|                      ¦   «         D ];\  }}|dk    r|n|› d|› �}‰                     |d¦  «        \  }	}
 ‰|||	|
¦  «         Œ<d S )	Nr,   zSuccessfully exported `%s`ú
r   z(Failed exporting `%s` with exception: %sr2   ú.)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   rN   z(report_exportability.<locals>.try_exporta   s“  ø€ õ �‰<Œ<Ð-Ð-Ð-ØˆFØ×Ò�t F™|œ|Ñ,Ô,Ð,àÐ˜vÐ1ð(Ý”Ô#×+Ò+ØØØØ!Ø!-ð ,ñ ô ð ð '+��{Ñ#Ý—’Ð5°{ÑCÔCÐCØ�øÝð (ð (ð (Ý  ™GœGŸMšM¨$Ñ/Ô/°Ô2�	Ý—’Ø>ÀÈYñô ð ð '(��{Ñ#Ð#Ð#Ð#Ð#Ð#øøøøð(øøøð #×1Ò1Ñ3Ô3ð 	Lð 	L‰LˆD�&Ø&1°RÒ&7Ð&7˜d˜dÀÐ=TÐ=TÈdÐ=TÐ=TˆOà)6×):Ò):Ø ñ*ô *Ñ&ˆK˜ð ˆJ�v˜°¸]ÑKÔKÐKÐKàˆs   ¼A	B Â
C$ÂA	CÃC$r2   Nz\nr   zFound %d export issues:)r   r!   r+   ÚsetÚvaluesr@   rA   r9   r>   rB   Úlen)r   r   r   r-   r.   Úall_submod_namesÚunique_issuesÚ	exceptionÚkeyÚissuerK   rL   rM   rN   s      ``     @@@@r   r	   r	   =   sS  øøøøøø€ õ4 Ð8Ð9Ñ9Ô9Ð9àˆ\�r€FàNÐN¨C×,=Ò,=Ñ,?Ô,?ÐNÑNÔNÐÝ3°CÐ9IÈ4ÐQWÑXÔX€Må™œÐØ-/€Fð#ð #ð #ð #ð #ð #ð #ð #ð #ð #ðJ €Jˆs�B˜˜fÑ%Ô%Ð%å‘E”E€MØ—]’]‘_”_ð #ð #ˆ	ØÐ Ý�y‘/”/×'Ò'¨Ñ.Ô.¨qÔ1ˆCØ×Ò˜cÑ"Ô"Ð"øå‡K‚KÐ)­3¨}Ñ+=Ô+=Ñ>Ô>Ð>Øð ð ˆÝ�Š�EÑÔÐÐà€Mr   r   )Úloggingr%   Útypingr   r   r   r   r   r:   Útorch.exportÚtorch.export._traceÚtorch._utils_internalr   Ú	getLoggerÚ__name__r>   Ú__all__ÚnnÚModuleÚstrr+   Úboolr$   r	   r   r   r   ú<module>rc      sµ  ðà €€€Ø €€€Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð €gÔ˜Ñ!Ô!€à!Ð
"€ð (,ð	)ð )ØŒ8Œ?ð)à ”}ð)ð ��S�Œ/ð)ð �T˜#˜s˜(”^Ô$ð	)ð
 
ˆ#ˆu�S˜#�XŒÐ
Ôð)ð )ð )ð )ð^ (,ðUð
 ØðUð Uð UØ	ŒŒðUà
��S�Œ/ðUð �T˜#˜s˜(”^Ô$ðUð
 ðUð ðUð 
ˆ#ˆx˜	Ô"Ð
"Ô#ðUð Uð Uð Uð Uð Ur   