Ë
    f^(hÅ<  ã                   óÀ  — d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	Z	d dl
mc mZ d dlmZmZmZ d dlmZ d dlmZmZ d dlmZmZ d	d
lmZ d	dlmZ d	dlmZm Z m!Z!m"Z" dejF                  de$fd„Z%e	jL                  jN                  d„ «       Z(de	jR                  jT                  deee+      de,e-e+e	jR                  j\                  f   e-e+e	jR                  j\                  f   f   fd„Z/de	jR                  jT                  deee+      de-e+e	jR                  j\                  f   de-e+e	jR                  j\                  f   ddf
d„Z0	 d*dejF                  deejF                     dee$e+      defd„Z1	 d*de	jR                  jT                  deee+      deee+      dejF                  deejF                     de-e+ef   de-e+ef   dee$e+      fd„Z2de	jR                  jT                  de de-e+ef   de-e+ef   ddf
d „Z3 G d!„ d"e4«      Z5 G d#„ d$e	jR                  jT                  e5¬%«      Z6d&e	jR                  jT                  d'ede6fd(„Z7d'ede	jp                  jr                  fd)„Z:y)+é    N)ÚSequence)Úchain)ÚAnyÚOptional)Ú,_enter_enable_graph_inputs_of_type_nn_moduleÚ+_exit_enable_graph_inputs_of_type_nn_moduleÚ#_get_graph_inputs_of_type_nn_module)Ú"_check_input_constraints_for_graph)Ú_assign_attrÚ	_AttrKind)Ú_PyTreeCodeGenÚ_PyTreeInfoé   )Ú_remove_effect_tokens)Úreorder_kwargs)ÚExportedProgramÚExportGraphSignatureÚ	InputKindÚ
OutputKindÚin_specÚreturnc                 ó€   — t        ||«      }t        j                  | |f«      \  }}||k7  rt        d|› d|› d�«      ‚|S )Nz>Trying to flatten user inputs with exported input tree spec: 
z-
but actually got inputs with tree spec of: 
zi.
Please check that the inputs have the same number of args and kwargs as the ones you used when tracing.)r   ÚpytreeÚtree_flatten_with_pathÚ
ValueError)ÚargsÚkwargsr   Úreordered_kwargsÚflat_args_with_pathÚreceived_specs         úR/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/export/_unlift.pyÚ_check_inputs_matchr"      si   € Ü% f¨gÓ6ÐÜ)/×)FÑ)FØ	ÐÐ ó*Ñ&Ð˜ð ˜ÒÜØMØˆið <àˆoð <ð<ó
ð 	
ð Ðó    c                 óè   — | j                   sy t        ||| j                  «      }t        | j                  j
                  D �cg c]  }|j                  dk(  sŒ|‘Œ c}|| j                  «       y c c}w )NÚplaceholder)Úvalidate_inputsr"   Ú_in_specr
   ÚgraphÚnodesÚopÚrange_constraints)Úselfr   r   r   Únodes        r!   Ú!_check_input_constraints_pre_hookr.   0   s[   € à×ÒØä-¨d°F¸D¿M¹MÓJÐä&ØŸ*™*×*Ñ*ÖG�$¨d¯g©g¸Ó.FŠÒGØØ×ÑõùÚGs   ÁA/ÁA/ÚgmÚlifted_inputsc                 ó  — i }i }| j                   j                  D �cg c]  }|j                  dk(  sŒ|‘Œ }}t        |«      t        |«      k(  sJ ‚t	        ||«      D ]š  \  }}|€|||j
                  <   Œ| j                   j                  |«      5  | j                   j                  |«      }|j                  |«       |j                  }	| j                   j                  |«       |	|_	        |||<   ddd«       Œœ ||fS c c}w # 1 sw Y   Œ¯xY w)z_
    Unlift inputs referring to params/buffers/constants as getattr nodes in the
    graph
    r%   N)r(   r)   r*   ÚlenÚzipÚnameÚinserting_afterÚget_attrÚreplace_all_uses_withÚmetaÚ
erase_node)
r/   r0   Úunlifted_name_to_nodeÚinput_name_to_noder-   Úplaceholder_nodesÚ
input_nodeÚlifted_nodeÚgetattr_nodeÚmetadatas
             r!   Ú_unlift_inputs_as_getattrrA   >   s  € ð ÐØÐà*,¯(©(¯.©.ÖU $¸D¿G¹GÀ}Ó<TšÐUÐÐUÜˆ}Ó¤Ð%6Ó!7Ò7Ð7Ð7Ü#&Ð'8¸-Ó#Hò BÑˆ
