
    ti                         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       j/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/torch/nativert/backends/_lower_utils.pyr   zEget_new_ep_with_flat_inputs_outputs.<locals>.FlattenedModule.__init__   s&     G#2D "DL$DM    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    **;EF!LD&*d**D;F;G$11':OL!&&r   )__name__
__module____qualname__torchfxGraphModuler   TreeSpecr   r%   __classcell__)r   s   @r   FlattenedModuler      sE    		%"XX11		% __		% oo			%
 		%	'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<<+@+@ $$LD&(($8NKll!!"2E+4FGG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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)options)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_forwardA   sb    ,,dF^<Q..GG

 L$<((x@@r   )r3   r2   r   r7   r   r   r)   	_inductoraot_compiler1   r   
isinstancelistr   types
MethodTyper%   r4   )r8   r9   r:   r    r!   r6   r   r$   
aoti_fileslowered_aoti_modulerA   aoti_delegate_epr   s               @r   lower_exported_programrK   ,   s     $22LD&))22H12BCG(($8NK,,%,7Mt6T - J j$'''.  #("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_programsrH   N)r   )rL   r9   r:   rM   rN   rO   s         r   #package_nativert_with_aoti_delegaterS   R   sC     	l!J<(+
 "l!J<0.A r   )rF   r)   torch.utils._pytreeutils_pytreer   torch.exportr   !torch.export.pt2_archive._packager   r   torch.typesr   _lowered_aoti_moduler   r7   strr   rK   rS    r   r   <module>r]      s      $ $ ( E   6O  @#(%#(36#(DG#(
?J&'#(L  !	
 !  
r   