Ë
    g^(hç+  ã                  ó`  — 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
 d dlZd dlmZmZ d dlmZ d dlmZ e	rd dlmZ ej*                  j-                  ed	«      Zej*                  j-                  ed
«      Zeee
eej8                  f         Zeee   gef   Z ej>                  d¬«       G d„ d«      «       Z  ej>                  d¬«       G d„ d«      «       Z! ej>                  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*	 	 	 	 d0d„Z+	 	 	 	 d0d„Z,d1d„Z-ej>                   G d„ d«      «       Z.	 	 	 	 	 	 	 	 	 	 d2d „Z/d3d!„Z0 G d"„ d#e«      Z1	 	 	 	 	 	 	 	 	 	 	 	 d4d$„Z2	 	 	 	 	 	 d5d%„Z3 ej>                  d¬«       G d&„ d'«      «       Z4y)6é    )ÚannotationsN)ÚEnum)ÚAnyÚCallableÚOptionalÚTYPE_CHECKINGÚUnion)ÚcountersÚget_metrics_context)Ú	InputType)Ú
OrderedSet)ÚSequenceÚ
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__© ó    ú]/var/www/skyplay_api_hub/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)   2   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@   B   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   Q   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   U   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   d   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   j   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   n   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                ó´   — t         j                  | «       t        d   dxx   dz  cc<   t        «       }|j	                  «       r|j                  d| d¬«       y y )NÚinductorÚcudagraph_skipsr2   Úcudagraph_skip_reasonT)Ú	overwrite)Úperf_hint_logÚwarningr
   r   Úin_progressÚset)rW   Úmetrics_contexts     r   Ú#log_cudagraph_skip_and_bump_counterrƒ   Á   sU   € Ü×Ñ˜#ÔÜˆZÑÐ*Ó+¨qÑ0Ó+Ü)Ó+€OØ×"Ñ"Ô$Ø×ÑÐ3°SÀDÐÕIð %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   r�   zBoxedDeviceIndex.setÍ   s   € ØÐ!¤Z°
¼CÔ%@Ð@Ð@Øˆ�
r   N)r‹   r†   ÚreturnÚNone)r   r   r   r   r�   r   r   r   r…   r…   É   s   … àÓô r   r…   c                óH  — t        d«      }t        j                  j                  j                  j
                  rQt        |«      }|D �cg c]	  }||vsŒ|‘Œ }}t        |«      dk7  }|sy t        | j                  «      }	t        |	|«      S t        |«      dk7  }|sd S |S c c}w )Nzmutated inputsr   )rQ   r9   rZ   r[   r\   r]   r   r3   rN   rL   rX   )
ÚgmÚmutated_inputsr0   r,   Údefault_msgÚunique_idxsrV   rU   Úhas_mutationr/   s
             r   Ú3check_for_mutation_ignore_cuda_graph_managed_tensorr”   Ò   s¦   € ô .Ð.>Ó?€Kô ‡�×Ñ×$Ñ$×4Ò4Ü Ð!2Ó3ˆà+=ÖX CÀÈKÒAWšCÐXÐÐXÜÐ+Ó,°Ñ1ˆÙØÜ+¨B¯H©HÓ5ˆÜ'¨Ð6FÓGÐGô ˜>Ó*¨aÑ/ˆÙ'ˆtÐ8¨[Ð8ùò Ys   Á		BÁB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©rŒ   r!   )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²     s'  € ô ˆv‹;œ#Ð/Ó0Ò0´S¸³[ÄCÈÓDUÒ5Uð ØMóÐUð %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   Šdˆ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_msg5  s   ø€ ð0à0>Ð/?ð @'ð'ð		
r   TFr¢   )	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¼   L  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#   )rM   r¿   rŒ   r#   )rs   z!dict[torch.device, torch.fx.Node]rŒ   r#   )rW   r!   rŒ   r�   )
r�   ztorch.fx.GraphModuler�   zOrderedSet[str]r0   zOrderedSet[int]r,   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)5Ú
__future__r   ÚdataclassesÚenumr   Útypingr   r   r   r   r	   r9   Útorch._dynamo.utilsr
   r   Útorch._inductor.utilsr   Útorch.utils._ordered_setr   Úcollections.abcr   Ú_loggingÚgetArtifactLoggerr   r~   r^   Úlistr   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Ð      s“  ðå "ã Ý ß @Õ @ã ß =Ý +Ý /ñ Ý(ð —‘×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àóHóJð ×Ñ÷ ð  ó ð ð9Øð9à#ð9ð (ð9ð %ð	9ð
 ó9ó0ô0˜4ô 0ð0Ø+ðàðð /ðð ð	ð
 #ðð 	óð>Ø7ðàðð 
óð: €×Ñ˜dÔ#÷&ð &ó $ñ&r   