Ë
    P/æj}*  ã                  ó>  — d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZ d dlZd dlmZ d dlmZ ej&                  j)                  ed«      Zej&                  j)                  ed«      Ze	e
eeej2                  f         Zee	e   gef   Z ej8                  d	¬
«       G d„ d«      «       Z ej8                  d	¬
«       G d„ d«      «       Z ej8                  d	¬
«       G d„ d«      «       Z	 	 	 	 d&d„Z d'd„Z!d(d„Z"d)d„Z#d*d„Z$	 	 	 	 	 	 d+d„Z%	 	 	 	 	 	 	 	 d,d„Z&d-d„Z'	 	 	 	 d.d„Z(	 	 d/d„Z)d„ Z*ej8                   G d„ d«      «       Z+	 	 	 	 	 	 d0d„Z,d1d„Z- G d „ d!e«      Z.	 	 	 	 	 	 	 	 	 	 	 	 d2d"„Z/	 	 	 	 	 	 d3d#„Z0 ej8                  d	¬
«       G d$„ d%«      «       Z1y)4é    )ÚannotationsN)ÚEnum)ÚAnyÚCallableÚDictÚListÚOptionalÚSequenceÚTupleÚUnion)Úcounters)Ú	InputTypeÚ
perf_hintsÚcudagraph_static_inputsT)Úfrozenc                  ó   — e Zd ZU dZded<   y)Ú
FunctionIDz9Unique counter of a function wrapped in cudagraphify_implÚintÚidN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úb/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_inductor/cudagraph_utils.pyr   r      s
   … á?Ø„Gr   r   c                  ó:   — e Zd ZU dZded<   ded<   ded<   ded<   y	)
