Ë
    g^(h¶  ã                   óà  — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZ ddlmZ ddlZddlmZ d	d
lmZ d	dlmZ d	dlmZ d	dlmZmZmZ  ed«      Z ed«      Zej@                  jB                  Z!e"ee!e#f   ede
f   f   Z$eede
f   e#f   Z% G d„ dejL                  jN                  «      Z(e G d„ d«      «       Z) G d„ de«      Z*dejV                  de,e)   deee
f   fd„Z-y)z?Utilities for lowering subgraphs used by higher order operatorsé    N)Ú	Generator)Úcontextmanager)Ú	dataclass)ÚAnyÚCallableÚOptionalÚTypeVarÚUnion)Ú	ParamSpec)Ú
OrderedSeté   )Úir)ÚSubgraphLoweringException)ÚSimpleCSEHandler)ÚopsÚVÚWrapperHandlerÚTÚ_P.c                   óX  ‡ — e Zd ZU dZeeej                        ed<   e	j                  j                  j                  ed<   ee   ed<   eee      ed<   ee   ed<   eej"                     ed<   ee   ed<   	 	 dd
e	j&                  j(                  de	j                  j                  j                  deee      dee   dd	f
ˆ fd„Zededed   fd„«       Zdefd„Zdedd	fd„Zddœdej"                  dedefd„Zdedefd„Zdededeeef   defˆ fd„Z dede!e   deeef   dd	fd„Z"ˆ xZ#S ) ÚPointwiseSubgraphLoweringz�
    Lowers a pointwise subgraph to a single set of buffers with a separate
    lowering object. Errors if buffers are created unexpectedly
    Úgraph_outputsÚ
root_graphÚ_current_opÚallowed_mutationsÚadditional_loweringsÚbuffersÚmutated_buffersNÚgmÚroot_graph_loweringÚreturnc                 ó–   •— t         ‰| �  |«       d | _        || _        || _        || _        d | _        t        «       | _        g | _	        y ©N)
ÚsuperÚ__init__r   r   r   r   r   r   r   r   )Úselfr   r    r   r   Ú	__class__s        €ú_/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_inductor/subgraph_lowering.pyr%   z"PointwiseSubgraphLowering.__init__+   sL   ø€ ô 	‰Ñ˜ÔØ!ˆÔØ-ˆŒØ!2ˆÔØ$8ˆÔ!ØˆÔô  *›|ˆÔØˆ�ó    Úop)NNNc              #   ób   K  — | j                   }|| _         	 d–— || _         y# || _         w xY w­w)zQSet which op is being processed in call function to know if we can mutate buffersN)r   )r&   r*   Úpreviouss      r(   Ú_op_contextz%PointwiseSubgraphLowering._op_context=   s3   è ø€ ð ×#Ñ#ˆØˆÔð	(Ûà'ˆDÕø˜xˆDÕüs   ‚/—# ›/£	,¬/c                 óR   — | j                   d uxr | j                  | j                   v S r#   )r   r   )r&   s    r(   Ú_approved_mutatorz+PointwiseSubgraphLowering._approved_mutatorG   s.   € à×"Ñ"¨$Ð.ò ;Ø× Ñ  D×$:Ñ$:Ð:ð	
r)   Únamec                 óŒ   — | j                  «       r| j                  j                  |«       y t        d| j                  › d�«      ‚)Nz,Buffer mutation detected during lowering of z‰. Buffer mutations are only allowed in approved mutation ops. This is an error in the lowering of the subgraph, please file a bug report.)r/   r   Úaddr   r   ©r&   r0   s     r(   Úmark_buffer_mutatedz-PointwiseSubgraphLowering.mark_buffer_mutatedM   sJ   € Ø×!Ñ!Ô#Ø× Ñ ×$Ñ$ TÕ*ä+Ø>¸t×?OÑ?OÐ>Pð Q^ð ^óð r)   F)Úset_nameÚbufferr5   c                óÀ   — | j                  «       rD| j                  dt        | j                  «      › �«      }| j                  j	                  |«       |S t        d«      ‚)NÚbufzüBuffers cannot be created while lowering a pointwise subgraph. This could be for a good reason (e.g. you're calling an op we can't codegen as a pointwise op), but it could also be a bug. Please file a bug report if you think this should be supportable.)r/   Úqualify_nameÚlenr   Úappendr   )r&   r6   r5   r0   s       r(   Úregister_bufferz)PointwiseSubgraphLowering.register_bufferW   sY   € Ø×!Ñ!Ô#Ø×$Ñ$ s¬3¨t¯|©|Ó+<Ð*=Ð%>Ó?ˆDØ�L‰L×Ñ Ô'ØˆKä+ðpóð r)   c                 ó.   — t        | j                  |«      S r#   )Úgetattrr   r3   s     r(   Ú__getattr__z%PointwiseSubgraphLowering.__getattr__c   s   € Ü�t—‘¨Ó-Ð-r)   ÚtargetÚargsÚkwargsc                 óÀ  •— ddl m} | j                  |«      5  |t        j                  u r8t        |d   t        t        t        f«      rt        ‰| �)  |||«      cd d d «       S | j                  �>|| j                  v r0t        |t        «      sJ ‚ | j                  |   |i |¤Žcd d d «       S ||vrt        |› d�«      ‚ ||   |i |¤Žcd d d «       S # 1 sw Y   y xY w)Nr   )Ú	loweringsr   z. not supported in subgraph, (missing lowering))ÚloweringrD   r-   ÚoperatorÚgetitemÚ
isinstanceÚlistÚtupleÚdictr$   Úcall_functionr   Ú
OpOverloadr   )r&   r@   rA   rB   rD   r'   s        €r(   rL   z'PointwiseSubgraphLowering.call_functionf   sñ   ø€ õ 	(à×Ñ˜fÓ%ñ 	6Øœ×)Ñ)Ñ)¬j¸¸a¹Ä4ÌÔPTÐBUÔ.VÜ‘wÑ,¨V°T¸6ÓB÷	6ñ 	6ð
 ×(Ñ(Ð4Ø˜T×6Ñ6Ñ6Ü% f¬jÔ9Ð9Ð9Ø<˜4×4Ñ4°VÑ<¸dÐMÀfÑM÷	6ñ 	6ð ˜YÑ&Ü/Ø�hÐLÐMóð ð %�9˜VÑ$ dÐ5¨fÑ5÷	6÷ 	6ò 	6ús   ™ACÁ$A CÂ.CÃCc                 ó8   — t        |«      dk(  sJ ‚|d   | _        y )Nr   r   )r:   r   )r&   r@   rA   rB   s       r(   Úoutputz PointwiseSubgraphLowering.output   s   € Ü�4‹y˜AŠ~Ðˆ~Ø! !™WˆÕr)   )NN)$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rI   r   ÚIRNodeÚ__annotations__ÚtorchÚ	_inductorÚgraphÚGraphLoweringÚ
