Ë
    ÄÓ^jr  ã                   ó  — d Z ddlZddl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 ddlm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 d	dlmZmZ d	dlmZmZm Z   ed«      Z! ed«      Z"ejF                  jH                  Z$e%e$e&z  edef   f   Z'edef   e&z  Z( G d„ dejR                  jT                  «      Z+e	 G d„ d«      «       Z,e,e-z  ej\                  z  Z/ G d„ de «      Z0dejb                  de2e/   dee"ef   fd„Z3y)z?Utilities for lowering subgraphs used by higher order operatorsé    N)ÚCallableÚ	Generator)Úcontextmanager)Ú	dataclass)ÚAnyÚcastÚTypeVar)Ú	ParamSpec)Ú
OrderedSeté   )Úir)ÚSubgraphLoweringException)ÚGraphLowering)Ú
OpsHandlerÚSimpleCSEHandler)ÚopsÚVÚWrapperHandlerÚTÚ_P.c                   óà  ‡ — e Zd ZU dZeej                     dz  ed<   eed<   e	dz  ed<   e
e   dz  ed<   edz  ed<   eej                     ed<   e
e   ed	<   	 	 dd
ej                   j"                  dede
e   dz  dedz  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
    NÚgraph_outputsÚ
root_graphÚ_current_opÚallowed_mutationsÚadditional_loweringsÚbuffersÚmutated_buffersÚ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        €úl/var/www/ramen.bs-engineer-server.com/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_mutatorJ   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.)r0   r   Úaddr   r   ©r'   r1   s     r)   Úmark_buffer_mutatedz-PointwiseSubgraphLowering.mark_buffer_mutatedP   sJ   € Ø×!Ñ!Ô#Ø× Ñ ×$Ñ$ TÕ*ä+Ø>¸t×?OÑ?OÐ>Pð Q^ð ^óð r*   F©Úset_nameÚbufferr7   c                óv   — | j                  «       r| j                  j                  ||¬«      }|S t        d«      ‚)Nr6   zü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.)r0   r   Úregister_bufferr   )r'   r8   r7   r1   s       r)   r:   z)PointwiseSubgraphLowering.register_bufferZ   s?   € Ø×!Ñ!Ô#Ø—?‘?×2Ñ2°6ÀHÐ2ÓMˆDØˆKä+ðpóð r*   c                 ó.   — t        | j                  |«      S r$   )Úgetattrr   r4   s     r)   Ú__getattr__z%PointwiseSubgraphLowering.__getattr__e   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))ÚloweringrB   r.   ÚoperatorÚgetitemÚ
isinstanceÚlistÚtupleÚdictr%   Úcall_functionr   Ú
OpOverloadr   )r'   r>   r?   r@   rB   r(   s        €r)   rJ   z'PointwiseSubgraphLowering.call_functionh   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   )Úlenr   )r'   r>   r?   r@   s       r)   Úoutputz PointwiseSubgraphLowering.output€   s   € Ü�4‹y˜AŠ~Ðˆ~Ø! !™WˆÕr*   )NN)!Ú__name__Ú
__module__Ú__qualname__Ú__doc__rG   r   ÚIRNodeÚ__annotations__r   Ú
TargetTyper   rK   ÚLoweringDictÚBufferÚstrÚtorchÚfxÚGraphModuler&   r   r   r.   Úboolr0   r5   r:   r   r=   rI   rJ   rH   rN   Ú__classcell__©r(   s   @r)   r   r      s—  ø… ñð
 ˜Ÿ	™	‘? TÑ)Ó)ØÓØ˜dÑ"Ó"à! *Ñ-°Ñ4Ó4Ø&¨Ñ-Ó-Ø�"—)‘)‰_ÓØ ‘_Ó$ð <@Ø48ñà�H‰H× Ñ ðð +ðð & jÑ1°DÑ8ð	ð
 +¨TÑ1ðð 