�KØÐØ2<Ð˜zŸ™Ò/ð —‘×)Ñ)¨*Ó5ñ BØ!Ÿx™x×0Ñ0°Ó=�Ø×0Ñ0°Ô>Ø%Ÿ?™?�Ø—‘×#Ñ# JÔ/Ø$,�Ô!Ø5AÐ% kÑ2÷Bð BðBð !Ð"4Ð4Ð4ùò V÷Bð Bús   �C>²C>ÂA DÄD	Úmutated_outputsr:   r;   c                 ó&  — d}| j                   j                  D ]  }|j                  dk(  sŒ|} n |€J ‚t        j                  |j
                  «      d   }t        |«      t        |«      k(  sJ ‚g }i }t        ||«      D ]¯  \  }	}
|
€|j                  |	«       Œ|
|v r||
   }n|
|v r||
   }nt        d|
› d�«      ‚| j                   j                  |«      5  | j                   j                  t        j                  j                  j                  j                   ||	f«      }|||	<   ddd«       Œ± |D �cg c]  }||v r||   n|‘Œ }}| j                   j                  |«      5  | j                   j#                  t%        |«      «      }|j'                  |«       | j                   j)                  |«       |j*                  |_        |j,                  j/                  |j,                  «       ddd«       y# 1 sw Y   �ŒxY wc c}w # 1 sw Y   yxY w)zt
    Find the all the buffers and inputs that were mutated and insert copy_
    operators to reflect mutations.
    NÚoutputr   zCould not find z  in either buffer or input nodes)r(   r)   r*   r   Útree_flattenr   r2   r3   ÚappendÚRuntimeErrorÚinserting_beforeÚcall_functionÚtorchÚopsÚatenÚcopy_ÚdefaultrD   Útupler7   r9   r4   r8   Úupdate)r/   rB   r:   r;   Úoutput_noder-   ÚoutputsÚuser_output_nodesÚreturn_nodes_to_copyÚreturn_nodeÚmutated_node_nameÚmutated_nodeÚ	copy_nodeÚoutput_argsÚ
new_outputs                  r!   Ú_insert_copy_for_mutationsr[   [   s$  € ð €KØ—‘—‘ò ˆØ�7‰7�hÓØˆKÙðð Ð"Ð"Ð"Ü×!Ñ! +×"2Ñ"2Ó3°AÑ6€GÜˆw‹<œ3˜Ó/Ò/Ð/Ð/àÐØÐÜ*-¨g°Ó*Gò :Ñ&ˆÐ&ØÐ$Ø×$Ñ$ [Ô1ØàÐ 5Ñ5Ø0Ð1BÑC‰LØÐ"4Ñ4Ø-Ð.?Ñ@‰LäØ!Ð"3Ð!4Ð4TÐUóð ð �X‰X×&Ñ& {Ó3ñ 	:ØŸ™×.Ñ.Ü—	‘	—‘×$Ñ$×,Ñ,¨|¸[Ð.IóˆIð 1:Ð  Ñ-÷		:ð 	:ð:ð, &öàð '+Ð.BÑ&BÐ˜TÒ"ÈÑLð€Kð ð 
�‰×	"Ñ	" ;Ó	/ñ 1à—X‘X—_‘_¤U¨;Ó%7Ó8ˆ
Ø×)Ñ)¨*Ô5Ø
�‰×Ñ˜KÔ(Ø%×*Ñ*ˆ
ŒØ�‰×Ñ˜{×/Ñ/Ô0÷1ð 1÷	:ñ 	:üò÷1ð 1ús    ÃAG5Ä6HÅ%BHÇ5G?	ÈHÚout_specÚforward_arg_namesc                 ó  — |r|}nâ| j                   t        k(  rª| j                  dk(  r›| j                  d   j                   t        k(  r{| j                  d   j                   t        k(  r[t        | j                  d   j                  «      D �cg c]  }d|› �‘Œ	 }}|j                  | j                  d   j                  «       n%t        | j                  «      D �cg c]  }d|› �‘Œ	 }}t        t        || |«      «      S c c}w c c}w )zK
    Create the codegen for the graph module based on the in/out specs
    é   r   r   Úarg_)