TargetTyper   rM   ÚLoweringDictÚBufferÚstrÚfxÚGraphModuler%   r   r   r-   Úboolr/   r4   r<   r   r?   rK   rL   rJ   rO   Ú__classcell__©r'   s   @r(   r   r      s·  ø… ñð
 ˜D §¡™OÑ,Ó,Ø—‘×%Ñ%×3Ñ3Ó3Ø˜*Ñ%Ó%à 
¨:Ñ 6Ñ7Ó7Ø" <Ñ0Ó0Ø�"—)‘)‰_ÓØ ‘_Ó$ð ?CØ7;ñà�H‰H× Ñ ðð #Ÿ_™_×2Ñ2×@Ñ@ðð $ J¨zÑ$:Ñ;ð	ð
 ' |Ñ4ðð 
õð$ ð(˜jð (¨YÐ7GÑ-Hò (ó ð(ð
 4ó 
ð¨ð °ó ð FKò 
 b§i¡ið 
¸dð 
Èsó 
ð. ð .¨ó .ð6àð6ð ð6ð �S˜#�X‘ð	6ð
 
õ6ð2%˜Sð %¨¨c©
ð %¸DÀÀcÀ¹Nð %Èt÷ %r)   r   c                   óJ   — e Zd ZU ej                  ed<   ej                  ed<   y)ÚInputDescriptorÚdtypeÚdeviceN)rP   rQ   rR   rV   re   rU   rf   © r)   r(   rd   rd   „   s   … à�;‰;ÓØ�L‰LÔr)   rd   c                   ó¢   ‡ — e Zd Zdej                  j
                  deddfˆ fd„Zdedej                  j                  fd„Z	de
