Ë
    ÌÓ^j  ã                   ó°   — d dl Z d dlZd dlmc mZ d dlmZ d dlm	Z	m
Z
 d dlmZ ddlmZ dedefd	„Zd
edededeee	f   fd„Zdededededede	ddfd„Zy)é    N)ÚExportedProgram)Ú
AOTI_FILESÚpackage_pt2)ÚFileLikeé   )ÚLoweredBackendModuleÚepÚreturnc                 óp  —  G d„ dt         j                  j                  «      } || j                  «       | j                  j
                  | j                  j                  «      }| j                  \  }}t        j                  ||f«      \  }}t         j                  j                  |t        |«      «      }|S )Nc                   ó†   ‡ — e Zd Zdej                  j
                  dej                  dej                  ddfˆ fd„Zd„ Z	ˆ xZ
S )ú<get_new_ep_with_flat_inputs_outputs.<locals>.FlattenedModuleÚoriginal_moduleÚin_specÚout_specr
   Nc                 óL   •— t         ‰| �  «        || _        || _        || _        y ©N)ÚsuperÚ__init__r   r   r   )Úselfr   r   r   Ú	__class__s       €úo/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/nativert/backends/_lower_utils.pyr   zEget_new_ep_with_flat_inputs_outputs.<locals>.FlattenedModule.__init__   s&   ø€ ô ‰GÑÔØ#2ˆDÔ Ø"ˆDŒLØ$ˆD�Mó    c                 ó¶   — t        j                  || j                  «      }|\  }} | j                  |i |¤Ž}t        j                  |«      \  }}t        |«      S r   )ÚpytreeÚtree_unflattenr   r   Útree_flattenÚtuple)r   Úflat_inputsÚinputsÚargsÚkwargsÚoutputsÚflat_outputsÚ_s           r   ÚforwardzDget_new_ep_with_flat_inputs_outputs.<locals>.FlattenedModule.forward   sW   € ä×*Ñ*¨;¸¿¹ÓEˆFØ!‰LˆD�&Ø*�d×*Ñ*¨DÐ;°FÑ;ˆGä$×1Ñ1°'Ó:‰OˆL˜!Ü˜Ó&Ð&r   )Ú__name__Ú
__module__Ú__qualname__ÚtorchÚfxÚGraphModuler   ÚTreeSpecr   r%   Ú__classcell__)r   s   @r   ÚFlattenedModuler      sE   ø„ ð		%à"ŸX™X×1Ñ1ð		%ð —_‘_ð		%ð —o‘oð			%ð
 õ		%ö	'r   r.   )r)   ÚnnÚModuleÚmoduleÚ	call_specr   r   Úexample_inputsr   r   Úexportr   )r	   r.   Úflattened_moduler    r!   r   r$   Úflat_eps           r   Ú#get_new_ep_with_flat_inputs_outputsr7      sŽ   € ô'œ%Ÿ(™(Ÿ/™/ô 'ñ* 'Ø
�	‰	‹�R—\‘\×)Ñ)¨2¯<©<×+@Ñ+@óÐð ×$Ñ$�L€Dˆ&Ü×(Ñ(¨$°¨Ó8�N€K�Ü�l‰l×!Ñ!Ð"2´E¸+Ó4FÓG€Gà€Nr   Úexported_programÚ
model_nameÚ
backend_idc                 ó  ‡— | j                   \  }}| j                  j                  Št        | «      }t	        j
                  ||f«      \  }}t        j                  j                  |j                  «       t        |«      ddi¬«      }t        |t        «      s!t        dt        |«      j                  › �«      ‚t!        |||¬«      }	ˆfd„}
t#        j$                  |
|	«      |	_        t        j(                  j)                  |	||«      }||fS )z„
    Lower an exported program to AOTInductor and return a delegate ExportedProgram
    with the `executorch_call_delegate` HOP
    zaot_inductor.packageT)Úoptionszaoti_files must be a list, got )Úmodule_namec                 ó°   •— t        j                  ||f«      \  }}t        j                  j                  | g|¢­Ž }‰�|�t        j
                  |‰«      S |S r   )r   r   r)   Ú_higher_order_opsÚexecutorch_call_delegater   )r   r    r!   r   r$   r#   r   s         €r   Úpatched_forwardz/lower_exported_program.<locals>.patched_forwardD   sb   ø€ Ü×,Ñ,¨d°F¨^Ó<‰ˆ�QÜ×.Ñ.×GÑGØð
Øò
ˆð Ð LÐ$<Ü×(Ñ(¨°xÓ@Ð@àÐr   )r3   r2   r   r7   r   r   r)   Ú	_inductorÚaot_compiler1   r   Ú
isinstanceÚlistÚAssertionErrorÚtyper&   r   ÚtypesÚ
MethodTyper%   r4   )r8   r9   r:   r    r!   r6   r   r$   Ú
aoti_filesÚlowered_aoti_modulerA   Úaoti_delegate_epr   s               @r   Úlower_exported_programrM   ,   s   ø€ ð $×2Ñ2�L€Dˆ&Ø×)Ñ)×2Ñ2€HÜ1Ð2BÓC€GÜ×(Ñ(¨$°¨Ó8�N€K�ä—‘×,Ñ,Ø�‰Óœ% Ó,Ð7MÈtÐ6Tð -ó €Jô �j¤$Ô'ÜØ-¬d°:Ó.>×.GÑ.GÐ-HÐIó
ð 	
ô /Ø�¨ôÐô ô #(×"2Ñ"2°?ÐDWÓ"XÐÔä—|‘|×*Ñ*Ð+>ÀÀfÓMÐà˜ZÐ'Ð'r   ÚfÚoriginal_epÚdelegate_epÚdelegate_filesc                 ó@   — t        | |||› d|› �|i|› d|› �|i¬«       y)zX
    Package a pt2 archive file that can be consumed by NativeRT with AOTI Delegate
    ú-)Úexported_programsrJ   N)r   )rN   r9   r:   rO   rP   rQ   s         r   Ú#package_nativert_with_aoti_delegaterU   U   sC   € ô Ø	à˜Øˆl˜!˜J˜<Ð(¨+ð
ð "�l ! J <Ð0°.ÐAõð r   )rH   r)   Útorch.utils._pytreeÚutilsÚ_pytreer   Útorch.exportr   Ú!torch.export.pt2_archive._packager   r   Útorch.typesr   Ú_lowered_aoti_moduler   r7   Ústrr   rM   rU   © r   r   ú<module>r_      s¨   ðÛ ã ß $Ð $Ý (ß EÝ  å 6ð¨Oð Àó ð@&(Ø%ð&(Ø36ð&(ØDGð&(à
ˆ?˜JÐ&Ñ'ó&(ðRØðàðð ðð !ð	ð
 !ðð ðð 
ôr   