ÚtyperO   Únum_childrenÚchildren_specsÚdictÚrangeÚextendÚcontextr   r   )r   r\   r]   ÚnamesÚis        r!   Ú_get_codegenrj   ‘   sö   € ñ Ø!‰ð �L‰LœEÒ!Ø×$Ñ$¨Ò)Ø×&Ñ& qÑ)×.Ñ.´%Ò7Ø×&Ñ& qÑ)×.Ñ.´$Ò6ô */¨w×/EÑ/EÀaÑ/H×/UÑ/UÓ)VÖW A�t˜A˜3’ZÐWˆEÐWà�L‰L˜×/Ñ/°Ñ2×:Ñ:Õ;ä).¨w×/CÑ/CÓ)DÖE A�t˜A˜3’ZÐEˆEÐEäÜØØØó	
óð ùò Xùò Fs   ÂC>ÃDÚ
state_dictÚ	constantsc                 óÌ   — t        | |«      \  }}	t        | |||	«       t        |||«      | j                  _        | j                  j                  «        | j                  «        | S )a  
    Args:
        lifted_inputs: A list matching the graph module's input nodes. For
        an input node that is referring to a lifted parameter/buffer, this
        list will contain the fqn the corresponding attribute. Otherwise, this
        list will contain None. This is used to unlift the lifted parameters as
        get_attr nodes.

        mutated_outputs: A list matching the graph module's output nodes. For
        an output node that is referring to a mutated buffer or user input, this
        list will contain the name of the corresponding buffer or user input
        that needs to be mutated. Otherwise, this list will contain None. This
        is used to re-insert an inplace copy_ operator to copy the mutated
        values back to the original node.
    )rA   r[   rj   r(   Ú_codegenÚlintÚ	recompile)
r/   r0   rB   r   r\   rk   rl   r]   r:   r;   s
             r!   Ú_unliftrq   ²   sc   € ô2 1JØ
ˆMó1Ñ-ÐÐ-ô Ø
ˆOÐ2Ð4Fôô % W¨hÐ8IÓJ€B‡H�HÔØ‡H�H‡M�M„OØ‡L�L„NØ€Ir#   Únew_gmÚgraph_signaturec                 ó¦  — t        |j                  «      }|j                  D ]3  }||v rd}||   }nd}||   }t        || |t        j
                  |¬«       Œ5 |j                  D ]$  }||   }t        || |t        j                  ¬«       Œ& t        |j                  |j                  «      D ]$  }||   }t        || |t        j                  ¬«       Œ& y )NFT©Ú	attr_kindÚ
persistent©rv   )ÚsetÚnon_persistent_buffersÚbuffersr   r   ÚBUFFERÚ
parametersÚ	PARAMETERr   Úlifted_custom_objsÚlifted_tensor_constantsÚCONSTANT)rr   rs   rk   rl   rz   r4   rw   Úvalues           r!   Ú_register_attrs_to_new_gmrƒ   ×   sð   € ô ! ×!GÑ!GÓHÐØ×'Ñ'ò 	
ˆØÐ)Ñ)ØˆJØ˜d‘O‰EàˆJØ˜tÑ$ˆEÜØ�6˜4¬9×+;Ñ+;È
ö	
ð	
ð  ×*Ñ*ò 
ˆØ˜4Ñ ˆÜØØØÜ×)Ñ)ö		
ð
ô Ø×*Ñ*¨O×,SÑ,Sóò 	
ˆð ˜$‘ˆÜØØØÜ×(Ñ(ö		
ñ		
r#   c                   ó*   ‡ — e Zd ZdZd„ Zdˆ fd„	Zˆ xZS )Ú_StatefulGraphModuleFactoryzO
    Metaclass that ensures a private constructor for _StatefulGraphModule
    c                 óL   — t        | j                  › d| j                  › d�«      ‚)Nú.z has no public constructor. )Ú	TypeErrorÚ
__module__Ú__qualname__)Úclsr   r   s      r!   Ú__call__z$_StatefulGraphModuleFactory.__call__  s,   € ÜØ�~‰~Ð˜a × 0Ñ 0Ð1Ð1MÐNó
ð 	
r#   c                 ó(   •— t         ‰| �  |||¬«      S )N©r+   )ÚsuperrŒ   )r‹   Úrootr(   r+   Ú	__class__s       €r!   Ú_createz#_StatefulGraphModuleFactory._create
  s#   ø€ Ü‰wÑØØØ/ð  ó 
ð 	
r#   ©N)Ú__name__r‰   rŠ   Ú__doc__rŒ   r’   Ú__classcell__©r‘   s   @r!   r…   r…      s   ø„ ñò
÷