e   ddfd	„Zˆ xZS )
ÚTracingOpsHandlerÚtracerÚ
num_inputsr!   Nc           	      óÞ   •— |j                  dddi «      }t        ‰| �	  |«       || _        t	        |«      D �cg c]#  }| j                  j                  dd|› �di «      ‘Œ% c}| _        y c c}w )NÚplaceholderr   rg   Úinput)Úcreate_proxyr$   r%   rj   ÚrangeÚplaceholders)r&   rj   rk   ÚparentÚir'   s        €r(   r%   zTracingOpsHandler.__init__‹   so   ø€ Ø×$Ñ$ ]°E¸2¸rÓBˆÜ‰Ñ˜Ô ØˆŒô ˜:Ó&ö
àð �K‰K×$Ñ$ ]°e¸A¸3°KÀÀRÕHò
ˆÕùò 
s   ¹(A*Úidxc                 ó    — | j                   |   S r#   )rq   )r&   rt   s     r(   rm   zTracingOpsHandler.placeholder•   s   € Ø× Ñ  Ñ%Ð%r)   rA   c                 óh   ‡ — ‰ j                   j                  ddt        ˆ fd„|D «       «      fi «       y )NrO   c              3   óT   •K  — | ]  }‰j                   j                  |«      –— Œ! y ­wr#   )rj   Ú
create_arg)Ú.0Úar&   s     €r(   ú	<genexpr>z+TracingOpsHandler.output.<locals>.<genexpr>š   s    øè ø€ Ò&OÀQ t§{¡{×'=Ñ'=¸a×'@Ñ&Oùs   ƒ%()rj   Úcreate_noderJ   )r&   rA   s   ` r(   rO   zTracingOpsHandler.output˜   s-   ø€ Ø�‰×ÑØ�h¤Ó&OÈ$Ô&OÓ!OÐ QÐSUõ	
r)   )rP   rQ   rR   rV   r^   ÚTracerÚintr%   ÚProxyrm   rJ   ÚobjectrO   ra   rb   s   @r(   ri   ri   Š   sW   ø„ ð
˜uŸx™xŸ™ð 
¸Cð 
ÀDõ 
ð&˜sð & u§x¡x§~¡~ó &ð
˜E &™Mð 
¨d÷ 
r)   ri   ÚsubgraphÚinputsr!   c                 óê  ‡— dt         dt         dt        t        j                  t        j                  d f   fd„}t        |«      D ��cg c]Q  \  }}t        j                  j                  |j                  |j                  t        j                  ||¬«      g ¬«      ‘ŒS }}}| j                  }t        |t        j                  ¬«      }t        j                   |«      5   |j"                  |Ž  d d d «       t$        j&                  j)                  «       }t$        j&                  j+                  |j,                  ¬«      |_        t/        t1        |t3        |«      «      «      }	|j4                  €J ‚t        j6                  |	«      5  g }
|j4                  D ]Ï  }t9        |t        j                  «      sJ t;        |«      «       ‚|j=                  «       g k(  sJ ‚t9        |j>                  t        j@                  «      sJ ‚t9        |j>                  j>                  t        j                  «      sJ ‚d	}|j>                  j>                  jC                  |«      }|
jE                  |«       ŒÑ tG        jH                  |
Ž  d d d «       t$        j&                  jK                  i |j                  «      Šd
tL        jN                  dtL        jP                  dtR        fˆfd„}|S c c}}w # 1 sw Y   �ŒñxY w# 1 sw Y   ŒtxY w)NÚloop_idxÚ	input_idxr!   c                 ó,   — t        j                  |«      S r#   )r   rm   )r„   r…   s     r(   Úfake_inner_fnz/lower_pointwise_subgraph.<locals>.fake_inner_fn¢   s   € ô �‰˜yÓ)Ð)r)   )r…   )rf   re   Úinner_fnÚranges)r    )Ú
tracer_clsrg   rA   rB   c                  ó@   •—  ‰t        j                  «       g| ¢­i |¤ŽS r#   )r   Úget_ops_handler)rA   rB   Ú
lowered_gms     €r(   rˆ   z*lower_pointwise_subgraph.<locals>.inner_fnÎ   s!   ø€ Ùœ!×+Ñ+Ó-Ð?°Ò?¸Ñ?Ð?r)   )*r~   r
   r   ÚExprÚ	TensorBoxÚ	enumerateÚ	PointwiseÚcreaterf   re   Ú	functoolsÚpartialÚgraph_moduler   r   rX   Úset_graph_handlerÚrunrV   r^   r}   ÚGraphr'   r   ri   r:   r   Úset_ops_handlerrH   ÚtypeÚget_sizeÚdataÚ