ÚPlaceholderInfozÚ
    A serializable version of torch.fx.Node that contains information
    pertinent to placeholder stack traces. We use these in logging and error messages
    related to cudagraphs, and will cache these results.
    ÚstrÚnameúOptional[str]Ústack_traceúList[PlaceholderInfo]ÚusersÚmutating_use_stack_traceNr   r   r   r   r    r       s    … ñð ƒIØÓà Ó Ø+Ô+r   r    c                  óN   — e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   ded<   y)ÚWrappedFunctionzÈ
    Represents a function that you want to record for CUDA graph replay,
    with a little more metadata so we can identify if we have an applicable
    CUDA graph in our CUDA graph tree for it.
    zCallable[..., Any]ÚmodelúSequence[int]Ústatic_input_idxsr   r   zTuple[torch.Tensor, ...]Ú	constantsúSequence[PlaceholderInfo]ÚplaceholdersÚmutated_input_idxsNr   r   r   r   r)   r)   ,   s,   … ñð ÓØ$Ó$ØƒNØ'Ó'Ø+Ó+Ø%Ô%r   r)   c                ó‚  — t        | j                  «      dk(  r8t        t        | j                  «      «      j                  j                  dd «      S | j                  D ]`  }|j                  t        j                  j                  j                  j                  k(  sŒ?|j                  j                  dd «      x}sŒ^|c S  y )Né   r$   )Úlenr&   ÚnextÚiterÚmetaÚgetÚtargetÚtorchÚopsÚatenÚcopy_Údefault)Úplaceholder_nodeÚuser$   s      r   Ú&get_mutating_use_stack_trace_from_noder@   <   sœ   € ô Ð×!Ñ!Ó" aÒ'Ü”DÐ)×/Ñ/Ó0Ó1×6Ñ6×:Ñ:¸=È$ÓOÐOà×%Ñ%ò #ˆØ�:‰:œŸ™Ÿ™×-Ñ-×5Ñ5Ó5Ø!Ÿh™hŸl™l¨=¸$Ó?Ð?ˆ{Ñ?Ø"Ò"ð#ð
 r   c                ó   — | j                   S ©N)r'   )Úplaceholder_infos    r   Úget_mutating_use_stack_tracerD   K   s   € Ø×4Ñ4Ð4r   c                óø   — | j                   }| j                  j                  dd «      }g }d }| j                  dk(  r-| j                  D �cg c]  }t        |«      ‘Œ }}t        | «      }t        ||||«      S c c}w )Nr$   Úplaceholder)r"   r6   r7   Úopr&   Úto_placeholder_infor@   r    )r>   r"   r$   r&   r'   Úis         r   rH   rH   O   s…   € Ø× Ñ €DØ"×'Ñ'×+Ñ+¨M¸4Ó@€KØ€EØ#Ðà×Ñ˜mÒ+Ø1A×1GÑ1GÖH¨AÔ$ QÕ'ÐHˆÐHÜ#IØó$
Ð ô ˜4 ¨eÐ5MÓNÐNùò Is   Á
A7c                ór   — | j                   D �cg c]  }|j                  dk(  sŒt        |«      ‘Œ c}S c c}w )NrF   )ÚnodesrG   rH   )ÚgraphÚnodes     r   Úget_placeholder_inforN   ^   s4   € à.3¯k©köØ&*¸T¿W¹WÈÓ=UÔ˜DÕ!òð ùò s   �4¤4c                ó   — d| › �S )Nzskipping cudagraphs due to r   )Úreasons    r   Úformat_default_skip_messagerQ   d   s   € Ø(¨¨Ð1Ð1r   c                ó‚   — d}|D ]  }| |   }t        |«      x}sŒ n t        dt        |«      › d�«      }|r|› d|› �S |S )NÚ zmutated inputs (z instances)ú. Found from : 
 )rD   rQ   r3   )r/   Úmutation_indicesr$   ÚidxrF   Úmsgs         r   Úget_mutation_stack_tracerX   h   sp   € ð "$€Kàò ˆØ" 3Ñ'ˆÜ6°{ÓCÐCˆ;ÑCÙðô
 &Ø
œ3Ð/Ó0Ð1°Ð=ó€Cñ Ø�Ð(¨¨Ð6Ð6à€Jr   c                ó†  — t         j                  j                  j                  j                  r3| j
                  D �cg c]  }|| j                  v s |||   «      s|‘Œ }}n| j
                  }t        j                  d| j                  «       t        j                  d|«       |rt        | j                  |«      S d S c c}w )Nz'check mutation static input indices: %sz#check mutation mutation indices: %s)r9   Ú	_inductorÚconfigÚtritonÚcudagraph_treesr0   r,   Ústatic_inputs_logÚdebugrX   r/   )ÚfuncÚinputsÚis_cuda_graph_recorded_tensorrV   rU   s        r   Úcheck_for_mutationrc   {   sÄ   € ô ‡�×Ñ×$Ñ$×4Ò4ð ×.Ñ.ö+
àà�t×-Ñ-Ñ-Ù0°¸±Ô=ò	 ð+
Ðñ +
ð  ×2Ñ2Ðä×ÑØ1°4×3IÑ3Iôô ×ÑÐAÐCSÔTñ ô 	! ×!2Ñ!2Ð4DÓEðð ðùò!+
s   ½"B>c                ój   — | j                   D ]$  }|j                  j                  dd «      x}sŒ"|c S  y )Nr$   )r&   r6   r7   )rM   r?   r$   s      r   Ú_get_use_stack_tracere   š   s:   € Ø�z‰zò ˆØŸ(™(Ÿ,™, }°dÓ;Ð;ˆ;Ñ;ØÒðð r   c                ó¢  — | j                  t        j                  d«      «      x}r8d|j                  › d�}t	        |«      x}rt        |› d|› �«      S t        |«      S t        | «      dk(  r0t        t        | j                  «       «      «      j                  dk(  ry d„ | j                  «       D «       }t        dd	j                  |«      › �«      S )
NÚcpuzcpu device (ú)rT   r2   Úcudac              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrB   )Úrepr)Ú.0Úkeys     r   ú	<genexpr>z:check_multiple_devices_or_any_cpu_nodes.<locals>.<genexpr>±   s   è ø€ ÒA˜s”�c—ÑAùs   ‚zmultiple devices: z, )r7   r9   Údevicer"   re   rQ   r3   r4   r5   ÚkeysÚtypeÚjoin)Údevice_node_mappingÚcpu_noderW   r$   Ú	keys_reprs        r   Ú'check_multiple_devices_or_any_cpu_nodesrv   ¡   sÍ   € ð '×*Ñ*¬5¯<©<¸Ó+>Ó?Ð?€xÐ?Ø˜XŸ]™]˜O¨1Ð-ˆÜ.¨xÓ8Ð8ˆ;Ð8Ü.°#°Ð6HÈÈÐ/VÓWÐWä*¨3Ó/Ð/ô 	ÐÓ  AÒ%Ü”Ð)×.Ñ.Ó0Ó1Ó2×7Ñ7¸6ÒAàáAÐ&9×&>Ñ&>Ó&@ÔA€IÜ&Ð);¸D¿I¹IÀiÓ<PÐ;QÐ'RÓSÐSr   c                ó   — t        | «      S rB   )rv   )rs   s    r   Ú check_lowering_disable_cudagraphrx   µ   s   € ô 3Ð3FÓGÐGr   c                óV   — t         j                  | «       t        d   dxx   dz  cc<   y )NÚinductorÚcudagraph_skipsr2   )Úperf_hint_logÚwarningr   )rW   s    r   Ú#log_cudagraph_skip_and_bump_counterr~   »   s&   € Ü×Ñ˜#ÔÜˆZÑÐ*Ó+¨qÑ0Ô+r   c                  ó    — e Zd ZU ded<   dd„Zy)ÚBoxedDeviceIndexúOptional[int]Úvaluec                ó:   — |�t        |t        «      sJ ‚|| _        y rB   )Ú
isinstancer   r‚   )ÚselfÚ
device_idxs     r   ÚsetzBoxedDeviceIndex.setÄ   s   € ØÐ!¤Z°
¼CÔ%@Ð@Ð@Øˆ�
r   N)r†   r�   )r   r   r   r   r‡   r   r   r   r€   r€   À   s   … àÓô r   r€   c                óp  — t        d«      }t        j                  j                  j                  j
                  r[t        |«      }|j                  D �cg c]	  }||vsŒ|‘Œ }}t        |«      dk7  }|sy t        | j                  «      }t        ||«      S t        |j                  «      dk7  }|sd S |S c c}w )Nzmutated inputsr   )rQ   r9   rZ   r[   r\   r]   r‡   r0   r3   rN   rL   rX   Úmutated_inputs)	ÚgmÚcompiled_graphr,   Údefault_msgÚunique_idxsrV   rU   Úhas_mutationr/   s	            r   Ú3check_for_mutation_ignore_cuda_graph_managed_tensorr�   É   s¼   € ô .Ð.>Ó?€Kô ‡�×Ñ×$Ñ$×4Ò4ÜÐ+Ó,ˆð *×<Ñ<ö
ØÀÈ;Ò@VŠCð
Ðð 
ô Ð+Ó,°Ñ1ˆÙØÜ+¨B¯H©HÓ5ˆÜ'¨Ð6FÓGÐGô ˜>×8Ñ8Ó9¸QÑ>ˆÙ'ˆtÐ8¨[Ð8ùò
s   Á	B3ÁB3c                óŠ   — | j                   r| j                   S | j                  D ]  }|j                   sŒ|j                   c S  y)zM
    Gets the first non-empty stack trace of a placeholder or its users.
    N)r$   r&   )rF   Úusers     r   Úget_placeholder_stack_tracer’   à   sH   € ð ×ÒØ×&Ñ&Ð&à×!Ñ!ò $ˆØ×ÓØ×#Ñ#Ò#ð$ð r   c                  ó$   — e Zd ZdZdZdZdZdd„Zy)ÚCheckInvariantStatusr2   é   é   é   c                ó˜   — | j                   dk(  ry| j                   dk(  ry| j                   dk(  ry| j                   › d| j                  › �S )NÚCudagraphManagedIdxMismatchz-cudagraph managed tensor data pointer changedÚStaticInputIdxMismatchz!static input data pointer changedÚ&ExpectedDeadIndicesBeforeGraphMismatchz+expected dead indices before graph are livez: )r"   r‚   )r…   s    r   Ú__str__zCheckInvariantStatus.__str__û   sK   € Ø�9‰9Ð5Ò5ØBØ�Y‰YÐ2Ò2Ø6Ø�Y‰YÐBÒBØ@à—i‘i�[  4§:¡: ,Ð/Ð/r   N)Úreturnr!   )r   r   r   ÚSUCCESSr™   rš   r›   rœ   r   r   r   r”   r”   î   s$   „ à€Gð #$Ðð Ðð ./Ð*ô0r   r”   c                óî  — t        |«      t        |«      k(  rt        |«      t        | «      k(  sJ d«       ‚|D �cg c]  }||   ‘Œ	 }}|D �cg c]  }||   ‘Œ	 }}|› d�}t        t        ||«      «      D ]t  \  }\  }	}
t        |	t        j
                  «      sJ ‚||   }|	j                  «       |
k7  sŒ>| |   }|› d|j                  › d|
› d|	j                  «       › dt        |«      › d�
}Œv |S c c}w c c}w )z}
    Logs the mismatch between input data pointers and recorded data pointers.
    This checks only idxs in target_idxs.
    zClength mismatch between inputs, recorded_data_ptr, and placeholdersz.
zinput name: z. data pointer changed from z to z. input stack trace: ú
)	r3   Ú	enumerateÚzipr„   r9   ÚTensorÚdata_ptrr"   r’   )r/   ra   Úrecorded_data_ptrÚtarget_idxsÚmismatchrI   Ú	t_tensorsÚt_data_ptrsÚ	error_msgÚtensorr¤   ÚindexrF   s                r   Úlog_data_ptr_mismatchr­     s1  € ô ˆv‹;œ#Ð/Ó0Ò0´S¸³[ÄCØóEò 6ð MàLóMð ð %0Ö0˜q�˜“Ð0€IÐ0Ø1<Ö=¨AÐ$ QÓ'Ð=€KÐ=Ø�*˜CÐ €IÜ!*¬3¨y¸+Ó+FÓ!Gò 	ÑˆÑˆF�HÜ˜&¤%§,¡,Ô/Ð/Ð/Ø˜A‘ˆØ�?‰?Ó Ó(Ø& uÑ-ˆKà�+˜\¨+×*:Ñ*:Ð);ð <-Ø-5¨J°d¸6¿?¹?Ó;LÐ:Mð N&Ü&AÀ+Ó&NÐ%OÈrðSñ ð	ð Ðùò 1ùÚ=s   ºC-ÁC2c                ó<  ‡— t        | j                  «       «      dz   Šˆfd„}t        j                  j                  j
                  j                  rL‰t        j                  j                  j
                  j                  kD  rt        j                   |«       «       yy)Nr2   c                 ó   •— d‰ › d�S )Nz¤CUDAGraph supports dynamic shapes by recording a new graph for each distinct input size. Recording too many CUDAGraphs may lead to extra overhead. We have observed a0   distinct sizes. Please consider the following options for better performance: a) padding inputs to a few fixed number of shapes; or b) set torch._inductor.config.triton.cudagraph_skip_dynamic_graphs=True. Set torch._inductor.config.triton.cudagraph_dynamic_shape_warn_limit=None to silence this warning.r   )Únum_cudagraphss   €r   Úwarn_msgz4maybe_warning_due_to_dynamic_shape.<locals>.warn_msg+  s   ø€ ð0à0>Ð/?ð @'ð'ð		
r   TF)	r3   rp   r9   rZ   r[   r\   Ú"cudagraph_dynamic_shape_warn_limitr|   r}   )Úfn_cacheÚnew_int_keyr±   r°   s      @r   Ú"maybe_warning_due_to_dynamic_shaperµ   %  st   ø€ ô ˜Ÿ™›Ó)¨AÑ-€Nô

ô 	�‰×Ñ×%Ñ%×HÒHØÜ
�/‰/×
 Ñ
 ×
'Ñ
'×
JÑ
JòKô 	×Ñ™h›jÔ)Øàr   c                  ó0   — e Zd ZU dZded<   ded<   ded<   y)	ÚCudagraphCachedInfoz'
    Info needed to realign inputs
    r.   r/   zList[Optional[str]]Ústack_tracesz	List[str]Úcudagraph_fail_reasonsNr   r   r   r   r·   r·   B  s   … ñð ,Ó+Ø%Ó%Ø%Ô%r   r·   )r>   útorch.fx.Noder�   r#   )rC   r    r�   r#   )r>   rº   r�   r    )rL   ztorch.fx.Graphr�   r%   )rP   r!   r�   r!   )r/   r.   rU   r+   r�   r!   )r`   r)   ra   úList[InputType]rb   zCallable[[torch.Tensor], bool]r�   r#   )r�   r#   )rs   ú!Dict[torch.device, torch.fx.Node]r�   r#   )rs   r¼   )rŠ   ztorch.fx.GraphModuler,   r+   r�   r#   )rF   r    r�   r#   )r/   r.   ra   r»   r¥   zSequence[Optional[int]]r¦   r+   r§   r”   r�   r!   )r³   z)Dict[Tuple[int, ...], Callable[..., Any]]r´   r   r�   Úbool)2Ú