õð$ ð(˜jð (¨YÐ7GÑ-Hò (ó ð(ð
 4ó 
ð¨ð °ó ð FKò 	 b§i¡ið 	¸dð 	Èsó 	ð. ð .¨ó .ð6àð6ð ð6ð �S˜#�X‘ð	6ð
 
õ6ð0%˜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)rO   rP   rQ   rY   ra   rT   rb   © r*   r)   r`   r`   …   s   … à�;‰;ÓØ�L‰LÔr*   r`   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        t        t
           |«      «       || _        t        |«      D �cg c]#  }| j                  j                  dd|› �di «      ‘Œ% c}| _        y c c}w )NÚplaceholderr   rc   Úinput)	Úcreate_proxyr%   r&   r   r   r   rf   ÚrangeÚplaceholders)r'   rf   rg   ÚparentÚir(   s        €r)   r&   zTracingOpsHandler.__init__�   sz   ø€ Ø×$Ñ$ ]°E¸2¸rÓBˆÜ‰Ñœœj¬™o¨vÓ6Ô7ØˆŒô ˜:Ó&ö
àð �K‰K×$Ñ$ ]°e¸A¸3°KÀÀRÕHò
ˆÕùò 
s   Á(A?Úidxc                 ó    — | j                   |   S r$   )rm   )r'   rp   s     r)   ri   zTracingOpsHandler.placeholder™   s   € Ø× Ñ  Ñ%Ð%r*   r?   c                 óh   ‡ — ‰ j                   j                  ddt        ˆ fd„|D «       «      fi «       y )NrN   c              3   óT   •K  — | ]  }‰j                   j                  |«      –— Œ! y ­wr$   )rf   Ú
create_arg)Ú.0Úar'   s     €r)   ú	<genexpr>z+TracingOpsHandler.output.<locals>.<genexpr>ž   s    øè ø€ Ò&OÀQ t§{¡{×'=Ñ'=¸a×'@Ñ&Oùs   ƒ%()rf   Úcreate_noderH   )r'   r?   s   ` r)   rN   zTracingOpsHandler.outputœ   s-   ø€ Ø�‰×ÑØ�h¤Ó&OÈ$Ô&OÓ!OÐ QÐSUõ	
r*   )rO   rP   rQ   rY   rZ   ÚTracerÚintr&   ÚProxyri   rH   ÚobjectrN   r]   r^   s   @r)   re   re   Ž   sW   ø„ ð
˜uŸx™xŸ™ð 
¸Cð 
ÀDõ 
ð&˜sð & u§x¡x§~¡~ó &ð
˜E &™Mð 
¨d÷ 
r*   re   ÚsubgraphÚinputsr"   c                 ó,  ‡— dt         dt         dt        j                  t        j                  z  d z  fd„}g }t	        |«      D ]‚  \  }}t        |t        «      r\|j                  t        j                  j                  |j                  |j                  t        j                  ||¬«      g ¬«      «       Œr|j                  |«       Œ„ | j                  }t        |t         j"                  ¬«      }t!        j$                  |«      5   |j&                  |Ž  d d d «       t(        j*                  j-                  «       }t(        j*                  j/                  |j0                  ¬«      |_        t3        t5        |t7        |«      «      «      }	|j8                  €J ‚t!        j:                  |	«      5  g }
|j8                  D ]Ï  }t        |t        j                  «      sJ t=        |«      «       ‚|j?                  «       g k(  sJ ‚t        |j@                  t        jB                  «      sJ ‚t        |j@                  j@                  t        j                  «      sJ ‚d	}|j@                  j@                  jE                  |«      }|
j                  |«       ŒÑ tG        jH                  |
Ž  d d d «       t(        j*                  jK                  i |j"                  «      Šd
tL        jN                  dtL        jP                  dtR        fˆfd„}|S # 1 sw Y   �ŒëxY w# 1 sw Y   ŒnxY w)NÚloop_idxÚ	input_idxr"   c                 ó,   — t        j                  |«      S r$   )r   ri   )r€   r�   s     r)   Úfake_inner_fnz/lower_pointwise_subgraph.<locals>.fake_inner_fn¦   s   € Ü�‰˜yÓ)Ð)r*   )r�   )rb   ra   Úinner_fnÚranges)r!   )Ú
tracer_clsrc   r?   r@   c                  ó@   •—  ‰t        j                  «       g| ¢­i |¤ŽS r$   )r   Úget_ops_handler)r?   r@   Ú
lowered_gms     €r)   r„   z*lower_pointwise_subgraph.<locals>.inner_fnÔ   s!   ø€ Ùœ!×+Ñ+Ó-Ð?°Ò?¸Ñ?Ð?r*   )*rz   r   ÚExprÚ	TensorBoxÚ	enumeraterF   r`   ÚappendÚ	PointwiseÚcreaterb   ra   Ú	functoolsÚpartialÚgraph_moduler   r   ÚgraphÚset_graph_handlerÚrunrY   rZ   ry   ÚGraphr(   r   re   rM   r   Úset_ops_handlerÚtypeÚget_sizeÚdataÚ
StorageBoxr„   r   rN   r[   r   r?   r@   r   )r}   r~   rƒ   Úgraph_inputsro   Údescr    Úpw_subgraphrf   Ú	trace_opsÚ
output_irsÚout_varrp   Úir_outr„   r‰   s                  @r)   Úlower_pointwise_subgraphr£   ¢   s~  ø€ ð*¤ð *´ð *¼¿¹Ä"Ç,Á,Ñ8NÐQUÑ8Uó *ð €LÜ˜VÓ$ò &‰ˆˆ4Ü�dœOÔ,Ø×ÑÜ—‘×#Ñ#ØŸ;™;ØŸ*™*Ü&×.Ñ.¨}ÈÔJØð	 $ó õð ×Ñ Õ%ð&ð 
×	Ñ	€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÷?'ñ 'ú÷ ð  ús   ÄK=Æ*C3L
Ë=LÌ
L)4rR   r�   rD   Úcollections.abcr   r   Ú
contextlibr   Údataclassesr   Útypingr   r   r	   Útyping_extensionsr
   ÚsympyrY   Útorch.utils._ordered_setr   Ú r   Úexcr   r“   r   Úops_handlerr   r   Úvirtualizedr   r   r   r   r   Ú_opsrK   rI   rX   rV   rU   rZ   ÚInterpreterr   r`   rz   ÚBasicÚSubgraphInputre   ÚSubgraphrG   r£   rc   r*   r)   ú<module>r´      s  ðÙ Eã Û ß /Ý %Ý !ß %Ñ %Ý 'ã ã Ý /å Ý *Ý  ß 5ß /Ñ /ñ ˆCƒL€Ùˆtƒ_€à�Z‰Z×"Ñ"€
Ø�J Ñ$ h¨s°C¨xÑ&8Ð8Ñ9€Ø�c˜3�hÑ #Ñ%€
ôc% §¡× 4Ñ 4ô c%ðL ÷ð ó ðð
   #Ñ%¨¯©Ñ3€ô
˜ô 
ð(5Ø�k‰kð5Ø#'¨Ñ#6ð5àˆb�#ˆgÑô5r*   