StorageBoxrˆ   r;   r   rO   r_   r   rA   rB   r   )r�   r‚   r‡   rs   ÚdescÚgraph_inputsr   Úpw_subgraphrj   Ú	trace_opsÚ
output_irsÚout_varrt   Úir_outrˆ   r�   s                  @r(   Úlower_pointwise_subgraphr¥   ž   sh  ø€ ð*Üð*Ü"%ð*ä	Œr�w‰wœŸ™ dÐ*Ñ	+ó*ô ! Ó(÷ñ ˆAˆtô 	�‰×ÑØ—;‘;Ø—*‘*Ü×&Ñ& }ÀÔBØð	 	õ 	
ð€Lñ ð 
×	Ñ	€BÜ+¨BÄAÇGÁGÔL€KÜ	
×	Ñ	˜[Ó	)ñ 'Øˆ�‰˜Ñ&÷'ô
 �X‰X�_‰_Ó€FÜ—8‘8—>‘>¨V×-=Ñ-=�>Ó>€F„LÜ Ô!2°6¼3¸v»;Ó!GÓH€IØ×$Ñ$Ð0Ð0Ð0ä	
×	Ñ	˜9Ó	%ñ  Øˆ
à"×0Ñ0ò 		&ˆGÜ˜g¤r§|¡|Ô4ÐC´d¸7³mÓCÐ4Ø×#Ñ#Ó%¨Ò+Ð+Ð+Ü˜gŸl™l¬B¯M©MÔ:Ð:Ð:Ü˜gŸl™l×/Ñ/´·±Ô>Ð>Ð>àˆCØ—\‘\×&Ñ&×/Ñ/°Ó4ˆFà×Ñ˜fÕ%ð		&ô 	�
‰
�JÑ÷ ô  —‘×%Ñ% b¨&¯,©,Ó7€Jð@œŸ™ð @¬2¯9©9ð @¼õ @ð €OùóU÷'ñ 'ú÷ ð  ús    ÁAKÃKÆC3K)ËK&Ë)K2).rS   r“   rF   Úcollections.abcr   Ú
contextlibr   Údataclassesr   Útypingr   r   r   r	   r
   Útyping_extensionsr   rV   Útorch.utils._ordered_setr   Ú r   Úexcr   Úops_handlerr   Úvirtualizedr   r   r   r   r   Ú_opsrM   rK   r]   r[   rZ   r^   ÚInterpreterr   rd   ri   ÚSubgraphrI   r¥   rg   r)   r(   ú<module>r³      sþ   ðÙ Eã Û Ý %Ý %Ý !ß :Õ :Ý 'ã Ý /å Ý *Ý )ß /Ñ /ñ ˆCƒL€Ùˆtƒ_€à�Z‰Z×"Ñ"€
Ø�E˜* c˜/Ñ*¨H°S¸#°XÑ,>Ð>Ñ?€Ø�8˜C ˜HÑ% sÐ*Ñ+€
ôe% §¡× 4Ñ 4ô e%ðP ÷ð ó ðô

˜ô 
ð(3Ø�k‰kð3Ø#'¨Ñ#8ð3àˆb�#ˆgÑô3r)   