__future__r   ÚdataclassesÚenumr   Útypingr   r   r   r   r	   r
   r   r   r9   Útorch._dynamo.utilsr   Útorch._inductor.utilsr   Ú_loggingÚgetArtifactLoggerr   r|   r^   r   r£   Ú
OutputTypeÚ	ModelTypeÚ	dataclassr   r    r)   r@   rD   rH   rN   rQ   rX   rc   re   rv   rx   r~   r€   r�   r’   r”   r­   rµ   r·   r   r   r   ú<module>rÉ      sk  ðå "ã Ý ß N× NÓ Nã Ý (Ý +ð —‘×0Ñ0°¸<ÓH€Ø—N‘N×4Ñ4ØÐ'óÐ ð
 �(˜5  e§l¡lÐ!2Ñ3Ñ4Ñ5€
Ø�d˜9‘oÐ&¨
Ð2Ñ3€	ð €×Ñ˜dÔ#÷ð ó $ðð
 €×Ñ˜dÔ#÷,ð ,ó $ð,ð €×Ñ˜dÔ#÷&ð &ó $ð&ðØ#ðàóó5óOóó2ðØ+ðØ?Lðàóð&Ø
ðàðð $Bðð ó	ó>ðTØ:ðTàóTð(HØ:óHò1ð
 ×Ñ÷ ð  ó ð ð9Øð9ØANð9àó9ó.ô0˜4ô 0ð0Ø+ðàðð /ðð ð	ð
 #ðð 	óð>Ø7ðàðð 
óð: €×Ñ˜dÔ#÷&ð &ó $ñ&r   