ñ 
r#   r…   c                   ó    ‡ — e Zd Zdˆ fd„	Zˆ xZS )Ú_StatefulGraphModulec                 óJ   •— t         ‰| �  ||«       |xs g | _        d| _        y )NT)r�   Ú__init__r+   r&   )r,   r�   r(   r+   r‘   s       €r!   r›   z_StatefulGraphModule.__init__  s'   ø€ Ü‰Ñ˜˜uÔ%à!2Ò!8°bˆÔØ#ˆÕr#   r“   )r”   r‰   rŠ   r›   r–   r—   s   @r!   r™   r™     s   ø„ ÷$ñ $r#   r™   )Ú	metaclassÚplain_graph_moduleÚepc                 ó¾  ‡— t         j                  | | j                  |¬«      }t        |j                  «      Š|j                  ˆfd„«       |j                  t        d¬«       |j                  ˆfd„d¬«       i }|j                  j                  D ]¶  }|j                  |«      }|j                  r0t        j                  d|› d�«       |j                  «       }|||<   |}|j                  d	«      �^ }}	t         j"                  j$                  j'                  ||«      }
t)        |
|	«       t+        |||t,        j.                  ¬
«       Œ¸ |j0                  j3                  «       D ]­  \  }}t         j"                  j$                  j5                  ||«      rŒ1t7        |t         j8                  «      rF|j                  r:t        j                  d|› d�«       ||v r||   }n|j                  «       }|||<   |}t+        |||t,        j.                  ¬
«       Œ¯ |j                  j:                  D ]/  }t+        | j                  |«      ||t,        j<                  d¬«       Œ1 |S )NrŽ   c                  ó   •— t        ‰«      S r“   )r   ©r   r   Úmodule_typess     €r!   ú<lambda>z/_create_stateful_graph_module.<locals>.<lambda>'  s   ø€ Ô LØó!
€ r#   T)Úwith_kwargsc                  ó   •— t        ‰«      S r“   )r   r¡   s     €r!   r£   z/_create_stateful_graph_module.<locals>.<lambda>0  s   ø€ Ô KØó!
€ r#   )Úalways_callzA model attribute `z°` requires gradient. but it's not properly registered as a parameter. torch.export will detach it and treat it as a constant tensor but please register it as parameter instead.r‡   rx   z¯` requires gradient but it's not properly registered as a parameter. torch.export will detach it and treat it as a constant tensor but please register it as parameter instead.Fru   )r™   r’   r(   r	   Úexample_inputsÚregister_forward_pre_hookr.   Úregister_forward_hookrs   r€   Ú
get_bufferÚrequires_gradÚwarningsÚwarnÚdetachÚrsplitrJ   ÚfxÚgraph_moduleÚ_get_attr_via_attr_listÚdelattrr   r   r�   rl   ÚitemsÚ	_has_attrÚ
isinstanceÚTensorrz   r|   )r�   r+   rž   Ústateful_gmÚ"original_tensor_to_detached_tensorÚconstant_fqnÚbufferÚdetached_bufferÚprefixÚfieldÚsubmodÚ
const_namer‚   Údetached_valuer¢   s                 @r!   Ú_create_stateful_graph_modulerÂ     s\  ø€ ô
 '×.Ñ.ØØ× Ñ Ø+ð /ó €Kô 7°r×7HÑ7HÓI€LØ×)Ñ)ó	
ôð
 ×)Ñ)Ü)°tð *ô ð ×%Ñ%ó	
ð ð	 &ô ð *,Ð&ð ×*Ñ*×BÑBò Vˆð ×'Ñ'¨Ó5ˆØ×ÒÜ�M‰MØ% l ^ð 4?ð @ôð %Ÿm™m›oˆOØ9HÐ.¨vÑ6Ø$ˆFØ%×,Ñ,¨SÓ1‰ˆ�Ü—‘×&Ñ&×>Ñ>¸{ÈFÓSˆÜ�˜ÔÜ�V˜[¨,Ä)×BTÑBTÖUð)Vð.  Ÿ\™\×/Ñ/Ó1ò Ñˆ
�EÜ�x‰x×$Ñ$×.Ñ.¨{¸JÕGÜ˜%¤§¡Ô.Ø×&Ò&Ü—M‘MØ-¨j¨\ð :Gð Hôð Ð BÑBØ BÀ5Ñ I™à).¯©«˜ØDRÐ:¸5ÑAØ .˜ÜØØØÜ#×,Ñ,ö	ð!ð4 ×$Ñ$×;Ñ;ò 
ˆÜØ×)Ñ)¨&Ó1ØØÜ×&Ñ&Øö	
ð
ð Ðr#   c           
      ór  — | j                   d   j                  dk7  rt        | «      } t        j                  j                  | j                  t        j                  | j                  «      «      }t        || j                  | j                  | j                  «       | j                  d   j                  x}r|j                   nd }| j                  j"                  D �cg c]Z  }|j$                  t&        j(                  t&        j*                  t&        j,                  t&        j.                  fv r|j0                  nd ‘Œ\ }}| j                  j2                  D �cg c]<  }|j$                  t4        j6                  t4        j8                  fv r|j0                  nd ‘Œ> }}t;        |||| j<                  j>                  | j<                  j@                  | j                  | j                  |¬«      }tC        || jD                  | «      }|jF                  jI                  | j                  jF                  «       |S c c}w c c}w )Nr   ÚTRAINING)r]   )%Ú	verifiersÚdialectr   rJ   r°   ÚGraphModuler±   ÚcopyÚdeepcopyr(   rƒ   rs   rk   rl   Úmodule_call_graphÚ	signaturer]   Úinput_specsÚkindr   r|   ÚCONSTANT_TENSORr~   Ú
CUSTOM_OBJÚtargetÚoutput_specsr   ÚBUFFER_MUTATIONÚUSER_INPUT_MUTATIONrq   Ú	call_specr   r\   rÂ   r+   r8   rP   )	rž   rr   Úsigr]   r   r0   r\   rB   Ú	unlift_gms	            r!   Ú&_unlift_exported_program_lifted_statesr×     sä  € à	‡|�|�A�×Ñ *Ò,Ü" 2Ó&ˆÜ�X‰X×!Ñ! "§/¡/´4·=±=ÀÇÁÓ3JÓK€FÜ˜f b×&8Ñ&8¸"¿-¹-ÈÏÉÔVà)+×)=Ñ)=¸aÑ)@×)JÑ)JÐ"J #Ð"Jˆ×ÒÐQUð ð ×)Ñ)×5Ñ5ö*ð ð �|‰|ä× Ñ Ü×)Ñ)Ü×#Ñ#Ü×$Ñ$ð	ñð �NŠNð ñð*€Mð *ð, ×*Ñ*×7Ñ7ö,ð ð	 �}‰}Ü×*Ñ*¬J×,JÑ,JÐKñLð �OŠOð ñð,€Oð ,ô ØØØØ
�‰×ÑØ
�‰×ÑØ
�‰Ø
�‰Ø+ô	€Fô .¨f°b×6JÑ6JÈBÓO€IØ‡N�N×Ñ˜"Ÿ/™/×.Ñ.Ô/ØÐùòK*ùò,s   ÃAH/ÅAH4r“   );rÈ   r¬   Úcollections.abcr   Ú	itertoolsr   Útypingr   r   rJ   Útorch.utils._pytreeÚutilsÚ_pytreer   Útorch._export.non_strict_utilsr   r   r	   Útorch._export.utilsr
   Útorch.export.unflattenr   r   Útorch.fx.graphr   r   Ú_remove_effect_tokens_passr   Ú_tree_utilsr   Úexported_programr   r   r   r   ÚTreeSpecÚlistr"   Ú_dynamoÚdisabler.   r°   rÇ   ÚstrrO   rd   ÚNoderA   r[   rj   rq   rƒ   ra   r…   r™   rÂ   ÚnnÚModuler×   © r#   r!   ú<module>rî      sß  ðã Û Ý $Ý ß  ã ß $Ð $÷ñ õ
 Cß :ß 6å =Ý '÷ó ð¨v¯©ð À4ó ð& ‡�×Ññ
ó ð
ð5Ø�‰×Ñð5à˜H S™MÑ*ð5ð ˆ4��U—X‘X—]‘]Ð"Ñ# T¨#¨u¯x©x¯}©}Ð*<Ñ%=Ð=Ñ>ó5ð:31Ø�‰×Ñð31à˜h s™mÑ,ð31ð    U§X¡X§]¡]Ð 2Ñ3ð31ð ˜S %§(¡(§-¡-Ð/Ñ0ð	31ð
 
ó31ðr .2ñØ�_‰_ðà�v—‘Ñ'ðð    S¡	Ñ*ðð ó	ðR .2ñ"Ø�‰×Ñð"à˜H S™MÑ*ð"ð ˜h s™mÑ,ð"ð �_‰_ð	"ð
 �v—‘Ñ'ð"ð �S˜#�X‘ð"ð �C˜�H‰~ð"ð    S¡	Ñ*ó"ðJ&
Ø�H‰H× Ñ ð&
à)ð&
ð �S˜#�X‘ð&
ð �C˜�H‰~ð	&
ð
 
ó&
ôR
 $ô 
ô$$˜5Ÿ8™8×/Ñ/Ð;Võ $ðbØŸ™×,Ñ,ðbð 	ðbð ó	bðJ.¨ð .À5Ç8Á8Ç?Á?ô .r#   