§
    ŠŠtjR¿ ã            	      óÜ  — U d dl mZ d dlZd dlmZ d dlmZmZmZ 	 d dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl
mZmZ d dlmZmZmZmZm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z' d d	l(m)Z) d d
l*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7Z7d dl8Z7d dl9m:c mZ; d dl<m=c m>Z? d dl7m@Z@mAZAmBZB d dlCmDZDmEZEmFZF d dlGmHZHmIZImJZJmKZK d dlLmMZM d dlNmOZO d dlPmQZQmRZRmSZSmTZT d dlUmVZV d dlWmXZX d dlYmZZZ d dl[m\Z] d dl^m_Z_ d dl`maZambZbmcZcmdZdmeZe d dlfmgZgmhZh d dlimjZj d dlkmlZl d dlmmnZn d dlompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZz d dl{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 d"l‰mŠZŠm‹Z‹mŒZŒm�Z� d d#lŽm�Z�m�Z� e0r d dl‘Z‘d d$l7m’Z’ d d%l“m”Z” d d&l•m–Z– d d'lim—Z—m˜Z˜m™Z™ ešZ›ešZœ ej�        ež¦  «        ZŸd d(l m¡Z¡m¢Z¢ �djd-„Z£�dk�dld2„Z¤ G d3„ d4e¥¦  «        Z¦ G d5„ d6e¥¦  «        Z§ G d7„ d8e¥¦  «        Z¨e7j©        jª        j«        Z«g d9¢Z¬d:Z­d;Z®�dmd?„Z¯d@Z°dAe±dB<    e3dC¦  «        Z² e3dDej³        e°ej´        ¦  «        Zµ G dE„ dF¦  «        Z¶�dndJ„Z·�dodM„Z¸ e¸d¦  «        �dpdO„¦   «         Z¹ G dP„ dQe¥¦  «        Zº�dqdU„Z»e7jB        e¼z  Z½dAe±dV<   �drdZ„Z¾e7jB        e7jA        z  e7j@        z  e¼z  e¿z  eÀz  ZÁdAe±d[<   �dsd\„ZÂ�dtd^„ZÃ�dud`„ZÄ�dvdb„ZÅ�dwdd„ZÆ e5deeÇ¬f¦  «        �dxdi„¦   «         ZÈ�dydl„ZÉ�dzdq„ZÊe7j’        eËe7j’        drf         z  ZÌdAe±ds<   �d{dw„ZÍ�d|dy„ZÎ�d}dz„ZÏ	 	 �d~�dd„„ZÐ�d€d…„ZÑ�d�d†„ZÒ�d‚dŠ„ZÓeBeAz  e@z  e¼z  e¿z  eÀz  ej´        z  e7j’        z  ZÔdAe±d‹<   eÔe eÔ         z  ZÕdAe±dŒ<   �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Þ e&d{d{¬¡¦  «         G d¢„ d£¦  «        ¦   «         Zß e&d{d{¬¡¦  «         G d¤„ d¥¦  «        ¦   «         Zà e&d{d{¬¡¦  «         G d¦„ d§¦  «        ¦   «         Zá e&d{d{¬¡¦  «         G d¨„ d©¦  «        ¦   «         Zâ e&d{d{¬¡¦  «         G dª„ d«¦  «        ¦   «         Zã	 	 	 	 �dŒ�d�d¶„Zä	 	 �dŽ�d�dº„Zå�d�d¼„Zæ�dvd½„Zç�dvd¾„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™�dšdÔ„ZóddÕœ�dšdÖ„Zô�d›dÙ„Zõ�dœ�d�dÛ„Zö�dvdÜ„Z÷�dždÝ„Zø�dŸdß„Zù�d dã„Zú�d¡då„Zûd{dæœ�d¢dé„Zü�d£dë„Zý G dì„ díe)¦  «        Zþ e&d{d{¬¡¦  «         G dî„ dï¦  «        ¦   «         Zÿ e&d{d{¬¡¦  «         G dð„ dñeÿ¦  «        ¦   «         �Z  e&d{d{¬¡¦  «         G dò„ dóeÿ¦  «        ¦   «         �Z�e �ez  dz  �Z e&d{d{¬¡¦  «         G dô„ dõeÿ¦  «        ¦   «         �Z�d¤dø„�Z�d¥dú„�Z�d¦dü„�Z e&d{d{¬¡¦  «         G dý„ dþ¦  «        ¦   «         �Z e&d{d{¬¡¦  «         G dÿ„ �d �e¦  «        ¦   «         �Z e6�d¦  «        �Z	 e3�d¦  «        �Z
 e&d{d{¬¡¦  «         G �d„ �d�ee-�e	�e
f         ¦  «        ¦   «         �Z e&d{d{d{�¬¦  «         G �d„ �d�edre+f         ¦  «        ¦   «         �Z e&d{d{¬¡¦  «         G �d„ �d	�e¦  «        ¦   «         �Z e&d{�¬
¦  «         G �d„ �d¦  «        ¦   «         �Z�d§�d„�Zevf�Z�d¨�d„�Z�d©�d„�Z e¸�d¦  «        �dª�d„¦   «         �Z G �d„ �de.¦  «        �Z e¸d¦  «        �d«�d„¦   «         �Z�d¬�d„�Z�d­�d#„�Z�d®�d$„�Z�d¯�d%„�Z�d°�d)„�Z�d±�d*„�Z�e�eee7�d+œ�Z	 �dk�d²�d/„�Z e&d{d{¬¡¦  «         G �d0„ �d1¦  «        ¦   «         �Z G �d2„ �d3e¦  «        �Z G �d4„ �d5e�j         ¦  «        �Z! G �d6„ �d7�e!e¦  «        �Z" e5�d8eÇ¬f¦  «         G �d9„ �d:�e"¦  «        ¦   «         �Z# G �d;„ �d<�e!e~¦  «        �Z$ e&d{d{¬¡¦  «         G �d=„ �d>¦  «        ¦   «         �Z% e&d{d{¬¡¦  «         G �d?„ �d@�e%¦  «        ¦   «         �Z& G �dA„ �dB�e"¦  «        �Z' G �dC„ �dDe¦  «        �Z( G �dE„ �dF¦  «        �Z) e�j*        ¦   «         �Z+�d³�dG„�Z,�d´�dH„�Z-e#�dµ�dJ„¦   «         �Z. e&d{d{¬¡¦  «         G �dK„ �dL¦  «        ¦   «         �Z/ e&d{�¬
¦  «         G �dM„ �dN¦  «        ¦   «         �Z0e#�d¶�dP„¦   «         �Z1 e&d{�¬
¦  «         G �dQ„ �dR¦  «        ¦   «         �Z2 G �dS„ �dO¦  «        �Z3�d·�dT„�Z4�d¸�dW„�Z5 G �dX„ �dYe7j:        �j6        ¦  «        �Z7�d¹�d[„�Z8�dº�d`„�Z9 G �da„ �dbe¦  «        �Z:�d»�de„�Z;�d¼�df„�Z<e#�d½�dg„¦   «         �Z=�d¾�di„�Z>dS (¿  é    )ÚannotationsN)ÚS)ÚBoolLikeÚ	FloatLikeÚIntLike)ÚCounterÚdefaultdict)ÚCallableÚ	GeneratorÚIteratorÚMappingÚSequence)Ú_GeneratorContextManagerÚcontextmanager)ÚasdictÚ	dataclassÚfield)ÚEnum)	ÚAnyÚcastÚGenericÚ
NamedTupleÚNoReturnÚTYPE_CHECKINGÚ	TypeAliasÚ	TypeGuardÚTypeVar)Ú
deprecatedÚ	ParamSpec)ÚSymBoolÚSymFloatÚSymInt)Úget_unwrappedÚis_batchedtensorÚis_gradtrackingtensor)Ú
ShapeGuardÚSLocÚSourceÚTracingContext)ÚFakeScriptObject)Úis_opaque_value)Údtrace_structuredÚ
LazyStringÚ
structuredÚtrace_structured)Ú
OpaqueBase)Úis_sparse_any)Úsignpost_event)Ú_config)ÚAggressiveGuardFreeMode)ÚFakeTensorMetaÚrecord_shapeenv_eventÚreplay_shape_env_eventsÚshape_env_check_state_equalÚShapeEnvEvent)ÚSymNodeÚSymTypes)Úpy_sym_types)Ú
OrderedSet)Úis_traceable_wrapper_subclass)ÚApplicationÚ	CeilToIntÚCleanDivÚFloorDivÚ
FloorToIntÚ
IntTrueDivÚ!IsNonOverlappingAndDenseIndicatorÚMaxÚModÚ	PythonModÚ
TruncToInt)Úint_oo)Ú
CppPrinterÚPythonPrinter©ÚSingletonInt)Ú	try_solve)Úmake_symbolÚ
prefix_strÚsymbol_is_typeÚSymT)Úbound_sympyÚSymPyValueRangeAnalysisÚValueRangeErrorÚValueRanges)ÚCapturedTracebackÚformat_frame)ÚTensor©ÚTensorPropertySource©Ú
FakeTensor)ÚBoolLikeTypeÚFloatLikeTypeÚIntLikeType)Ú_guarding_hint_or_throw_baseÚ_optimization_hint_baseÚaú3torch.SymInt | torch.SymBool | int | bool | SymNodeÚreturnú
int | boolc                óÔ  — t          | t          ¦  «        rL| j        �| j        S | j        €t	          d¦  «        ‚| j                             | j        ¦  «        }|| _        |S t          | t          j        t          j	        f¦  «        rt          | j
        ¦  «        S t          | t          ¦  «        r| S t          | ¦  «        t          urt	          dt          | ¦  «        › �¦  «        ‚| S )zÔ
    Return a concrete hint for a symbolic value, for use in guarding decisions.

    Returns Python bool (True/False) for boolean inputs (SymBool, bool),
    and Python int for integer inputs (SymInt, int).
    Nz0shape_env is required for guarding_hint_or_throwúExpected int, got )Ú
isinstancer:   Ú_hintÚ	shape_envÚAssertionErrorÚguarding_hint_or_throwÚexprÚtorchr"   r    ÚnodeÚboolÚtypeÚint)rd   Úhints     úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/fx/experimental/symbolic_shapes.pyrn   rn   €   sÔ   € õ �!•WÑÔð ØŒ7ÐØ”7ˆNØŒ;ÐÝ Ð!SÑTÔTÐTØŒ{×1Ò1°!´&Ñ9Ô9ˆØˆŒØˆÝ�!•e”l¥E¤MÐ2Ñ3Ô3ð .Ý% a¤fÑ-Ô-Ð-Ý�!•TÑÔð ØˆÝˆA�w„w•cÐÐÝÐ;µ$°q±'´'Ð;Ð;Ñ<Ô<Ð<Ø€Hó    útorch.SymInt | intÚfallbackú
int | Nonert   c                ó*  — t          | t          j        ¦  «        rC| j        j        �| j        j        S | j        j                             | j        j        |¬¦  «        S t          | ¦  «        t          urt          dt          | ¦  «        › �¦  «        ‚| S )zï
    Return a concrete hint for a symbolic integer, for use in optimization decisions.

    Unlike guarding_hint_or_throw, this function does not add guards and is intended
    for optimization purposes only (e.g., memory estimation).
    N)ry   ri   )rj   rp   r"   rq   rk   rl   Úoptimization_hintro   rs   rt   rm   )rd   ry   s     rv   r|   r|   š   s‚   € õ �!•U”\Ñ"Ô"ð RØŒ6Œ<Ð#Ø”6”<ÐØŒvÔ×1Ò1°!´&´+ÈÐ1ÑQÔQÐQÝˆA�w„w•cÐÐÝÐ;µ$°q±'´'Ð;Ð;Ñ<Ô<Ð<Ø€Hrw   c                  ó,   ‡ — e Zd ZU ded<   dˆ fd„Zˆ xZS )	ÚGuardOnDataDependentSymNodeúsympy.BasicÚcondÚargsr   rf   ÚNonec                óB   •—  t          ¦   «         j        |Ž  || _        d S ©N)ÚsuperÚ__init__r€   )Úselfr€   r�   Ú	__class__s      €rv   r†   z$GuardOnDataDependentSymNode.__init__­   s"   ø€ Ø�‰ŒÔ˜$ÐÐØˆŒ	ˆ	ˆ	rw   )r€   r   r�   r   rf   r‚   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r†   Ú__classcell__©rˆ   s   @rv   r~   r~   ª   sK   ø€ € € € € € ØÐÐÑðð ð ð ð ð ð ð ð ð rw   r~   c                  ó   — e Zd ZdS )ÚPendingUnbackedSymbolNotFoundN©r‰   rŠ   r‹   © rw   rv   r�   r�   ²   ó   € € € € € Ø€Drw   r�   c                  ó   — e Zd ZdZdS )Ú_ShapeEnvGuardErrorzNRaised when a guard is attempted while the ShapeEnv is in error-on-guard mode.N©r‰   rŠ   r‹   Ú__doc__r’   rw   rv   r•   r•   ¶   s   € € € € € ØXÐXÐXÐXrw   r•   ),r|   rn   Úguard_or_falseÚguard_or_trueÚhas_symbolic_sizes_stridesÚcreate_contiguousÚShapeEnvÚis_concrete_intÚis_concrete_floatÚis_concrete_boolÚhas_static_valueÚ	guard_intÚguard_floatÚguard_scalarÚcanonicalize_bool_exprÚSYMPY_INTERPÚfree_symbolsÚis_symbol_binding_fx_nodeÚis_nested_intÚSHAPEENV_EVENT_KEYÚCURRENT_NODE_KEYÚhas_free_symbolsÚhas_free_unbacked_symbolsÚsym_andÚsym_eqÚsym_orÚSymbolicContextÚStatelessSymbolicContextÚStatefulSymbolicContextÚSubclassSymbolicContextÚSymIntSymbolicContextÚTrackedFakeÚstatically_known_trueÚstatically_known_falseÚguard_size_obliviousÚcheck_consistentÚcompute_unbacked_bindingsÚConvertIntKeyÚrebind_unbackedÚresolve_unbacked_bindingsÚis_accessor_nodeÚValueRangesSLocÚSymIntEqByExprÚSpecializationÚshapeenv_eventÚcurrent_nodeÚ	wrapped_fú$functools._lru_cache_wrapper[object]r‚   c                ól   — t                                d| j        |                      ¦   «         ¦  «         d S )Nzlru_cache_stats %s: %s)ÚlogÚdebugr‰   Úcumulative_cache_info)rÄ   s    rv   Úlog_lru_cache_statsrÊ   ð   s:   € Ý‡I‚IØ ØÔØ×'Ò'Ñ)Ô)ñô ð ð ð rw   zsympy.logic.boolalg.Booleanr   ÚSympyBooleanÚ_TÚ_SympyTc                  óJ   — e Zd ZdZedd„¦   «         Zdd„Zdd
„Zdd„Zdd„Z	dS )rÀ   aø  
    This is a wrapper around SymInt which has alternative semantics for
    equality and pickling.  Specifically, instead of erroring or guarding, we
    instead will hash/compare equality based on the underlying sympy
    expression; e.g., s0 and s1 will always compare as False.

    NB: This does NOT do fancy analysis that maybe_evaluate_static does;
    we can only reason through equalities that occur because to expressions
    canonicalize to the same expression via regular simplification.
    Úvalrx   rf   ú
sympy.Exprc                óv   — t          | t          j        ¦  «        r| j        j        S t          j        | ¦  «        S r„   )rj   rp   r"   rq   ro   ÚsympyÚInteger©rÏ   s    rv   Ú_extractzSymIntEqByExpr._extract  s0   € å�c�5œ<Ñ(Ô(ð 	&Ø”8”=Ð å”= Ñ%Ô%Ð%rw   r‚   c                óD   — t                                |¦  «        | _        d S r„   )rÀ   rÕ   rÏ   )r‡   rÏ   s     rv   r†   zSymIntEqByExpr.__init__   s   € Ý-×6Ò6°sÑ;Ô;ˆŒˆˆrw   Ústrc                ó*   — t          | j        ¦  «        S r„   )ÚreprrÏ   ©r‡   s    rv   Ú__repr__zSymIntEqByExpr.__repr__#  ó   € Ý�D”H‰~Œ~Ðrw   ÚotherÚobjectrr   c                óŠ   — t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚| j        |j        k    S )NzExpected SymIntEqByExpr, got )rj   rÀ   rm   rs   rÏ   ©r‡   rÝ   s     rv   Ú__eq__zSymIntEqByExpr.__eq__&  sA   € Ý˜%¥Ñ0Ô0ð 	PÝ Ð!NÅÀeÁÄÐ!NÐ!NÑOÔOÐOØŒx˜5œ9Ò$Ð$rw   rt   c                ó*   — t          | j        ¦  «        S r„   )ÚhashrÏ   rÚ   s    rv   Ú__hash__zSymIntEqByExpr.__hash__+  rÜ   rw   N)rÏ   rx   rf   rÐ   )rÏ   rx   rf   r‚   ©rf   r×   ©rÝ   rÞ   rf   rr   ©rf   rt   )
r‰   rŠ   r‹   r—   ÚstaticmethodrÕ   r†   rÛ   rá   rä   r’   rw   rv   rÀ   rÀ     sŽ   € € € € € ð	ð 	ð ð&ð &ð &ñ „\ð&ð<ð <ð <ð <ðð ð ð ð%ð %ð %ð %ð
ð ð ð ð ð rw   rÀ   Útupútuple[IntLikeType, int]útuple[int, IntLikeType, int]c                óˆ   — t          | d         ¦  «        r(d| d         j                             ¦   «         | d         fndg| ¢R S ©Nr   é   )r¨   rq   Únested_int_coeff)ré   s    rv   Ú_nested_int_aware_sortrð   /  sJ   € õ ˜˜QœÑ Ô ð	ˆˆC�ŒFŒK×(Ò(Ñ*Ô*¨C°¬FÐ3Ð3àˆY�#ˆYˆYðrw   Úmaxsizeú?Callable[[Callable[..., _T]], functools._lru_cache_wrapper[_T]]c                ó   ‡ — dˆ fd„}|S )NÚfúCallable[..., _T]rf   ú functools._lru_cache_wrapper[_T]c                ó  •‡‡‡‡—  t          j        ‰¦  «        | ¦  «        Š‰j        ŠdŠdŠdˆˆˆfd„}dˆˆˆˆfd„}|‰_        |‰_        t                               t          j        ¦  «        rt          j	        t          ‰¦  «         ‰S )	Nr   rf   úfunctools._CacheInfoc                 óŽ   •— ‰                      ¦   «         } t          j        ‰| j        z   ‰| j        z   | j        | j        ¦  «        S r„   )Ú
cache_infoÚ	functoolsÚ
_CacheInfoÚhitsÚmissesrñ   Úcurrsize)ÚcurÚ	prev_hitsÚprev_missesrÄ   s    €€€rv   rÉ   z7lru_cache.<locals>.inner.<locals>.cumulative_cache_infoI  sG   ø€ Ø×&Ò&Ñ(Ô(ˆCÝÔ'Ø˜CœHÑ$Ø˜cœjÑ(Ø”Ø”ñ	ô ð rw   r‚   c                 ól   •— ‰                      ¦   «         } ‰| j        z  Š‰| j        z  Š ‰¦   «          d S r„   )rú   rý   rþ   )r   Úold_cache_clearr  r  rÄ   s    €€€€rv   Únew_cache_clearz1lru_cache.<locals>.inner.<locals>.new_cache_clearR  s@   ø€ à×&Ò&Ñ(Ô(ˆCØ˜œÑ!ˆIØ˜3œ:Ñ%ˆKØˆOÑÔÐÐÐrw   )rf   rø   ©rf   r‚   )rû   Ú	lru_cacheÚcache_clearrÉ   rÇ   ÚisEnabledForÚloggingÚDEBUGÚatexitÚregisterrÊ   )rô   rÉ   r  r  r  r  rÄ   rñ   s      @@@@€rv   Úinnerzlru_cache.<locals>.inner?  sË   øøøøø€ Ø0•IÔ'¨Ñ0Ô0°Ñ3Ô3ˆ	Ø#Ô/ˆØˆ	Øˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð !0ˆ	ÔØ*?ˆ	Ô'Ý×Ò�GœMÑ*Ô*ð 	<ÝŒOÕ/°Ñ;Ô;Ð;ØÐrw   )rô   rõ   rf   rö   r’   )rñ   r  s   ` rv   r  r  <  s)   ø€ ðð ð ð ð ð ð@ €Lrw   úset[str]c                 ó  — dd l } dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l	} t          j        t                   | j        j        | j        j        j        | j        j        j        | j        j        | j        j        | | j        | j        j        | j        j        | j        j        | j        j        | j        j        | j        j        | j         j!        | j         j"        g}dd l#} d„ |D ¦   «         }tH          j%         &                    | j'        j(        ¦  «        }tS          j)        tH          j%         *                    |d¦  «        ¦  «        }|tW          |¦  «        z  | j        j,         -                    ¦   «         z  dhz  S )Nr   c                ó6   — h | ]}t          j        |¦  «        ’ŒS r’   )ÚinspectÚgetfile)Ú.0Úms     rv   ú	<setcomp>z&uninteresting_files.<locals>.<setcomp>…  s"   € Ð.Ð.Ð. A�WŒ_˜QÑÔÐ.Ð.Ð.rw   z*.pyú<string>).Útorch._compileÚtorch._dynamo.eval_frameÚtorch._higher_order_opsÚtorch._inductor.sizevarsÚtorch._library.custom_opsÚtorch._library.fake_implÚtorch._loggingÚtorch._subclasses.fake_tensorÚtorch._subclasses.meta_utilsÚtorch.export._traceÚsysÚmodulesr‰   ÚexportÚ_traceÚfxÚexperimentalÚ	recordingÚsym_nodeÚinterpreterÚ_symbolic_traceÚ_compileÚ_dynamoÚ
eval_frameÚ	_inductorÚsizevarsÚ_libraryÚ
custom_opsÚ	fake_implÚ_subclassesÚ
meta_utilsÚfake_tensorÚ_loggingÚ	_internalr.   Útorch._dynamo.guardsÚosÚpathÚdirnameÚ_higher_order_opsÚ__file__ÚglobÚjoinÚsetÚguardsÚuninteresting_files)rp   ÚmodsÚfilesÚhigher_order_ops_dirÚ	hop_filess        rv   rC  rC  d  sŸ  € àÐÐÐØ#Ð#Ð#Ð#Ø"Ð"Ð"Ð"Ø#Ð#Ð#Ð#Ø$Ð$Ð$Ð$Ø#Ð#Ð#Ð#ØÐÐÐØ(Ð(Ð(Ð(Ø'Ð'Ð'Ð'ØÐÐÐõ 	Œ•HÔØŒÔØŒÔÔ'ØŒÔÔ&ØŒÔØŒÔ ØØŒØŒÔ ØŒÔ ØŒÔ!ØŒÔ ØÔÔ$ØÔÔ%ØŒÔ ØŒÔ!ð!€Dð$  ÐÐÐà.Ð.¨Ð.Ñ.Ô.€Eõ œ7Ÿ?š?¨5Ô+BÔ+KÑLÔLÐÝ”	�"œ'Ÿ,š,Ð';¸VÑDÔDÑEÔE€Ið 	Ý
ˆi‰.Œ.ñ	à
Œ-Ô
×
2Ò
2Ñ
4Ô
4ñ	5ð ˆ,ñ	ðrw   c                  ó   — e Zd ZdS )ÚConstraintViolationErrorNr‘   r’   rw   rv   rI  rI  “  r“   rw   rI  Úelemútorch.Tensorrr   c                ó   — | j         S r„   )Ú_has_symbolic_sizes_strides)rJ  s    rv   rš   rš   —  s   € ØÔ+Ð+rw   ÚIntÚshapeúSequence[Int]ú	list[Int]c                ó°   — dg}t          | d d…         ¦  «        D ] }|                     ||d         z  ¦  «         Œ!t          t          |¦  «        ¦  «        S )Nrî   éÿÿÿÿ)ÚreversedÚappendÚlist)rO  ÚstridesÚdims      rv   r›   r›   ž  s\   € Ø˜€GÝ˜˜c˜r˜cœ
Ñ#Ô#ð *ð *ˆØ�Š�s˜W Rœ[Ñ(Ñ)Ô)Ð)Ð)Ý•˜Ñ!Ô!Ñ"Ô"Ð"rw   ÚScalarc                ób   — t          | t          ¦  «        r| j                             ¦   «         S dS )zª
    Check if a symbolic value has a hint available for guarding.

    Returns True if the value is concrete or if the symbolic node has a hint,
    False otherwise.
    T)rj   r;   rq   Úhas_hint©rd   s    rv   Úhas_guarding_hintr]  ¨  s-   € õ �!•XÑÔð !ØŒv�ŠÑ Ô Ð Øˆ4rw   ra   c                ó
  — t          | t          t          f¦  «        st          dt	          | ¦  «        › �¦  «        ‚t          | t          ¦  «        rdS t          | j        j        t          j        j	        j
        ¦  «        rdS dS )z¾
    Utility to check if underlying object
    in SymInt is concrete value. Also returns
    true if integer is passed in.

    Args:
        a (SymInt or int): Object to test if it int
    zExpected SymInt or int, got TF)rj   r"   rt   rm   rs   rq   ro   rÒ   ÚcoreÚnumbersrÓ   r\  s    rv   r�   r�   ´  sw   € õ �a�&¥#˜Ñ'Ô'ð GÝÐE½DÀ¹G¼GÐEÐEÑFÔFÐFå�!•SÑÔð Øˆtå�!”&”+�uœzÔ1Ô9Ñ:Ô:ð Øˆtàˆ5rw   r`   c                ó
  — t          | t          t          f¦  «        st          dt	          | ¦  «        › �¦  «        ‚t          | t          ¦  «        rdS t          | j        j        t          j        j	        j
        ¦  «        rdS dS )z½Utility to check if underlying object
    in SymInt is concrete value. Also returns
    true if integer is passed in.

    Args:
        a (SymInt or float): Object to test if it float
    z Expected SymFloat or float, got TF)rj   r!   Úfloatrm   rs   rq   ro   rÒ   r_  r`  ÚFloatr\  s    rv   rž   rž   É  sx   € õ �a�(¥EÐ*Ñ+Ô+ð KÝÐIÅÀQÁÄÐIÐIÑJÔJÐJå�!•UÑÔð Øˆtå�!”&”+�uœzÔ1Ô7Ñ8Ô8ð Øˆtàˆ5rw   r_   c                ó6  — t          | t          t          f¦  «        st          dt	          | ¦  «        › �¦  «        ‚t          | t          ¦  «        rdS t          | j        j        t          j        j	        j
        t          j        j	        j        f¦  «        rdS dS )zÂ
    Utility to check if underlying object
    in SymBool is concrete value. Also returns
    true if integer is passed in.

    Args:
        a (SymBool or bool): Object to test if it bool
    zExpected SymBool or bool, got TF)rj   r    rr   rm   rs   rq   ro   rÒ   ÚlogicÚboolalgÚBooleanTrueÚBooleanFalser\  s    rv   rŸ   rŸ   Ý  s‹   € õ �a�'¥4˜Ñ)Ô)ð IÝÐG½dÀ1¹g¼gÐGÐGÑHÔHÐHå�!•TÑÔð ØˆtåØ	ŒŒ•e”kÔ)Ô5µu´{Ô7JÔ7WÐXñô ð ð ˆtàˆ5rw   ú0SymBool | SymFloat | SymInt | bool | float | intc                óD  — t          | t          t          z   t          z   ¦  «        st	          dt          | ¦  «        › �¦  «        ‚t          | t          ¦  «        rt          | ¦  «        sHt          | t          ¦  «        rt          | ¦  «        s$t          | t          ¦  «        rt          | ¦  «        rdS t          | t          ¦  «        st	          dt          | ¦  «        › �¦  «        ‚| j
        j                             | j
        j        ¦  «                             ¦   «         S )zû
    User-code friendly utility to check if a value is static or dynamic.
    Returns true if given a constant, or a symbolic expression with a fixed value.

    Args:
        a (Union[SymBool, SymFloat, SymInt, bool, float, int]): Object to test
    z)Expected BoolLike/FloatLike/IntLike, got TzExpected py_sym_types, got )rj   r   r   r   rm   rs   rŸ   rž   r�   r<   rq   rl   rT   ro   Úis_singletonr\  s    rv   r    r    ô  s  € õ �a�¥IÑ-µÑ7Ñ8Ô8ð TÝÐRÍÈaÉÌÐRÐRÑSÔSÐSå�1•hÑÔðå˜QÑÔðõ �a�Ñ#Ô#ðõ ˜aÑ Ô ð	õ
 �a�Ñ!Ô!ðõ ˜AÑÔðð ˆtå�a�Ñ&Ô&ð FÝÐD½4À¹7¼7ÐDÐDÑEÔEÐEØŒ6Ô×'Ò'¨¬¬Ñ4Ô4×AÒAÑCÔCÐCrw   z¡guard_size_oblivious will be removed. Consider using explicit unbacked handling     potentially utilizing guard_or_false, guard_or_true, or statically_known_true©Úcategoryro   útorch.SymBool | boolc                óØ   — t          | t          j        ¦  «        r| j                             dd¦  «        S t          | t
          ¦  «        st          dt          | ¦  «        › �¦  «        ‚| S )a¸  
    Perform a guard on a symbolic boolean expression in a size oblivious way.
    This is typically used when a non-oblivious test would result in a guard
    on a data dependent value of which we don't know the value of at compile time.
    When a guard is tested this way, we may diverge in behavior from how regular
    PyTorch semantics would treat it.  For more information, see
    https://github.com/pytorch/pytorch/pull/118579
    Ú r   úExpected bool, got )rj   rp   r    rq   r¸   rr   rm   rs   ©ro   s    rv   r¸   r¸     se   € õ �$�œÑ&Ô&ð ØŒy×-Ò-¨b°!Ñ4Ô4Ð4å˜$¥Ñ%Ô%ð 	EÝ Ð!Cµt¸D±z´zÐ!CÐ!CÑDÔDÐDØˆrw   ÚnewÚoldc                óö  ‡ ‡— t           j        t           j        t          t          f}t          ‰ t           j        ¦  «        r¹t          ‰t           j        ¦  «        st          dt          ‰¦  «        › �¦  «        ‚t          j	        ‰ 
                    ¦   «         ‰  
                    ¦   «         k    ˆ ˆfd„¦  «         t          ‰j        ‰ j        ¦  «        D ]"\  }}t          j	        ||k    ˆ ˆfd„¦  «         Œ#dS t          ‰ |¦  «        rmt          ‰ t          ¦  «        sZt          ‰|¦  «        rt          ‰t          ¦  «        rt          ‰› d‰ › �¦  «        ‚t          j	        ‰‰ k    ˆ ˆfd„¦  «         dS dS dS )zÙ
    Test that two "meta" values (typically either Tensor or SymInt) have
    the same values, e.g., after retracing.  If we don't understand the
    quantities in question, we'll just skip the consistency check.
    úExpected Tensor, got c                 ó(   •— ‰j         › d‰ j         › d�S ©Nú != z (old != new)©rO  ©rs  rt  s   €€rv   ú<lambda>z"check_consistent.<locals>.<lambda>1  s   ø€ ¨s¬yÐ,VÐ,V¸c¼iÐ,VÐ,VÐ,V€ rw   c                 ó(   •— ‰j         › d‰ j         › d�S rx  rz  r{  s   €€rv   r|  z"check_consistent.<locals>.<lambda>8  s   ø€ ¨C¬IÐ)SÐ)S¸3¼9Ð)SÐ)SÐ)S€ rw   ry  c                 ó   •— ‰› d‰ › d�S rx  r’   r{  s   €€rv   r|  z"check_consistent.<locals>.<lambda>=  s   ø€ ¨CÐ)GÐ)G°SÐ)GÐ)GÐ)G€ rw   N)rp   r"   r!   rt   rb  rj   rZ   rm   rs   Ú_checkrX  ÚziprO  rr   )rs  rt  Úscalar_typesÚiÚjs   ``   rv   r¹   r¹   #  s˜  øø€ õ ”L¥%¤.µ#µuÐ=€Lå�#•u”|Ñ$Ô$ð IÝ˜#�uœ|Ñ,Ô,ð 	FÝ Ð!D½¸c¹¼Ð!DÐ!DÑEÔEÐEÝŒØ�GŠG‰IŒI˜Ÿš™œÒ"Ð$VÐ$VÐ$VÐ$VÐ$Vñ	
ô 	
ð 	
õ ˜œ	 3¤9Ñ-Ô-ð 	Uð 	U‰DˆAˆqÝŒL˜˜ašÐ!SÐ!SÐ!SÐ!SÐ!SÑTÔTÐTÐTð	Uð 	Uõ 
�C˜Ñ	&Ô	&ð I­z¸#½tÑ/DÔ/Dð IÝ˜3 Ñ-Ô-ð 	4µjÀÅdÑ6KÔ6Kð 	4Ý  CÐ!2Ð!2¨SÐ!2Ð!2Ñ3Ô3Ð3ÝŒ�S˜C’ZÐ!GÐ!GÐ!GÐ!GÐ!GÑHÔHÐHÐHÐHðIð Ið Ið Irw   rl   úShapeEnv | NoneÚbindingsú)dict[sympy.Symbol, pytree.KeyPath] | Nonec                ón   ‡ — |€dS ‰ €t          d¦  «        ‚ˆ fd„|                     ¦   «         D ¦   «         S )aó  
    When we do fake tensor prop, we oftentimes will allocate new unbacked symints.
    We then run proxy tensor mode, which populates node.meta["unbacked_bindings"]
    with these new symints. To ensure consistency we use PropagateUnbackedSymInts
    to rename unbacked bindings to their old ones. But all of the node metas are
    still using the old bindings from before the renaming. This function helps to
    post facto apply any renamings discovered in the PropagateUnbackedSymInts pass.
    Núshape_env should not be Nonec                óN   •— i | ]!\  }}‰j                              ||¦  «        |“Œ"S r’   )Úunbacked_renamingsÚget)r  ÚkÚvrl   s      €rv   ú
<dictcomp>z-resolve_unbacked_bindings.<locals>.<dictcomp>P  s2   ø€ ÐSÐSÐS¹$¸!¸QˆIÔ(×,Ò,¨Q°Ñ2Ô2°AÐSÐSÐSrw   )rm   Úitems)rl   r…  s   ` rv   r½   r½   @  sI   ø€ ð ÐØˆtØÐÝÐ;Ñ<Ô<Ð<ØSÐSÐSÐSÀ(Ç.Â.ÑBRÔBRÐSÑSÔSÐSrw   .ÚResultÚnútorch.fx.NodeÚresultc                óh  — |j         dk    rdS t          | |j                             d¦  «        ¦  «        x}�rw| €t	          d¦  «        ‚|                     ¦   «         D �]R\  }}t          j        ||¦  «        }t          |t          t          f¦  «        r$t                               d|j        |||¦  «         Œ[|j        j        �Œh|j        j        }t          |t"          j        ¦  «        �r^t'          |j        ¦  «        dk    �rEt+          t,          t"          j        t"          j        f         |j        d         ¦  «        x}�r|d         dk    rút          |d         x}	t"          j        ¦  «        rØt          |	j        x}
t"          j        ¦  «        r·| j        |
                              t;          dd¦  «        ¦  «        r‰|	j        dk    r~t+          t,          t"          j        t"          j        f         |j        d         ¦  «        d	k    r>t?          t#          j        |
d¦  «        ¦  «        }||k    rt	          |› d
|› �¦  «        ‚|
}t          |t"          j        ¦  «        s|j         rt	          d|› �¦  «        ‚�Œ"||k    rt	          |› d�¦  «        ‚|  !                    ||¦  «         �ŒRdS dS )aÿ  
    Suppose we are retracing a pre-existing FX graph that previously had
    fake tensor propagation (and therefore unbacked SymInts).  When we retrace,
    we re-propagate fake tensors, which results in new unbacked SymInts.
    When this happens, we need to tell the shape environment about the equivalence
    of the old and new unbacked SymInts.  Pass us the old torch.fx.Node (which
    has the old binding information) and the new result (which we can extract the
    new unbacked SymInts out from).
    ÚplaceholderNÚunbacked_bindingsrˆ  z'rebind_unbacked: discard %s %s %s -> %sé   r   rî   ©r   Try  z#should have been constant, but got z possible memo disaster)"Úopr½   Úmetar‹  rm   r�  ÚpytreeÚkey_getrj   rt   rb  rÇ   ÚinfoÚtargetrq   ru   Ú_exprrÒ   Ú	PiecewiseÚlenr�   r   ÚtupleÚBasicÚEqÚlhsÚSymbolÚvar_to_rangeÚissubsetrW   ÚrhsÚ'_sympy_cast_symbool_to_symint_guardlessr¦   Ú_rename_unbacked_to)rl   r‘  r“  r…  Úraw_u0r;  Úu1Úraw_u1Úraw_u1_args0ÚeqÚ
new_raw_u1Úrepackeds               rv   r¼   r¼   V  sÑ  € ð 	„tˆ}ÒÐØˆå,Ø�1”6—:’:Ð1Ñ2Ô2ñô ð €xñ u:ð ÐÝ Ð!?Ñ@Ô@Ð@Ø$ŸNšNÑ,Ô,ð p	:ñ p	:‰LˆF�DÝ” ¨Ñ-Ô-ˆBõV ˜"�s¥E˜lÑ+Ô+ð Ý—’Ø=Ø”HØØØñô ð ð ð ŒwŒ|Ð'Øð  ”W”]ˆFõ
 ˜6¥5¤?Ñ3Ô3ñ$å˜œÑ$Ô$¨Ò)Ñ)å$(Ý�eœk­5¬;Ð6Ô7¸¼ÀQ¼ñ%ô %ð �Lñ *ð ! ”O qÒ(Ð(Ý \°!¤_Ð4˜rµe´hÑ?Ô?ð )å¨R¬VÐ3˜zµU´\ÑBÔBð )ð Ô*¨:Ô6×?Ò?ÅÈAÈqÑ@QÔ@QÑRÔRð )ð ”F˜a’K�KÝ��uœ{­E¬KÐ7Ô8¸&¼+Àa¼.ÑIÔIÈYÒVÐVõ CÝ”H˜Z¨Ñ+Ô+ñô �ð ˜vÒ%Ð%Ý(¨HÐ)BÐ)B¸&Ð)BÐ)BÑCÔCÐCð $�å˜f¥e¤lÑ3Ô3ð ØÔ&ð YÝ(Ð)WÈvÐ)WÐ)WÑXÔXÐXÙð ˜ÒÐÝ$¨Ð%GÐ%GÐ%GÑHÔHÐHà×)Ò)¨&°&Ñ9Ô9Ð9Ñ9ðku:ð u:ð
p	:ð p	:rw   rq   c           
     óâ  — | j         dk    rrt          | j        d         t          j        j        ¦  «        rHt          | j        d         j                             d¦  «        t          j        ¦  «        r| j	        dv rdS | j         dk    ræ| j	        t          j
        j        j        t          j
        j        j        j        t          j
        j        j        j        t          j
        j        j        t          j
        j        j        j        t          j
        j        j        j        t          j
        j        j        t          j
        j        j        j        t          j
        j        j        j        f	v rdS dS )zÇ
    Helper function to determine if a node is trying to access
    a symbolic integer such as size, stride, offset or item. Currently
    primarily only used in a DCE pass to figure out purity.
    Úcall_methodr   Úexample_value)ÚsizeÚstrideÚstorage_offsetÚitemTÚcall_functionF)r™  rj   r�   rp   r&  ÚNoderš  r‹  rZ   rž  ÚopsÚatenÚsym_sizeÚdefaultrt   Ú
sym_strideÚsym_storage_offsetÚ	sym_numel©rq   s    rv   r¾   r¾   ã  s  € ð 	Œ�=Ò Ð Ý�t”y ”|¥U¤X¤]Ñ3Ô3ð 	!å�t”y ”|Ô(×,Ò,¨_Ñ=Ô=½u¼|ÑLÔLð 	!ð ŒKÐGÐGÐGàˆtà„w�/Ò!Ð! d¤kÝŒ	ŒÔÝŒ	ŒÔÔ'ÝŒ	ŒÔÔ#ÝŒ	ŒÔ!ÝŒ	ŒÔ!Ô)ÝŒ	ŒÔ!Ô%ÝŒ	ŒÔ)ÝŒ	ŒÔ)Ô1ÝŒ	ŒÔ Ô(ð
6ð 
'ð 
'ð ˆtàˆ5rw   c           	     ór  — t          | t          j        t          j        t          j        t          j        t          j        t          j        f¦  «        s| S t          | t          j        t          j        t          j        f¦  «        r$t          j        j	         
                    | ¦  «        } t          | ¦  «        S )aŠ  
    Canonicalize a boolean expression by transforming it into a lt / le
    inequality and moving all the non-constant terms to the rhs.
    We canonicalize And / Ors / Not via cnf and then canonicalize their subexpr
    recursively
    nb. sympy.Rel.canonical is not good enough https://github.com/sympy/sympy/issues/25924

    Args:
        expr (sympy.Expr): Expression to canonicalize
    )rj   rÒ   ÚRelÚAndÚOrÚNotr¤  ÚNere  rf  Úto_cnfÚ_canonicalize_bool_expr_implrr  s    rv   r¤   r¤     s€   € õ" Ø�uŒy�%œ)¥U¤X­u¬y½%¼(ÅEÄHÐMñô ð ð ˆå�$�œ¥E¤H­e¬iÐ8Ñ9Ô9ð 0ÝŒ{Ô"×)Ò)¨$Ñ/Ô/ˆÝ'¨Ñ-Ô-Ð-rw   TÚclsútype[sympy.Add | sympy.Mul]r�   úlist[sympy.Expr]ÚsortÚis_commutativeúbool | NonerÐ   c                ó  — |s| j         S |rè| t          j        u rt          j        j        j        }n7| t          j        u rt          j        j        j        }nt          d| › �¦  «        ‚|durt          d¦  «        ‚|d         j        r6|dd…         } ||¦  «         |                      |d         g|z   |¬¦  «        S |                     ¦   «         } ||¦  «         |                      ||¬¦  «        S |                      ||¬¦  «        S )aÃ  
    Create a sympy expression from a list of arguments, optimizing for performance.

    This function creates a sympy Add or Mul expression from a list of arguments
    while avoiding expensive operations like flattening. It handles sorting the
    arguments appropriately based on the expression type.

    Args:
        cls: The sympy class to create (Add or Mul)
        args: List of sympy expressions to combine
        sort: Whether to sort the arguments (default: True)
        is_commutative: Whether the operation is commutative (default: None)

    Returns:
        A sympy expression of type cls combining all arguments

    Raises:
        ValueError: If cls is not sympy.Add or sympy.Mul
    zUnknown cls: Tzis_commutative must be Truer   rî   N©rÐ  )ÚidentityrÒ   ÚAddr_  ÚaddÚ_addsortÚMulÚmulÚ_mulsortÚ
ValueErrorrm   Ú	is_NumberÚ
_from_argsÚcopy)rÌ  r�   rÏ  rÐ  Úsort_fnÚrests         rv   Ú_sympy_from_argsrá    s  € ð4 ð ØŒ|Ðð ð CØ•%”)ÐÐÝ”j”nÔ-ˆGˆGØ•E”IÐÐÝ”j”nÔ-ˆGˆGåÐ2¨SÐ2Ð2Ñ3Ô3Ð3ð  Ð%Ð%Ý Ð!>Ñ?Ô?Ð?Ø�Œ7Ôð 	GØ˜˜˜”8ˆDØˆG�D‰MŒMˆMØ—>’> 4¨¤7 )¨dÑ"2À>�>ÑRÔRÐRà—9’9‘;”;ˆDØˆG�D‰MŒMˆMØ—>’> $°~�>ÑFÔFÐFð �~Š~˜d°>ˆ~ÑBÔBÐBrw   c                óZ  — t          | t          j        t          j        f¦  «        r* t	          | ¦  «        t          t          | j        ¦  «        Ž S t          j        t          j	        t          j
        t          j        i}t          | t          |                     ¦   «         ¦  «        ¦  «        r%| j        | j        z
  }|t	          | ¦  «                 }nyt          | t          j	        t          j        t          j        t          j        f¦  «        st%          dt	          | ¦  «        › �¦  «        ‚| j        | j        z
  }t	          | ¦  «        }dd„}t&          j        }t+          |¦  «        }t          |t          j        ¦  «        r€g }g }|j        D ]9} ||¦  «        r|                     | ¦  «         Œ$|                     |¦  «         Œ:t1          t          j        |dd¬	¦  «        }t1          t          j        |dd¬	¦  «        }n ||¦  «        r| t&          j        }} |||d¬
¦  «        S )zƒ
    After canonicalization, we are guaranteed to have eliminated Ge/Gt relations
    (rewriting them to Le/Lt, respectively).
    zExpected Lt/Le/Eq/Ne, got ÚtrÐ   rf   rr   c                óš   — | j         r| j        p=t          | t          j        ¦  «        o#| j        d         j         o| j        d         j        S ©Nr   )rÜ  Úis_negativerj   rÒ   rØ  r�   ©rã  s    rv   Úis_negz,_canonicalize_bool_expr_impl.<locals>.is_negh  sC   € Ø”Ð- ¤ð 
Ý�q�%œ)Ñ$Ô$ÐV¨¬°¬Ô)<ÐVÀÄÈÄÔAVð	
rw   FT©rÏ  rÐ  ©Úevaluate)rã  rÐ   rf   rr   )rj   rÒ   rÆ  rÇ  rs   Úmapr¤   r�   ÚGtÚLtÚGeÚLer¢  Úkeysr¥  r©  r¤  rÉ  rm   r   ÚZeroÚ_reduce_to_lowest_termsrÕ  rU  rá  )	ro   Úoppositer©  rã  rè  r¥  ÚposÚnegÚterms	            rv   rË  rË  U  sï  € õ
 �$�œ¥E¤HÐ-Ñ.Ô.ð CØ�t�D‰zŒz�3Õ5°t´yÑAÔAÐBÐBå”�%œ(¥E¤H­e¬hÐ7€Hå�$�˜hŸmšm™oœoÑ.Ô.Ñ/Ô/ð ØŒh˜œÑ!ˆØ•T˜$‘Z”ZÔ ˆˆå˜$¥¤­5¬8µU´X½u¼xÐ HÑIÔIð 	LÝ Ð!J½dÀ4¹j¼jÐ!JÐ!JÑKÔKÐKØŒh˜œÑ!ˆÝ�‰JŒJˆð
ð 
ð 
ð 
õ
 Œ&€CÝ
! #Ñ
&Ô
&€CÝ�#•u”yÑ!Ô!ð  ØˆØˆØ”Hð 	!ð 	!ˆDØˆv�d‰|Œ|ð !Ø—
’
˜D˜5Ñ!Ô!Ð!Ð!à—
’
˜4Ñ Ô Ð Ð å�uœy¨#°EÈ$ÐOÑOÔOˆå�uœy¨#°DÈÐNÑNÔNˆˆØ	ˆ�‰Œð  à�4�œˆSˆð ˆ1ˆS�# Ð&Ñ&Ô&Ð&rw   c                ó¦  ‡‡— dd„}dd„Š| j         r�t          t          t          j                 | j        ¦  «        }t          j        t          j	        t          ||¦  «        ¦  «        Š‰dk    r| S ˆˆfd	„|D ¦   «         }t          t          j        |d
| j        ¬¦  «        S | j        rt          j        S | j        r ‰|  || ¦  «        ¦  «        S | S )z—
    Eliminates any integer factor from a given expression.
    E.g., 6x + 4y reduces to 3x + 2y.

    Useful when an expression is == or != to 0.
    ÚxrÐ   rf   rt   c                óÐ   — | j         rt          t          | ¦  «        ¦  «        S | j        r;| j        d         j         r't          t          | j        d         ¦  «        ¦  «        ndS dS rí   )Ú
is_IntegerÚabsrt   Úis_Mulr�   ©rù  s    rv   Úinteger_coefficientz4_reduce_to_lowest_terms.<locals>.integer_coefficient‹  s\   € ØŒ<ð 	Ý•s˜1‘v”v‘;”;ÐØŒXð 	ð +,¬&°¬)Ô*>ÐE•3•s˜1œ6 !œ9‘~”~Ñ&Ô&Ð&ÀAÐEà�1rw   Úfactorc                óN  — | j         r| |z  S | j        r�| j        d         |k    r3| j        d         t          j        |¦  «        z  g| j        dd …         ¢}nt          | j        dd …         ¦  «        }t          t          j        || j        ¬¦  «        S t          d| › �¦  «        ‚)Nr   rî   rÓ  zillegal arg to div_by_factor: )
rû  rý  r�   rÒ   rÓ   rV  rá  rØ  rÐ  rm   )rù  r   r�   s      rv   Údiv_by_factorz._reduce_to_lowest_terms.<locals>.div_by_factor•  s«   € ØŒ<ð 	GØ�v‘:ÐØŒXð 		GØŒv�aŒy˜FÒ"Ð"Øœ˜qœ	¥E¤M°&Ñ$9Ô$9Ñ9ÐG¸A¼FÀ1À2À2¼JÐG��õ ˜AœF 1 2 2œJÑ'Ô'�Ý#¥E¤I¨tÀAÔDTÐUÑUÔUÐUå Ð!EÀ!Ð!EÐ!EÑFÔFÐFrw   rî   c                ó(   •— g | ]} ‰|‰¦  «        ‘ŒS r’   r’   )r  rù  r  r   s     €€rv   ú
<listcomp>z+_reduce_to_lowest_terms.<locals>.<listcomp>©  s%   ø€ Ð9Ð9Ð9¨a��˜q &Ñ)Ô)Ð9Ð9Ð9rw   Tré  )rù  rÐ   rf   rt   )rù  rÐ   r   rt   rf   rÐ   )Úis_Addr   r   rÒ   ÚExprr�   rû   ÚreduceÚmathÚgcdrì  rá  rÕ  rÐ  rû  r   ÚOnerý  )ro   rÿ  Úatomsr  r   s      @@rv   ró  ró  ƒ  s  øø€ ðð ð ð ðGð Gð Gð Gð „{ð >Ý•X�eœjÔ)¨4¬9Ñ5Ô5ˆÝÔ!¥$¤(­CÐ0CÀUÑ,KÔ,KÑLÔLˆØ�QŠ;ˆ;ØˆKà9Ð9Ð9Ð9Ð9°5Ð9Ñ9Ô9ˆÝÝŒI�u 4¸Ô8Kð
ñ 
ô 
ð 	
ð 
Œð >ÝŒuˆØ	Œð >Øˆ}˜TÐ#6Ð#6°tÑ#<Ô#<Ñ=Ô=Ð=Ø€Krw   ÚsúIntLikeType | FloatLikeTypeúTypeGuard[SymInt]c                óh   — t          | t          j        ¦  «        o| j                             ¦   «         S r„   )rj   rp   r"   rq   r¨   ©r  s    rv   r¨   r¨   ´  s'   € Ý�a�œÑ&Ô&ÐA¨1¬6×+?Ò+?Ñ+AÔ+AÐArw   ÚIterateExprsAtomÚIterateExprsrÏ   úIterator[sympy.Basic]c              #  óè  K  — t          | t          ¦  «        r!t          | ¦  «        r| j        j        V — dS dS t          | t
          ¦  «        r| j        V — dS t          | t          j        ¦  «        r| V — dS t          | t          t          t          t          f¦  «        rdS t          | t          t          f¦  «        r| D ]}t          |¦  «        E d{V —† ŒdS t          | t          ¦  «        rSt!          j        |                      ¦   «         |                      ¦   «         ¦  «        D ]}t          |¦  «        E d{V —† ŒdS t)          | ¦  «        r)t          |                      ¦   «         ¦  «        E d{V —† dS t          | t,          j        ¦  «        rwt          |                      ¦   «         ¦  «        E d{V —† t          |                      ¦   «         ¦  «        E d{V —† t          |                      ¦   «         ¦  «        E d{V —† dS | €dS t          | t,          j        ¦  «        st7          | ¦  «        rdS t          | t8          ¦  «        rdS t;          d| › dt=          | ¦  «        › �¦  «        ‚)a  
    Recursively iterate through a value and yield all sympy expressions contained within it.

    This function traverses various data structures (tensors, lists, tuples, etc.) and extracts
    any symbolic expressions they contain. It's used for operations like finding free symbols
    in complex nested structures.

    Args:
        val: The value to extract sympy expressions from. Can be a symbolic type (SymInt, SymFloat, SymBool),
             a sympy expression, a primitive type (int, float, bool), a container (tuple, list),
             a sparse tensor, a regular tensor, None, or a torch.Generator.

    Yields:
        sympy.Basic: Each sympy expression found in the value.

    Raises:
        AssertionError: If the value is of an unsupported type.
    Nz&cannot extract sympy expressions from ú )rj   r;   Úis_symbolicrq   ro   r:   rÒ   r£  rt   rb  rr   r×   r¢  rV  Ú_iterate_exprsÚdictÚ	itertoolsÚchainrñ  Úvaluesr1   r¶  rp   rZ   r·  r¸  r   r+   r*   rm   rs   ©rÏ   r  s     rv   r  r  ¾  s¹  è è € õ, �#•xÑ Ô ð Yõ �sÑÔð 	 Ø”(”-ÐÐÐÐÐð	 ð 	 å	�C�Ñ	!Ô	!ð YØŒhˆˆˆˆˆÝ	�C�œÑ	%Ô	%ð YØˆ	ˆ	ˆ	ˆ	ˆ	Ý	�C�#�u¥d­CÐ0Ñ	1Ô	1ð YØˆÝ	�C�%¥˜Ñ	'Ô	'ð YØð 	)ð 	)ˆAÝ% aÑ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ð	)ð 	)å	�C�Ñ	Ô	ð YÝ” §¢¡¤¨S¯ZªZ©\¬\Ñ:Ô:ð 	)ð 	)ˆAÝ% aÑ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ð	)ð 	)å	�sÑ	Ô	ð YÝ! #§(¢(¡*¤*Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ý	�C�œÑ	&Ô	&ð YÝ! #§(¢(¡*¤*Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ý! #§*¢*¡,¤,Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ý! #×"4Ò"4Ñ"6Ô"6Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø	ˆØˆå	�C�œÑ	)Ô	)ð Y­_¸SÑ-AÔ-Að YØˆÝ	�CÕ)Ñ	*Ô	*ð YØˆåÐWÀcÐWÐWÍDÐQTÉIÌIÐWÐWÑXÔXÐXrw   r   úIterator[SymNode]c              #  ól  K  — t          | t          ¦  «        r| V — dS t          | t          ¦  «        rt          | ¦  «        r| j        V — dS dS t          | t
          t          t          j        f¦  «        r| D ]}t          |¦  «        E d{V —† ŒdS t          | t          j
        ¦  «        r†t          |                      ¦   «         ¦  «        E d{V —† t          | ¦  «        sRt          |                      ¦   «         ¦  «        E d{V —† t          |                      ¦   «         ¦  «        E d{V —† dS dS dS )z]
    Recursively iterate through a value and yield all SymNodes contained
    within it.
    N)rj   r:   r<   r  rq   r¢  rV  rp   ÚSizeÚ_iterate_nodesrZ   r¶  r1   r·  r¸  r  s     rv   r   r   ö  su  è è € õ
 �#•wÑÔð <Øˆ	ˆ	ˆ	ˆ	ˆ	Ý	�C�Ñ	&Ô	&ð <õ �sÑÔð 	Ø”(ˆNˆNˆNˆNˆNð	ð 	å	�C�%¥¥u¤zÐ2Ñ	3Ô	3ð <Øð 	)ð 	)ˆAÝ% aÑ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ð	)ð 	)å	�C�œÑ	&Ô	&ð <Ý! #§(¢(¡*¤*Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ý˜SÑ!Ô!ð 	<Ý% c§j¢j¡l¤lÑ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ý% c×&8Ò&8Ñ&:Ô&:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð	<ð <ð	<ð 	<rw   úOrderedSet[sympy.Symbol]c                óÐ   — | €t          ¦   «         S t          | ¦  «        }	 t          |¦  «        }n# t          $ r t          ¦   «         cY S w xY w |j        j        d„ |D ¦   «         Ž S )a:  
    Recursively collect all free symbols from a value.

    This function traverses various data structures (tensors, lists, tuples, etc.) and extracts
    all sympy symbols contained within them. It's useful for finding all symbolic variables
    that a complex nested structure depends on.

    Args:
        val: The value to extract symbols from. Can be a symbolic type (SymInt, SymFloat, SymBool),
             a container (tuple, list), a tensor, or None.

    Returns:
        OrderedSet[sympy.Symbol]: An ordered set of all free symbols found in the value.
    Nc              3  ó$   K  — | ]}|j         V — Œd S r„   )r¦   ©r  Úes     rv   ú	<genexpr>zfree_symbols.<locals>.<genexpr>(  s$   è è € Ð*GÐ*G¸a¨1¬>Ð*GÐ*GÐ*GÐ*GÐ*GÐ*Grw   )r=   r  ÚnextÚStopIterationr¦   Úunion)rÏ   ÚitrÚ
first_exprs      rv   r¦   r¦     s�   € ð €{Ý‰|Œ|Ðå
˜Ñ
Ô
€CðÝ˜#‘Y”Yˆ
ˆ
øÝð ð ð Ý‰|Œ|ÐÐÐðøøøð
 )ˆ:Ô"Ô(Ð*GÐ*GÀ3Ð*GÑ*GÔ*GÐHÐHs   ¡1 ±AÁAc                óP   — t          d„ t          | ¦  «        D ¦   «         ¦  «         S )z)Faster version of bool(free_symbols(val))c              3  ó2   K  — | ]}|j         p|j        V — Œd S r„   )Ú	is_numberÚ
is_Booleanr$  s     rv   r&  z#has_free_symbols.<locals>.<genexpr>-  s+   è è € ÐNÐN°Q�A”KÐ/ 1¤<ÐNÐNÐNÐNÐNÐNrw   )Úallr  rÔ   s    rv   r«   r«   +  s*   € åÐNÐN½.ÈÑ:MÔ:MÐNÑNÔNÑNÔNÐNÐNrw   rù  c                ó´   — ddl m} t          | ¦  «        D ]A} ||¦  «        D ]3}|j        r*t	          |t
          j        t
          j        f¦  «        r  dS Œ4ŒBdS )z2Faster version of bool(free_unbacked_symbols(val))r   )ÚiterargsTF)Úsympy.core.traversalr2  r  Ú	is_SymbolrR   rS   ÚUNBACKED_INTÚUNBACKED_FLOAT)rù  r2  r  Úargs       rv   r¬   r¬   0  s…   € à-Ð-Ð-Ð-Ð-Ð-å˜AÑÔð ð ˆØ�8˜A‘;”;ð 	ð 	ˆCØŒ}ð ¥Ø•dÔ'­Ô)<Ð=ñ"ô "ð ð �t�t�tøð		ð
 ˆ5rw   c                óN   — t          d„ t          | ¦  «        D ¦   «         ¦  «        S )z?Like free_symbols, but filtered to only report unbacked symbolsc              3  óf   K  — | ],}t          |t          j        t          j        f¦  «        ¯(|V — Œ-d S r„   ©rR   rS   r5  r6  ©r  r  s     rv   r&  z(free_unbacked_symbols.<locals>.<genexpr>A  sQ   è è € ð ð àÝ˜!�dÔ/µÔ1DÐEÑFÔFðØ	ðð ð ð ð ð rw   )r=   r¦   rþ  s    rv   Úfree_unbacked_symbolsr<  =  s8   € õ ð ð å˜a‘”ðñ ô ñ ô ð rw   Úunbacked_inputsc                ó.   — t          | ¦  «        }||z
  }|S )zšUnbacked symbols that are not inputs to the graph. These are symbols that originated from
    data-dependent operations as opposed to mark_unbacked calls.)r<  )rù  r=  Úunbacked_symbolsÚnon_source_symbolss       rv   Ú!_free_non_source_unbacked_symbolsrA  H  s#   € õ
 -¨QÑ/Ô/ÐØ)¨OÑ;ÐØÐrw   úsympy.Symbol | Nonec                óL  — d| j         v ršt          | j         d         t          j        ¦  «        rut          | j         d         j        j        t          j        ¦  «        rF| j        dk    s$t          | j         d         j        j        ¦  «        r| j         d         j        j        S dS )a   
    Check if a given FX node is a symbol binding node.

    A symbol binding node is one that has a SymInt value in its meta that contains
    a sympy Symbol expression, and is either a placeholder node or contains unbacked symbols.

    Args:
        node (torch.fx.Node): The FX node to check

    Returns:
        Optional[sympy.Symbol]: The sympy Symbol if the node is a symbol binding node, None otherwise
    rÏ   r•  N)
rš  rj   rp   r"   rq   ro   rÒ   r¦  r™  r<  rÃ  s    rv   r§   r§   T  s“   € ð 	�”ÐÐÝ�t”y Ô'­¬Ñ6Ô6ð 	å�t”y Ô'Ô,Ô1µ5´<Ñ@Ô@ð 	ð ŒG�}Ò$Ð$Ý$ T¤Y¨uÔ%5Ô%:Ô%?Ñ@Ô@ð %ð Œy˜ÔÔ$Ô)Ð)Øˆ4rw   Úgraphútorch.fx.Graphú!dict[sympy.Symbol, torch.fx.Node]c                óR   — i }| j         D ]}t          |¦  «        x}�	||vr|||<   Œ|S )a×  
    Find all nodes in an FX graph that bind sympy Symbols.

    This function scans through all nodes in the given FX graph and identifies
    nodes that bind sympy Symbols (typically placeholder nodes with SymInt values).
    When multiple nodes bind the same symbol, only the first occurrence is kept.

    Args:
        graph: The FX graph to search for symbol binding nodes

    Returns:
        A dictionary mapping from sympy Symbols to their binding FX nodes
    )Únodesr§   )rD  Úrrq   r  s       rv   Úfind_symbol_binding_fx_nodesrJ  n  sD   € ð  ,.€Aà”ð ð ˆÝ*¨4Ñ0Ô0Ð0ˆAÐ=À!È1À*À*ØˆAˆa‰DøØ€Hrw   )ÚfrozenÚslotsc                  ó(   — e Zd ZU dZded<   ded<   dS )rÁ   ar  
    This class is used in multi-graph compilation contexts where we generate
    multiple specialized graphs and dispatch to the appropriate one at runtime.
    This allows us to optimize the trade-off between performance and generality
    by creating specialized versions for common patterns (e.g., x.shape[0] % 16 == 0)
    while maintaining a general fallback.
    r\   ÚsourcezCallable[[int], bool]Úcheck_fnN©r‰   rŠ   r‹   r—   rŒ   r’   rw   rv   rÁ   rÁ   †  s6   € € € € € € ðð ð !Ð Ð Ñ Ø#Ð#Ð#Ñ#Ð#Ð#rw   rÁ   c                  ó   — e Zd Zd	d„Zd
d„ZdS )r»   rf   r×   c                ó   — dS )Nz#.cast_symbool_to_symint_guardless()r’   rÚ   s    rv   Ú__str__zConvertIntKey.__str__—  s   € Ø4Ð4rw   Úbrr   ra   c                ó    — t          |¦  «        S )zGet the int value from bool)Ú cast_symbool_to_symint_guardless©r‡   rT  s     rv   r‹  zConvertIntKey.getš  s   € å/°Ñ2Ô2Ð2rw   Nrå   )rT  rr   rf   ra   )r‰   rŠ   r‹   rS  r‹  r’   rw   rv   r»   r»   •  s<   € € € € € ð5ð 5ð 5ð 5ð3ð 3ð 3ð 3ð 3ð 3rw   r»   c                  ó*   — e Zd ZU ded<   d	d„Zd
d„ZdS )ÚCallMethodKeyr×   Únamerf   c                ó   — d| j         › d�S )Nú.z()©rZ  rÚ   s    rv   rS  zCallMethodKey.__str__£  s   € Ø �4”9Ð Ð Ð Ð rw   Úor   c                ó<   —  t          || j        ¦  «        ¦   «         S )zCall the method on object)ÚgetattrrZ  ©r‡   r^  s     rv   r‹  zCallMethodKey.get¦  s   € à$�w�q˜$œ)Ñ$Ô$Ñ&Ô&Ð&rw   Nrå   ©r^  r   rf   r   ©r‰   rŠ   r‹   rŒ   rS  r‹  r’   rw   rv   rY  rY  Ÿ  sG   € € € € € € à€I€I�Ið!ð !ð !ð !ð'ð 'ð 'ð 'ð 'ð 'rw   rY  c                  ó*   — e Zd ZU ded<   d	d„Zd
d„ZdS )ÚInnerTensorKeyr×   Ú
inner_namerf   c                ó   — d| j         › �S ©Nr\  )rf  rÚ   s    rv   rS  zInnerTensorKey.__str__¯  s   € Ø$�4”?Ð$Ð$Ð$rw   r^  r   c                ó,   — t          || j        ¦  «        S )zGet the inner tensor attribute)r`  rf  ra  s     rv   r‹  zInnerTensorKey.get²  s   € å�q˜$œ/Ñ*Ô*Ð*rw   Nrå   rb  rc  r’   rw   rv   re  re  «  sG   € € € € € € à€O€O�Oð%ð %ð %ð %ð+ð +ð +ð +ð +ð +rw   re  c                  ó*   — e Zd ZU ded<   d
d„Zdd„Zd	S )ÚDivideByKeyra   Údivisorrf   r×   c                ó   — d| j         › d�S )Nz.__floordiv__(ú)©rl  rÚ   s    rv   rS  zDivideByKey.__str__»  s   € Ø/ ¤Ð/Ð/Ð/Ð/rw   r^  rt   c                ó   — || j         z  S )zDivide object by divisorro  ra  s     rv   r‹  zDivideByKey.get¾  s   € à�D”LÑ Ð rw   Nrå   )r^  rt   rf   rt   rc  r’   rw   rv   rk  rk  ·  sJ   € € € € € € àÐÐÑð0ð 0ð 0ð 0ð!ð !ð !ð !ð !ð !rw   rk  FrÞ   r;  úpytree.KeyPathÚrealúobject | NoneÚpendingúset[sympy.Symbol] | NoneÚsimplifyú"dict[sympy.Symbol, pytree.KeyPath]c           
     ó.  ‡‡‡‡‡— t          j        t          ‰|‰¬¦  «        Šdˆfd„}|€t          ¦   «         }i Šddˆˆˆfd„}t	          | t
          t          f¦  «        rht          t          | ¦  «        ¦  «        D ]I}‰ 	                     ‰| |         ‰t          j        |¦  «        fz   |�||         nd¬¦  «        ¦  «         ŒJ�nMt          | ¦  «        r«|                      ¦   «         \  }	}
|	D ]B}t          | |¦  «        }‰ 	                     ‰|‰t          |¦  «        fz   ¦  «        ¦  «         ŒCt           j                             ¦   «         r/t	          | t           j        j        j        ¦  «        r || ¦  «         �n“t	          | t           j        ¦  «        rNt-          | ¦  «        st/          | ¦  «        r0t1          | ¦  «        }‰ 	                     ‰|‰¦  «        ¦  «         �n+t	          | t           j        ¦  «        rft-          | ¦  «        sWt/          | ¦  «        sHddlm} t	          | |¦  «        st7          dt9          | ¦  «        › �¦  «        ‚ || | j        ¦  «         �n«t	          | t           j        t           j        f¦  «        ršt	           || ¦  «        x}t@          j!        ¦  «        ru||v rq‰‰|<   ‰rS|�Qt	          |tD          tF          f¦  «        st7          dt9          |¦  «        › �¦  «        ‚‰ $                    ||¦  «         | %                    |¦  «         �nët	          | t           j        ¦  «        �rÎt	           || ¦  «        x}t@          j&        ¦  «        �r¨t          |j'        ¦  «        dk    �r�t	          |j'        d         x}t@          j(        t@          j!        f¦  «        �r[t	          |j'        d         x}t@          j!        ¦  «        �r3||v ||v z  �r)t	          ||vr|n|x}t@          j(        ¦  «        s‰�r|‰j)        v rûdˆfd„}||v r|n|}‰r)t	          |t@          j(        ¦  «        rtE          |¦  «        n
 ||¦  «        }‰tU          |¦  «        fz   ‰|<   |�ˆt	          |tD          ¦  «        st7          dt9          |¦  «        › �¦  «        ‚t	          |t@          j(        ¦  «        r|tE          |¦  «        z  ntW          ||¦  «        }‰r‰ $                    ||¦  «         | %                    |¦  «         �nt	          | t           j,        ¦  «        rèt	           || ¦  «        x}t@          j-        ¦  «        rÃt	          |j.        t@          j!        ¦  «        r¤|j/        dk    r™|j.        |v r�‰ta          ¦   «         fz   ‰|j.        <   |�Zt9          |¦  «        tb          urt7          dt9          |¦  «        › �¦  «        ‚‰r#‰ $                    |tE          |¦  «        ¦  «         | %                    |j.        ¦  «         ‰S )a2  
    Recursively traverses a structure to find unbacked symbols and their access paths.

    This function walks through tensors, lists, tuples, and symbolic values to locate
    unbacked symbols that are in the pending set, and returns a mapping from those
    symbols to their access paths in the structure.

    Args:
        a: The object to traverse (tensor, list, tuple, SymInt, etc.)
        path: The current path in the object tree
        real: Optional real tensor corresponding to the fake tensor being traversed
        shape_env: Optional ShapeEnv to register unbacked values with
        pending: Set of unbacked symbols to look for (will be modified in-place)
        simplify: Whether to use simplified expressions

    Returns:
        A dictionary mapping unbacked symbols to their access paths
    ©rl   rt  rv  r  úSymInt | SymFloat | SymBoolrf   rÐ   c                ó8   •— ‰r| j         j        S | j         j        S r„   )rq   ro   rŸ  )r  rv  s    €rv   ro   z._free_unbacked_symbols_with_path.<locals>.exprä  s!   ø€ Øð 	Ø”6”;Ðð ŒvŒ|Ðrw   Nrd   rK  Úreal_tensorútorch.Tensor | Noner‚   c           	     óŽ  •— ‰                       ‰|                      ¦   «         ‰t          d¦  «        fz   |�|                     ¦   «         nd ¬¦  «        ¦  «         | j        t          j        t          j        t          j        t          j        fvrZ‰                       ‰|  	                    ¦   «         ‰t          d¦  «        fz   |�| 	                    ¦   «         nd ¬¦  «        ¦  «         ‰                       ‰|  
                    ¦   «         ‰t          d¦  «        fz   |�| 
                    ¦   «         nd ¬¦  «        ¦  «         d S )Nr¶  ©rr  r·  r¸  )Úupdater¶  rY  Úlayoutrp   Ú
sparse_csrÚ
sparse_cscÚ
sparse_bsrÚ
sparse_bscr·  r¸  )rd   r|  Úgor;  rI  s     €€€rv   Úmatch_tensorz6_free_unbacked_symbols_with_path.<locals>.match_tensorð  sh  ø€ Ø	�ŠØˆBØ—’‘”Ø� fÑ-Ô-Ð/Ñ/Ø+6Ð+B�[×%Ò%Ñ'Ô'Ð'Èðñ ô ñ	
ô 	
ð 	
ð Œ8ÝÔÝÔÝÔÝÔð	
ð 
ð 
ð �HŠHØ�Ø—H’H‘J”JØ�M¨(Ñ3Ô3Ð5Ñ5Ø1<Ð1H˜×+Ò+Ñ-Ô-Ð-Èdðñ ô ñô ð ð 	
�ŠØˆBØ× Ò Ñ"Ô"Ø�Ð&6Ñ7Ô7Ð9Ñ9à4?Ð4K�K×.Ò.Ñ0Ô0Ð0ÐQUð	ñ ô ñ	
ô 	
ð 	
ð 	
ð 	
rw   r  r   r]   zExpected FakeTensor, got zExpected int or float, got r—  rî   úsympy.Symbolr"   c                ó¤   •— ‰                      | t          ‰j        |          ¦  «        ‰j                             | d g¦  «        d         ¬¦  «        S )Nr   ©ru   rN  )Úcreate_symintnodert   Úbacked_var_to_valÚvar_to_sourcesr‹  )r  rl   s    €rv   Ú_symint_wrapz6_free_unbacked_symbols_with_path.<locals>._symint_wrapW  sS   ø€ Ø×.Ò.ØÝ˜Ô4°QÔ7Ñ8Ô8Ø Ô/×3Ò3°A¸°vÑ>Ô>¸qÔAð /ñ ô ð rw   ri   rq  )r  rz  rf   rÐ   r„   )rd   rK  r|  r}  rf   r‚   )r  rˆ  rf   r"   )2rû   ÚpartialÚ _free_unbacked_symbols_with_pathrA  rj   r¢  rV  Úranger¡  r€  r›  ÚSequenceKeyr>   Ú__tensor_flatten__r`  re  rp   ÚdistributedÚis_availableÚtensorÚDTensorrZ   r$   r%   r#   r  r^   rm   rs   r|  r"   r!   rÒ   r¦  rt   rb  Ú"set_real_tensor_prop_unbacked_valsÚremoverØ  r�   rÓ   rŒ  rk  rA   r    r¤  r¥  r©  r»   rr   )rd   r;  rr  rl   rt  rv  ro   r‡  r‚  ÚattrsÚ_ÚattrÚsubÚunwrapped_tensorr^   r  r¥  r©  ÚcoeffrŽ  Úunbackedrl  rÏ   r†  rI  s    ` ` `                 @@rv   r�  r�  Ã  s¤  øøøøø€ õ4 
Ô	Ý(ØØØð	
ñ 
ô 
€Bðð ð ð ð ð ð €Ý‘%”%ˆØ
€Að
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ> �!•e�T�]Ñ#Ô#ð wõ •s˜1‘v”v‘”ð 	ð 	ˆAØ�HŠHØ�Ø�a”DØ�FÔ.¨qÑ1Ô1Ð3Ñ3Ø$(Ð$4˜˜aœ˜¸$ðñ ô ñô ð ð ñ	õ 
' qÑ	)Ô	)ð là×'Ò'Ñ)Ô)‰ˆˆqØð 	>ð 	>ˆDÝ˜!˜TÑ"Ô"ˆCØ�HŠH�R�R˜˜T¥^°DÑ%9Ô%9Ð$;Ñ;Ñ<Ô<Ñ=Ô=Ð=Ð=õ Ô×)Ò)Ñ+Ô+ð 	µ
Ø�uÔ Ô'Ô/ñ1
ô 1
ð 	ð ˆL˜‰OŒOˆOùÝ	�A•u”|Ñ	$Ô	$ð `Ý˜ÑÔð`Ý4°QÑ7Ô7ð`õ )¨Ñ+Ô+ÐØ	�Š��Ð$ dÑ+Ô+Ñ,Ô,Ð,Ñ,å�1•e”lÑ#Ô#ð[å  Ñ#Ô#ð[õ & aÑ(Ô(ð[ð
 	=Ð<Ð<Ð<Ð<Ð<å˜!˜ZÑ(Ô(ð 	HÝ Ð!F½TÀ!¹W¼WÐ!FÐ!FÑGÔGÐGØˆ�Q˜œÑ&Ô&Ð&Ñ&å�1•u”|¥U¤^Ð4Ñ5Ô5ðQå˜D˜D ™GœG�|�q¥U¤\Ñ2Ô2ðQð �ˆLˆLàˆˆ!‰Øð 	B˜Ð)Ý˜d¥S­% LÑ1Ô1ð QÝ$Ð%OÅ4ÈÁ:Ä:Ð%OÐ%OÑPÔPÐPà×8Ò8¸¸DÑAÔAÐAà�Š�qÑÔÐÑõ 	�1•e”lÑ#Ô#ñ?å˜D˜D ™GœG�|�q¥U¤YÑ/Ô/ñ?õ �”‰KŒK˜1ÒÑÝ˜aœf QœiÐ'�s­%¬-½¼Ð)FÑGÔGñ å˜aœf QœiÐ'�s­¬Ñ6Ô6ñ ð �Wˆn ¨ Ñ0ñ	 õ  s°'Ð'9Ð'9  ¸sÐB�uÅEÄMÑRÔRð ð ñ ð ˜Ô4Ð4Ð4ð	ð 	ð 	ð 	ð 	ð 	ð  ˜.˜.�3�3¨cˆð ð%Ý'¨­u¬}Ñ=Ô=ð%�C�‰JŒJˆJà�˜eÑ$Ô$ð 	ð �k¨'Ñ2Ô2Ð4Ñ4ˆˆ(‰ØÐÝ˜d¥CÑ(Ô(ð HÝ$Ð%F½$¸t¹*¼*Ð%FÐ%FÑGÔGÐGõ ˜e¥U¤]Ñ3Ô3ð+��˜E™
œ
Ñ"Ð"å˜d EÑ*Ô*ð ð
 ð LØ×<Ò<¸XÀsÑKÔKÐKØ�Š�xÑ Ô Ð Ñ õ
 	�1•e”mÑ$Ô$ðå˜D˜D ™GœG�|�q¥U¤XÑ.Ô.ðõ �q”u�eœlÑ+Ô+ð	ð
 ŒE�QŠJˆJØŒE�WÐÐð �=™?œ?Ð,Ñ,ˆˆ!Œ%‰ØÐÝ�D‰zŒz¥Ð%Ð%Ý$Ð%G½4À¹:¼:Ð%GÐ%GÑHÔHÐHØð KØ×<Ò<¸QÅÀDÁ	Ä	ÑJÔJÐJà�Š�q”uÑÔÐà€Hrw   rµ  Úold_example_valueÚpeekc                óò  — | €dS | j         }| j        }t          |¦  «        }t          |¦  «        }|sE|rt                               d|¦  «         |                     ¦   «          |                     ¦   «          |sdS t          |d| |d¬¦  «        }||z  }|s¤|r¢t          |t          j	        ¦  «        r5t          |                     ¦   «         |                     ¦   «         f¦  «        nd}	d|› d|› d	|	› d
�}
t          j        j        j        j        rt                               |
¦  «         nt%          |
¦  «        ‚|��9|                     ¦   «         D �]#}t)          j        ||¦  «        }t)          j        ||¦  «        }t          |t,          ¦  «        rát          |j        j        x}t2          j        ¦  «        r»t          |t,          ¦  «        ri|j        j        x}|k    rWt          |t2          j        ¦  «        r&t7          |¦  «        r|                      ||¦  «         ŒÏ|                      ||¦  «         Œæt          |t,          ¦  «        s(|                      |t3          j        |¦  «        ¦  «         �Œ%|S )a™  
    After having run fake tensor propagation and producing example_value
    result, traverse example_value looking for freshly bound unbacked
    symbols and record their paths for later.  It is an error if
    we have allocated an unbacked SymInt but it cannot be found in
    example_value.  (NB: this means if you have a multi-output
    function, you must call this on the tuple of tensor output, you
    cannot wait!)

    The peek parameter lets you check out what the bindings are without
    changing the affected list.  This is primarily useful for ensuring
    real_tensor_prop_unbacked_vals is promptly populated when propagate_real_tensors is on.
    Nzcompute_unbacked_bindings %sr’   Fry  rp  zPending unbacked symbols z not in returned outputs r  zÛ.
Did you accidentally call new_dynamic_size() or item() more times than you needed to in your fake implementation?
For more help, see https://docs.google.com/document/d/1RWrH-3wLEpzR9kCS6gGBNen_-Fs-8PVbWWFE5AcgeWE/edit)Úpending_fresh_unbacked_symbolsÚ ignorable_fresh_unbacked_symbolsrA  rÇ   r�  Úclearr�  rj   rp   rZ   rÙ   r·  r¸  r&  r'  r3   Ú%soft_pending_unbacked_not_found_errorÚwarningr�   r  r›  rœ  r;   rq   ro   rÒ   r¦  r<  r«  Ú_eliminate_unbackedÚsympify)rl   rµ  r¡  r¢  Ú	fresh_symÚign_symrt  Ú	ignorableÚsymbol_to_pathÚextraÚmsgÚkeypathÚold_symÚnew_symÚnew_sÚold_ss                   rv   rº   rº   ‹  s¸  € ð& ÐØˆtàÔ8€IØÔ8€Gå�)‰nŒn€GÝ�G‘”€IØð Øð 	@Ý�HŠHÐ3°YÑ?Ô?Ð?Ø�ŠÑÔÐØ�Š‰Œˆàð Øˆtå5Ø�r Y¸È%ðñ ô €Nð ˆyÑ€GØð 5�Gð 5õ ˜-­¬Ñ6Ô6ð�D�-×&Ò&Ñ(Ô(¨-×*FÒ*FÑ*HÔ*HÐIÑJÔJÐJàð 	ðv¨ð vð vÈ-ð vð vÐZ_ð vð vð vð 	õ Œ8Ô Ô(ÔNð 	5Ý�KŠK˜ÑÔÐÐå/°Ñ4Ô4Ð4ð Ñ$Ø%×,Ò,Ñ.Ô.ð 	Qñ 	QˆGÝ”nÐ%6¸Ñ@Ô@ˆGÝ”n ]°GÑ<Ô<ˆGÝ˜'¥8Ñ,Ô,ð QµØ œÔ*Ð*�­E¬Lñ2ô 2ð Qõ ˜w­Ñ1Ô1ðQà")¤,Ô"3Ð3˜¸Ò=Ð=õ " %­¬Ñ6Ô6ð DÕ;PÐQVÑ;WÔ;Wð DØ!×5Ò5°e¸UÑCÔCÐCÐCà!×5Ò5°e¸UÑCÔCÐCÐCÝ# G­XÑ6Ô6ð QØ×1Ò1°%½¼ÀwÑ9OÔ9OÑPÔPÐPùàÐrw   r¿  c                ó¬  — t          | t          ¦  «        s6t          | t          ¦  «        st          dt	          | ¦  «        › �¦  «        ‚| S t
          j        j        j        j	        rt          | ¦  «        }|�|n|S t          | j        dd¦  «        }|€t          | ¦  «        S | j        }|j                             |d|¬¦  «        }t          |¦  «        S )zR
    Try to guard a, if data dependent error encountered just return default.
    rq  Nrl   F)Úsize_obliviousÚfallback_value)rj   r    rr   rm   rs   rp   r&  r'  r3   Úbacked_size_obliviousÚ_static_eval_sym_boolr`  rq   Ú
guard_boolrl   Úevaluate_sym_node)rd   r¿  r“  rl   r)  rI  s         rv   Ú	_guard_orr½    sÛ   € õ �a�Ñ!Ô!ð Ý˜!�TÑ"Ô"ð 	BÝ Ð!@µt¸A±w´wÐ!@Ð!@ÑAÔAÐAØˆõ „xÔÔ$Ô:ð 9Ý& qÑ)Ô)ˆØÐ+ˆvˆv°Ð8å˜œ ¨TÑ2Ô2€Ið ÐÝ˜!‰}Œ}ÐàŒv€HØÔ×,Ò,Ø °wð 	-ñ 	ô 	€Aõ �‰7Œ7€Nrw   c                ó"   — t          | d¦  «        S )zP
    Try to guard a, if data dependent error encountered just return false.
    F©r½  r\  s    rv   r˜   r˜     s   € õ �Q˜ÑÔÐrw   c                ó"   — t          | d¦  «        S )zO
    Try to guard a, if data dependent error encountered just return true.
    Tr¿  r\  s    rv   r™   r™   &  s   € õ �Q˜ÑÔÐrw   r    c                óD  — t          | t          ¦  «        st          dt          | ¦  «        › �¦  «        ‚| j        j        }	 | j        j        }|                     |¦  «        }|�t          |¦  «        S d S # t          $ r t                               d|¦  «         Y d S w xY w)NzExpected SymBool, got zCould not simplify %s)rj   r    rm   rs   rq   ro   rl   Ú_maybe_evaluate_staticrr   Ú	ExceptionrÇ   rÈ   )rù  ro   rl   Ú
simplifieds       rv   rº  rº  -  s¯   € Ý�a�Ñ!Ô!ð AÝÐ?µd¸1±g´gÐ?Ð?Ñ@Ô@Ð@ØŒ6Œ;€Dðð ”FÔ$ˆ	Ø×5Ò5°dÑ;Ô;ˆ
ØÐ!Ý˜
Ñ#Ô#Ð#à�4øÝð ð ð Ý�	Š	Ð)¨4Ñ0Ô0Ð0Øˆtˆtðøøøs   Á1A6 Á6%BÂBr:   rž  c                ó<   — | j         }|€dS |du r|du S |du r|du S dS )zXCheck if a SymNode's cached hint disproves that the expression is
    always ``target``.NFT)rk   )rq   rž  ru   s      rv   Ú_sym_node_hint_disprovesrÆ  @  s@   € ð Œ:€DØ€|ØˆuØˆt€|€|Ø˜ˆÐØˆu€}€}Ø˜ˆ~ÐØˆ5rw   c                óö   — t          | t          ¦  «        s7t          | t          ¦  «        st          dt	          | ¦  «        › �¦  «        ‚|  S t          | j        d¬¦  «        rdS t          | ¦  «        }|€dS | S )a�  
    Returns True if x can be simplified to a constant and is False.
    If x cannot be evaluated from static, we return False

    .. note::
        This function doesn't introduce new guards, so the expression may end
        up evaluating to False at runtime even if this function returns False.

    Args:
        x (bool, SymBool): The expression to try statically evaluating
    rq  F©rž  ©rj   r    rr   rm   rs   rÆ  rq   rº  ©rù  r“  s     rv   r·   r·   M  sˆ   € õ �a�Ñ!Ô!ð Ý˜!�TÑ"Ô"ð 	BÝ Ð!@µt¸A±w´wÐ!@Ð!@ÑAÔAÐAØˆuˆå ¤¨uÐ5Ñ5Ô5ð Øˆuå" 1Ñ%Ô%€FØ€~Øˆuàˆ:Ðrw   c                óò   — t          | t          ¦  «        s6t          | t          ¦  «        st          dt	          | ¦  «        › �¦  «        ‚| S t          | j        d¬¦  «        rdS t          | ¦  «        }|€dS |S )aE  
    Returns True if x can be simplified to a constant and is true.

    .. note::
        This function doesn't introduce new guards, so the expression may end
        up evaluating to true at runtime even if this function returns False.

    Args:
        x (bool, SymBool): The expression to try statically evaluating
    rq  TrÈ  FrÉ  rÊ  s     rv   r¶   r¶   h  sƒ   € õ �a�Ñ!Ô!ð Ý˜!�TÑ"Ô"ð 	BÝ Ð!@µt¸A±w´wÐ!@Ð!@ÑAÔAÐAØˆÝ ¤¨tÐ4Ñ4Ô4ð ØˆuÝ" 1Ñ%Ô%€FØ€~Øˆuà€Mrw   Úothersc                ód   — t          |¦  «        dk    r| S |D ]}t          j        | |¦  «        } Œ| S )zB
    and, but for symbolic expressions, without bool casting.
    r   )r¡  ÚoperatorÚand_©rù  rÌ  Úys      rv   r­   r­   €  sA   € õ ˆ6�{„{�aÒÐØˆØð  ð  ˆÝŒM˜!˜QÑÔˆˆØ€Hrw   rÑ  c                ó  — t          | t          t          f¦  «        rrt          |t          t          f¦  «        rVt          | ¦  «        t          |¦  «        k    rdS t	          j        t          j        t          t          | |¦  «        d¦  «        S t          | t          t          j        f¦  «        r't          |t          t          j        f¦  «        r| |k    S t          dt          | ¦  «        › dt          |¦  «        › �¦  «        ‚)z”
    Like ==, but when run on list/tuple, it will recursively test equality
    and use sym_and to join the results together, without guarding.
    FTzunexpected sym_eq between r  )rj   r¢  rV  r¡  rû   r  rÎ  rÏ  rì  r®   rt   rp   r"   rm   rs   )rù  rÑ  s     rv   r®   r®   ‹  s×   € õ
 �!•e�T�]Ñ#Ô#ð O­
°1µt½U°mÑ(DÔ(Dð OÝˆq‰6Œ6•S˜‘V”VÒÐØ�5ÝÔ¥¤­sµ6¸1¸aÑ/@Ô/@À$ÑGÔGÐGÝ	�A��Uœ\Ð*Ñ	+Ô	+ð Oµ
¸1½sÅEÄLÐ>QÑ0RÔ0Rð OØ�AŠvˆåÐM½$¸q¹'¼'ÐMÐMÅDÈÁGÄGÐMÐMÑNÔNÐNrw   c                ód   — t          |¦  «        dk    r| S |D ]}t          j        | |¦  «        } Œ| S )zA
    or, but for symbolic expressions, without bool casting.
    r   )r¡  rÎ  Úor_rÐ  s      rv   r¯   r¯   š  sA   € õ ˆ6�{„{�aÒÐØˆØð ð ˆÝŒL˜˜AÑÔˆˆØ€Hrw   ú0SymBool | SymInt | SymFloat | int | bool | floatúbool | int | floatc                ó(  — t          | t          t          f¦  «        rt          | ¦  «        S t          | t          t
          f¦  «        rt          | ¦  «        S t          | t          t          f¦  «        rt          | ¦  «        S t          d| › �¦  «        ‚)a™  
    Guard a scalar value, which can be a symbolic or concrete boolean, integer, or float.

    This function dispatches to the appropriate guard function based on the type of the input.

    Args:
        a: A symbolic or concrete scalar value (bool, int, or float)

    Returns:
        The concrete value after guarding

    Raises:
        AssertionError: If the input is not a recognized scalar type
    zunrecognized scalar )rj   r    rr   r»  r"   rt   r¡   r!   rb  r¢   rm   r\  s    rv   r£   r£   ¥  s‚   € õ" �!•g�t�_Ñ%Ô%ð 9Ý˜!‰}Œ}ÐÝ	�A�¥�}Ñ	%Ô	%ð 9Ý˜‰|Œ|ÐÝ	�A�¥%Ð(Ñ	)Ô	)ð 9Ý˜1‰~Œ~ÐåÐ7°AÐ7Ð7Ñ8Ô8Ð8rw   r"   c                óH  — t          | t          ¦  «        r„t          | j        t          ¦  «        rlt          | j        j        t
          j        ¦  «        rJ| j        j        �@| j        j                             | j        j        ¦  «        rt          | ¦  «         dS dS dS dS dS dS )ax  
    Don't use this directly; use torch._check_is_size instead.

    This is a softer version of _constrain_range_for_size (with min=0,
    max=Inf).  Instead of forcibly constraining a variable (and erroring if we
    failed to constrain it), it will simply advise us that a size is
    constrained in some way.  We will always defer a runtime assert for this
    constraint if we cannot prove it at compile-time, but we we only
    *sometimes* learn useful extra information at compile-time with this
    information.  This is in contrast to constrain_range_for_size, where if
    you don't call that on a fresh unbacked symint, chances are we will choke.

    TODO: Make Dynamo handle this appropriately if this is seen in Dynamo-ed
    code.  Right now this is only really used in code with AOTAutograd trace
    through, so it is not a big problem that this isn't supported, but in
    principle all of this code should be Dynamo'able too.

    TODO: I didn't support min/max because I didn't have a use case where this
    actually helped.  In principle we can support it, it just makes the
    implementation below more complicated.
    N)
rj   r"   rq   r:   ro   rÒ   r¦  rl   Úis_unbacked_symintÚ_constrain_range_for_sizer\  s    rv   Ú_advise_is_sizerÛ  À  s³   € õD 	�1•fÑÔð%å�q”v�wÑ'Ô'ð%õ �q”v”{¥E¤LÑ1Ô1ð%ð ŒFÔÐ(ØŒFÔ×/Ò/°´´Ñ<Ô<ð )õ 	" !Ñ$Ô$Ð$Ð$Ð$ð%ð %ð %ð %ð %ð %ð )Ð(Ð(Ð(rw   Úupper_boundc                ó¬  — t          | t          ¦  «        r´t          | j        t          ¦  «        rœt          | j        j        t
          j        ¦  «        rz| j        j        �p| j        j                             | j        j        ¦  «        rIt          |t          ¦  «        r6| j        j         
                    | j        j        |¦  «         d S d S d S d S d S d S d S r„   )rj   r"   rq   r:   ro   rÒ   r¦  rl   rÙ  rt   Ú_constrain_is_bounded)rd   rÜ  s     rv   Ú_advise_is_boundedrß  ë  sâ   € å�1•fÑÔðIå�q”v�wÑ'Ô'ðIõ �q”v”{¥E¤LÑ1Ô1ðIð ŒFÔÐ(ØŒFÔ×/Ò/°´´Ñ<Ô<ð )å�{¥CÑ(Ô(ð )ð 	
ŒÔ×.Ò.¨q¬v¬{¸KÑHÔHÐHÐHÐHðIð Ið Ið Ið Ið Ið )Ð(Ð(Ð(Ð(Ð(rw   ÚminÚmaxc                óf  — t          | t          t          f¦  «        rt          d¦  «        ‚t          | t          ¦  «        st          d¦  «        ‚t          | j        j        t          j	        ¦  «        st          d| › �¦  «        ‚| j        j
                             | j        j        ||¦  «         dS )z=
    This function is NOT INTENDED to be used by itself.
    z$Constraining SymFloat/SymBool is nyiz#can only constrain range for SymIntzconstraining non-Symbols NYI: N)rj   r!   r    rÛ  r"   rm   rq   ro   rÒ   r¦  rl   rÚ  ©rd   rà  rá  s      rv   rÚ  rÚ  ÷  s¤   € õ �!•h¥Ð(Ñ)Ô)ð AÝÐ?Ñ@Ô@Ð@å�a�Ñ Ô ð DÝÐBÑCÔCÐCÝ�a”f”k¥5¤<Ñ0Ô0ð CÝÐA¸aÐAÐAÑBÔBÐBà„FÔ×.Ò.¨q¬v¬{¸CÀÑEÔEÐEÐEÐErw   )rá  c          	     ó6  — |€t            }|€t           }||k     rt          d|› d|› �¦  «        ‚t          | t          ¦  «        r*|| cxk    r|k    sn t          d| › d|› d|› d�¦  «        ‚dS | j        j                             | j        j        ||¦  «         dS )aØ  
    Applies a constraint that the passed in SymInt must lie between min-max
    inclusive-inclusive, WITHOUT introducing a guard on the SymInt (meaning
    that it can be used on unbacked SymInts).  If min/max are None, we assume
    that the dimension is unbounded in that direction.  Repeated application
    of constrain_range intersects the ranges.  This is a fairly low level API
    that doesn't have a lot of safety guarantees (TODO: provide higher level
    APIs).

    Currently, we use this API in the following circumstance: when we allocate
    an unbacked SymInt, denoting an integer quantity which is data dependent,
    we ordinarily do not know anything about what values it may take.  This
    means that any sort of guard on it will immediately fail.  However, in
    many cases, we know something about the unbacked SymInt: for example, we
    know that nonzero(x).size(0) must be >= 0.  We use constrain_range to
    narrow the possible range, declaring that negative symbols are impossible.
    This permits to definitely answer True to queries like 'nnz >= 0', even if
    we don't know what the actual (hinted) value of 'nnz' is.  In fact, we
    actually use constrain_range to unsoundly discharge common guards: for an
    unbacked SymInt produced by nonzero, we will also assume that it is not
    equal to 0/1 (even though these are perfectly possible values at runtime),
    because we generally expect graphs that are valid for N=2 to also be valid
    for N=1.
    Nú\Maximum value to constrain_as_size can't be less than the specified min value, received min=ú	 and max=úInvalid value ú for range [ú:ú])rJ   rÛ  rj   rt   rq   rl   Ú_constrain_rangero   rã  s      rv   Úconstrain_rangerì  
  sÕ   € ð2 €{ÝˆgˆØ
€{Ýˆà
ˆS‚y€yÝð0Øð0ð 0Ø*-ð0ð 0ñ
ô 
ð 	
õ
 �!•SÑÔð Ø�q��’�˜C’���ÝÐI¨aÐIÐI¸SÐIÐIÀ3ÐIÐIÐIÑJÔJÐJØˆà„FÔ×%Ò% a¤f¤k°3¸Ñ<Ô<Ð<Ð<Ð<rw   útorch.SymIntrT  c                óò   — t          | t          ¦  «        s?t          |t          ¦  «        s| |k    rt          d| › d|› �¦  «        ‚dS |j        j        }n| j        j        }|                     | |¦  «         dS )z¡
    Given two SymInts, constrain them so that they must be equal.  NB:
    this will not work with SymInts that represent nontrivial expressions
    (yet!)
    ú	Expected ú == N)rj   r"   rm   rq   rl   Ú_constrain_unify)rd   rT  rl   s      rv   Úconstrain_unifyrò  6  s‡   € õ �a�Ñ Ô ð %Ý˜!�VÑ$Ô$ð 	)Ø�AŠvˆvÝ$Ð%;°Ð%;Ð%;¸Ð%;Ð%;Ñ<Ô<Ð<ØˆFàœÔ(ˆIˆIà”FÔ$ˆ	à×Ò˜q !Ñ$Ô$Ð$Ð$Ð$rw   Úskipc                óJ  — t          | t          ¦  «        ret          j        ¦   «         }t	          |dz   ¦  «        D ]}|€ n|j        }Œ| j                             |r|j        j	        nd|r|j
        nd¦  «        S t          | ¦  «        t          urt          d| › �¦  «        ‚| S )Nrî   rp  r   rq  )rj   r    r  Úcurrentframer‘  Úf_backrq   Úexpect_trueÚf_codeÚco_filenameÚf_linenors   rr   rm   )rd   ró  Úframer›  s       rv   r÷  r÷  i  s·   € Ý�!•WÑÔð 	
åÔ$Ñ&Ô&ˆÝ�t˜a‘x‘”ð 	!ð 	!ˆAØˆ}Ø�Ø”LˆEˆEØŒv×!Ò!Ø(-Ð5ˆEŒLÔ$Ð$°2ÈÐ7U°u´~°~ÐTUñ
ô 
ð 	
õ ˆA�w„w•dÐÐÝÐ6°1Ð6Ð6Ñ7Ô7Ð7Ø€Hrw   c                ó¶   — t          | t          ¦  «        r| j                             dd¦  «        S t	          | ¦  «        t
          urt          d| › �¦  «        ‚| S )Nrp  r   rq  )rj   r    rq   r»  rs   rr   rm   r\  s    rv   r»  r»  y  sY   € Ý�!•WÑÔð (ØŒv× Ò   QÑ'Ô'Ð'ÝˆA�w„w•dÐÐÝÐ6°1Ð6Ð6Ñ7Ô7Ð7Ø€Hrw   c                ó¶   — t          | t          ¦  «        r| j                             dd¦  «        S t	          | ¦  «        t
          urt          d| › �¦  «        ‚| S )Nrp  r   ri   )rj   r"   rq   r¡   rs   rt   rm   r\  s    rv   r¡   r¡   �  sY   € Ý�!•VÑÔð 'ØŒv×Ò  AÑ&Ô&Ð&ÝˆA�w„w•cÐÐÝÐ5°!Ð5Ð5Ñ6Ô6Ð6Ø€Hrw   rb  c                ó´   — t          | t          ¦  «        r| j                             dd¦  «        S t          | t          ¦  «        st          d| › �¦  «        ‚| S )Nrp  r   zExpected float, got )rj   r!   rq   r¢   rb  rm   r\  s    rv   r¢   r¢   ‰  sZ   € Ý�!•XÑÔð )ØŒv×!Ò! " aÑ(Ô(Ð(Ý�a�ÑÔð 9ÝÐ7°AÐ7Ð7Ñ8Ô8Ð8Ø€Hrw   Úgmútorch.fx.GraphModuleú	list[Any]c                ó.   — d„ | j         j        D ¦   «         S )Nc                ó>   — g | ]}|j         d k    ¯|j        d         ‘ŒS )r•  rÏ   )r™  rš  ©r  r‘  s     rv   r  z'fx_placeholder_vals.<locals>.<listcomp>“  s*   € ÐKÐKÐK˜a°Q´T¸]Ò5JÐ5JˆAŒF�5ŒMÐ5JÐ5JÐ5Jrw   ©rD  rH  ©rÿ  s    rv   Úfx_placeholder_valsr  ’  s   € ØKÐK 2¤8¤>ÐKÑKÔKÐKrw   ú	list[str]c                ó.   — d„ | j         j        D ¦   «         S )Nc                ó2   — g | ]}|j         d k    ¯|j        ‘ŒS )r•  )r™  rž  r  s     rv   r  z*fx_placeholder_targets.<locals>.<listcomp>—  s&   € ÐFÐFÐF˜°´¸Ò0EÐ0EˆAŒHÐ0EÐ0EÐ0Erw   r  r  s    rv   Úfx_placeholder_targetsr  –  s   € ØFÐF˜bœhœnÐFÑFÔFÐFrw   ©Úignore_staticrZ   r  c               ó‚   — | j         €t          d¦  «        ‚| j                              t          | ¦  «        ||¬¦  «        S )Núgm.shape_env must not be Noner  )rl   rm   Úevaluate_guards_for_argsr  )rÿ  r  r�   s      rv   Úeval_guardsr  �  sK   € ð 
„|ÐÝÐ<Ñ=Ô=Ð=ØŒ<×0Ò0Ý˜BÑÔØØ#ð 1ñ ô ð rw   údict[sympy.Symbol, int]c                ó~   — | j         €t          d¦  «        ‚| j                              t          | ¦  «        |¦  «        S )Nr  )rl   rm   Úbind_symbolsr  )rÿ  r�   s     rv   r  r  ©  s:   € Ø	„|ÐÝÐ<Ñ=Ô=Ð=ØŒ<×$Ò$Õ%8¸Ñ%<Ô%<¸dÑCÔCÐCrw   c                  ó&   — e Zd ZdZdZdZdZdZdZdS )Ú
DimDynamicai  
    Controls how to perform symbol allocation for a dimension.  It is always
    sound to default this to DYNAMIC, but the policies DUCK and STATIC can
    result in better trace-time and compile-time performance, as they reduce
    the number of allocated symbols and generally make your graph more static.

    NB: If we notice you've applied a constraint to the dimension, we will
    force it to DYNAMIC for simplicity.

    DimDynamic is controlled by a variety of higher level UX features.
    Currently:

    - In eager mode, the default policy is DUCK.
        - The default is changed to STATIC with assume_static_by_default.
        - An individual dim is marked DYNAMIC if you mark_dynamic_dim.
    - In export mode, the default policy is STATIC.
        - An individual dim is marked DYNAMIC if you specify it in
          dynamic_shapes passed to export.
    r   rî   r—  é   é   N)	r‰   rŠ   r‹   r—   ÚDYNAMICÚDUCKÚSTATICÚUNBACKEDÚINFER_STRIDEr’   rw   rv   r  r  ¯  s5   € € € € € ðð ð* €Gð €Dà€Fà€Hà€L€L€Lrw   r  c                  ó   — e Zd ZU ded<   dS )Ú
Constraintrr   Ú	warn_onlyN©r‰   rŠ   r‹   rŒ   r’   rw   rv   r  r  â  s   € € € € € € à€O€O�O€O€Orw   r  c                  ó&   — e Zd ZU dZded<   d
d„Zd	S )ÚStrictMinMaxConstrainta-  
    For clients: the size at this dimension must be within 'vr' (which
    specifies a lower and upper bound, inclusive-inclusive) AND it
    must be non-negative and should not be 0 or 1 (but see NB below).

    For backends: there must not be any guards on this dimension which
    are not implied by the given lower and upper bound.  Regardless of
    the lower bound, the backend can assume the size is non-negative
    and that it is not 0 or 1.

    An unbounded StrictMinMaxConstraint can be thought of as a strict version
    of "RelaxedUnspecConstraint".

    NB: Export will often unsoundly assume that a graph works for 0/1, even
    though at trace time we assumed size is not 0 or 1.  The idea is that
    if we produce a graph that works for a range of values, it will be OK
    for N=0/1 too.
    úValueRanges[sympy.Expr]ÚvrrN  r(   rf   r×   c                óH   — | j         j        › d|j        › d| j         j        › �S )zFormat the constrain equationú <= )r%  ÚlowerrZ  Úupper©r‡   rN  s     rv   ÚrenderzStrictMinMaxConstraint.renderþ  s*   € ð ”'”-ÐEÐE V¤[ÐEÐE°d´g´mÐEÐEÐErw   N©rN  r(   rf   r×   )r‰   rŠ   r‹   r—   rŒ   r+  r’   rw   rv   r#  r#  ç  sH   € € € € € € ðð ð&  ÐÐÑðFð Fð Fð Fð Fð Frw   r#  c                  ó   — e Zd ZdZdd„ZdS )	ÚRelaxedUnspecConstrainta  
    For clients: no explicit constraint; constraint is whatever is implicitly
    inferred by guards from tracing.

    For backends: there must exist at least TWO possible values for the
    size at this dimension which satisfy the guards for this dimension.

    In other words, this constraint helps us distinguish between "we don't
    care if this dimension specializes or not" versus "this dimension must be
    unspecialized."  However, this constraint doesn't say very much about what
    specialization is permitted; for example, if we guard on a size being
    even, this would still be acceptable under an unspec constraint.  This
    makes RelaxedUnspecConstraint useful for eager mode, where your backend compiler
    may add constraints to otherwise dynamic dimensions; we can't assert that
    there are NO guards as this is brittle because compilers should be able to
    add extra constraints.  If you want to assert that there are no guards,
    use StrictMinMaxConstraint with an unbounded ValueRanges.
    rN  r(   rf   r×   c                ó   — d|j         › d�S )NzRelaxedUnspecConstraint(rn  r]  r*  s     rv   r+  zRelaxedUnspecConstraint.render  s   € Ø8¨&¬+Ð8Ð8Ð8Ð8rw   Nr,  )r‰   rŠ   r‹   r—   r+  r’   rw   rv   r.  r.    s2   € € € € € ðð ð&9ð 9ð 9ð 9ð 9ð 9rw   r.  c                  ó°   — e Zd ZU dZded<   ded<   ded<   ded	<    ed
¬¦  «        Zded<    ed
¬¦  «        Zded<   d%d„Zd&d„Z	d'd„Z
d(d„Zd)d„Zd*d#„Zd$S )+ÚEqualityConstrainta  
    Represent and decide various kinds of equality constraints between input sources.

    A "source pair" is a pair of input sources for dynamic dimensions that
    are specified equal. We represent `source_pairs` in a union-find forest
    so that we can efficiently check whether two such sources are transitively equal.

    A "derived equality" relates an input source to an expression over a root.
    The root can be another input source, corresponding to some dynamic dimension,
    or a phantom symbol that does not directly represent any dynamic dimension. We
    represent `derived_equalities` involving input sources in a transitively-closed map
    so that we can efficiently check whether an input source is transitively equal to
    a given expression over another input source.
    (NOTE: In contrast, it is easy to decide whether an input source is transitively equal
    to a given expression over a phantom symbol; such expressions are already in canonical
    form and so the problem reduces to symbolic expression equality.)
    zlist[tuple[Source, Source]]Úsource_pairszNlist[tuple[Source, Source | sympy.Symbol, Callable[[sympy.Expr], sympy.Expr]]]Úderived_equalitieszlist[sympy.Symbol]Úphantom_symbolszset[Source]Úrelaxed_sourcesF)Úinitzdict[Source, Source]Ú_parentszdict[Source, sympy.Expr]Ú_defsrf   r‚   c                ó8  — i }t                                | d|¦  «         i }t                                | d|¦  «         | j        D ]A\  }}|                      |                      |¦  «        |                      |¦  «        ¦  «         ŒB| j        D ]Œ\  }}}t          |t          j        t          j	        f¦  «        r' ||¦  «        | j
        |                      |¦  «        <   ŒS ||                      |¦  «        ¦  «        | j
        |                      |¦  «        <   Œ�dS )aê  
        Pre-processing to answer queries `is_equal` and `is_derived` below.

        Example: Suppose we are given:
          source_pairs [a = b, b = c]
          derived_equalities [d = c + 1, e = d - 1]
        We first construct a union find with source_pairs:
          _parents = {a: a, b: a, c: a}
        Then we compute canonical symbolic expressions, recursively applying derived_equalities
        until we bottom out:
          _defs = {d: c + 1, e: (c + 1) - 1 aka c}
        r7  r8  N)rÞ   Ú__setattr__r2  Ú_unionÚ_findr3  rj   rÒ   r¦  rÓ   r8  Ú_rewrite)r‡   r7  r8  Úsource1Úsource2rN  ÚrootÚfns           rv   Ú__post_init__z EqualityConstraint.__post_init__A  s!  € ð  *,ˆÝ×Ò˜4 ¨XÑ6Ô6Ð6ð +-ˆÝ×Ò˜4 ¨%Ñ0Ô0Ð0à $Ô 1ð 	Bð 	BÑˆG�Wà�KŠK˜Ÿ
š
 7Ñ+Ô+¨T¯ZªZ¸Ñ-@Ô-@ÑAÔAÐAÐAØ $Ô 7ð 	Ið 	IÑˆF�D˜"õ ˜$¥¤­u¬}Ð =Ñ>Ô>ð IØ13°°D±´�”
˜4Ÿ:š: fÑ-Ô-Ñ.Ð.à13°°D·M²MÀ$Ñ4GÔ4GÑ1HÔ1H�”
˜4Ÿ:š: fÑ-Ô-Ñ.Ð.ð	Ið 	Irw   rN  r(   c                óX   — || j         v r |                      | j         |         ¦  «        S |S r„   )r7  r<  r*  s     rv   r<  zEqualityConstraint._findd  s-   € à�T”]Ð"Ð"Ø—:’:˜dœm¨FÔ3Ñ4Ô4Ð4àˆMrw   Úroot1Úroot2c                ó*   — ||k    r|| j         |<   d S d S r„   )r7  )r‡   rD  rE  s      rv   r;  zEqualityConstraint._unionk  s$   € à�EŠ>ˆ>Ø#(ˆDŒM˜%Ñ Ð Ð ð ˆ>rw   ÚsrcrÐ   c                óŠ   — |                       |¦  «        }|| j        v r| j        |         S t          j        |j        ¦  «        S r„   )r<  r8  rÒ   r¦  rZ  )r‡   rG  s     rv   r=  zEqualityConstraint._rewritep  s@   € à�jŠj˜‰oŒoˆØ�$”*ÐÐð ”:˜c”?Ð"õ ”< ¤Ñ)Ô)Ð)rw   r>  r?  rr   c                ó¶   — |                       |¦  «        x}| j        v p;|                       |¦  «        x}| j        v p||k    p|                      ||d„ ¦  «        S )Nc                ó   — | S r„   r’   rþ  s    rv   r|  z-EqualityConstraint.is_equal.<locals>.<lambda>„  s   € ¸1€ rw   )r<  r5  Ú
is_derived)r‡   r>  r?  Úsrc1Úsrc2s        rv   Úis_equalzEqualityConstraint.is_equal|  sn   € ð —Z’Z Ñ(Ô(Ð(ˆT¨TÔ-AÐAð >ØŸ
š
 7Ñ+Ô+Ð+�°Ô0DÐDð>à�tŠ|ð>ð �Š˜w¨°°Ñ=Ô=ð	
rw   Ú
symbol_srcrA  ú"Callable[[sympy.Expr], sympy.Expr]c                ól   — |                       |¦  «         ||                       |¦  «        ¦  «        k    S r„   )r=  )r‡   rG  rO  rA  s       rv   rK  zEqualityConstraint.is_derived‡  s1   € ð �}Š}˜SÑ!Ô! R R¨¯ª°jÑ(AÔ(AÑ%BÔ%BÒBÐBrw   Nr  )rN  r(   rf   r(   )rD  r(   rE  r(   rf   r‚   )rG  r(   rf   rÐ   )r>  r(   r?  r(   rf   rr   )rG  r(   rO  r(   rA  rP  rf   rr   )r‰   rŠ   r‹   r—   rŒ   r   r7  r8  rB  r<  r;  r=  rN  rK  r’   rw   rv   r1  r1  #  s  € € € € € € ðð ð$ .Ð-Ð-Ñ-ðð ð ñ ð (Ð'Ð'Ñ'Ø Ð Ð Ñ à%* U°Ð%6Ñ%6Ô%6€HÐ6Ð6Ð6Ñ6Ø&+ e°Ð&7Ñ&7Ô&7€EÐ7Ð7Ð7Ñ7ð!Ið !Ið !Ið !IðFð ð ð ð)ð )ð )ð )ð

*ð 
*ð 
*ð 
*ð	
ð 	
ð 	
ð 	
ðCð Cð Cð Cð Cð Crw   r1  Úsymbolic_contextúTypeGuard[SymbolicContext]c                ó˜   — t          | t          ¦  «        st          d¦  «        ‚t          | ¦  «        t          u rt          d¦  «        ‚dS )NzInvalid symbolic_context objectz%Illegal usage of symbolic_context ABCT)rj   r°   rm   rs   ©rR  s    rv   Ú_assert_symbol_contextrV  Ž  sM   € ÝÐ&­Ñ8Ô8ð @ÝÐ>Ñ?Ô?Ð?ÝÐÑÔ¥Ð0Ð0ÝÐDÑEÔEÐEØˆ4rw   ú/TypeGuard[sympy.Add | sympy.Mul | sympy.Symbol]c                ón  — t          | t          j        t          j        f¦  «        rvt	          | j        ¦  «        dk    rdS | j        \  }}t          |¦  «        rt          |t          j        ¦  «        p(t          |t          j        ¦  «        ot          |¦  «        S t          | t          j        ¦  «        S )Nr—  F)	rj   rÒ   rÕ  rØ  r¡  r�   Ú_is_supported_equivalencerÓ   r¦  )ro   r¥  r©  s      rv   rY  rY  –  s™   € õ �$�œ¥E¤IÐ.Ñ/Ô/ð 
ÝˆtŒy‰>Œ>˜AÒÐØ�5Ø”9‰ˆˆSÝ)¨#Ñ.Ô.ÐQµ:¸cÅ5Ä=Ñ3QÔ3Qð 
Ý�s�EœMÑ*Ô*ÐMÕ/HÈÑ/MÔ/Mð	
õ �d�EœLÑ)Ô)Ð)rw   r   c                óÆ   — |                       t          j        j        j        j        t          j        j        j        j        t          j        j        j        j        ¦  «        S )zL
    Add functions that our sympy interpreter can't reify into FX nodes
    )Úhasrp   ÚutilsÚ_sympyÚ	functionsÚToFloatrI   r@   rr  s    rv   Ú#_has_uninterpretable_sympy_functionr`  ¦  sD   € ð �8Š8ÝŒÔÔ$Ô,ÝŒÔÔ$Ô/ÝŒÔÔ$Ô.ñô ð rw   c                  ó   — e Zd ZdZdS )r°   aT  
    Data structure specifying how we should create symbols in
    ``_create_symbolic_sizes_strides_storage_offset``; e.g., should
    they be static or dynamic.

    This is an abstract base class because we are probably going to add
    another version of this that says "use exactly these SymInts, don't
    allocate fresh symbols."
    Nr–   r’   rw   rv   r°   r°   ±  s   € € € € € ðð ð ð rw   r°   c                  ó   — e Zd ZU dZded<   dS )r´   zE
    Data structure specifying any constraints on a SymInt input
    ÚDimConstraintÚ
constraintNrP  r’   rw   rv   r´   r´   ¾  s*   € € € € € € ðð ð ÐÐÑÐÐrw   r´   Ú_P1Ú_T1c                  óˆ   — e Zd ZU dZded<   dZded<   dZded<   dZded<   dZd	ed
<   dZ	ded<   dZ
ded<   dZded<   dd„ZdS )r±   zÚ
    Create symbols in ``_create_symbolic_sizes_strides_storage_offset`` via
    a symbolic_context determination as given by ``DimDynamic`` and ``DimConstraint``.
    This will cause fresh symbols to be allocated
    zDimList[DimDynamic]Údynamic_sizesNÚdynamic_strideszDimList[DimConstraint]Úconstraint_sizesÚconstraint_stridesz%list[list[Callable[_P1, _T1]]] | NoneÚspecialize_onúSymbolicContext | NoneÚview_base_contextzdict[int, str | None] | NoneÚ	shape_idsz/dict[int, tuple[int | None, int | None]] | NoneÚunbacked_boundsrf   r‚   c                ó<  — | j         €2t                               | dg gt          | j        ¦  «        z  ¦  «         | j        €<t                               | dt          j        gt          | j        ¦  «        z  ¦  «         | j        €2t                               | dd gt          | j        ¦  «        z  ¦  «         | j	        €2t                               | dd gt          | j        ¦  «        z  ¦  «         t          d„ | j        D ¦   «         ¦  «        st          d¦  «        ‚d S )Nrl  ri  rj  rk  c              3  ó`   K  — | ])}|t           j        t           j        t           j        fv V — Œ*d S r„   )r  r  r  r  )r  r·  s     rv   r&  z9StatelessSymbolicContext.__post_init__.<locals>.<genexpr>÷  sJ   è è € ð 
ð 
àð •zÔ.µ
Ô0BÅJÄOÐTÐTð
ð 
ð 
ð 
ð 
ð 
rw   z@dynamic_strides must only contain INFER_STRIDE, DYNAMIC, or DUCK)rl  rÞ   r:  r¡  rh  ri  r  r  rj  rk  r0  rm   rÚ   s    rv   rB  z&StatelessSymbolicContext.__post_init__â  sN  € ØÔÐ%Ý×ÒØØØ�•s˜4Ô-Ñ.Ô.Ñ.ñô ð ð
 ÔÐ'Ý×ÒØØ!ÝÔ(Ð)­C°Ô0BÑ,CÔ,CÑCñô ð ð
 Ô Ð(Ý×ÒØÐ(¨4¨&µ3°tÔ7IÑ3JÔ3JÑ*Jñô ð ð Ô"Ð*Ý×ÒØÐ*¨T¨FµS¸Ô9KÑ5LÔ5LÑ,Lñô ð õ ð 
ð 
àÔ.ð
ñ 
ô 
ñ 
ô 
ð 	õ !ØRñô ð ð		ð 	rw   r  )r‰   rŠ   r‹   r—   rŒ   ri  rj  rk  rl  rn  ro  rp  rB  r’   rw   rv   r±   r±   Ë  s¾   € € € € € € ðð ð 'Ð&Ð&Ñ&Ø+/€OÐ/Ð/Ð/Ñ/Ø/3ÐÐ3Ð3Ð3Ñ3Ø15ÐÐ5Ð5Ð5Ñ5Ø;?€MÐ?Ð?Ð?Ñ?ð 15ÐÐ4Ð4Ð4Ñ4à.2€IÐ2Ð2Ð2Ñ2àGK€OÐKÐKÐKÑKðð ð ð ð ð rw   r±   )rK  rL  Úkw_onlyc                  óN   — e Zd ZU dZded<    ee¬¦  «        Zded<   dZded	<   dS )
r²   a,  
    Create symbols in ``_create_symbolic_sizes_strides_storage_offset`` via
    a symbolic_context determination as given by a cache of Source:Symbol. A cache hit
    will reuse a stored symbol, and a cache miss will write to this cache.

    This behaves like StatelessSymbolicContext, except the cache supersedes the
    other values - dynamic_sizes and constraint_sizes will not be read if we cache
    hit.

    It is the cache owner's responsibility to maintain the lifecycle of the cache
    with respect to different shape_envs, clearing, etc.
    r(   Útensor_source©Údefault_factoryz dict[int, dict[str, sympy.Expr]]Ú#shape_env_to_source_to_symbol_cacheNztuple[int | None, ...] | NoneÚexcluded_sizes)	r‰   rŠ   r‹   r—   rŒ   r   r  rx  ry  r’   rw   rv   r²   r²   	  sr   € € € € € € ðð ð ÐÐÑð MRÈEØðMñ Mô MÐ'ð ð ð ñ ð 59€NÐ8Ð8Ð8Ñ8Ð8Ð8rw   r²   c                  óD   — e Zd ZU dZ ee¬¦  «        Zded<   dZded<   dS )	r³   a  
    The correct symbolic context for a given inner tensor of a traceable tensor subclass
    may differ from that of the outer symbolic context. This structure allows for this
    flexibility, with inner symbolic contexts mapped via attr -> symbolic context.
    rv  zdict[str, SymbolicContext]Úinner_contextsTrr   Útrack_outer_size_strideN)	r‰   rŠ   r‹   r—   r   r  r{  rŒ   r|  r’   rw   rv   r³   r³   5	  sN   € € € € € € ðð ð 27°ÀtÐ1LÑ1LÔ1L€NÐLÐLÐLÑLØ$(ÐÐ(Ð(Ð(Ñ(Ð(Ð(rw   r³   )rL  c                  óB   — e Zd ZU dZded<   ded<   ded<   dd
„Zdd„ZdS )rµ   zh
    Tracks the sources of all fake tensors we wrap in Dynamo.
    Used by shape guard computation.
    zFakeTensor | SymInt | SymFloatÚfaker(   rN  rm  rR  rf   rt   c                óB   — t          | j        | j        j        f¦  «        S r„   )rã   r~  rN  rZ  rÚ   s    rv   rä   zTrackedFake.__hash__L	  s   € Ý�T”Y ¤Ô 0Ð1Ñ2Ô2Ð2rw   rÝ   rÞ   rr   c                ó€   — t          |t          ¦  «        r(| j        |j        u o| j        j        |j        j        k    S dS ©NF)rj   rµ   r~  rN  rZ  rà   s     rv   rá   zTrackedFake.__eq__O	  s=   € Ý�e�[Ñ)Ô)ð 	UØ”9 ¤
Ð*ÐT¨t¬{Ô/?À5Ä<ÔCTÒ/TÐTØˆurw   Nrç   ræ   )r‰   rŠ   r‹   r—   rŒ   rä   rá   r’   rw   rv   rµ   rµ   A	  sk   € € € € € € ðð ð
 )Ð(Ð(Ñ(Ø€N€N�NØ,Ð,Ð,Ñ,ð3ð 3ð 3ð 3ðð ð ð ð ð rw   rµ   ú0int | SymInt | float | SymFloat | bool | SymBoolú&TypeGuard[SymInt | SymFloat | SymBool]c                ó|   — t          | t          t          t          f¦  «        rdS | j                             ¦   «         S r�  )rj   rt   rb  rr   rq   r  rÔ   s    rv   r  r  U	  s6   € õ �#��U¥DÐ)Ñ*Ô*ð ØˆuØŒ8×ÒÑ!Ô!Ð!rw   útuple[sympy.Expr, bool]c                óz  — g }g }| D ]4}|j         r|                     |¦  «         Œ|                     |¦  «         Œ5t          j        |Ž g}|D ]&}d„ t	          j        ||j        ¦  «        D ¦   «         }Œ't          j        |Ž }|t          |¦  «        dk    p%t          |¦  «        dk    ot          |¦  «        dk    fS )a‚  
    Expand products of sums into sums of products.

    This function takes a list of sympy expressions and separates them into
    additive expressions (those with is_Add=True) and other expressions.
    It then computes the distributive product, expanding (a+b)*(c+d) into a*c + a*d + b*c + b*d.

    Args:
        args: A list of sympy expressions to expand

    Returns:
        A tuple containing:
        - The expanded expression as a sympy.Expr
        - A boolean indicating whether expansion occurred (True if multiple additive
          expressions were present or if there was at least one additive and one other expression)
    c                ó   — g | ]
\  }}||z  ‘ŒS r’   r’   )r  rd   rT  s      rv   r  z_expandsums.<locals>.<listcomp>{	  s    € ÐHÐHÐH™D˜A˜q�!�a‘%ÐHÐHÐHrw   rî   r   )	r  rU  rÒ   rØ  r  Úproductr�   rÕ  r¡  )r�   ÚaddsrÝ   r7  r“  rÖ  s         rv   Ú_expandsumsrŠ  `	  sÔ   € ð"  €DØ €EØð ð ˆØŒ:ð 	Ø�KŠK˜ÑÔÐÐà�LŠL˜ÑÔÐÐåŒi˜ÐÐ €FØð Ið IˆØHÐH¥IÔ$5°f¸c¼hÑ$GÔ$GÐHÑHÔHˆˆåŒY˜Ð€FØ•3�t‘9”9˜q’=ÐF¥S¨¡Y¤Y°¢]Ð%Eµs¸5±z´zÀA²~ÐFÐFrw   c                ó¶  — d„ | j         D ¦   «         }t          d„ t          | j         |¦  «        D ¦   «         ¦  «        rt           | j        |Ž ¦  «        S | j        rk| j         \  }}|j        rY|j        rR|dk    rt          j	        | d¬¦  «        S |dk     r0t          j        t          j	        t          j        | z  d¬¦  «        z  S n’| j        r‹g }g }| j         D ]R}|j        r4|j         d         dk    r#|                     t          j        |z  ¦  «         Œ=|                     |¦  «         ŒSt          |¦  «        \  }}t          |¦  «        \  }}|s|r||z  S | S )a°  
    A faster implementation of sympy's expand function for common cases.

    This function expands expressions like (a+b)^n or (a+b)*(c+d) into sums of products,
    but avoids the expensive checks and features of sympy's full expand implementation.
    It only recreates objects when necessary to avoid expensive operations.

    Args:
        expr: A sympy expression to expand

    Returns:
        The expanded expression
    c                ó,   — g | ]}t          |¦  «        ‘ŒS r’   )Ú_fast_expand©r  r7  s     rv   r  z _fast_expand.<locals>.<listcomp>–	  s    € Ð7Ð7Ð7 c•˜SÑ!Ô!Ð7Ð7Ð7rw   c              3  ó$   K  — | ]\  }}||uV — Œd S r„   r’   )r  r7  Únew_args      rv   r&  z_fast_expand.<locals>.<genexpr>˜	  s+   è è € Ð
KÐ
K¡, # wˆ3�gÐÐ
KÐ
KÐ
KÐ
KÐ
KÐ
Krw   rî   F)Údeepr   rS  )r�   Úanyr€  r�  ÚfuncÚis_Powrû  r  rÒ   Úexpand_multinomialr   r
  rý  rU  rŠ  )	ro   Únew_argsÚbaseÚexpÚnumÚdenr7  Únum_changedÚden_changeds	            rv   r�  r�  �	  s‚  € ð* 8Ð7¨T¬YÐ7Ñ7Ô7€Hå
Ð
KÐ
Kµ#°d´iÀÑ2JÔ2JÐ
KÑ
KÔ
KÑKÔKð 2å˜I˜DœI xÐ0Ñ1Ô1Ð1ð „{ð ð ”I‰	ˆˆcØŒ>ð 	R˜dœkð 	RØ�QŠwˆwÝÔ/°¸5ÐAÑAÔAÐAØ�q’�Ý”u�uÔ7½¼À¹È5ÐQÑQÔQÑQÐQøà	Œð Ø "ˆØ "ˆà”9ð 	 ð 	 ˆCØŒzð  ˜cœh qœk¨RÒ/Ð/Ø—
’
�1œ5 3™;Ñ'Ô'Ð'Ð'à—
’
˜3‘”��å& sÑ+Ô+Ñˆˆ[Ý& sÑ+Ô+Ñˆˆ[Øð 	˜+ð 	Ø˜‘9Ðà€Krw   é   rI  c                ó    — t          | d¦  «        r=	 t          | ¦  «        S # t          $ r  t                               d| ¦  «         | cY S w xY w| S )a£  
    Expand the given symbolic expression by recursively rewriting product of
    sums into sum of products (with the product being either a multiplication or
    exponentiation).

    NOTE: using this on an intermediate expression may prevent simplification
    down the line, e.g., if we eagerly expand `(a + b)^2` into `a^2 + 2ab + b^2`,
    we won't be able to simplify `(a^2 + 2ab + b^2) / (a + b)` as easily.
    Úexpandz"RecursionError in _fast_expand(%s))Úhasattrr�  ÚRecursionErrorrÇ   r¨  )rI  s    rv   Úsafe_expandr¢  ¹	  sg   € õ ˆq�(ÑÔð ð	Ý ‘?”?Ð"øÝð 	ð 	ð 	Ý�KŠKÐ<¸aÑ@Ô@Ð@ØˆHˆHˆHð	øøøð ˆs   ’! ¡'AÁ
Ac                  ó8   — e Zd ZU ded<   ded<   ded<   ded<   d	S )
Ú_SymbolInforˆ  rŒ  zValueRanges[sympy.Expr] | Noner%  zsympy.Integer | NonerÏ   rr   Úis_size_likeNr!  r’   rw   rv   r¤  r¤  Î	  s?   € € € € € € Ø€O€O�OØ&Ð&Ð&Ñ&ØÐÐÑØÐÐÑÐÐrw   r¤  Úsymbol_infoútuple[_SymbolInfo, ...]Úunbacked_onlyr·  ú_SympyT | Nonec                óH  — i }i }t          |¦  «        D ]õ\  }}|\  }}	}
}t          |
t          ¦  «        rŒ"|	€t          d|› �¦  «        ‚|rN|rLt	          d|	j        ¦  «        }t          d|	j        ¦  «        }||k    r|dz
  }||k    rt          ||¦  «        }	n|	j        }|t           u s|r|
€|	j
        s|	||<   Œ¨t          j        d|› �dd¬¦  «        }t          |dz
  ¦  «        }||z   ||<   t          j        |	| ¦  «        ||<   Œö	 |                      |¦  «        }n-# t"          $ r  t$                               d	| |¦  «         Y dS w xY wt)          t+          |¦  «        ¦  «        }|j        r|S t/          ||¦  «        }|                     ¦   «         r|j        S |r|ndS )
a  
    This variant of ShapeEnv._maybe_evaluate_static has no dependence on
    ShapeEnv and thus can be cached indefinitely.  It does the "heavy" lifting
    for static evaluation, including nontrivial reliance on Sympy simplification
    that occurs when we reallocate the symbols
    Nzvr must not be None for symbol r—  l          rî   Úevaluate_static_shape_T©ÚpositiveÚintegerz(RecursionError in sympy.xreplace(%s, %s))Ú	enumeraterj   rN   rm   rá  r(  rà  r)  rW   rJ   Úis_intrÒ   r¦  rt   rU   rÖ  Úxreplacer¡  rÇ   r¨  r¤   r¢  r.  rT   rk  )ro   r¦  r¨  r·  Únew_shape_envÚnew_range_envÚidxÚsinforŒ  r%  rÏ   r¥  r(  r)  r  ÚoffsetÚnew_exprÚouts                     rv   Ú_maybe_evaluate_static_workerr¹  Õ	  s  € ð  €MØ€MÝ Ñ,Ô,ð :Dð :D‰
ˆˆUØ#(Ñ ˆˆ2ˆs�LÝ�c�<Ñ(Ô(ð 	ð Øˆ:Ý Ð!FÀ1Ð!FÐ!FÑGÔGÐGØð 	˜lð 	Ý˜˜2œ8Ñ$Ô$ˆEõ ˜˜rœxÑ(Ô(ˆEà�uŠ}ˆ}Ø ™	�ð ˜Š~ˆ~Ý  ¨Ñ.Ô.�øà”HˆEð •V�GÐÐ Ð°#°/È"Ì)°/Ø!ˆM˜!ÑØõ ŒLÐ7°#Ð7Ð7À$ÐPTÐUÑUÔUˆõ �U˜Q‘Y‘”ˆØ˜v™:ˆ�aÑÝ2Ô6°r¸F¸7ÑCÔCˆ�aÑÐðà—=’= Ñ/Ô/ˆˆøÝð ð ð Ý�ŠÐ>ÀÀmÑTÔTÐTØˆtˆtðøøøõ &¥k°(Ñ&;Ô&;Ñ<Ô<€HØÔð Øˆõ �h Ñ
.Ô
.€CØ
×ÒÑÔð ØŒyÐà$Ð.ˆ8ˆ8¨$Ð.s   ÄD! Ä!&EÅ
Er   c                 ó    — t          d¦  «        ‚)Nzshouldn't be hit©rm   r’   rw   rv   Úerrorr¼  :
  s   € Ý
Ð+Ñ
,Ô
,Ð,rw   ÚsizesúSequence[int]rW  c                óV   — t          t          t          | |¦  «        ¦  «        ¦  «        S r„   )rt   r»  Ú"_eval_is_non_overlapping_and_dense)r½  rW  s     rv   Ú!eval_is_non_overlapping_and_denserÁ  ?
  s%   € õ �zÕ<¸UÀGÑLÔLÑMÔMÑNÔNÐNrw   c                ó   — t          | ¦  «        }|dk    r|d         dk    p| d         dk     S t          t          | |¦  «        t          j        d¦  «        ¬¦  «        }d}|D ]\  }}|dk    rŒ||k    r dS ||z  }ŒdS )aâ  
    Evaluates whether a tensor with the given sizes and strides is non-overlapping and dense.

    A tensor is non-overlapping if there's no memory location that belongs to more than one element.
    A tensor is dense if all elements are stored in memory without gaps.

    Args:
        sizes: Sequence of dimension sizes for the tensor
        strides: Sequence of strides for the tensor

    Returns:
        True if the tensor is non-overlapping and dense, False otherwise
    rî   r   r—  ©ÚkeyFT)r¡  Úsortedr€  rÎ  Ú
itemgetter)r½  rW  rX  Úlengths_and_stridesÚexpected_strideÚlengthr·  s          rv   rÀ  rÀ  E
  s¨   € õ  ˆe‰*Œ*€Cð
 ˆa‚x€xØ�qŒz˜QŠÐ. %¨¤(¨Q¢,Ð.õ !¥ U¨GÑ!4Ô!4½(Ô:MÈaÑ:PÔ:PÐQÑQÔQÐð €OØ-ð "ð "‰ˆ�Ø�QŠ;ˆ;Øà�_Ò$Ð$Ø�5�5à˜6Ñ!ˆˆàˆ4rw   c                ó0   — t          j        d| fd¦  «        S )Nrî   r˜  )rÒ   r   rþ  s    rv   rª  rª  p
  s   € ÝŒ?˜A˜q˜6 9Ñ-Ô-Ð-rw   Úsymboolúbool | torch.SymBoolúint | torch.SymIntc                óè   — t          | t          ¦  «        r| rdndS t          | j        j        ¦  «        }| j        j                             |t          | ¦  «        rt          | ¦  «        nd¬¦  «        S )a   
    Converts a SymBool or bool to a SymInt or int without introducing guards.

    This function maps True to 1 and False to 0, preserving the symbolic nature
    of the input when it's a SymBool. Unlike regular casting which might introduce
    guards, this function performs the conversion without adding any guards.

    Args:
        symbool: A boolean value, either a concrete bool or symbolic SymBool

    Returns:
        The corresponding integer value (1 for True, 0 for False) as either
        a concrete int or symbolic SymInt
    rî   r   N©ru   )	rj   rr   rª  rq   ro   rl   r‹  r]  rn   )rË  Úint_syms     rv   rV  rV  t
  s{   € õ" �'�4Ñ Ô ð #ØÐ"ˆqˆq Ð"Ý5°g´lÔ6GÑHÔH€GØŒ<Ô!×3Ò3ØÝ0AÀ'Ñ0JÔ0JÐTÕ# GÑ,Ô,Ð,ÐPTð 4ñ ô ð rw   c                 óš   — t          | ¦  «        dz  }t          t          | d |…         ¦  «        t          | |d …         ¦  «        ¦  «        S )Nr—  )r¡  rÁ  rV  )r�   rX  s     rv   Ú'_eval_is_non_overlapping_and_dense_flatrÒ  Ž
  sC   € õ ˆd‰)Œ)�q‰.€CÝ,­T°$°t¸°t´*Ñ-=Ô-=½tÀDÈÈÈÄJÑ?OÔ?OÑPÔPÐPrw   )rE   rV  r  rp   rA  rõ   rö   c                ó  ‡‡‡—  t          |¦  «        | ¦  «        ŠdŠt          j        r%dŠt          j        | ¦  «        dˆˆˆfd
„¦   «         }n!t          j        | ¦  «        dˆˆfd„¦   «         }‰j        |_        ‰j        |_        |S )a¯  
    Wrapper around lru_cache that clears when new info about shapes has been
    updated.

    Use lru_cache if the output is always the same, regardless of the
    constraints we know now (i.e. evaluate_expr)

    Use _lru_cache otherwise.

    Also note that this depends on _update_version_counter being called on the
    shape environment whenever the constraints are updated, otherwise the cache
    will not be cleared.
    r   Nr‡   rœ   r�   r   Úkwargsrf   rÌ   c                ó  •— ‰€|                       ¦   «         Š‰| j        k    r0‰                     ¦   «          | j        Š|                       ¦   «         Šn'‰|                       ¦   «         k    rt          d¦  «        ‚ ‰| g|¢R i |¤ŽS )Nz9ShapeEnv cache key changed without version being updated!)Ú_get_keyÚ_version_counterr  rm   )r‡   r�   rÔ  Úfn_cacheÚ	prior_keyÚprior_versions      €€€rv   Úwrapperz_lru_cache.<locals>.wrapper´
  s™   ø€ ð Ð Ø ŸMšM™OœO�	à Ô 5Ò5Ð5Ø×$Ò$Ñ&Ô&Ð&Ø $Ô 5�Ø ŸMšM™OœO�	�	à §¢¡¤Ò/Ð/Ý(ØSñô ð ð �8˜DÐ2 4Ð2Ð2Ð2¨6Ð2Ð2Ð2rw   c                óh   •— ‰| j         k    r‰                     ¦   «          | j         Š ‰| g|¢R i |¤ŽS r„   )r×  r  )r‡   r�   rÔ  rØ  rÚ  s      €€rv   rÛ  z_lru_cache.<locals>.wrapperÈ
  sM   ø€ ð  Ô 5Ò5Ð5Ø×$Ò$Ñ&Ô&Ð&Ø $Ô 5�à�8˜DÐ2 4Ð2Ð2Ð2¨6Ð2Ð2Ð2rw   )r‡   rœ   r�   r   rÔ  r   rf   rÌ   )r  ÚconfigÚvalidate_shape_env_version_keyrû   Úwrapsr  rú   )rA  rñ   rÛ  rØ  rÙ  rÚ  s      @@@rv   Ú
_lru_cacherà  ž
  sÌ   øøø€ ð  "�y˜Ñ!Ô! "Ñ%Ô%€HØ€MåÔ,ð 3Øˆ	å	Œ˜Ñ	Ô	ð	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ñ 
Ô	ð	3ð 	3õ& 
Œ˜Ñ	Ô	ð	3ð 	3ð 	3ð 	3ð 	3ð 	3ñ 
Ô	ð	3ð #Ô.€GÔØ!Ô,€GÔØ€Nrw   c                  ób   — e Zd ZU dZded<    ed¬¦  «        Zded<    ed¬¦  «        Zded	<   d
S )ÚRuntimeAsserta  
    This is pretty similar to ShapeGuard but it also comes with a message,
    and is exclusively used for things that MUST be true (unlike guards,
    which can evaluate False, in which case you just choose not to use
    a particular specialization)
    rË   ro   F)rÙ   r×   r°  rX   ÚstackN)r‰   rŠ   r‹   r—   rŒ   r   r°  rã  r’   rw   rv   râ  râ  Ö
  sf   € € € € € € ðð ð ÐÐÑØˆu˜%Ð Ñ Ô €CÐ Ð Ð Ñ Ø$˜u¨%Ð0Ñ0Ô0€EÐ0Ð0Ð0Ñ0Ð0Ð0rw   râ  c                  ó   — e Zd Zdd„ZdS )ÚSymExprPrinterro   úsympy.Floatrf   r×   c                ó:   — t          t          |¦  «        ¦  «        S r„   ©r×   rb  ©r‡   ro   s     rv   Ú_print_FloatzSymExprPrinter._print_Floatæ
  s   € Ý•5˜‘;”;ÑÔÐrw   N©ro   ræ  rf   r×   )r‰   rŠ   r‹   rê  r’   rw   rv   rå  rå  å
  s(   € € € € € ð ð  ð  ð  ð  ð  rw   rå  c                  óx   ‡ — e Zd ZdZdˆ fd	„Zdd„Zdd„Zej        dd„¦   «         Z	ej        dd„¦   «         Z
ˆ xZS )Ú_ShapeGuardPrintera]  
    Abstract base class for printers that convert symbolic expressions to string representations.

    This class provides common functionality for printing symbolic expressions with
    special handling for symbols that represent tensor shapes, strides, etc.
    Subclasses implement specific formatting for different output languages.

    Args:
        symbol_to_source: Mapping from sympy symbols to their source objects
        source_ref: Function to convert a source to its string representation
        var_to_sources: Mapping from sympy symbols to their source objects (for error reporting)
    Úsymbol_to_sourceú#Mapping[sympy.Symbol, list[Source]]Ú
source_refúCallable[[Source], str]r�  rf   r‚   c                ór   •— || _         || _        || _        t          ¦   «                              ¦   «          d S r„   )rî  rð  r�  r…   r†   )r‡   rî  rð  r�  rˆ   s       €rv   r†   z_ShapeGuardPrinter.__init__ø
  s8   ø€ ð !1ˆÔØ$ˆŒØ,ˆÔÝ‰Œ×ÒÑÔÐÐÐrw   ro   ræ  r×   c                ó:   — t          t          |¦  «        ¦  «        S )z>Convert a sympy Float to a Python float string representation.rè  ré  s     rv   rê  z_ShapeGuardPrinter._print_Float  s   € å•5˜‘;”;ÑÔÐrw   rˆ  c           	     óÀ  — t          |t          j        ¦  «        st          dt	          |¦  «        › �¦  «        ‚| j                             |¦  «        x}r|                      |d         ¦  «        S | j                             |¦  «        x}r|                      |d         ¦  «        S dd„}t          |› d || j        ¦  «        › d	 || j        ¦  «        › d
�¦  «        ‚)an  
        Convert a sympy Symbol to its source representation.

        This method looks up the symbol in symbol_to_source mapping and returns
        the string representation of its first source. If the symbol is not in
        symbol_to_source (which can happen when symbols appear in guard expressions
        through simplification or substitution), it falls back to var_to_sources.

        Args:
            expr: The sympy Symbol to convert

        Returns:
            String representation of the symbol's source

        Raises:
            AssertionError: If the symbol is not found in either mapping
        úExpected sympy.Symbol, got r   rG  rï  rf   r×   c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc                ó.   — i | ]\  }}|d „ |D ¦   «         “ŒS )c                ó   — g | ]	}|j         ‘Œ
S r’   r]  r;  s     rv   r  zU_ShapeGuardPrinter._print_Symbol.<locals>.repr_sources.<locals>.<dictcomp>.<listcomp>&  s   € Ð 9Ð 9Ð 9¨A ¤Ð 9Ð 9Ð 9rw   r’   )r  ÚsymbolÚsourcess      rv   rŽ  zJ_ShapeGuardPrinter._print_Symbol.<locals>.repr_sources.<locals>.<dictcomp>%  s=   € ð ð ð á+˜F Gð Ð 9Ð 9°Ð 9Ñ 9Ô 9ðð ð rw   )rÙ   r�  )rG  s    rv   Úrepr_sourcesz6_ShapeGuardPrinter._print_Symbol.<locals>.repr_sources#  s8   € Ýðð à/2¯yªy©{¬{ðñ ô ñô ð rw   ú not in ú or z\.  This could be due to the issue described in https://github.com/pytorch/pytorch/pull/90665N)rG  rï  rf   r×   )
rj   rÒ   r¦  rm   rs   rî  r‹  Úprint_sourcer�  ÚRuntimeError)r‡   ro   rN  rû  s       rv   Ú_print_Symbolz _ShapeGuardPrinter._print_Symbol  s  € õ$ ˜$¥¤Ñ-Ô-ð 	MÝ Ð!K½tÀD¹z¼zÐ!KÐ!KÑLÔLÐLð Ô*×.Ò.¨tÑ4Ô4Ð4ˆ6ð 	Ø×$Ò$ V¨A¤YÑ/Ô/Ð/ØÔ*×.Ò.¨tÑ4Ô4Ð4ˆVð 	Ø×$Ò$ V¨A¤YÑ/Ô/Ð/ðð ð ð õ Øð Wð W  ¨dÔ.CÑ!DÔ!Dð Wð WØ�< Ô 3Ñ4Ô4ðWð Wð Wñô ð rw   rN  r(   c                ó   — dS )zÉ
        Convert a source object to its string representation.

        Args:
            source: The source object to convert

        Returns:
            String representation of the source
        Nr’   r*  s     rv   rþ  z_ShapeGuardPrinter.print_source1  ó	   € ð 	ˆrw   rÐ   c                ó   — dS )zÑ
        Convert a sympy expression to its string representation.

        Args:
            expr: The sympy expression to convert

        Returns:
            String representation of the expression
        Nr’   ré  s     rv   Údoprintz_ShapeGuardPrinter.doprint>  r  rw   )rî  rï  rð  rñ  r�  rï  rf   r‚   rë  ©ro   rˆ  rf   r×   r,  ©ro   rÐ   rf   r×   )r‰   rŠ   r‹   r—   r†   rê  r   ÚabcÚabstractmethodrþ  r  r�   rŽ   s   @rv   rí  rí  ê
  s¸   ø€ € € € € ðð ð	ð 	ð 	ð 	ð 	ð 	ð ð  ð  ð  ð(ð (ð (ð (ðT 	Ôð
ð 
ð 
ñ Ôð
ð 	Ôð
ð 
ð 
ñ Ôð
ð 
ð 
ð 
ð 
rw   rí  c                  ó4   ‡ — e Zd ZdZdˆ fd„Zdd
„Zdd„Zˆ xZS )ÚShapeGuardPythonPrintera“  
    Python printer for shape guards that extends the base ShapeGuardPrinter.

    This class provides functionality to print symbolic expressions as Python code,
    with caching to improve performance when printing the same expressions multiple times.
    It handles printing of sources and expressions according to Python syntax.

    Args:
        *args: Arguments passed to the parent classes.
    r�   r   rf   r‚   c                óB   •—  t          ¦   «         j        |Ž  i | _        d S r„   )r…   r†   Ú_print_cache©r‡   r�   rˆ   s     €rv   r†   z ShapeGuardPythonPrinter.__init__X  s%   ø€ Ø�‰ŒÔ˜$ÐÐØ35ˆÔÐÐrw   rN  r(   r×   c                ó,   — |                       |¦  «        S )zç
        Convert a source object to its string representation using the source_ref function.

        Args:
            source: The source object to convert

        Returns:
            String representation of the source
        )rð  r*  s     rv   rþ  z$ShapeGuardPythonPrinter.print_source\  s   € ð �Š˜vÑ&Ô&Ð&rw   ro   rÐ   c                ó‚   — | j                              |d¦  «        }|�|S t          j        | |¦  «        }|| j         |<   |S )aÌ  
        Convert a sympy expression to its Python string representation with caching.

        This method first checks if the expression is already in the cache.
        If found, it returns the cached result; otherwise, it delegates to
        PythonPrinter's doprint method and caches the result.

        Args:
            expr: The sympy expression to convert

        Returns:
            String representation of the expression in Python syntax
        N)r  r‹  rL   r  )r‡   ro   rÏ   Úress       rv   r  zShapeGuardPythonPrinter.doprinth  sJ   € ð Ô×#Ò# D¨$Ñ/Ô/ˆØˆ?ØˆJåÔ'¨¨dÑ3Ô3ˆCØ&)ˆDÔ˜dÑ#ØˆJrw   ©r�   r   rf   r‚   r,  r  )r‰   rŠ   r‹   r—   r†   rþ  r  r�   rŽ   s   @rv   r
  r
  L  so   ø€ € € € € ð	ð 	ð6ð 6ð 6ð 6ð 6ð 6ð
'ð 
'ð 
'ð 
'ðð ð ð ð ð ð ð rw   r
  zœ`torch.fx.experimental.symbolic_shapes.ShapeGuardPrinter` is deprecated, please use `torch.fx.experimental.symbolic_shapes.ShapeGuardPythonPrinter` instead.c                  ó   — e Zd ZdS )ÚShapeGuardPrinterNr‘   r’   rw   rv   r  r    s   € € € € € ð 	€Drw   r  c                  ó0   ‡ — e Zd Zdˆ fd„Zdd	„Zdd„Zˆ xZS )Ú_ShapeGuardCppPrinterr�   r   rf   r‚   c                óh   •— t          ¦   «         | _        i | _         t          ¦   «         j        |Ž  d S r„   )rA  Úall_symbolsÚsource_to_symbolr…   r†   r  s     €rv   r†   z_ShapeGuardCppPrinter.__init__‰  s1   ø€ Ý%(¡U¤UˆÔØ<>ˆÔØ�‰ŒÔ˜$ÐÐÐÐrw   rN  r(   r×   c                ó&  — || j         v r| j         |         j        S |j        }t          j        dd|¦  «        }|}d}|| j        v r|› d|› �}|dz  }|| j        v °t          j        |¦  «        | j         |<   | j                             |¦  «         |S )Nz[^0-9a-zA-Z_]+r›  r   rî   )r  rZ  Úrer�  r  rÒ   r¦  rÖ  )r‡   rN  Úsource_nameÚmangled_nameÚold_mangled_nameÚcounts         rv   rþ  z"_ShapeGuardCppPrinter.print_sourceŽ  s·   € Ø�TÔ*Ð*Ð*ØÔ(¨Ô0Ô5Ð5à”kˆÝ”vÐ.°°[ÑAÔAˆØ'ÐØˆØ˜dÔ.Ð.Ð.Ø.Ð8Ð8°Ð8Ð8ˆLØ�Q‰JˆEð ˜dÔ.Ð.Ð.õ ).¬°\Ñ(BÔ(BˆÔ˜fÑ%ØÔ×Ò˜\Ñ*Ô*Ð*ØÐrw   ro   rÐ   c                ó,   — t          j        | |¦  «        S r„   )rK   r  ré  s     rv   r  z_ShapeGuardCppPrinter.doprint�  s   € ÝÔ! $¨Ñ-Ô-Ð-rw   r  r,  r  )r‰   rŠ   r‹   r†   rþ  r  r�   rŽ   s   @rv   r  r  ˆ  se   ø€ € € € € ð ð  ð  ð  ð  ð  ð
ð ð ð ð.ð .ð .ð .ð .ð .ð .ð .rw   r  c                  ó   — e Zd ZU ded<   dS )Ú_ShapeGuardsHelperr  ÚexprsNr!  r’   rw   rv   r!  r!  ¢  s   € € € € € € àÐÐÑÐÐrw   r!  c                  ó   — e Zd ZU ded<   dS )Ú_CppShapeGuardsHelperzdict[Source, sympy.Symbol]r  Nr!  r’   rw   rv   r$  r$  ¨  s   € € € € € € à0Ð0Ð0Ñ0Ð0Ð0rw   r$  c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚLoggingShapeGuardPrinterr�  rï  rf   r‚   c                óP   •— t          ¦   «                              |d„ |¦  «         d S )Nc                ó   — | j         S r„   r]  ©r‘  s    rv   r|  z3LoggingShapeGuardPrinter.__init__.<locals>.<lambda>¯  s   € °1´6€ rw   )r…   r†   )r‡   r�  rˆ   s     €rv   r†   z!LoggingShapeGuardPrinter.__init__®  s)   ø€ Ý‰Œ×Ò˜Ð)9Ð)9¸>ÑJÔJÐJÐJÐJrw   )r�  rï  rf   r‚   )r‰   rŠ   r‹   r†   r�   rŽ   s   @rv   r&  r&  ­  sG   ø€ € € € € ðKð Kð Kð Kð Kð Kð Kð Kð Kð Krw   r&  c                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )ÚDynamicDimConstraintPrinterzý
    Printer for dynamic dim constraints.
    - Instead of symbol s_k it prints its source t.size()[i]
    - Instead of Eq(_, _), Mod(_, _), etc. it prints _ == _, _ % _, etc.

    We use this to suggest code for specifying dynamic dim constraints.
    rî  ú dict[sympy.Symbol, list[Source]]Úsource_name_to_debug_nameúMapping[str, str]rf   r‚   c                ód   •— t          ¦   «                              ¦   «          || _        || _        d S r„   )r…   r†   rî  r-  )r‡   rî  r-  rˆ   s      €rv   r†   z$DynamicDimConstraintPrinter.__init__»  s1   ø€ õ
 	‰Œ×ÒÑÔÐØ 0ˆÔØ)BˆÔ&Ð&Ð&rw   ro   rˆ  r×   c                óþ   — t          |t          j        ¦  «        st          dt	          |¦  «        › �¦  «        ‚| j                             |¦  «        st          d|› d�¦  «        ‚| j        |         d         j        S )Nrõ  zUnknown symbol z created by constraints solverr   )rj   rÒ   r¦  rm   rs   rî  r‹  rZ  ré  s     rv   r   z)DynamicDimConstraintPrinter._print_SymbolÄ  s~   € Ý˜$¥¤Ñ-Ô-ð 	MÝ Ð!K½tÀD¹z¼zÐ!KÐ!KÑLÔLÐLØÔ$×(Ò(¨Ñ.Ô.ð 	YÝ Ð!W°4Ð!WÐ!WÐ!WÑXÔXÐXØÔ$ TÔ*¨1Ô-Ô2Ð2rw   )rî  r,  r-  r.  rf   r‚   r  ©r‰   rŠ   r‹   r—   r†   r   r�   rŽ   s   @rv   r+  r+  ²  sa   ø€ € € € € ðð ðCð Cð Cð Cð Cð Cð3ð 3ð 3ð 3ð 3ð 3ð 3ð 3rw   r+  c                  óš   — e Zd ZdZd9d„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ed@d!„¦   «         ZdAd#„ZdBd'„ZdCd)„ZdDd.„ZdEd7„Zd8S )FÚDimConstraintsz’
    Custom solver for a system of constraints on symbolic dimensions.
    Solutions are "static" values or simplified "dynamic" constraints.
    rî  r,  Ú
var_to_valú$Mapping[sympy.Symbol, sympy.Integer]Úmarked_dynamicúset[sympy.Symbol]r-  r.  rf   r‚   c                óØ  — t          t          ¦  «        | _        t          ¦   «         | _        i | _        || _        t          t          ¦  «        | _        t          ¦   «         | _        g | _        t          ¦   «         | _	        t          ¦   «         | _
        t          ||¦  «        | _        g | _        || _        t          t           t"          t$          h| _        |                      ¦   «          d S r„   )r	   rA  Ú_univariate_inequalitiesÚ_symbols_with_equalitiesÚ_substitutionsÚ_var_to_valÚ_congruencesÚ_multivariate_inequalitiesÚ_symbolic_equivalencesÚ_static_resultsÚ_dynamic_resultsr+  Ú_dcpÚ_inconsistenciesÚ_marked_dynamicr?   rG   rH   rB   Ú_supported_sympy_functionsÚ_enumerate_sympy_functions)r‡   rî  r4  r6  r-  s        rv   r†   zDimConstraints.__init__Ò  sã   € õ �ÑÔð 	Ô%õ <?¹5¼5ˆÔ%ð BDˆÔð BLˆÔÝHSÕTWÑHXÔHXˆÔõ >A¹U¼UˆÔ'ð HJˆÔ#õ
 *-©¬ˆÔÝ*-©%¬%ˆÔõ 0ØÐ7ñ
ô 
ˆŒ	ð
 ,.ˆÔð  .ˆÔõ ÝÝÝð	@
ˆÔ'ð 	×'Ò'Ñ)Ô)Ð)Ð)Ð)rw   r  rˆ  ro   rÍ   c                ód  ‡ ‡— dˆˆ fd„}dˆˆ fd„}|                      t          ¦  «        r|                     t          |¦  «        }|                      t          ¦  «        r|                     t          |¦  «        }|                      t          ¦  «        r|                     t          |¦  «        }|S )aA  
        Eliminate expressions of the form b // d and b % d while adding congruences of the form b % d == k.
        This leaves rational operators (in particular of the form b / d) that our inequality solver can handle.
        We solve the added congruences separately (using our congruence solver, see below).
        r�   rÐ   rf   c                 ó0  •— | \  }}‰                      ‰|¦  «        ‰                      ‰|¦  «        }}|                     ‰j        ¦  «        |                     ‰j        ¦  «        z  }||z
  |z  }|dk    r ‰j        ‰                              |¦  «         |S rå  ©Úrewrite_with_congruencesr±  r<  r=  rÖ  ©r�   r—  rl  Úmod_reducedÚ
congruencer  r‡   s        €€rv   Úmod_handlerz<DimConstraints.rewrite_with_congruences.<locals>.mod_handler  sª   ø€ ð0 !‰MˆD�'à×-Ò-¨a°Ñ6Ô6Ø×-Ò-¨a°Ñ9Ô9ð ˆDð Ÿ-š-¨Ô(8Ñ9Ô9¸G×<LÒ<LØÔ ñ=ô =ñ ˆKð  Ñ,°Ñ7ˆJØ˜QŠˆØÔ! !Ô$×(Ò(¨Ñ4Ô4Ð4ØÐrw   c                 ó<  •— | \  }}‰                      ‰|¦  «        ‰                      ‰|¦  «        }}|                     ‰j        ¦  «        |                     ‰j        ¦  «        z  }||z
  |z  }|dk    r ‰j        ‰                              |¦  «         ||z
  |z  S rå  rI  rK  s        €€rv   Úfloor_div_handlerzBDimConstraints.rewrite_with_congruences.<locals>.floor_div_handler;  s¶   ø€ ð !‰MˆD�'à×-Ò-¨a°Ñ6Ô6Ø×-Ò-¨a°Ñ9Ô9ð ˆDð Ÿ-š-¨Ô(8Ñ9Ô9¸G×<LÒ<LØÔ ñ=ô =ñ ˆKð  Ñ,°Ñ7ˆJØ˜QŠˆØÔ! !Ô$×(Ò(¨Ñ4Ô4Ð4ð ˜;Ñ&¨'Ñ1Ð1rw   )r�   rÐ   rf   rÐ   )r[  rG   ÚreplacerH   rB   )r‡   r  ro   rN  rP  s   ``   rv   rJ  z'DimConstraints.rewrite_with_congruences  sÈ   øø€ ð#	ð #	ð #	ð #	ð #	ð #	ð #	ðJ	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð0 �8Š8•C‰=Œ=ð 	2à—<’<¥ [Ñ1Ô1ˆDð �8Š8•IÑÔð 	8à—<’<¥	¨;Ñ7Ô7ˆDà�8Š8•HÑÔð 	=à—<’<¥Ð*;Ñ<Ô<ˆDØˆrw   c                ó.  — t           j        j        j        }t	          ¦   «         }t          |¦  «        D ]A}t          t          ||¦  «        x}t          j	        ¦  «        r| 
                    |¦  «         ŒB|                     | j        ¦  «        | _        d S r„   )rp   r\  r]  r^  rA  Údirrj   r`  rÒ   ÚFunctionClassrÖ  Ú
differencerE  Ú_unsupported_sympy_functions)r‡   ÚmoduleÚall_functionsrœ  r“  s        rv   rF  z)DimConstraints._enumerate_sympy_functionsb  sŠ   € Ý”Ô#Ô-ˆÝ™œˆÝ˜‘K”Kð 	(ð 	(ˆDÝ¥'¨&°$Ñ"7Ô"7Ð7˜$½Ô9LÑMÔMð (Ø×!Ò! $Ñ'Ô'Ð'øØ,9×,DÒ,DØÔ+ñ-
ô -
ˆÔ)Ð)Ð)rw   r   rr   c                ó    —  |j         | j        Ž S )z^
        Tracks list of sympy.Functions the export solver doesn't know how to handle.
        )r[  rV  ré  s     rv   Ú_has_unsupported_sympy_functionz.DimConstraints._has_unsupported_sympy_functionl  s   € ð ˆtŒx˜Ô:Ð;Ð;rw   rË   c                ó  — |t           j        k    rdS |}|                     | j        ¦  «        }|t           j        k    r| j                             |› d�¦  «         t          |t           j        t           j	        t           j
        f¦  «        s|                      |¦  «        rdS |j        }|st          d|› �¦  «        ‚t          |¦  «        dk    r| j                             |¦  «         �nt#          t%          |¦  «        ¦  «        }t          | j        |         ¦  «        }|                      ||¦  «        }t          | j        |         ¦  «        }|t           j        k    r||k    S |                     | j        ¦  «        }|t           j        k    r | j                             |› d|› d�¦  «         t          |t           j        ¦  «        r| j                             |¦  «         | j        |                              |¦  «         dS )z’Add an expression to the set of constraints.

        Return whether the expression is a trivial constraint (i.e., an obvious tautology).
        Tz is inconsistent!Fz2Did not expect constraint with no free variables: rî   z, obtained by rewriting z# with congruences, is inconsistent!)rÒ   Útruer±  r<  ÚfalserC  rU  rj   rÉ  rÇ  rÆ  rZ  r¦   rm   r¡  r>  rÖ  r'  Úiterr=  rJ  r¤  r:  r9  )	r‡   ro   Ú	orig_exprÚorig_reducedr¦   r  Úold_n_congruencesÚnew_n_congruencesÚreduceds	            rv   rÖ  zDimConstraints.addr  s  € ð
 •5”:ÒÐØ�4Øˆ	Ø ×)Ò)¨$Ô*:Ñ;Ô;ˆð �5œ;Ò&Ð&ØÔ!×(Ò(¨IÐ)HÐ)HÐ)HÑIÔIÐIÝØ•5”8�UœX¥u¤yÐ1ñ
ô 
ð 	à×1Ò1°$Ñ7Ô7ð	ð �5ØÔ(ˆØð 	Ý ØKÀTÐKÐKñô ð õ ˆ|ÑÔ˜qÒ Ð àÔ+×/Ò/°Ñ5Ô5Ð5Ñ5õ •T˜,Ñ'Ô'Ñ(Ô(ˆAå # DÔ$5°aÔ$8Ñ 9Ô 9ÐØ×0Ò0°°DÑ9Ô9ˆDÝ # DÔ$5°aÔ$8Ñ 9Ô 9ÐØ•u”zÒ!Ð!Ø(Ð,=Ò=Ð=Ø—m’m DÔ$4Ñ5Ô5ˆGØ�%œ+Ò%Ð%ØÔ%×,Ò,Øð 'ð '°Yð 'ð 'ð 'ñô ð õ ˜$¥¤Ñ)Ô)ð 5àÔ-×1Ò1°!Ñ4Ô4Ð4ØÔ)¨!Ô,×0Ò0°Ñ6Ô6Ð6Øˆurw   rN  r(   rÐ   c                ó˜   — |j         r&| j                             |j        › d|› �¦  «         dS | j                             ||f¦  «         dS )zAdd an equality constraintrð  N)r.  r@  rÖ  rZ  r?  rU  )r‡   rN  ro   s      rv   Úadd_equalityzDimConstraints.add_equality¤  s\   € àŒ>ð 	?àÔ ×$Ò$¨¬Ð%?Ð%?¸Ð%?Ð%?Ñ@Ô@Ð@Ð@Ð@ð Ô'×.Ò.°¸¨~Ñ>Ô>Ð>Ð>Ð>rw   ú#dict[sympy.Symbol, set[sympy.Expr]]c                ó
  ‡— i }| j                              ¦   «         D �]d\  }}g }t          ¦   «         }|D ]Ö}|j        \  }}t	          j        dd¬¦  «        }	t	          j        |||	z  z
  |g¬¦  «        \  }
}||
k    ryt          j        j         	                    ||	¦  «        \  }}t          |t          j        ¦  «        r7t          |t          j        ¦  «        r||z  }|                     ||f¦  «         ŒÁ|                     |¦  «         Œ×|rnt	          j        j        j        |Ž \  }}||z
  |z  h||<   ||t	          j        dd¬¦  «        z  |z   iŠ||                              ˆfd„|D ¦   «         ¦  «         �Œ_|||<   �Œf|S )NÚreduce_congruences_tmpT©r®  )ÚsymbolsÚtmpc              3  óF   •K  — | ]}t          j        |‰¦  «        °|V — Œd S r„   )rÒ   Úchecksol)r  rM  Úsubstitutions     €rv   r&  z5DimConstraints._reduce_congruences.<locals>.<genexpr>Ó  sI   øè è € ð .ð .à"Ý œ>¨*°lÑCÔCð.Øð.ð .ð .ð .ð .ð .rw   )r=  r�  rA  r�   rÒ   r¦  Úsolve_linearÚpolysÚ	polytoolsÚdivrj   rÓ   rU  rÖ  ÚntheoryÚmodularÚsolve_congruencer€  )r‡   Úreduced_congruencesr  ÚcongruencesÚremainder_modulus_pairsÚcongruences_to_checkrM  r—  rl  rk  rù  ÚsolutionÚmodulusÚ	remainderrn  s                 @rv   Ú_reduce_congruencesz"DimConstraints._reduce_congruences­  sì  ø€ ØCEÐØ"Ô/×5Ò5Ñ7Ô7ð *	>ñ *	>‰NˆAˆ{ØQSÐ#Ý#&¡5¤5Ð Ø)ð 5ð 5�
Ø *¤‘��gõ ”lÐ#;ÀTÐJÑJÔJ�Ý#(Ô#5°d¸WÀs¹]Ñ6JÐUVÐTWÐ#XÑ#XÔ#XÑ �˜ð ˜’;�;å).¬Ô)>×)BÒ)BÀ8ÈSÑ)QÔ)QÑ&�G˜YÝ! '­5¬=Ñ9Ô9ð !½jØ!¥5¤=ñ?ô ?ð !ð %.°Ñ$7˜	Ø/×6Ò6¸	À7Ð7KÑLÔLÐLØ ð %×(Ò(¨Ñ4Ô4Ð4Ð4ð 'ð >Ý%*¤]Ô%:Ô%KØ,ð&Ñ"�	˜7ð ,-¨y©=¸GÑ*CÐ)DÐ# AÑ&à�w¥¤¨e¸TÐ!BÑ!BÔ!BÑBÀYÑNð �ð $ AÔ&×-Ò-ð .ð .ð .ð .à&:ð.ñ .ô .ñ ô ð ñ ð *>Ð# AÑ&Ñ&à"Ð"rw   c                óž   — | j         rEd                     | j         ¦  «        }| j                              ¦   «          t          d|› �¦  «        ‚d S )Nú
z*The following inconsistencies were found:
)rC  r@  r¦  rÛ  )r‡   r°  s     rv   Ú_raise_inconsistenciesz%DimConstraints._raise_inconsistenciesÝ  sZ   € ØÔ ð 	RØ—)’)˜DÔ1Ñ2Ô2ˆCØÔ!×'Ò'Ñ)Ô)Ð)ÝÐPÈ3ÐPÐPÑQÔQÐQð	Rð 	Rrw   c                óæ
  ‡ — ‰                       ¦   «          ‰ j        �r™‰ j                             ¦   «         }‰ j                             |¦  «        }t          j        j                             ||¦  «        }t          |t          j	        ¦  «        rNt          d„ |j        D ¦   «         |¦  «        }t          |t          j        ¦  «        st          d|› d|› �¦  «        ‚|j        \  }}||k    rt          d|› d|› �¦  «        ‚‰ j                             ‰ j        j        |         d         j        › d|› �¦  «         |‰ j        |<   ‰ j        }t+          ¦   «         ‰ _        |D ]7}‰                      |                     |‰ j        |         i¦  «        ¦  «         Œ8‰                       ¦   «          ‰ j        �°™‰                      ¦   «         }|                     ¦   «         D �]‚\  }}	|	D �]x}
|‰ j        vs#t	          j        |
|‰ j        |         i¦  «        �sI‰                      |
¦  «        �r3|
j        \  }}dt7          ‰ j        j                             ‰ j        j        |         d         j        ‰ j        j        |         d         j        ¦  «        ¦  «        z   }t	          j        |d	¬
¦  «        }ddlm }  ||¦  «        g‰ j        j        |<   tC          t	          j        |||z  ¦  «        |¦  «        }|€t          d|› d|› d|› d|› �¦  «        ‚‰ j"                             ‰ j         #                    t	          j        ||d         ¦  «        ¦  «        ¦  «         �Œz�Œ„‰ j                             ¦   «         D �]f\  }}	 t          j        j                             ||¦  «        }t          |t          j$        ¦  «        r-t          tK          ˆ fd„|j        D ¦   «         ¦  «        ¦  «        }t          |t          j	        ¦  «        r=|j        D ]4}‰ j"                             ‰ j         #                    |¦  «        ¦  «         Œ5n2‰ j"                             ‰ j         #                    |¦  «        ¦  «         Œý# tL          t          f$ rW tN           (                    dd	¬¦  «         |D ]4}‰ j"                             ‰ j         #                    |¦  «        ¦  «         Œ5Y �Œdw xY w‰ j)        }g ‰ _)        |D ]3\  }}‰  *                    ||                     ‰ j        ¦  «        ¦  «         Œ4‰ j)        D ]A\  }}‰ j"                             |j        › d‰ j         #                    |¦  «        › �¦  «         ŒBdS )zGSolve the system of constraint equations to find simplified constraintsc              3  óN   K  — | ] }t          |t          j        ¦  «        ¯|V — Œ!d S r„   )rj   rÒ   r¤  rŽ  s     rv   r&  z'DimConstraints.solve.<locals>.<genexpr>î  s3   è è € ÐOÐO˜SµZÀÅUÄXÑ5NÔ5NÐO�SÐOÐOÐOÐOÐOÐOrw   z$Expected an equality constraint for z, got zExpected a constraint on z instead of on r   rð  r›  Tri  )ÚConstantSourceNzFailed to solve ú = z * ú for rî   c              3  óP   •K  — | ] }|                      ‰j        ¦  «        ¯|V — Œ!d S r„   )r±  r<  )r  r7  r‡   s     €rv   r&  z'DimConstraints.solve.<locals>.<genexpr>+  sL   øè è € ð ð à #Ø"Ÿ|š|¨DÔ,<Ñ=Ô=ðØðð ð ð ð ð rw   zFailed to reduce inequalities)Úexc_info)+r€  r:  Úpopr9  rÒ   ÚsolversÚinequalitiesÚreduce_inequalitiesrj   rÆ  r'  r�   r¤  rm   r@  rÖ  rB  rî  rZ  r;  r>  rA  r±  r}  r�  rm  Ú_is_supported_congruencer×   r-  r‹  r¦  Útorch._dynamo.sourcerƒ  rO   rA  r  rÇ  r^  ÚNotImplementedErrorrÇ   r¨  r?  re  )r‡   r  r"  rz  rù  rÏ   Úmultivariate_inequalitiesro   rv  rw  rM  r—  rl  Útmp_namerk  rƒ  rI  r7  Úexpr2Úsymbolic_equivalencesrN  Úexpr3s   `                     rv   ÚsolvezDimConstraints.solveã  s  ø€ à×#Ò#Ñ%Ô%Ð%ð Ô+ñ 	*ØÔ-×1Ò1Ñ3Ô3ˆAØÔ1×5Ò5°aÑ8Ô8ˆEÝ”}Ô1×EÒEÀeÈQÑOÔOˆHÝ˜(¥E¤IÑ.Ô.ð ÝØOÐO H¤MÐOÑOÔOØñô �õ " (­E¬HÑ5Ô5ð Ý(ØR¸qÐRÐRÈÐRÐRñô ð ð #œ-‰KˆF�CØ˜Š{ˆ{Ý$ØJ°ÐJÐJÀ&ÐJÐJñô ð ð Ô ×$Ò$Ø”9Ô-¨aÔ0°Ô3Ô8ÐCÐC¸cÐCÐCñô ð ð &)ˆDÔ Ñ"ð )-Ô(GÐ%Ý.1©e¬eˆDÔ+Ø1ð Eð E�Ø—’˜Ÿš¨¨4Ô+>¸qÔ+AÐ'BÑCÔCÑDÔDÐDÐDØ×'Ò'Ñ)Ô)Ð)ð= Ô+ñ 	*ðD #×6Ò6Ñ8Ô8ÐØ1×7Ò7Ñ9Ô9ð 	Xñ 	X‰NˆAˆ{Ø)ð Xñ X�
à˜DÔ/Ð/Ð/µu´~Ø  DÔ$7¸Ô$:Ð ;ñ8ô 8Ñ/ð ×4Ò4°ZÑ@Ô@ñ XØ(2¬™˜˜gØ#&­Ø œIÔ?×CÒCØ $¤	Ô :¸1Ô =¸aÔ @Ô EØ $¤	Ô :¸1Ô =¸aÔ @Ô Eñô ñ*ô *ñ $˜õ $œl¨8¸TÐBÑBÔB˜ØGÐGÐGÐGÐGÐGà;I¸>È(Ñ;SÔ;SÐ:T˜œ	Ô2°3Ñ7Ý%¥e¤h¨t°W¸s±]Ñ&CÔ&CÀQÑGÔG˜Ø˜9Ý"0Ø U°4Ð UÐ U¸GÐ UÐ UÈÐ UÐ UÐRSÐ UÐ Uñ#ô #ð ð Ô-×1Ò1°$´)×2CÒ2CÅEÄHÈQÐPQÐRSÔPTÑDUÔDUÑ2VÔ2VÑWÔWÐWùñ-Xð2 Ô5×;Ò;Ñ=Ô=ð 	Hñ 	H‰HˆAˆuðHÝ œ=Ô5×IÒIÈ%ÐQRÑSÔS�å˜h­¬Ñ1Ô1ð Ý#Ýð ð ð ð à'/¤}ðñ ô ñ ô ñ ô  �Hõ ˜h­¬	Ñ2Ô2ð KØ'œ}ð Jð J˜ØÔ-×1Ò1°$´)×2CÒ2CÀCÑ2HÔ2HÑIÔIÐIÐIðJð Ô)×-Ò-¨d¬i×.?Ò.?ÀÑ.IÔ.IÑJÔJÐJøøÝ'­Ð8ð Hð Hð HÝ—’Ð;Àd�ÑKÔKÐKØ"ð Hð H�EØÔ)×-Ò-¨d¬i×.?Ò.?ÀÑ.FÔ.FÑGÔGÐGÐGðHñ HðHøøøð !%Ô ;ÐØ&(ˆÔ#Ø2ð 	Kð 	K‰MˆF�EØ×Ò˜f e§n¢n°TÔ5HÑ&IÔ&IÑJÔJÐJÐJð "Ô8ð 	Vð 	V‰MˆF�EØÔ!×%Ò%¨¬Ð&TÐ&T¸$¼)×:KÒ:KÈEÑ:RÔ:RÐ&TÐ&TÑUÔUÐUÐUð	Vð 	Vs   ÎC5Q9Ñ9A$S!Ó S!rM  c                ó   — |j         \  }}t          |t          j        ¦  «        rs|j         \  }}t          |t          j        ¦  «        ot          |t          j        ¦  «        p3t          |t          j        ¦  «        ot          |t          j        ¦  «        }nt          |t          j        ¦  «        }|ot          |t          j        ¦  «        }|S r„   )r�   rj   rÒ   rÕ  r¦  rÓ   )rÌ  rM  r—  rl  r¥  r©  r€   s          rv   rŒ  z'DimConstraints._is_supported_congruenceE  s©   € à"œ‰ˆˆgõ
 �d�EœIÑ&Ô&ð 	2Ø”y‰HˆC�å˜3¥¤Ñ-Ô-ÐPµ*¸SÅ%Ä-Ñ2PÔ2PðTå˜S¥%¤-Ñ0Ô0ÐRµZÀÅUÄ\Ñ5RÔ5Rð ˆDõ ˜d¥E¤LÑ1Ô1ˆDØÐ:�
 7­E¬MÑ:Ô:ˆØˆrw   údict[str, sympy.Expr]c                ó^   ‡ ‡— dˆ fd„Šˆˆ fd„‰ j                              ¦   «         D ¦   «         S )zGReturns a dictionary of the names of symbols to their specialized valuerG  r(   rf   r×   c                ó\   •— | j         }‰j        j        r‰j        j        |         › d|› �S |S )Nr„  )rZ  rB  r-  )rG  rZ  r‡   s     €rv   Ú
debug_namez9DimConstraints.forced_specializations.<locals>.debug_nameY  s:   ø€ Ø”8ˆDØŒyÔ2ð Øœ)Ô=¸dÔCÐNÐNÈÐNÐNÐNà�rw   c                ól   •— i | ]0\  }}|‰j         v ¯ ‰‰j        j        |         d          ¦  «        |“Œ1S ©r   )rD  rB  rî  )r  r  rÏ   r™  r‡   s      €€rv   rŽ  z9DimConstraints.forced_specializations.<locals>.<dictcomp>`  sP   ø€ ð 
ð 
ð 
á��3Ø�DÔ(Ð(Ð(ð ˆJ�t”yÔ1°!Ô4°QÔ7Ñ8Ô8¸#à(Ð(Ð(rw   )rG  r(   rf   r×   )r;  r�  )r‡   r™  s   `@rv   Úforced_specializationsz%DimConstraints.forced_specializationsV  sa   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð
ð 
ð 
ð 
ð 
àÔ-×3Ò3Ñ5Ô5ð
ñ 
ô 
ð 	
rw   rX  rÞ   ú2TypeGuard[torch.export.dynamic_shapes._DerivedDim]c                óJ   — t          |t          j        j        j        ¦  «        S r„   )rj   rp   r$  Údynamic_shapesÚ_DerivedDim©r‡   rX  s     rv   Ú_is_derived_dimzDimConstraints._is_derived_dimf  s   € õ ˜#�uœ|Ô:ÔFÑGÔGÐGrw   ú*TypeGuard[torch.export.dynamic_shapes.Dim]c                ó”   — t          |t          j        j        j        ¦  «        o$t          |t          j        j        j        ¦  «         S r„   )rj   rp   r$  rŸ  ÚDimr   r¡  s     rv   Ú_is_dimzDimConstraints._is_dimk  sB   € Ý˜#�uœ|Ô:Ô>Ñ?Ô?ð 
Í
Ø•”Ô,Ô8ñI
ô I
ð E
ð 	
rw   Úresultsúdict[str, dict[str, Any]]Úname_to_dimúdict[str, Any]c           
     ó<
  ‡ — ddl m} dˆ fd	„}i }t          |                     ¦   «         ¦  «        D �]v\  }}d
|v �rkt	          |d
         t
          j        ¦  «        �rJt          t          |d
         j	        ¦  «        ¦  «        }t          |¦  «        |v�r||t          |¦  «        <   t
          j        j                             |d
         |¦  «        \  }	}
|                     dd¦  «        }t          j        ||
z
  |	z  ¦  «        }|                     dt"          ¦  «        }t          j        ||
z
  |	z  ¦  «        }||dœ|t          |¦  «        <    |t          |¦  «        ||¬¦  «        |t          |¦  «        <   |                     dd¦  «         |                     dd¦  «         �Œx|                     ¦   «         D ]´}|                     ¦   «         D ]�}d
|v r—t	          |d
         t
          j        ¦  «        rwt          t          t          |d
         j	        ¦  «        ¦  «        x}¦  «        |k    r=|t          |¦  «                 d
         }|d
                              ||i¦  «        }||d
<   ŒžŒµt-          ¦   «         }|                     ¦   «         D ]Á\  }}||vrŒ
‰                      ||         ¦  «        rd|v sd|v r|                     |¦  «         ŒCd
|v rzt	          |d
         t
          j        ¦  «        rZt          t          |d
         j	        ¦  «        ¦  «        }|€t3          d¦  «        ‚|                     t          |¦  «        ¦  «         ŒÂ|                     |¦  «        }i }|D �]K}d}||v rD||         }d|v sd|v st	          |d
         t6          ¦  «        r ||||         ¦  «        s|||<   d}|rü|                     ¦   «         D ]ç\  }}||vrŒ
||         }|j        j        dk    rÅ|j        j        |k    rµd|v sd|v r­t          j        |¦  «        }t          t          |j	        ¦  «        ¦  «        }tA          t          j!        ||d         ¦  «        |¦  «        d         tA          t          j!        ||d         ¦  «        |¦  «        d         dœ} ||||         ¦  «        s|||<    nŒè�ŒMt          | "                    ¦   «         ¦  «        D ])}||vrŒ‰  #                    ||         ¦  «        s||v r||= Œ*| $                    |¦  «         dS )aƒ
  
        Here we resolve 2 concerns with derived dims suggested fixes: 1) newly introduced roots,
        and 2) root swapping.

        1) Newly introduced roots appear with modulo guards, e.g. Mod(dx, 2) = 0 suggests
        dx is a derived dim equal to 2 * _dx, introducing a new root _dx. Currently the final
        suggested fixes handle this correctly, but we can get intermediate results that look like
        {"dy": {"eq": "dx + 1"}, "dx": {"eq": "2 * _dx + 1, "min": 3, "max": 15}}
        and this routine prettifies this by unifying to a single root, and making each suggestion
        either a derived dim or min/max range, not both.

        2) With suggested fixes for derived dims, roots can be swapped,
        e.g. dx, dx - 1 -> dy + 1, dy. Here we don't want to print out the attached name,
        since this leads to messages like "dx - 1 = Dim("dx - 1", ...)".
        Instead we evaluate the new root value, and remove results for its derivations.

        First we find all the original roots (specified in dynamic_shapes), that are found in the
        values of results (i.e. used for computing suggesting fix values). These original roots
        (suppose `dx`) are either specialized, unchanged, refined, or swapped
        (expressed as a derived dim). If any of the first 3 cases happen, we suggest `dx`'s value
        in results, and remove suggestions for derivations of `dx`, assuming the derived relation
        is valid. If swapped, we find the new root, and use the fix to evaluate `dx`'s new value,
        and then do the same with `dx`'s derivations.

        Assuming the originally specified derived relations are correct is valid, because:
            1) if the relations are plain wrong (e.g. input shape = (6, 4) with spec (dx, dx - 1))
               produce_guards() will catch this and crash before hand.
            2) if the relations are numerically correct but do not match the emitted guard,
               for example:

                    def forward(self, x, y):
                        return x.reshape([-1]) + y  # guard: s0 * 2 = s1
                    inputs = (torch.randn(6, 2), torch.randn(12))
                    dx = Dim("dx", min=2, max=32)
                    dynamic_shapes={"x": (dx, 2), "y": (dx + 6, )}  # this matches values but not op

               then this leads to 2 linear equations, and a) produce_guards() is able to solve for
               the unique solution of dx = 6 and specialize, and b) the export constraint solver will
               raise an issue due to range constraints (a unique solution means not all values in a
               range satisfy a guard) and also force specializations.
        r   )r¥  ÚcúMapping[str, int]rX  rÞ   rf   rr   c                ó  •— ‰                      |¦  «        ood| v pd| v og|j        dk     r|                      dd¦  «        dk    p|j        |                      dd¦  «        k    o#|j        |                      dt          ¦  «        k    S )Nrà  rá  r—  )r¦  rà  r‹  rá  rJ   )r¬  rX  r‡   s     €rv   Ú_check_same_rangezDDimConstraints._process_derived_dim_roots.<locals>._check_same_range   sŒ   ø€ ð —’˜SÑ!Ô!ð 4Ø˜a�ZÐ- 5¨A :ð4ð ”W˜q’[Ð9 Q§U¢U¨5°!¡_¤_¸Ò%9ÐX¸c¼gÈÏÊÈuÐVWÉÌÒ>Xð4ð
 ”G˜qŸušu U­FÑ3Ô3Ò3ðrw   r°  rà  r—  rá  )rà  rá  Nzroot must not be NoneTFr   rî   )r¬  r­  rX  rÞ   rf   rr   )%Útorch.export.dynamic_shapesr¥  rV  r�  rj   rÒ   r  r'  r^  r¦   r×   rp  rq  rr  r‹  r  ÚceilrJ   Úfloorrˆ  r  ÚsubsrA  r¦  rÖ  rm   rU  rt   rˆ   r‰   r@  rª  rO   r¤  rñ  r¢  r€  )r‡   r§  r©  r¥  r¯  Úintroduced_rootsrŒ  r¬  r@  r{  r|  Úc_minÚmin_Úc_maxÚmax_Úold_rootrù  Únew_root_exprr·  Úmodified_rootsÚmodified_root_valuesÚmrootÚswapped_rootrX  ro   r  r“  s   `                          rv   Ú_process_derived_dim_rootsz)DimConstraints._process_derived_dim_rootsp  sp  ø€ ð\ 	4Ð3Ð3Ð3Ð3Ð3ð		ð 		ð 		ð 		ð 		ð 		ð* ,.ÐÝ˜Ÿš™œÑ)Ô)ð 	'ñ 	'‰DˆAˆqØ�qˆy‰y�Z¨¨$¬µ´Ñ<Ô<‰yÝ�D  4¤Ô!5Ñ6Ô6Ñ7Ô7�Ý�t‘9”9 KÐ/Ñ/Ø23Ð$¥S¨¡Y¤YÑ/å).¬Ô)>×)BÒ)BÀ1ÀTÄ7ÈDÑ)QÔ)QÑ&�G˜YØŸEšE %¨™OœO�EÝœ9 e¨iÑ&7¸7Ñ%BÑCÔC�DØŸEšE %­Ñ0Ô0�EÝœ: u¨yÑ'8¸GÑ&CÑDÔD�Dà15¸dÐ)CÐ)C�G�C ™IœIÑ&Ø-0¨Sµ°T±´ÀÈ$Ð-OÑ-OÔ-O�K¥ D¡	¤	Ñ*à—E’E˜% Ñ&Ô&Ð&Ø—E’E˜% Ñ&Ô&Ð&ùð )×/Ò/Ñ1Ô1ð 
	'ð 
	'ˆHØ—^’^Ñ%Ô%ð 	'ð 	'�à˜A�I�IÝ" 1 T¤7­E¬JÑ7Ô7ð å¥d­4°°$´Ô0DÑ+EÔ+EÑ&FÔ&FÐF˜FÑGÔGÈ8ÒSÐSà$+­C°©M¬MÔ$:¸4Ô$@�Mà  œwŸ|š|¨V°]Ð,CÑDÔD�HØ&�A�d‘Gøð	'õ  $'¡5¤5ˆØ—M’M‘O”Oð 		.ð 		.‰DˆAˆqØ˜Ð#Ð#ØØ�|Š|˜K¨œNÑ+Ô+ð .°¸!°°¸uÈ¸z¸zØ×"Ò" 1Ñ%Ô%Ð%Ð%Ø˜���z¨!¨D¬'µ5´:Ñ>Ô>�Ý�D  4¤Ô!5Ñ6Ô6Ñ7Ô7�Ø�<Ý(Ð)@ÑAÔAÐAØ×"Ò"¥3 t¡9¤9Ñ-Ô-Ð-øð (×2Ò2Ð3CÑDÔDˆð
 ;=ÐØ#ð (	&ñ (	&ˆEØˆLØ˜ÐÐØ˜E”N�Ø˜Q�J�J %¨1 * *µØ�d”G�Sñ2ô 2 *ð
 -Ð,Ø˜; uÔ-ñô ð 8ð 78Ð,¨UÑ3Ø#(�Làð &ð $ŸMšM™OœOð &ð &‘D�A�qØ Ð+Ð+Ø Ø% aœ.�CàœÔ.°-Ò?Ð?ØœHÔ-°Ò6Ð6ð ! A˜:˜:¨°!¨¨Ý#(¤=°Ñ#3Ô#3˜DÝ $¥T¨$Ô*;Ñ%<Ô%<Ñ =Ô =˜Aå'0µ´¸$ÀÀ%ÄÑ1IÔ1IÈ1Ñ'MÔ'MÈaÔ'PÝ'0µ´¸$ÀÀ%ÄÑ1IÔ1IÈ1Ñ'MÔ'MÈaÔ'Pð&ð &˜Fð $5Ð#4Ø &Ø +¨EÔ 2ñ$ô $ð &ð ?EÐ 4°UÑ ;Ø % øùõ �g—l’l‘n”nÑ%Ô%ð 	ð 	ˆAØ˜Ð#Ð#ØØ×#Ò# K°¤NÑ3Ô3ð °q¸NÐ7JÐ7JØ˜A�Jøð 	�ŠÐ+Ñ,Ô,Ð,Ð,Ð,rw   Úoriginal_signatureúinspect.SignaturerŸ  ú'dict[str, Any] | tuple[Any] | list[Any]Úconstraint_violation_errorrœ  údict[str, str]r×   c                ó:  ‡ ‡‡‡— ddl m} ‰ j        j        sdS d/d0ˆ fd
„Št	          t
          ¦  «        Š|€i }d1d„}d2ˆfd„} ||¦  «        }‰ j                             ‰ j        ¦  «        D ]þ}	 ‰|	¦  «        }
|
|	k    rŒt          j
        d|
¦  «        \  }}}|                     ¦   «         }|dk    r||k    rŒN|                     ¦   «         r |||t          |¦  «        ¦  «         Œ}|                     ¦   «         r$ || ||¦  «        t          |¦  «        ¦  «         Œµ|dk    rt          d|› d|
› �¦  «        ‚	 t          j        |¦  «        ‰|         d<   Œï# t"          $ r Y Œûw xY wˆfd„t%          ‰                     ¦   «         d„ ¬¦  «        D ¦   «         Šd}‰rÒt)          ¦   «         }‰D ]r}|| 
                    d¦  «        d                  }‰                      |¦  «        r |                     |j        j        ¦  «         ŒX|                     |j        ¦  «         Œs|dd                     t%          |¦  «        ¦  «        › d�z  }‰                     ¦   «         D ]\  }	}|d|	› d |› d!�z  }Œ‰                      ‰|¦  «         g }g }ˆfd"„t%          ‰                     ¦   «         ˆfd#„¬¦  «        D ¦   «         }|                     ¦   «         D �]$\  }}d|v rb|d         }t9          |t          ¦  «        r|                     |› d|› �¦  «         ŒBt=          |¦  «        r|                     |› d|› �¦  «         Œl|                     d$d¦  «        }|d%k    rd}|                     d&d¦  «        }|�$|�"|                     |› d'|› d(|› d)|› d*�¦  «         ŒÆ|�|                     |› d'|› d(|› d*�¦  «         Œç|� |                     |› d'|› d+|› d*�¦  «         �Œ	|                     |› d'|› d,�¦  «         �Œ&|s|r |d-z  }|d.                     ||z   ¦  «        z  }|S )3z0Format a message for constraint violation errorsr   )Ú_get_dim_name_mappingrp  Fr  r×   Úinverserr   rf   c                ó¬   •— ‰j         j                             ¦   «         D ]3\  }}|s|                      ||¦  «        n|                      ||¦  «        } Œ4| S r„   )rB  r-  r�  rQ  )r  rÇ  rŒ  r�  r‡   s       €rv   Ú	transformz2DimConstraints.prettify_results.<locals>.transform6  sV   ø€ Øœ	Ô;×AÒAÑCÔCð Hð H‘��1Ø+2ÐG�A—I’I˜a ‘O”O�O¸¿	º	À!ÀQ¹¼��ØˆHrw   Nr™  c                óv   — | dk    rdS | dk    rdS | dk    rdS | dk    rdS | dk    rt          d| › �¦  «        ‚| S )Nú<=ú>=ú<ú>ú==úExpected op to be '==', got r»  )r™  s    rv   Úflipz-DimConstraints.prettify_results.<locals>.flip?  s_   € Ø�TŠzˆzØ�tØ�TŠzˆzØ�tØ�SŠyˆyØ�sØ�SŠyˆyØ�sØ�TŠzˆzÝ$Ð%HÀBÐ%HÐ%HÑIÔIÐIØˆIrw   ro   Údigitrt   r‚   c                óò   •— |dk    r|‰|          d<   d S |dk    r|dz
  ‰|          d<   d S |dk    r|‰|          d<   d S |dk    r|dz   ‰|          d<   d S |dk    rt          d	|› �¦  «        ‚|‰|          d
<   d S )NrË  rá  rÍ  rî   rÌ  rà  rÎ  rÏ  rÐ  r°  r»  )ro   r™  rÒ  r§  s      €rv   Úrelation_with_digitz<DimConstraints.prettify_results.<locals>.relation_with_digitL  s³   ø€ Ø�TŠzˆzØ',�˜”˜eÑ$Ð$Ð$Ø�s’�Ø',¨q¡y�˜”˜eÑ$Ð$Ð$Ø�t’�Ø',�˜”˜eÑ$Ð$Ð$Ø�s’�Ø',¨q¡y�˜”˜eÑ$Ð$Ð$à˜’:�:Ý(Ð)LÈÐ)LÐ)LÑMÔMÐMØ&+�˜”˜dÑ#Ð#Ð#rw   z( == | <= | >= | < | > )rÏ  rÐ  r…  r°  c                ó"   •— i | ]}|‰|         “ŒS r’   r’   )r  rŒ  rœ  s     €rv   rŽ  z3DimConstraints.prettify_results.<locals>.<dictcomp>r  s1   ø€ ð "
ð "
ð "
àð Ð% aÔ(ð"
ð "
ð "
rw   c                ó8   — |                       d¦  «        d         S )Nr„  rî   )Úsplitrþ  s    rv   r|  z1DimConstraints.prettify_results.<locals>.<lambda>v  s   € ˜aŸgšg e™nœn¨QÔ/€ rw   rÃ  r„  z'Specializations unexpectedly required (ú, ú9)! For more information, run with TORCH_LOGS="+dynamic".
z%  - solving the guards generated for z$ resulted in a specialized value of z.
c                ó"   •— i | ]}|‰|         “ŒS r’   r’   )r  rŒ  r§  s     €rv   rŽ  z3DimConstraints.prettify_results.<locals>.<dictcomp>‘  s/   ø€ ð 
ð 
ð 
àð ˆw�qŒzð
ð 
ð 
rw   c                ó   •—  ‰| d¬¦  «        S )NT)rÇ  r’   )rù  rÉ  s    €rv   r|  z1DimConstraints.prettify_results.<locals>.<lambda>•  s   ø€ ˜i˜i¨°4Ð8Ñ8Ô8€ rw   rà  r—  rá  z = Dim('z', min=z, max=rn  z', max=z')z
Suggested fixes:
  ú
  ©F)r  r×   rÇ  rr   rf   r×   )r™  r×   rf   r×   )ro   r×   r™  r×   rÒ  rt   rf   r‚   ) r°  rÆ  rB  r-  r	   r  r@  r)  rA  r  r×  ÚstripÚisdigitrt   rm   rÒ   rª  Ú	TypeErrorrÅ  rñ  rA  r¢  rÖ  r@  r‰   r@  r�  r¿  rj   rU  rY  r‹  )r‡   rÀ  rŸ  rÃ  rœ  rÆ  rÑ  rÔ  r©  r  rã  Úleftr™  ÚrightÚbufÚdebug_namesrŒ  rX  rÏ   ÚdimsrÌ  Úresults2r¬  rÝ   r¶  r¸  r§  rÉ  s   `   `                     @@rv   Úprettify_resultszDimConstraints.prettify_results(  s…  øøøø€ ð 	FÐEÐEÐEÐEÐEàŒyÔ2ð 	à�2ð	ð 	ð 	ð 	ð 	ð 	ð 	õ
 5@ÅÑ4EÔ4EˆØÐ!ØˆNð	ð 	ð 	ð 	ð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð ,Ð+¨NÑ;Ô;ˆàÔ%×+Ò+¨DÔ,AÑBÔBð 	ð 	ˆAØ�	˜!‘”ˆAØ�AŠvˆvØÝ œhÐ'BÀAÑFÔF‰OˆD�"�eØ—’‘”ˆBØ�TŠzˆz˜d ešm˜mØØ�}Š}‰Œð 
Ø#Ð# D¨"­c°%©j¬jÑ9Ô9Ð9Ð9Ø—’‘”ð Ø#Ð# E¨4¨4°©8¬8µS¸±Y´YÑ?Ô?Ð?Ð?à˜’:�:Ý(Ð)TÈÐ)TÐ)TÐQRÐ)TÐ)TÑUÔUÐUðÝ*/¬-¸Ñ*>Ô*>�G˜D”M $Ñ'Ð'øÝ ð ð ð Ø�Dðøøøð"
ð "
ð "
ð "
åØ&×+Ò+Ñ-Ô-Ø/Ð/ðñ ô ð"
ñ "
ô "
Ðð ˆØ!ð 	oÝ™%œ%ˆKØ+ð 2ð 2�Ø! !§'¢'¨%¡.¤.°Ô"3Ô4�Ø×'Ò'¨Ñ,Ô,ð 2Ø—O’O C¤HÔ$5Ñ6Ô6Ð6Ð6à—O’O C¤LÑ1Ô1Ð1Ð1àðJ¸$¿)º)ÅFÈ;ÑDWÔDWÑ:XÔ:Xð Jð Jð JñˆCð 1×6Ò6Ñ8Ô8ð oð o‘��3ØÐn¸qÐnÐnÐfiÐnÐnÐnÑn��à×'Ò'¨°Ñ=Ô=Ð=àˆØˆð
ð 
ð 
ð 
åØ—’‘”Ø8Ð8Ð8Ð8ðñ ô ð
ñ 
ô 
ˆð —N’NÑ$Ô$ð 	5ñ 	5‰DˆAˆqØ�qˆyˆyØ˜$œ�Ý˜e¥SÑ)Ô)ð 4Ø—M’M QÐ"2Ð"2¨5Ð"2Ð"2Ñ3Ô3Ð3Ð3Ý.¨uÑ5Ô5ð 4Ø—M’M QÐ"2Ð"2¨5Ð"2Ð"2Ñ3Ô3Ð3øà—u’u˜U DÑ)Ô)�Ø˜1’9�9Ø�DØ—u’u˜U DÑ)Ô)�ØÐ#¨Ð(8Ø—K’K 1Ð KÐ K¨aÐ KÐ K¸Ð KÐ KÀDÐ KÐ KÐ KÑLÔLÐLÐLØÐ%Ø—K’K 1Ð ?Ð ?¨aÐ ?Ð ?¸Ð ?Ð ?Ð ?Ñ@Ô@Ð@Ð@ØÐ%Ø—K’K 1Ð ?Ð ?¨aÐ ?Ð ?¸Ð ?Ð ?Ð ?Ñ@Ô@Ð@Ñ@à—K’K 1Ð 3Ð 3¨aÐ 3Ð 3Ð 3Ñ4Ô4Ð4Ñ4ð
 ð 	.�6ð 	.ØÐ+Ñ+ˆCØ�6—;’;˜t f™}Ñ-Ô-Ñ-ˆCàˆ
s   Ä=EÅ
E(Å'E(N)
rî  r,  r4  r5  r6  r7  r-  r.  rf   r‚   )r  rˆ  ro   rÍ   rf   rÍ   r  ©ro   r   rf   rr   ©ro   rË   rf   rr   )rN  r(   ro   rÐ   rf   r‚   )rf   rf  )rM  rÐ   rf   rr   )rf   r–  )rX  rÞ   rf   r�  )rX  rÞ   rf   r£  )r§  r¨  r©  rª  rf   r‚   )
rÀ  rÁ  rŸ  rÂ  rÃ  rÞ   rœ  rÄ  rf   r×   )r‰   rŠ   r‹   r—   r†   rJ  rF  rZ  rÖ  re  r}  r€  r”  ÚclassmethodrŒ  rœ  r¢  r¦  r¿  rç  r’   rw   rv   r3  r3  Ì  sz  € € € € € ðð ð
;*ð ;*ð ;*ð ;*ðzQð Qð Qð Qðf
ð 
ð 
ð 
ð<ð <ð <ð <ð0ð 0ð 0ð 0ðd?ð ?ð ?ð ?ð.#ð .#ð .#ð .#ð`Rð Rð Rð Rð`Vð `Vð `Vð `VðD ðð ð ñ „[ðð 
ð 
ð 
ð 
ð Hð Hð Hð Hð

ð 
ð 
ð 
ð
v-ð v-ð v-ð v-ðpLð Lð Lð Lð Lð Lrw   r3  c                 ó.   — t          t          dd¦  «        S )NÚignore_fresh_unbacked_symbolsF©r`  ÚTLSr’   rw   rv   Ú"_ignore_fresh_unbacked_symbols_tlsrï  º  s   € Ý•3Ð7¸Ñ?Ô?Ð?rw   c                ó:   — t          ¦   «         }| t          _        |S r„   )rï  rî  rì  )rT  Úprevs     rv   Ú"_ignore_fresh_unbacked_symbols_setrò  ¾  s   € Ý-Ñ/Ô/€DØ()…CÔ%Ø€Krw   úGenerator[None, None, None]c               #  óx   K  — t          d¦  «        } 	 dV — t          | ¦  «         dS # t          | ¦  «         w xY w)a  
    Indicates that newly allocated unbacked SymInts are intentionally discarded.

    This is used by tracing-only metadata paths that do not own a ShapeEnv, but
    still create temporary fake tensors whose fresh symbols should not be bound
    into the surrounding graph.
    TN©rò  )rñ  s    rv   Ú*_ignore_fresh_unbacked_symbols_tls_contextrö  Ä  sL   è è € õ .¨dÑ3Ô3€Dð1Øˆˆˆå*¨4Ñ0Ô0Ð0Ð0Ð0øÕ*¨4Ñ0Ô0Ð0Ð0øøøs   “( ¨9c                  óZ   — 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<   ded	<   d
S )ÚShapeEnvSettingszŒ
    Encapsulates all shape env settings that could potentially affect
    FakeTensor dispatch. Used when creating dispatch cache keys.
    rr   Úallow_scalar_outputsÚallow_dynamic_output_shape_opsÚassume_static_by_defaultÚspecialize_zero_oneÚ
duck_shapeÚ+prefer_deferred_runtime_asserts_over_guardsÚtrace_assertsNrP  r’   rw   rv   rø  rø  Ô  sr   € € € € € € ðð ð
 ÐÐÑØ(Ð(Ð(Ñ(Ø"Ð"Ð"Ñ"ØÐÐÑØÐÐÑØ5Ð5Ð5Ñ5ØÐÐÑÐÐrw   rø  c                  ó(   — e Zd ZU dZded<   ded<   dS )r¿   zG
    Locations of the guards that triggered lower and upper bound.
    r'   r(  r)  NrP  r’   rw   rv   r¿   r¿   ä  s.   € € € € € € ðð ð €K€K�KØ€K€K�K€K€Krw   r¿   rœ   c              #  ó–   K  — |                       ¦   «          	 d V — |                      ¦   «          d S # |                      ¦   «          w xY wr„   )Ú_suppress_guards_enterÚ_suppress_guards_exit)rl   s    rv   Ú_suppress_guardsr  î  sV   è è € à×$Ò$Ñ&Ô&Ð&ð*Øˆˆˆà×'Ò'Ñ)Ô)Ð)Ð)Ð)øˆ	×'Ò'Ñ)Ô)Ð)Ð)øøøs	   ˜2 ²Ac                  ób   — e Zd ZU dZded<    ee¬¦  «        Zded<    ee¬¦  «        Zded<   dS )	Ú_FrameLocalResultNú
str | NoneÚlocrv  rª  ÚlocalsrÄ  rj  )	r‰   rŠ   r‹   r  rŒ   r   r  r	  rj  r’   rw   rv   r  r  ÷  s_   € € € € € € à€CÐÐÐÑØ"˜U°4Ð8Ñ8Ô8€FÐ8Ð8Ð8Ñ8Ø#˜e°DÐ9Ñ9Ô9€GÐ9Ð9Ð9Ñ9Ð9Ð9rw   r  c            	      ó„  — e Zd ZU dddœ�dSd„Zdddddddddœ�dTd„Ze�dUd„¦   «         Ze�dUd„¦   «         Ze�dUd„¦   «         Ze�dUd„¦   «         Z	e�dUd„¦   «         Z
e�dUd„¦   «         Ze�dVd%„¦   «         Z�dWd'„Z�dXd(„Z�dYd*„Ze�dZd+„¦   «         Z e¦   «         �d[d0„¦   «         Z e¦   «         �d\d4„¦   «         Z e¦   «         �d]d5„¦   «         Z e¦   «         �d^d8„¦   «         Z e¦   «         	 �d_�d`d<„¦   «         Z e¦   «         �dad=„¦   «         Z e¦   «         �dbd@„¦   «         Z�dUdA„Z e¦   «         �dcdB„¦   «         Ze�dZdC„¦   «         Z e¦   «         �dddD„¦   «         Z e¦   «         �dddE„¦   «         Z�dedG„Z�dfdJ„Z �dgdM„Z!�dgdN„Z"�dddO„Z# e¦   «         �dhdU„¦   «         Z$�didW„Z%�djdY„Z&�dkd[„Z'e(�dUd\„¦   «         Z) e¦   «         �ddd]„¦   «         Z* e¦   «         �ddd^„¦   «         Z+�dld`„Z,e�dZda„¦   «         Z-�dmdc„Z.�dddd„Z/�dndj„Z0	 �do�dpdn„Z1ddoœ�dqdt„Z2ddduœ�drdz„Z3 e¦   «         ddduœ�dsd„¦   «         Z4�dtd‡„Z5 e¦   «         ddˆœ�dud�„¦   «         Z6 e¦   «         ddˆœ�dvd�„¦   «         Z7 e¦   «         �dwd‘„¦   «         Z8 e¦   «         	 �do�dxd–„¦   «         Z9�dyd˜„Z:	 	 �d_�dzdŸ„Z; e¦   «         �d{d¡„¦   «         Z< e¦   «         �do�d|d¢„¦   «         Z=�d}d£„Z>�d~d§„Z? e¦   «         �dd¨„¦   «         Z@ e¦   «         eAjB        ddf�d€d¬„¦   «         ZC e¦   «         eAjB        ddddf�d�d°„¦   «         ZD�d‚d±„ZEe eFd²eG¬³¦  «        �dƒdµ„¦   «         ¦   «         ZH eFd¶eG¬³¦  «        �d‚d·„¦   «         ZI�d„d¸„ZJ�d…d»„ZK�d†d½„ZLd¾„ fdddddd¿dÀœ�d‡dÒ„ZMdddÓœ�dˆdÕ„ZN�d‰dØ„ZO�dŠdÚ„ZP�d‹dÜ„ZQddÝœ�dŒdß„ZR�d�dã„ZS�dŽdå„ZT�d�dç„ZU�d��d‘dé„ZV	 �d��d’dë„ZWeX	 	 �d“�d”dð„¦   «         ZY eZd¦  «        �d•dó„¦   «         Z[�d–dõ„Z\�d—dö„Z]�d˜dù„Z^	 �do�d™dû„Z_eXddddddüœ�dš�d„¦   «         Z`eX�d›�d„¦   «         ZaeX�dd�d„¦   «         ZbeX�d��dœ�d„¦   «         Zc eF�deG¬³¦  «         eZ�d¦  «        d�d	œ�d��d„¦   «         ¦   «         Zd eZ�d¦  «        �dž�d„¦   «         Ze eZ�d¦  «        �d—�d„¦   «         Zf	 �do�dŸ�d„Zgd�dœ�d �d„Zh	 �dod�dœ�d¡�d„Zi�d¢�d„Zj�d£�d„ZkeX e¦   «         �d¤�d„¦   «         ¦   «         Zl eZ�d¦  «        �d£�d „¦   «         Zm	 �d��d¥�d!„Zn�d¦�d"„ZoeX�d§�d#„¦   «         Zp�d¨�d%„Zq�d©�d'„Zr	 �dª�d«�d+„Zs�do�d¬�d-„Zt�d­�d/„Zu�d®�d1„Zv�d¯�d4„ZwdZxd:ey�d5<   	 	 �dª�d°�d8„Zz�dU�d9„Z{�d±�d<„Z|	 	 	 	 �d²d�d=œ�d³�d@„Z} eZ�d¦  «         ed�dA�¬B¦  «        	 �do�d´�dD„¦   «         ¦   «         Z~�dµ�dF„Z	 	 	 	 �d²d�d=œ�d¶�dH„Z€�dd�dI„Z��d·�dJ„Z‚ eZ�d¦  «         ed�¬K¦  «        	 �do�d¸�dL„¦   «         ¦   «         Zƒ�dg�dM„Z„ eZd�¬N¦  «         e¦   «         �d¹�dR„¦   «         ¦   «         Z…dS (º  rœ   N)Úshould_record_eventsÚtracked_fakesr  rÑ  r  úlist[Any] | NonerÔ  r   rf   r‚   c               ó2  —  | j         di |¤Ž d|d<   ddlm}  |¦   «         | _        |�|n| j        ot          j         | _        | j        ot          j        | _        d| _	        || _
        | j        rt          t          |¬¦  «        gng | _        i | _        d S )NFr  r   ©Útranslation_validation_enabled)rÔ  r’   )Ú_initÚtorch.fx.experimental.validatorr  Ú_translation_validation_enabledrÝ  Ú translation_validation_no_bisectr  Úcheck_shape_env_recorded_eventsÚcheck_recorded_eventsÚis_recordingr  r9   rœ   ÚeventsÚfake_tensor_cache)r‡   r  r  rÔ  r  s        rv   r†   zShapeEnv.__init__	  sä   € ð 	ˆŒ
ÐÐ�VÐÐÐð */ˆÐ%Ñ&àRÐRÐRÐRÐRÐRà/MÐ/MÑ/OÔ/OˆÔ,ð $Ð/ð !Ð ð Ô4ð @ÝÔ?Ð?ð 	Ô!ð Ô%ÐP­&Ô*Pð 	Ô"ð
 "ˆÔà*ˆÔð Ô(ð�]�8¨FÐ3Ñ3Ô3Ð4Ð4àð 	Œð  ð 	ÔÐÐrw   TF)rù  rú  rû  rü  rý  Ú	co_fieldsrþ  rÿ  rù  rr   rú  rû  rü  rý  r  údict[str, str] | Nonerþ  rÿ  c          	     óF  — |€t           j        }t          |||||||¬¦  «        | _        g | _        i | _        t          ¦   «         | _        i | _        i | _	        i | _
        i | _        i | _        i | _        t          ¦   «         | _        i | _        i | _        i | _        i | _        i | _        i | _        t          ¦   «         | _        g | _        t          ¦   «         | _        i | _        d| _        d| _        i | _        d| _        t<          | _        | j                             d¦  «         d| _         d| _!        d| _"        d | _#        tI          j%        ¦   «         | _&        tI          j%        ¦   «         | _'        |r|ni | _(        g | _)        g | _*        |  +                    ¦   «         | _,        d| _-        d| _.        d| _/        i | _0        i | _1        i | _2        i | _3        d | _4        d | _5        || _6        t          ¦   «         | _7        ddl8m9}	  |	¦   «         | _:        | j:        rqddl8m;}
  |
¦   «         | _<        tz          j>         ?                    ¦   «         | _@        | j@         A                    | j@         B                    d ¦  «        ¦  «         i | _C        i | _D        i | _E        g | _F        d S )N)rù  rú  rû  rü  rý  rþ  rÿ  r   Ú
create_envFTr  )ÚTranslationValidator)GrÝ  Úuse_duck_shaperø  ÚsettingsrB  ÚaxiomsrA  Ú
unique_idsrŒ  Úreal_tensor_prop_unbacked_valsr§  Úvar_to_range_slocr-  r�  r=   r=  Úvar_to_stackÚvar_to_hint_overrideÚsource_to_varÚreplacementsÚreplacements_slocsrŠ  Ú	divisibleÚexclusion_constraintsÚ	size_likeÚ
val_to_varÚunbacked_symfloat_counterÚunbacked_symint_counterÚdeferred_runtime_assertsÚnum_deferred_runtime_assertsrÇ   r�  rK  Ú_error_on_new_guardsÚruntime_asserts_frozenÚdim_constraintsÚcollectionsr   ÚcounterÚsymbol_guard_counterr  r¤  r¥  rÖ  Ú_prev_cache_keyr×  Ú_replacements_version_counterÚ_resimplify_floor_div_axiomsÚfx_node_cacher  Úunbacked_alloc_orderÚspecialization_stacksÚ_equality_graphÚ_unbacked_replacementsrÿ  Úspecializationsr  r  r  r  Ú	validatorrp   r&  ÚGraphrD  Úinserting_beforeÚoutputÚname_to_nodeÚ_shape_id_to_unbacked_symbolÚ_spec_symbol_to_compile_symbolÚ_shape_spec_pending_assumptions)r‡   rù  rú  rû  rü  rý  r  rþ  rÿ  r  r  s              rv   r  zShapeEnv._initH  sö  € ðL ÐÝÔ.ˆJå(à!5Ø+Ià%=Ø 3Ø!Ø8cØ'ð

ñ 

ô 

ˆŒð )+ˆŒØ46ˆŒõ
 %(¡E¤EˆŒð EGˆÔð RTˆÔ+ð
 JLˆÔØFHˆÔØ9;ˆÔ&Ø@BˆÔå9C¹¼ˆÔØCEˆÔð >@ˆÔ!à68ˆÔð =?ˆÔà<>ˆÔØDFˆÔå*-©%¬%ˆŒð
 FHˆÔ"õ -0©E¬EˆŒð LNˆŒØ)*ˆÔ&Ø'(ˆÔ$ð> ð 	Ô%ð -.ˆÔ)ÝˆŒØŒ�Š�lÑ#Ô#Ð#ØˆŒØ$)ˆÔ!Ø&+ˆÔ#Ø6:ˆÔÝ%0Ô%8Ñ%:Ô%:ˆŒõ <GÔ;NÑ;PÔ;PˆÔ!ð '0Ð7˜˜°RˆŒð( CEˆÔ+ð EGˆÔ-ð  $Ÿ}š}™œˆÔØ !ˆÔð ./ˆÔ*ð -1ˆÔ)ð ð 	Ôð :<ˆÔð6 >@ˆÔ!àKMˆÔ"ð QUˆÔØKOˆÔ#à*ˆÔå;E¹<¼<ˆÔàRÐRÐRÐRÐRÐRà/MÐ/MÑ/OÔ/OˆÔ,àÔ/ð 	=ØLÐLÐLÐLÐLÐLà1Ð1Ñ3Ô3ˆDŒNÝœŸšÑ)Ô)ˆDŒJð ŒJ×'Ò'¨¬
×(9Ò(9¸$Ñ(?Ô(?Ñ@Ô@Ð@ð ;=ˆDÔð DFˆÔ)ð OQˆÔ+ð ð 	Ô,Ð,Ð,rw   c                ó   — | j         j        S r„   )r   rù  rÚ   s    rv   rù  zShapeEnv.allow_scalar_outputsi  s   € àŒ}Ô1Ð1rw   c                ó   — | j         j        S r„   )r   rú  rÚ   s    rv   rú  z'ShapeEnv.allow_dynamic_output_shape_opsm  s   € àŒ}Ô;Ð;rw   c                ó   — | j         j        S r„   )r   rû  rÚ   s    rv   rû  z!ShapeEnv.assume_static_by_defaultq  s   € àŒ}Ô5Ð5rw   c                ó   — | j         j        S r„   )r   rü  rÚ   s    rv   rü  zShapeEnv.specialize_zero_oneu  s   € àŒ}Ô0Ð0rw   c                ó   — | j         j        S r„   )r   rý  rÚ   s    rv   rý  zShapeEnv.duck_shapey  s   € àŒ}Ô'Ð'rw   c                ó   — | j         j        S r„   )r   rþ  rÚ   s    rv   rþ  z4ShapeEnv.prefer_deferred_runtime_asserts_over_guards}  s   € àŒ}ÔHÐHrw   rN  r(   rO  ú$Callable[[sympy.Symbol], sympy.Expr]ró  c           
   #  óœ  K  — |j         }| j        |         } |t          t          || t          d¦  «        ¦  «        ¦  «        j        j        }t          |                      |  	                    |¦  «        ¦  «        ¦  «        }i }|D ]‹}t          |t          j        ¦  «        rot          |j        t          j        ¦  «        rPt          |j        t          j        ¦  «        r1|j        | j        vr#|j        | j        |j        <   |j        ||j        <   ŒŒ| j                             |¦  «         d| _        	 dV — |D ]}	| j                             |	d¦  «         Œ|D ]}	| j                             |	d¦  «         Œd| _        dS # |D ]}	| j                             |	d¦  «         Œ|D ]}	| j                             |	d¦  «         Œd| _        w xY w)aÒ  
        Temporarily add symbol-level axioms to the ShapeEnv. This is useful when you want to "fork"
        and have parallel universes of ShapeEnvs. For example, we use this when doing multi-graph
        compile so we can support various graphs with varying levels of specializations.

        This context manager allows for temporarily adding constraints to the shape environment
        based on a specialization function applied to a symbol associated with a source.

        Args:
            source: The source of the symbol to specialize
            check_fn: A function that takes a sympy Symbol and returns a sympy expression
                     representing a constraint/specialization to be applied
        NTF)rZ  r'  r"   r:   rt   rq   rŸ  r  Úget_implicationsrv  rj   rÒ   r¤  r¥  r¦  r©  rÓ   r(  r!  r€  rK  rˆ  )
r‡   rN  rO  rZ  Úsymro   Ú
new_axiomsÚadded_replacementsÚaxiomrŒ  s
             rv   Úpatch_source_specializationz$ShapeEnv.patch_source_specialization�  sì  è è € ð" Œ{ˆØÔ  Ô&ˆØˆx��w s¨Dµ#°tÑ<Ô<Ñ=Ô=Ñ>Ô>ÔCÔIˆÝ˜$×/Ò/°·²¸dÑ0CÔ0CÑDÔDÑEÔEˆ
ØÐàð 	:ð 	:ˆEå˜5¥%¤(Ñ+Ô+ð:å˜uœy­%¬,Ñ7Ô7ð:õ ˜uœy­%¬-Ñ8Ô8ð:ð ”I TÔ%6Ð6Ð6à/4¬y�Ô! %¤)Ñ,Ø05´	Ð" 5¤9Ñ-øØŒ×Ò˜:Ñ&Ô&Ð&ð ˆŒð	 ØˆEˆEˆEàð )ð )�Ø”—’  4Ñ(Ô(Ð(Ð(Ø'ð /ð /�ØÔ!×%Ò% a¨Ñ.Ô.Ð.Ð.ØˆDŒKˆKˆKøð	  ð )ð )�Ø”—’  4Ñ(Ô(Ð(Ð(Ø'ð /ð /�ØÔ!×%Ò% a¨Ñ.Ô.Ð.Ð.ØˆDŒKÐÐÐÐs   Ä5F ÆA	GrÝ   c                ó6   — d}d	d„}t          | |||¦  «         dS )
z(Compare another ShapeEnv for equivalence)r6  rÇ   r%  r;  rD  rA  r  r  r  r  r  r-  r8  r×  r4  r$  r)  r9  r:  Ú_expr_sym_node_idr=  r>  r?  rÄ  r×   Úvaluer   rf   c                óÌ   — | dk    rd„ |D ¦   «         S | dk    rd„ |                      ¦   «         D ¦   «         S | dk    r!t          |                     ¦   «         ¦  «        S | dv rd S |S )NrB  c                ó   — g | ]	}|j         ‘Œ
S r’   rr  ©r  Úgs     rv   r  z;ShapeEnv.check_equal.<locals>.map_value.<locals>.<listcomp>Ü  s   € Ð.Ð.Ð. 1˜œÐ.Ð.Ð.rw   r0  c                ó.   — i | ]\  }}|d „ |D ¦   «         “ŒS )c                ó   — g | ]	}|j         ‘Œ
S r’   rr  )r  Úras     rv   r  zFShapeEnv.check_equal.<locals>.map_value.<locals>.<dictcomp>.<listcomp>ß  s   € Ð2Ð2Ð2¨˜BœGÐ2Ð2Ð2rw   r’   )r  r  Úrass      rv   rŽ  z;ShapeEnv.check_equal.<locals>.map_value.<locals>.<dictcomp>ß  s-   € ÐOÐOÐO±v°q¸#˜Ð2Ð2¨cÐ2Ñ2Ô2ÐOÐOÐOrw   rE  )r7  r¤  r  )r�  rA  rñ  )rÄ  rY  s     rv   Ú	map_valuez'ShapeEnv.check_equal.<locals>.map_valueÙ  s†   € Ø�hŠˆà.Ð.¨Ð.Ñ.Ô.Ð.ØÐ2Ò2Ð2àOÐOÀÇÂÁÄÐOÑOÔOÐOØ˜Ò&Ð&å˜5Ÿ:š:™<œ<Ñ(Ô(Ð(Øð ð ð ð �tØˆLrw   N)rÄ  r×   rY  r   rf   r   )r8   )r‡   rÝ   Únon_state_variable_namesrb  s       rv   Úcheck_equalzShapeEnv.check_equal¯  s<   € ð$
Ð ðF	ð 	ð 	ð 	õ& 	$ D¨%Ð1IÈ9ÑUÔUÐUÐUÐUrw   c                óV   ‡‡— | j         €d S ddlmŠ dˆfd„Šˆfd„| j         D ¦   «         S )	Nr   )rµ   r~  rµ   rf   c                óÈ   •— t          | j        t          j        t          j        f¦  «        r| j        nt          j        | j        ¦  «        } ‰|| j        | j        ¦  «        S r„   )	rj   r~  rp   r"   r!   r5   Ú	from_fakerN  rR  )r~  Ú
inner_fakerµ   s     €rv   Úmaybe_transform_fakez>ShapeEnv._snapshot_tracked_fakes.<locals>.maybe_transform_fakeô  sX   ø€ õ ˜dœi­%¬,½¼Ð)GÑHÔHð9�”	�	å#Ô-¨d¬iÑ8Ô8ð ð �;˜z¨4¬;¸Ô8MÑNÔNÐNrw   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r’   r’   )r  r~  ri  s     €rv   r  z4ShapeEnv._snapshot_tracked_fakes.<locals>.<listcomp>   s%   ø€ ÐJÐJÐJ¨tÐ$Ð$ TÑ*Ô*ÐJÐJÐJrw   )r~  rµ   rf   rµ   )r  Útorch._dynamo.variables.builderrµ   )r‡   rµ   ri  s    @@rv   Ú_snapshot_tracked_fakesz ShapeEnv._snapshot_tracked_fakesî  sh   øø€ ØÔÐ%Ø�4à?Ð?Ð?Ð?Ð?Ð?ð
	Oð 
	Oð 
	Oð 
	Oð 
	Oð 
	Oð KÐJÐJÐJ°tÔ7IÐJÑJÔJÐJrw   rt   c                ó0   — t          | j        ¦  «        dz
  S )Nrî   )r¡  r  rÚ   s    rv   Ú_last_event_indexzShapeEnv._last_event_index  s   € Ý�4”;ÑÔ !Ñ#Ð#rw   c              #  óH   K  — d| _         	 d V — d| _         d S # d| _         w xY w©NTF)r  rÚ   s    rv   Ú
_recordingzShapeEnv._recording  s>   è è € à ˆÔð	&ØˆEˆEˆEà %ˆDÔÐÐø ˆDÔÐ%Ð%Ð%Ð%s   ‹ ˜	!Úorig_srˆ  r´  rÐ   c                ó4   — |                       ||d¦  «         d S )NÚeliminate_unbacked)Ú_set_replacement)r‡   rr  r´  s      rv   r©  zShapeEnv._eliminate_unbacked  s!   € à×Ò˜f eÐ-AÑBÔBÐBÐBÐBrw   rŒ  r�  úint | float | torch.Tensorc                óv   — t                                d||¦  «         t          j        |¦  «        | j        |<   dS )zˆUsed only when propagate_real_tensors; registers a value for an
        unbacked symbol, which can be used last resort to resolve hints.z*set_real_tensor_prop_unbacked_vals %s = %sN)rÇ   r�  rÒ   rª  r#  )r‡   rŒ  r�  s      rv   r˜  z+ShapeEnv.set_real_tensor_prop_unbacked_vals  s8   € õ 	�ŠÐ=¸qÀ!ÑDÔDÐDÝ16´¸qÑ1AÔ1AˆÔ+¨AÑ.Ð.Ð.rw   c                ó0  — t          |t          j        ¦  «        st          d|› �¦  «        ‚t          |t          j        ¦  «        st          d|› �¦  «        ‚t	          |¦  «        st          d|› �¦  «        ‚t	          |¦  «        st          d|› �¦  «        ‚| j                             |¦  «        }|�#t	          |¦  «        rt          |› d|› �¦  «        ‚|                      ||d¦  «         || j        |<   |�|                      ||d¦  «         d S d S )Nrõ  z.Expected new_s to have free unbacked symbols: z/Expected orig_s to have free unbacked symbols: z -> Úrename_unbacked_toÚrename_unbacked_to_dest)	rj   rÒ   r¦  rm   r<  r(  r‹  ru  rŠ  )r‡   rr  r´  Údests       rv   r«  zShapeEnv._rename_unbacked_to  sS  € å˜&¥%¤,Ñ/Ô/ð 	IÝ Ð!G¸vÐ!GÐ!GÑHÔHÐHÝ˜%¥¤Ñ.Ô.ð 	HÝ Ð!F¸uÐ!FÐ!FÑGÔGÐGÝ$ UÑ+Ô+ð 	Ý ØHÀÐHÐHñô ð õ % VÑ,Ô,ð 	Ý ØJÀ&ÐJÐJñô ð ð Ô ×$Ò$ VÑ,Ô,ˆØÐÝ$ TÑ*Ô*ð <Ý$¨Ð%:Ð%:°DÐ%:Ð%:Ñ;Ô;Ð;Ø×Ò˜f eÐ-AÑBÔBÐBØ*/ˆÔ Ñ'ØÐØ×!Ò! %¨Ð/HÑIÔIÐIÐIÐIð Ðrw   rd   rÜ  c                ó   — d S r„   r’   )r‡   rd   rÜ  s      rv   rÞ  zShapeEnv._constrain_is_bounded2  s	   € ð 	ˆrw   rà  rz   rá  c                óº   — |€d}|€t           }||k     rt          d|› d|› �¦  «        ‚|                      |||¬¦  «         | j                             |¦  «         d S )Nr   rå  ræ  ©Úcompiler_minÚcompiler_max)rJ   rÛ  Úconstrain_symbol_ranger,  rÖ  ©r‡   rd   rà  rá  s       rv   rÚ  z"ShapeEnv._constrain_range_for_size7  s˜   € ð ˆ;ØˆCØˆ;ÝˆCà�Š9ˆ9Ýð4Ø #ð4ð 4Ø.1ð4ð 4ñô ð ð
 	×#Ò#ØØØð 	$ñ 	
ô 	
ð 	
ð
 	Œ×Ò˜1ÑÔÐÐÐrw   c           	     ó*  — t          |t          j        ¦  «        rD|t          |¦  «        cxk    r|k    s(n t	          dt          |¦  «        › d|› d|› d�¦  «        ‚d S t          |t          j        ¦  «        r|                      |||¬¦  «         d S d S )Nrç  rè  ré  rê  r~  )rj   rÒ   rÓ   rt   rV   r¦  r�  r‚  s       rv   rë  zShapeEnv._constrain_rangeM  sÁ   € å�a�œÑ'Ô'ð 	Ø�3˜q™6œ6Ð(Ð(Ò(Ð( SÒ(Ð(Ð(Ð(Ý%Ð&Wµs¸1±v´vÐ&WÐ&WÈ3Ð&WÐ&WÐQTÐ&WÐ&WÐ&WÑXÔXÐXØˆFõ �a�œÑ&Ô&ð 	Ø×'Ò'ØØ Ø ð (ñ ô ð ð ð ð	ð 	rw   r"   rT  c                ó¸  — t          |t          ¦  «        sªt          |t          ¦  «        s||k    rt          d|› d|› �¦  «        ‚dS t          |j        j        t
          j        ¦  «        st          d¦  «        ‚|j        j        | urt          d¦  «        ‚t          j        |¦  «        | j	        |j        j        <   dS t          |j        j        t
          j        ¦  «        st          d¦  «        ‚|j        j        | urt          d¦  «        ‚t          |t          ¦  «        s(t          j        |¦  «        | j	        |j        j        <   dS |j        j        |j        j        urt          d¦  «        ‚t          |j        j        t
          j        ¦  «        st          d¦  «        ‚|  
                    |j        j        ¦  «        }|| j	        |j        j        <   dS )z±
        Given two SymInts, constrain them so that they must be equal.  NB:
        this will not work with SymInts that represent nontrivial expressions
        (yet!)
        rï  rð  zconstraining non-Symbols NYIzb.node.shape_env must be selfza.node.shape_env must be selfz)a.node.shape_env must be b.node.shape_envN)rj   r"   rm   rq   ro   rÒ   r¦  rl   rÓ   r(  r<  )r‡   rd   rT  Únew_vars       rv   rñ  zShapeEnv._constrain_unify_  s¶  € õ ˜!�VÑ$Ô$ð 	9Ý˜a¥Ñ(Ô(ð BØ˜’6�6Ý(Ð)?°QÐ)?Ð)?¸AÐ)?Ð)?Ñ@Ô@Ð@ð �6õ " !¤&¤+­u¬|Ñ<Ô<ð IÝ(Ð)GÑHÔHÐHØ”6Ô#¨4Ð/Ð/Ý(Ð)HÑIÔIÐIÝ16´¸qÑ1AÔ1A�Ô! !¤&¤+Ñ.Ð.Ð.õ
 ˜aœfœk­5¬<Ñ8Ô8ð EÝ$Ð%CÑDÔDÐDØŒvÔ tÐ+Ð+Ý$Ð%DÑEÔEÐEÝ˜a¥Ñ(Ô(ð 9Ý16´¸qÑ1AÔ1A�Ô! !¤&¤+Ñ.Ð.Ð.à”6Ô#¨1¬6Ô+;Ð;Ð;Ý(Ð)TÑUÔUÐUÝ! !¤&¤+­u¬|Ñ<Ô<ð IÝ(Ð)GÑHÔHÐHØŸ*š* Q¤V¤[Ñ1Ô1�Ø18�Ô! !¤&¤+Ñ.Ð.Ð.rw   c                ó   — t          ¦   «         S r„   )rï  rÚ   s    rv   rï  z+ShapeEnv._ignore_fresh_unbacked_symbols_tlsˆ  s   € Ý1Ñ3Ô3Ð3rw   c                ó    — t          |¦  «        S r„   rõ  rW  s     rv   rò  z+ShapeEnv._ignore_fresh_unbacked_symbols_set‹  s   € å1°!Ñ4Ô4Ð4rw   c              #  ó`   K  — t          ¦   «         5  dV — ddd¦  «         dS # 1 swxY w Y   dS )za
        Indicates that the newly allocated unbacked SymInts are being
        discarded
        N)rö  rÚ   s    rv   rì  z&ShapeEnv.ignore_fresh_unbacked_symbols�  s�   è è € õ 8Ñ9Ô9ð 	ð 	ØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ‘#£'ª'c                ó   — d| _         dS )zÈFreeze this ShapeEnv to stop accumulating guards

        A frozen ShapeEnv will ignore any further guards generated on it and
        only emit a warning which may lead to accuracy problems.
        TN)rK  rÚ   s    rv   ÚfreezezShapeEnv.freeze˜  s   € ð ˆŒˆˆrw   c                ó   — d| _         dS )a_  Freeze this ShapeEnv to stop adding deferred runtime asserts.

        We will error if you try to install a new runtime assert when it is
        frozen.  This would indicate a lowering violation, or perhaps something
        we know statically is already True but we are checking it again in a way
        that is not clearly dischargeable.
        TN)r3  rÚ   s    rv   Úfreeze_runtime_assertszShapeEnv.freeze_runtime_asserts¡  s   € ð '+ˆÔ#Ð#Ð#rw   rB  c                óŠ   — | j         sd S |j        }|| j        vrt          j        |d¬¦  «        | j        |<   | j        |         S )NTri  )r  rZ  r  rÒ   r¦  )r‡   rN  Úsrcnames      rv   Ú_create_symbol_for_sourcez"ShapeEnv._create_symbol_for_source­  sQ   € ØÔ3ð 	Ø�4Ø”+ˆØ˜Ô.Ð.Ð.Ý-2¬\¸'È4Ð-PÑ-PÔ-PˆDÔ! 'Ñ*ØÔ$ WÔ-Ð-rw   rù  rs   c                óN   — | j         r| j                             ||¦  «         d S d S r„   )r  rA  Úadd_var)r‡   rù  rs   s      rv   Ú
_add_z3varzShapeEnv._add_z3varµ  s5   € ØÔ/ð 	1ØŒN×"Ò" 6¨4Ñ0Ô0Ð0Ð0Ð0ð	1ð 	1rw   ro   rË   c                óL   — | j         r| j                             |¦  «         d S d S r„   )r  rA  Úadd_target_exprré  s     rv   Ú_add_target_exprzShapeEnv._add_target_expr¹  s3   € ØÔ/ð 	1ØŒN×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0ð	1ð 	1rw   c                óL   — | j         r| j                             |¦  «         d S d S r„   )r  rA  Úadd_assertionré  s     rv   Ú_add_assertionzShapeEnv._add_assertion½  s3   € ØÔ/ð 	/ØŒN×(Ò(¨Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/rw   c                óJ   — | j         r| j                             ¦   «          d S d S r„   )r  rA  ÚvalidaterÚ   s    rv   Ú_check_translation_validatez$ShapeEnv._check_translation_validateÁ  s1   € ØÔ/ð 	&ØŒN×#Ò#Ñ%Ô%Ð%Ð%Ð%ð	&ð 	&rw   r™  úCallable[..., object]r�   útuple[Any, ...]ú!tuple[torch.fx.Node | None, bool]c                óÄ  — ||f}d}| j         r·|| j        vr®t          d„ |D ¦   «         ¦  «        r,t          d„ |D ¦   «         ¦  «        st	          d¦  «        ‚d |fS d}t          d„ |D ¦   «         ¦  «        st	          d|j        › d|› �¦  «        ‚| j                             ||¦  «        x}| j        |<   || j        |j	        <   | j         
                    |d ¦  «        |fS )	NFc              3  ó   K  — | ]}|d u V — Œ	d S r„   r’   ©r  rd   s     rv   r&  z4ShapeEnv._create_fx_call_function.<locals>.<genexpr>Ò  s&   è è € Ð+Ð+ �1˜�9Ð+Ð+Ð+Ð+Ð+Ð+rw   c              3  óV   K  — | ]$}t          |t          j        j        ¦  «         V — Œ%d S r„   )rj   rp   r&  r»  r¡  s     rv   r&  z4ShapeEnv._create_fx_call_function.<locals>.<genexpr>Õ  s3   è è € ÐJÐJÀ�z¨!­U¬X¬]Ñ;Ô;Ð;ÐJÐJÐJÐJÐJÐJrw   z4Cannot mix SymNodes with fx_node and without fx_nodeTc              3  ó   K  — | ]}|d uV — Œ	d S r„   r’   r¡  s     rv   r&  z4ShapeEnv._create_fx_call_function.<locals>.<genexpr>ß  s&   è è € Ð3Ð3¨�q �}Ð3Ð3Ð3Ð3Ð3Ð3rw   zmissing arg in FX graph (z): )r  r;  r’  r0  rm   r‰   rD  rº  rE  rZ  r‹  )r‡   r™  r�   Únode_keyÚfreshrq   s         rv   Ú_create_fx_call_functionz!ShapeEnv._create_fx_call_functionÅ  s%  € ð ˜�:ˆàˆàÔ/ð 	0°HÀDÔDVÐ4VÐ4VåÐ+Ð+ dÐ+Ñ+Ô+Ñ+Ô+ð #õ ÐJÐJÀTÐJÑJÔJÑJÔJð Ý(ØNñô ð ð ˜U�{Ð"àˆEõ Ð3Ð3¨dÐ3Ñ3Ô3Ñ3Ô3ð YÝ$Ð%WÀÄÐ%WÐ%WÐQUÐ%WÐ%WÑXÔXÐXØ26´*×2JÒ2JÈ2ÈtÑ2TÔ2TÐTˆD�4Ô% hÑ/Ø+/ˆDÔ˜dœiÑ(àÔ!×%Ò% h°Ñ5Ô5°uÐ<Ð<rw   útorch.fx.Node | Nonec           	     ób  — | j         sd S | j        j        |ff}|| j        vr‚|                      ||¦  «         t          j        ddt          j        dd|j        ¦  «        ¦  «        }| j                             |¦  «        x}| j        |<   || j        |j        <   ||j	        d<   | j        |         S )Nz[^a-zA-Z0-9]r›  z[()]rp  rù  )
r  rD  r•  r;  r’  r  r�  rZ  rE  rš  )r‡   rù  rs   r¤  r  rq   s         rv   Ú _create_fx_placeholder_and_z3varz)ShapeEnv._create_fx_placeholder_and_z3varæ  sÀ   € ð
 Ô3ð 	Ø�4à”JÔ*¨V¨IÐ6ˆð
 ˜4Ô-Ð-Ð-à�OŠO˜F DÑ)Ô)Ð)åœ6Ø ¥b¤f¨W°b¸&¼+Ñ&FÔ&Fñô ˆLð 37´*×2HÒ2HÈÑ2VÔ2VÐVˆD�4Ô% hÑ/Ø+/ˆDÔ˜dœiÑ(ð #)ˆDŒI�hÑàÔ! (Ô+Ð+rw   rq   c                ó’   — | j         r=|�=| j                             |j        ¦  «         | j                             |¦  «         d S d S d S r„   )r  rE  rˆ  rZ  rD  Ú
erase_node)r‡   rq   s     rv   Ú_remove_fx_nodezShapeEnv._remove_fx_node  sW   € ØÔ/ð 	(°DÐ4DØÔ×!Ò! $¤)Ñ,Ô,Ð,ØŒJ×!Ò! $Ñ'Ô'Ð'Ð'Ð'ð	(ð 	(Ð4DÐ4Drw   r’  c                ó”   — ddl m} | j        r:|                      ¦   «         |j        t
          <    |¦   «         |j        t          <   d S d S )Nr   )Úget_current_node)Útorch._dynamo.utilsr®  r  rn  rš  r©   rª   )r‡   rq   r®  s      rv   Ú_add_fx_node_metadatazShapeEnv._add_fx_node_metadata  s^   € Ø8Ð8Ð8Ð8Ð8Ð8àÔ$ð 	=Ø,0×,BÒ,BÑ,DÔ,DˆDŒIÕ(Ñ)Ø*:Ð*:Ñ*<Ô*<ˆDŒIÕ&Ñ'Ð'Ð'ð	=ð 	=rw   c                 ó.   — t          t          dd¦  «        S )NÚsuppress_guardsFrí  r’   rw   rv   Ú_suppress_guards_tlszShapeEnv._suppress_guards_tls  s   € å•sÐ-¨uÑ5Ô5Ð5rw   c                óÆ   — t          t          d¦  «        sg t          _        |                      ¦   «         }t          j                             |¦  «         dt          _        d S )NÚsuppress_guards_stackT)r   rî  rµ  r³  rU  r²  ©r‡   rt  s     rv   r  zShapeEnv._suppress_guards_enter  sS   € å•sÐ3Ñ4Ô4ð 	+Ø(*�CÔ%Ø×'Ò'Ñ)Ô)ˆÝÔ!×(Ò(¨Ñ-Ô-Ð-Ø"�ÔÐÐrw   c                ó˜   — t          t          j        ¦  «        dk    rt          j                             ¦   «         nd}|t          _        d S )Nr   F)r¡  rî  rµ  rˆ  r²  r¶  s     rv   r  zShapeEnv._suppress_guards_exit  sI   € õ •3Ô,Ñ-Ô-°Ò1Ð1õ Ô%×)Ò)Ñ+Ô+Ð+àð 	ð
 "�ÔÐÐrw   ú_GeneratorContextManager[None]c                ó    — t          | ¦  «        S )z6Context manager to ignore all guards generated inside.)r  rÚ   s    rv   r²  zShapeEnv.suppress_guards#  s   € å Ñ%Ô%Ð%rw   c              #  óŽ   K  — | j         }| j        }d| _         d| _        	 dV — || _         || _        dS # || _         || _        w xY w)a-  Context manager that raises _ShapeEnvGuardError if a guard is attempted.

        Temporarily freezes the ShapeEnv and makes _check_frozen raise
        instead of warn, so that guard-installing code paths produce an
        exception that is not cached by the _inner_evaluate_expr LRU cache.
        TN)rK  r2  )r‡   Ú
old_frozenÚ	old_errors      rv   Úerror_on_new_guardszShapeEnv.error_on_new_guards'  sg   è è € ð ”[ˆ
ØÔ-ˆ	ØˆŒØ$(ˆÔ!ð	2ØˆEˆEˆEà$ˆDŒKØ(1ˆDÔ%Ð%Ð%øð %ˆDŒKØ(1ˆDÔ%Ð1Ð1Ð1Ð1s	    4 ´Aútuple[int, int, int, int]c                ó„   — t          | j        ¦  «        t          | j        ¦  «        | j        t          | j        ¦  «        fS )z—
        Defines the current "state" of the guards we've accumulated in this ShapeEnv.
        Determines when we need to invalidate our cache
        )r¡  r(  r*  r1  r#  rÚ   s    rv   rÖ  zShapeEnv._get_key9  s=   € õ �Ô!Ñ"Ô"Ý�”ÑÔØÔ-Ý�Ô3Ñ4Ô4ð	
ð 	
rw   c                óÊ   — t          | j        ¦  «        | j        d         k    rd| _        |                      ¦   «         }| j        |k    r|| _        | xj        dz  c_        d S d S )Nrî   T)r¡  r*  r8  r:  rÖ  r×  )r‡   Úcur_keys     rv   Ú_update_version_counterz ShapeEnv._update_version_counterE  sp   € õ
 ˆtŒ~ÑÔ $Ô"6°qÔ"9Ò9Ð9Ø04ˆDÔ-ð —-’-‘/”/ˆàÔ 7Ò*Ð*Ø#*ˆDÔ ØÐ!Ô! QÑ&Ð!Ô!Ð!Ð!ð +Ð*rw   Úex_sizeúSequence[IntLikeType]rR  r°   rÎ  c                óJ   — |                       t          |¦  «        ||¦  «        S r„   )Ú!_produce_dyn_sizes_from_int_tupler¢  )r‡   rÃ  rN  rR  s       rv   Ú_produce_dyn_sizeszShapeEnv._produce_dyn_sizesX  s*   € ð ×5Ò5Ý�'‰NŒN˜FÐ$4ñ
ô 
ð 	
rw   Útensor_sizeÚhint_overridesúdict[int, int] | Nonec                óˆ  — t          d„ |D ¦   «         ¦  «        st          d|› �¦  «        ‚ddlm}m} |si }t          |¦  «         |j        }|j        }g }	t          |¦  «        D �].\  }
}|  	                    | 
                    |
|¦  «         |||j        |
¦  «        ||
         ||
         t          j        |¬¦  «        }t          |t          ¦  «        rO|j        rH|j        |
         D ]:}| j                             t'           |||j        |
¦  «        |¦  «        ¦  «         Œ;t          j        rNt          |t(          j        ¦  «        r4t-          |t.          j        ¦  «        r| j                             |¦  «         |	                     |¦  «         �Œ0t5          |dd ¦  «        }t7          |¦  «        }|rŠt7          |¦  «        |k    rwt9          d„ |D ¦   «         ¦  «        r^t;          |¦  «        D ]N}
||
         }|�Bt          |	|
         t(          j        ¦  «        r"|
|pi vr|                      |	|
         |¦  «         ŒO|	S )Nc              3  ó6   K  — | ]}t          |¦  «         V — Œd S r„   )r  )r  rÏ   s     rv   r&  z=ShapeEnv._produce_dyn_sizes_from_int_tuple.<locals>.<genexpr>i  s-   è è € Ð?Ð?¨C•{ 3Ñ'Ô'Ð'Ð?Ð?Ð?Ð?Ð?Ð?rw   z0Expect size to be a plain tuple of ints but got r   ©ÚTensorPropertyr\   )Údo_not_specialize_zero_onerR  ry  c              3  ó   K  — | ]}|d uV — Œ	d S r„   r’   ©r  r�  s     rv   r&  z=ShapeEnv._produce_dyn_sizes_from_int_tuple.<locals>.<genexpr>Ÿ  s&   è è € Ð:Ð: a�A˜T�MÐ:Ð:Ð:Ð:Ð:Ð:rw   )r0  rm   r�  rÎ  r\   rV  rh  rj  r¯  Úcreate_symbolr‹  ÚSIZErÝ  r¹  rj   r±   rl  r@  rÖ  rÁ   rÒ   r¦  rR   rS   r,  rU  r`  r¡  r’  r‘  Ú_record_exclusion_constraint)r‡   rÈ  rN  rR  rÉ  rÎ  r\   Údynamic_dimsÚconstraint_dimsr¶  r‚  rÏ   rR  Úspecializationry  rX  Úevs                    rv   rÆ  z*ShapeEnv._produce_dyn_sizes_from_int_tupleb  s±  € õ Ð?Ð?°;Ð?Ñ?Ô?Ñ?Ô?ð 	Ý ØPÀ;ÐPÐPñô ð ð 	NÐMÐMÐMÐMÐMÐMÐMàð 	 ØˆNåÐ/Ñ0Ô0Ð0Ø'Ô5ˆà*Ô;ˆØ!#ˆÝ Ñ,Ô,ð 	ñ 	‰FˆAˆsØ×$Ò$Ø×"Ò" 1 cÑ*Ô*Ø$Ð$ V¨^Ô-@À!ÑDÔDØ˜Q”Ø Ô"Ý+1Ô+GØ!1ð %ñ ô ˆCõ Ð+Õ-EÑFÔFð
à$Ô2ð
ð '7Ô&DÀQÔ&Gð ð �NØÔ(×,Ò,Ý&Ø0Ð0°¸Ô9LÈaÑPÔPØ*ñô ñô ð ð õ Ô,ð(å˜s¥E¤LÑ1Ô1ð(õ # 3­¬	Ñ2Ô2ð(ð
 ”×"Ò" 3Ñ'Ô'Ð'Ø�KŠK˜ÑÔÐÑõ !Ð!1Ð3CÀTÑJÔJˆÝ�+ÑÔˆàð	Cå�NÑ#Ô# sÒ*Ð*ÝÐ:Ð:¨>Ð:Ñ:Ô:Ñ:Ô:ð +õ ˜3‘Z”Zð Cð C�Ø# AÔ&�à�NÝ" 4¨¤7­E¬LÑ9Ô9ð #à .Ð"6°BÐ7Ð7à×5Ò5°d¸1´g¸rÑBÔBÐBøØˆrw   rU  ÚexrK  rm  úDtuple[tuple[IntLikeType, ...], tuple[IntLikeType, ...], IntLikeType]c               ó¨  — t          |dd¦  «        }|�Y|j        | urP|                      |                     ¦   «         |                     ¦   «         |                     ¦   «         ||¬¦  «        S |                      |                     ¦   «         |                     ¦   «         |                     ¦   «         dg|                     ¦   «         z  ||¬¦  «        S )z¾Create symbolic sizes/strides/offset for a tensor.

        If the tensor has symbolic sizes from a different ShapeEnv,
        delegates to transfer_symbols_from_foreign_shape_env.
        Ú	fake_modeNrU  F)r`  rl   Ú'transfer_symbols_from_foreign_shape_envr¶  r·  r¸  Ú-_create_symbolic_sizes_strides_storage_offsetrX  )r‡   rÙ  rN  rR  rÜ  s        rv   Ú,create_symbolic_sizes_strides_storage_offsetz5ShapeEnv.create_symbolic_sizes_strides_storage_offset«  sÎ   € õ  ˜B ¨TÑ2Ô2ˆ	ØÐ  YÔ%8ÀÐ%DÐ%DØ×?Ò?Ø—’‘	”	Ø—	’	‘”Ø×!Ò!Ñ#Ô#ØØ!1ð @ñ ô ð ð ×AÒAØ�GŠG‰IŒIØ�IŠI‰KŒKØ×ÒÑÔØˆG�b—f’f‘h”hÑØØ-ð Bñ 
ô 
ð 	
rw   ©rR  rÉ  r½  rW  r¸  ra   c               óâ	  ‡#‡$— dd„Š#dd„Š$|€=ˆ#fd	„|D ¦   «         }t           j        gt          |¦  «        z  }t          ||¬
¦  «        }n|j        }|€i }t          |¦  «        D ]a\  }	}
||	         t           j        u rHt          |
¦  «        r9|
j        j	        }|�+|j
                             |
j        j        ¦  «        }|�|||	<   Œbddl}ddlm}m} t#          ˆ$fd„|D ¦   «         ¦  «        }t#          ˆ$fd„|D ¦   «         ¦  «        } ‰$|¦  «        }t%          d„ |D ¦   «         ¦  «        }|s-|                      |||dgt          |¦  «        z  |||¬¦  «        S i }g }t          |¦  «        D �]\  }	}t          |¦  «        rÎ|j        j        }|                     |¦  «        }|j        t-          |                     ¦   «         ¦  «        z
  rn|                      ||	          |||j        |	¦  «        ||	         t5          |d¦  «        r|j        |	         nd|¬¦  «        }|||<   |                     |¦  «         ŒÍ|                     |¦  «         Œã|                      |j        |¦  «        ¦  «         �Œg }|D ]°}t          |¦  «        r||j        j                             |¦  «        }|j        t-          |                     ¦   «         ¦  «        z
  r|                      ¦   «         j        j        }|                     |¦  «         Œ�|                      |j        |¦  «        ¦  «         Œ±t          |¦  «        rg|j        j                             |¦  «        }|j        t-          |                     ¦   «         ¦  «        z
  r|                      ¦   «         j        j        }n |j        |¦  «        }g }t          |¦  «        D ]Ž\  }	}||	         }|                     |                      || |||j        |	¦  «        ¬¦  «        ¦  «         tA          |d         tB          j"        ¦  «        r&|r$|	|v r ||	         | j
        |d         j        j        <   Œ�g }t          |¦  «        D ]H\  }	} ||	         }!|                     |                      | |! |||j#        |	¦  «        ¬¦  «        ¦  «         ŒI|                      || |||j$        ¦  «        ¬¦  «        }"t#          |¦  «        t#          |¦  «        |"fS )au  Transfer symbolic sizes/strides/offset from a foreign ShapeEnv
        into this one.

        If symbolic_context is None, each dimension is auto-classified as
        STATIC, DUCK, or UNBACKED based on whether the foreign symbol has
        a guarding hint.  If symbolic_context is provided (e.g. from
        _automatic_dynamic), its classification is used instead.

        For unbacked dims, strides are derived by substituting old foreign
        symbols with the newly created symbols, preserving stride-size
        relationships.  Hint overrides are read from the foreign ShapeEnv
        and transferred to the new one.r  ra   rf   r  c                ó†   — t          | ¦  «        st          j        S t          | ¦  «        st          j        S t          j        S r„   )r  r  r  r]  r  r  r  s    rv   Ú	_classifyzCShapeEnv.transfer_symbols_from_foreign_shape_env.<locals>._classifyè  s:   € Ý˜q‘>”>ð )Ý!Ô(Ð(Ý$ QÑ'Ô'ð +Ý!Ô*Ð*Ý”?Ð"rw   rz   c                ón   — t          | ¦  «        r%t          | ¦  «        sdS t          | j        ¦  «        S | S )z:Extract concrete hint.  For unbacked symbols returns None.N)r  r]  rn   rq   r  s    rv   rk   z?ShapeEnv.transfer_symbols_from_foreign_shape_env.<locals>._hintï  s:   € å˜1‰~Œ~ð 6Ý(¨Ñ+Ô+ð  Ø˜4Ý-¨a¬fÑ5Ô5Ð5ØˆHrw   Nc                ó&   •— g | ]} ‰|¦  «        ‘ŒS r’   r’   )r  Úszrã  s     €rv   r  zDShapeEnv.transfer_symbols_from_foreign_shape_env.<locals>.<listcomp>ø  s!   ø€ Ð;Ð;Ð;¨r˜Y˜Y r™]œ]Ð;Ð;Ð;rw   )rh  ri  r   rÍ  c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r„   r’   )r  ræ  rk   s     €rv   r&  zCShapeEnv.transfer_symbols_from_foreign_shape_env.<locals>.<genexpr>  s+   øè è € Ð2Ð2 b˜˜˜b™	œ	Ð2Ð2Ð2Ð2Ð2Ð2rw   c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r„   r’   )r  Úsdrk   s     €rv   r&  zCShapeEnv.transfer_symbols_from_foreign_shape_env.<locals>.<genexpr>  s+   øè è € Ð6Ð6¨˜%˜% ™)œ)Ð6Ð6Ð6Ð6Ð6Ð6rw   c              3  ó2   K  — | ]}|t           j        u V — Œd S r„   )r  r  )r  Údss     rv   r&  zCShapeEnv.transfer_symbols_from_foreign_shape_env.<locals>.<genexpr>  s*   è è € ÐMÐM¸˜2¥Ô!4Ð4ÐMÐMÐMÐMÐMÐMrw   Frà  rj  rU  rŠ  rS  )r  ra   rf   r  )r  ra   rf   rz   )%r  r  r¡  r±   rh  r¯  r  r  rq   rl   r&  r‹  ro   rÒ   r�  rÎ  r\   r¢  r’  rÞ  r±  r¦   rA  r  rÒ  rÓ  r   rj  rU  rÓ   Úcreate_unbacked_symintr‹  rj   rp   r"   ÚSTRIDEÚSTORAGE_OFFSET)%r‡   r½  rW  r¸  rN  rR  rÉ  rh  ri  r‚  ræ  Úforeign_envÚopt_hintrÒ   rÎ  r\   rÃ  Ú	ex_strideÚex_storage_offsetÚhas_unbackedÚ
old_to_newÚnew_size_exprsÚold_szÚold_exprr·  rR  Únew_stride_exprsré  Únew_offset_exprÚ	sym_sizesru   Úsym_stridesÚstride_exprÚhint_strideÚ
sym_offsetrã  rk   s%                                      @@rv   rÝ  z0ShapeEnv.transfer_symbols_from_foreign_shape_envÍ  sà  øø€ ð6	#ð 	#ð 	#ð 	#ð	ð 	ð 	ð 	ð Ð#Ø;Ð;Ð;Ð;°UÐ;Ñ;Ô;ˆMÝ)Ô6Ð7½#¸e¹*¼*ÑDˆOÝ7Ø+Ø /ð ñ  ô  ÐÐð
 -Ô:ˆMð
 Ð!ØˆNÝ˜uÑ%Ô%ð 	5ð 	5‰EˆAˆrØ˜QÔ¥:Ô#6Ð6Ð6½;Àr¹?¼?Ð6Ø œgÔ/�ØÐ*Ø*Ô?×CÒCÀBÄGÄLÑQÔQ�HØÐ+Ø,4˜ qÑ)øàˆˆˆàMÐMÐMÐMÐMÐMÐMÐMåÐ2Ð2Ð2Ð2¨EÐ2Ñ2Ô2Ñ2Ô2ˆÝÐ6Ð6Ð6Ð6¨gÐ6Ñ6Ô6Ñ6Ô6ˆ	Ø!˜E .Ñ1Ô1ÐåÐMÐM¸}ÐMÑMÔMÑMÔMˆàð 
	à×EÒEØØØ!Ø��#˜e™*œ*Ñ$ØØ!1Ø-ð Fñ ô ð ð, 46ˆ
Ø+-ˆÝ" 5Ñ)Ô)ð 	=ñ 	=‰IˆAˆvÝ˜6Ñ"Ô"ð =Ø!œ;Ô+�Ø#×,Ò,¨ZÑ8Ô8�ØÔ(­3¨z×/@Ò/@Ñ/BÔ/BÑ+CÔ+CÑCð 4à×,Ò,Ø œ
Ø,Ð,¨V°^Ô5HÈ!ÑLÔLØ% aÔ(å"Ð#3Ð5GÑHÔHð"Ð(Ô9¸!Ô<Ð<à!Ø)9ð -ñ ô �Cð ,/�J˜xÑ(Ø"×)Ò)¨#Ñ.Ô.Ð.Ð.à"×)Ò)¨(Ñ3Ô3Ð3Ð3à×%Ò% m e¤m°FÑ&;Ô&;Ñ<Ô<Ð<Ñ<ð
 .0ÐØð 	;ð 	;ˆBÝ˜2‰Œð ;Øœ7œ<×0Ò0°Ñ<Ô<�ØÔ(­3¨z×/@Ò/@Ñ/BÔ/BÑ+CÔ+CÑCð Gà#×:Ò:Ñ<Ô<ÔAÔF�HØ ×'Ò'¨Ñ1Ô1Ð1Ð1à ×'Ò'¨¨¬°bÑ(9Ô(9Ñ:Ô:Ð:Ð:õ �~Ñ&Ô&ð 	<Ø,Ô1Ô6×?Ò?À
ÑKÔKˆOØÔ+­c°*×2CÒ2CÑ2EÔ2EÑ.FÔ.FÑFð JØ"&×"=Ò"=Ñ"?Ô"?Ô"DÔ"I�øà+˜eœm¨NÑ;Ô;ˆOð ˆ	Ý Ñ/Ô/ð 	Wð 	W‰FˆAˆsØ˜1”:ˆDØ×ÒØ×&Ò&ØØØ/Ð/°¸Ô8KÈQÑOÔOð 'ñ ô ñô ð õ ˜9 Rœ=­%¬,Ñ7Ô7ðWà"ðWð ˜Ð'Ð'àESÐTUÔEV�Ô)¨)°B¬-Ô*<Ô*AÑBøàˆÝ'Ð(8Ñ9Ô9ð 	ð 	‰NˆAˆ{Ø# Aœ,ˆKØ×ÒØ×&Ò&ØØ$Ø/Ð/°¸Ô8MÈqÑQÔQð 'ñ ô ñô ð ð ð ×+Ò+ØØ"Ø'Ð'¨°Ô0MÑNÔNð ,ñ 
ô 
ˆ
õ �YÑÔ¥ {Ñ!3Ô!3°ZÐ?Ð?rw   rñ  rò  Úis_dim_dynamicúSequence[bool]c               óº  ‡ ‡‡‡‡— t          |¦  «        }‰si Š|€´d g|z  }	d g|z  }
g }g }t          |¦  «        D ]a}||         rt          j        }n ‰ j        rt          j        }nt          j        }|                     |¦  «         |                     |¦  «         Œbt          j        g|z  }t          j        g|z  }t          |||	|
¬¦  «        }t          |¦  «         |j        }	|j        }
|j        }|j        }t          d„ |D ¦   «         ¦  «        rt          j        nt          j        }t          d„ |D ¦   «         ¦  «        }t          |¦  «        |k    r!t!          t          |¦  «        › d|› �¦  «        ‚t          |¦  «        |k    r!t!          t          |¦  «        › d|› �¦  «        ‚t          |	¦  «        |k    rt!          d|› �¦  «        ‚t          |
¦  «        |k    rt!          d|› �¦  «        ‚ddlmŠmŠ ‰                      |‰|‰¬	¦  «        }‰                      ‰|||||
||¦  «        }ˆˆˆˆ ˆfd
„t-          t/          ||¦  «        ¦  «        D ¦   «         }t-          |¦  «        D ]=\  }}t1          |t2          j        ¦  «        r|‰v r‰|         ‰ j        |j        j        <   Œ>g }t-          |¦  «        D ]±\  }}|€t!          d|› �¦  «        ‚|                     ‰ j        ¦  «        }t1          |t@          tB          j"        j#        j$        f¦  «        rtA          |¦  «        }n||         }|                     ‰  %                    || ‰‰‰j&        |¦  «        ¬¦  «        ¦  «         Œ²‰  %                    ‰  '                    | ‰‰‰j(        ¦  «        |d |¬¦  «        | ‰‰‰j(        ¦  «        ¬¦  «        }tS          |¦  «        tS          |¦  «        |fS )N©rh  ri  rj  rk  c              3  ó6   K  — | ]}|t           j        k    V — Œd S r„   ©r  r  ©r  rI  s     rv   r&  zIShapeEnv._create_symbolic_sizes_strides_storage_offset.<locals>.<genexpr>Ã  s*   è è € ÐAÐA¨a�1�
Ô)Ò)ÐAÐAÐAÐAÐAÐArw   c              3  ó6   K  — | ]}|t           j        k    V — Œd S r„   r  r  s     rv   r&  zIShapeEnv._create_symbolic_sizes_strides_storage_offset.<locals>.<genexpr>Æ  s*   è è € ÐMÐM¸!˜q¥JÔ$5Ò5ÐMÐMÐMÐMÐMÐMrw   ry  zlen(constraint_sizes) != zlen(constraint_strides) != r   rÍ  )rÉ  c                ó”   •— g | ]D\  }\  }}‰                      |‰                     ||¦  «         ‰‰‰j        |¦  «        ¬ ¦  «        ‘ŒES )rŠ  )r‹  r‹  rÓ  )	r  r‚  rR  ru   rÎ  r\   rÉ  r‡   rN  s	       €€€€€rv   r  zJShapeEnv._create_symbolic_sizes_strides_storage_offset.<locals>.<listcomp>á  ss   ø€ ð 
ð 
ð 
ñ �‘;�C˜ð ×"Ò"ØØ#×'Ò'¨¨4Ñ0Ô0Ø+Ð+¨F°NÔ4GÈÑKÔKð #ñ ô ð
ð 
ð 
rw   zstride_expr is None for index rŠ  ©Údynamic_dimÚconstraint_dimrR  )*r¡  r‘  r  r  rû  r  r  rU  r  r±   rV  rj  rk  rh  ri  r0  rm   r�  rÎ  r\   rÆ  Ú_compute_symbolic_strider¯  r€  rj   rp   r"   r&  rq   ro   r±  rŒ  rt   rÒ   r_  r`  rÓ   r‹  rí  rÒ  rî  r¢  )r‡   rÃ  rñ  rò  rÿ  rN  rR  rÉ  rX  rj  rk  rÕ  ri  r‚  rI  rh  Údynamic_offsetÚare_sizes_staticr¶  r·  rú  rR  rÀ  rü  rý  rÁ  rÎ  r\   s   `    ` `                  @@rv   rÞ  z6ShapeEnv._create_symbolic_sizes_strides_storage_offsetƒ  sÄ  øøøøø€ õ$ �'‰lŒlˆàð 	 ØˆNð Ð#Ø59°F¸S±LÐØ7;°f¸s±lÐØˆLØ ˆOÝ˜3‘Z”Zð 
*ð 
*�ð " !Ô$ð (Ý"Ô*�A�AØÔ2ð (Ý"Ô)�A�Aå"œ�AØ×#Ò# AÑ&Ô&Ð&Ø×&Ò& qÑ)Ô)Ð)Ð)Ý&œOÐ,¨sÑ2ˆLÝ)Ô6Ð7¸#Ñ=ˆOå7Ø*Ø /Ø!1Ø#5ð	 ñ  ô  Ðõ 	Ð/Ñ0Ô0Ð0Ø+Ô<ÐØ-Ô@ÐØ(Ô6ˆØ*Ô:ˆõ ÐAÐA°=ÐAÑAÔAÑAÔAð!�JÔÐå”ð 	õ
 ÐMÐM¸}ÐMÑMÔMÑMÔMÐåˆ}ÑÔ Ò$Ð$Ý ¥C¨Ñ$6Ô$6Ð!AÐ!A¸CÐ!AÐ!AÑBÔBÐBÝˆÑÔ 3Ò&Ð&Ý ¥C¨Ñ$8Ô$8Ð!CÐ!C¸cÐ!CÐ!CÑDÔDÐDÝÐÑ Ô  CÒ'Ð'Ý Ð!B¸SÐ!BÐ!BÑCÔCÐCÝÐ!Ñ"Ô" cÒ)Ð)Ý Ð!D¸sÐ!DÐ!DÑEÔEÐEàMÐMÐMÐMÐMÐMÐMÐMà!%×!GÒ!GØ�VÐ-¸nð "Hñ "
ô "
ˆð ×.Ò.ØØØØØØØØñ	
ô 	
ˆð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ #,­C°°gÑ,>Ô,>Ñ"?Ô"?ð
ñ 
ô 
ˆ	õ   	Ñ*Ô*ð 	Mð 	M‰FˆAˆsÝ˜#�uœ|Ñ,Ô,ð M°°nÐ1DÐ1DØ;IÈ!Ô;L�Ô)¨#¬(¬-Ñ8øàˆ
Ý'¨Ñ/Ô/ð 	ð 	‰NˆAˆ{ð Ð"Ý$Ð%IÀaÐ%IÐ%IÑJÔJÐJð &×.Ò.¨tÔ/EÑFÔFˆKÝ˜+­­U¬ZÔ-?Ô-GÐ'HÑIÔIð +Ý! +Ñ.Ô.��à'¨œl�Ø×ÒØ×&Ò&ØØ$Ø/Ð/°¸Ô8MÈqÑQÔQð 'ñ ô ñô ð ð ð "×3Ò3Ø×ÒØ!Ø$Ð$ V¨^Ô-JÑKÔKØ*Ø#Ø!1ð ñ ô ð #Ø'Ð'¨°Ô0MÑNÔNð 4ñ 

ô 

Ðõ �YÑÔ¥ zÑ!2Ô!2Ð4FÐFÐFrw   r¶  úSequence[sympy.Expr]ri  úSequence[DimDynamic]rk  úASequence[StrictMinMaxConstraint | RelaxedUnspecConstraint | None]r  c	           	     óì  — ddl m}	m}
 d gt          |¦  «        z  }i }d„ t	          |¦  «        D ¦   «         }|                     t          ¬¦  «         |D ]÷\  }}| }|t          |¦  «        dz
  k    o ||         ||dz            ||dz            z  k    }|dv r|st          j        |¦  «        }n�||         }|t          j
        k    r||v r	||         }n\|}|t          j
        k    r|rt          j        nt          j        }|                      | |
||	j        |¦  «        |||         |¬¦  «        }|||<   ||         |z  |||         |z  <   Œøt          d„ |D ¦   «         ¦  «        st!          d	¦  «        ‚|S )
Nr   rÍ  c                ó   — g | ]
\  }}|| f‘ŒS r’   r’   )r  r‚  rÏ   s      rv   r  z5ShapeEnv._compute_symbolic_stride.<locals>.<listcomp>%  s"   € ÐAÐAÐA¡& ! S�S˜1˜"�IÐAÐAÐArw   rÃ  rî   ©r   rî   r  c              3  ó   K  — | ]}|d uV — Œ	d S r„   r’   )r  rù  s     rv   r&  z4ShapeEnv._compute_symbolic_stride.<locals>.<genexpr>F  s&   è è € Ð1Ð1 Q�1˜D�=Ð1Ð1Ð1Ð1Ð1Ð1rw   z$All stride elements must be non-None)r�  rÎ  r\   r¡  r¯  rÏ  rð   rÒ   rÓ   r  r  r  r  rÒ  rí  r0  rm   )r‡   rN  r¶  rÃ  rñ  ri  rk  r  rR  rÎ  r\   r·  Ú
candidatesÚval_listrÏ   Úneg_ir‚  Úcontiguous_strideÚ
out_strideÚdynamic_strideÚ
dyn_strides                        rv   r  z!ShapeEnv._compute_symbolic_stride  sÝ  € ð 	NÐMÐMÐMÐMÐMÐMÐMà+/¨&µ3°t±9´9Ñ*<ˆØ46ˆ
ð BÐA­I°iÑ,@Ô,@ÐAÑAÔAˆØ�ŠÕ0ˆÑ1Ô1Ð1à"ð 	@ð 	@‰JˆC�Ø�ˆAà•S˜‘^”^ aÑ'Ò'ð FØ˜a”L G¨A°©E¤N°Y¸qÀ1¹uÔ5EÑ$EÒEð ð �fˆ}ˆ}Ð%6ˆ}Ý"œ]¨3Ñ/Ô/�
�
à!0°Ô!3�Ø!¥ZÔ%<Ò<Ð<ÀÈ
ÐARÐARà!+¨C¤�J�Jð "0�JØ%­Ô)@Ò@Ð@à1AÐV�JÔ-Ð-ÅzÄð #ð "&×!3Ò!3ØØ,Ð,¨V°^Ô5JÈAÑNÔNØ$.Ø'9¸!Ô'<Ø)9ð "4ñ "ô "�Jð #ˆF�1‰IØ+/°¬7°ZÑ+?ˆJ�w˜q”z CÑ'Ñ(Ð(åÐ1Ð1¨&Ð1Ñ1Ô1Ñ1Ô1ð 	IÝ Ð!GÑHÔHÐHØˆrw   ©rN  rR  ru   ú(int | float | bool | torch.SymInt | NoneúSource | Nonec          	     ó   — | j         rl|�j|                      |¦  «        }|€t          d¦  «        ‚|                      |t          ¦  «        }|                      t          j        ||¦  «        ¦  «         nd}t          |t          j	        ¦  «        rG|�5t	          |¦  «        |k    r"t          dt	          |¦  «        › d|› �¦  «        ‚t	          |¦  «        }n7t          |¦  «        rd}t          t          || t          ||¬¦  «        ¦  «        }|S )zäCreate a SymInt value from a symbolic expression

        If you know what the current hint value of the SymInt to be created
        is, pass it into hint.  Otherwise, pass None and we will make our best
        guess

        Núsymbol must not be Nonez	int(sym)=ú	 != hint=©Úfx_node)r  r�  rm   r©  rt   r˜  rÒ   r¤  rj   rÓ   r<  r"   r:   ©r‡   rR  ru   rN  rù  r#  r¸  s          rv   r‹  zShapeEnv.create_symintnodeJ  s  € ð Ô/ð 	°FÐ4Fà×3Ò3°FÑ;Ô;ˆFØˆ~Ý$Ð%>Ñ?Ô?Ð?ð ×;Ò;¸FÅCÑHÔHˆGð ×Ò¥¤¨°Ñ 5Ô 5Ñ6Ô6Ð6Ð6àˆGõ �c�5œ=Ñ)Ô)ð 	IØÐÝ�s‘8”8˜tÒ#Ð#Ý(Ð)NµS¸±X´XÐ)NÐ)NÈÐ)NÐ)NÑOÔOÐOÝ�c‘(”(ˆCˆCõ % SÑ)Ô)ð Ø�Ý�  d­C°¸wÐGÑGÔGÑHÔHˆCØˆ
rw   r`   c          	     óD  — | j         rl|�j|                      |¦  «        }|€t          d¦  «        ‚|                      |t          ¦  «        }|                      t          j        ||¦  «        ¦  «         nd}t          |t          j	        ¦  «        rG|�5t	          |¦  «        |k    r"t          dt	          |¦  «        › d|› �¦  «        ‚t	          |¦  «        }nIt          |¦  «        r|�t          d|› �¦  «        ‚t          t          || t          ||¬¦  «        ¦  «        }|S )z2Create a SymFloat value from a symbolic expressionNr   zfloat(sym)=r!  z'hint must be None for unbacked symbol: r"  )r  r�  rm   r©  rb  r˜  rÒ   r¤  rj   rc  r<  r!   r:   r$  s          rv   Úcreate_symfloatnodezShapeEnv.create_symfloatnodex  s8  € ð Ô/ð 	°FÐ4Fà×3Ò3°FÑ;Ô;ˆFØˆ~Ý$Ð%>Ñ?Ô?Ð?ð ×;Ò;¸FÅEÑJÔJˆGð ×Ò¥¤¨°Ñ 5Ô 5Ñ6Ô6Ð6Ð6àˆGõ �c�5œ;Ñ'Ô'ð 	MØÐÝ˜‘:”: Ò%Ð%Ý(Ð)Rµu¸S±z´zÐ)RÐ)RÈDÐ)RÐ)RÑSÔSÐSÝ˜‘*”*ˆCˆCõ % SÑ)Ô)ð ØÐ#Ý(ØGÀ#ÐGÐGñô ð õ �7 3¨­e°TÀ7ÐKÑKÔKÑLÔLˆCØˆ
rw   rÏ   c                ó>   — | j                              ||f¦  «         d S r„   )r+  rU  )r‡   rR  rÏ   s      rv   rÔ  z%ShapeEnv._record_exclusion_constraint¢  s#   € àÔ"×)Ò)¨3°¨*Ñ5Ô5Ð5Ð5Ð5rw   rY  r	  r  Úexcluded_valuec                ó’   — |                       |||¬¦  «        }|�|                      ||¦  «         |                      |||¬¦  «        S )z1Create a SymInt wrapping a new unspecified symbol)rN  r	  NrŠ  )Úcreate_unspecified_symbolrÔ  r‹  )r‡   rY  rN  r	  r(  rR  s         rv   Ú$create_unspecified_symint_and_symbolz-ShapeEnv.create_unspecified_symint_and_symbol¦  sk   € ð ×,Ò,ØØØ#ð -ñ 
ô 
ˆð
 Ð%Ø×-Ò-¨c°>ÑBÔBÐBØ×%Ò%ØØØð &ñ 
ô 
ð 	
rw   r    c                óJ   — t          t          || t          d¦  «        ¦  «        S )z7Create a SymBool object from a sympy boolean expressionN)r    r:   rr   ©r‡   rR  s     rv   Úcreate_symboolnodezShapeEnv.create_symboolnode¼  s    € õ •w˜s D­$°Ñ5Ô5Ñ6Ô6Ð6rw   Úprefixr×   r%  r$  r)  úSymNode | Nonec           
     óP  ‡‡‡— t           j        d uo-t          ‰¦  «        t           j                             d¦  «        v }|€|                      |¦  «        \  }}n	|j        d}}t                               d|‰‰j        ‰j	        |||¬¦  «         t          dˆˆˆfd„¬¦  «         d S )Nú,rp  z%s %s [%s, %s] %s%s©Ú
stack_infoÚcreate_unbacked_symbolc                 ó°   •— t          ‰¦  «        t          ‰ ¦  «        d‰j        › d‰j        › d�t	          j        d¦  «        t	          j        ¦   «         dœS )Nú[rØ  rê  r  )rù  Únode_idr%  Ú
user_stackrã  )r×   Úidr(  r)  r.   Úget_user_stackÚget_framework_stack)r)  rù  r%  s   €€€rv   r|  z6ShapeEnv._log_create_unbacked_symbol.<locals>.<lambda>Þ  sU   ø€ Ý˜f™+œ+Ý˜h™<œ<Ø1˜"œ(Ð1Ð1 b¤hÐ1Ð1Ð1Ý(Ô7¸Ñ:Ô:Ý#Ô7Ñ9Ô9ð!ð !€ rw   ©Úmetadata_fn)rÝ  Úextended_debug_create_symbolr×   r×  Ú_get_stack_summaryrZ  rÇ   r�  r(  r)  r/   )	r‡   r/  rù  r%  rN  r)  Úis_debugÚslocÚmaybe_extra_debugs	     `` `   rv   Ú_log_create_unbacked_symbolz$ShapeEnv._log_create_unbacked_symbolÂ  sî   øøø€ õ Ô6¸dÐBð <ÅsØñH
ô H
åÔ0×6Ò6°sÑ;Ô;ðH<ˆð ˆ>Ø&*×&=Ò&=¸hÑ&GÔ&GÑ#ˆDÐ#Ð#à&,¤k°2Ð#ˆDÝ�ŠØ!ØØØŒHØŒHØØØð 	ñ 		
ô 		
ð 		
õ 	Ø$ðð ð ð ð ð ð		
ñ 		
ô 		
ð 		
ð 		
ð 		
rw   r!   c                ó–  — t          t          j        | j        ¦  «        }| xj        dz  c_        | j        dxx         dz  cc<   |                      ¦   «         s| j                             |¦  «         t          j	        d¬¦  «        | j
        |<   t          j        ¦   «         x}| j        |<   |j        st          d¦  «        ‚|                      ¦   «         }t#          ||¦  «        | j        |<   |                      |t(          ¦  «        }t+          || t(          d|¬¦  «        }|                      d|||¬¦  «         t/          |¦  «        S )	z,Create a symbolic float without a hint valuerî   r5  ©ró  úvr must be floatNr"  Úcreate_unbacked_symfloat©r)  )rP   rS   r6  r.  r6  rï  r¤  rU  rX   Úextractr%  rW   Úunknownr§  Úis_floatrm   Ú	_get_slocr¿   r$  r©  rb  r:   rD  r!   ©r‡   rù  r%  rB  r#  r)  s         rv   rH  z!ShapeEnv.create_unbacked_symfloatç  sX  € õ  +ÝÔ Ô!?ñ 
ô  
ˆð 	Ð&Ô&¨!Ñ+Ð&Ô&ØŒÐ-Ð.Ð.Ô.°!Ñ3Ð.Ð.Ñ.Ø×6Ò6Ñ8Ô8ð 	?ØÔ/×6Ò6°vÑ>Ô>Ð>Ý$5Ô$=À1Ð$EÑ$EÔ$EˆÔ˜&Ñ!Ý)4Ô)<Ñ)>Ô)>Ð>ˆˆTÔ˜vÑ&ØŒ{ð 	5Ý Ð!3Ñ4Ô4Ð4Ø�~Š~ÑÔˆÝ)8¸¸tÑ)DÔ)DˆÔ˜vÑ&ð ×7Ò7¸ÅÑFÔFˆå˜6 4­°¸gÐFÑFÔFˆØ×(Ò(Ø&¨°¸Xð 	)ñ 	
ô 	
ð 	
õ ˜Ñ!Ô!Ð!rw   c                óž  — t          t          j        | j        d¬¦  «        }| xj        dz  c_        |                      ¦   «         s| j                             |¦  «         | j        dxx         dz  cc<   t          j	        d¬¦  «        | j
        |<   |                      ¦   «         x}| j        |<   |j        st          d¦  «        ‚|                      ¦   «         }t!          ||¦  «        | j        |<   |                      |t&          ¦  «        }t)          || t&          d|¬¦  «        }|                      d	||||¬
¦  «         t-          |¦  «        S )z.Create a symbolic integer without a hint valueTri  rî   r5  rF  úvr must be intNr"  rì  rI  )rP   rS   r5  r/  rï  r¤  rU  r6  rX   rJ  r%  Ú _default_unspecified_value_ranger§  r°  rm   rM  r¿   r$  r©  rt   r:   rD  r"   )r‡   rN  rù  r%  rB  r#  r)  s          rv   rì  zShapeEnv.create_unbacked_symint  sd  € õ  +ÝÔ˜tÔ;ÀTð 
ñ  
ô  
ˆð 	Ð$Ô$¨Ñ)Ð$Ô$Ø×6Ò6Ñ8Ô8ð 	?ØÔ/×6Ò6°vÑ>Ô>Ð>ØŒÐ-Ð.Ð.Ô.°!Ñ3Ð.Ð.Ñ.Ý$5Ô$=À1Ð$EÑ$EÔ$EˆÔ˜&Ñ!Ø)-×)NÒ)NÑ)PÔ)PÐPˆˆTÔ˜vÑ&ØŒyð 	3Ý Ð!1Ñ2Ô2Ð2Ø�~Š~ÑÔˆÝ)8¸¸tÑ)DÔ)DˆÔ˜vÑ&ð ×7Ò7¸ÅÑDÔDˆå˜6 4­¨d¸GÐDÑDÔDˆØ×(Ò(Ø$ f¨b°&À8ð 	)ñ 	
ô 	
ð 	
õ �hÑÔÐrw   c                ó6   — t          |t          j        ¦  «        S )zJCheck if a sympy symbol matches the naming convention for unbacked symbols)rR   rS   r5  )r‡   rù  s     rv   rÙ  zShapeEnv.is_unbacked_symint  s   € å˜f¥dÔ&7Ñ8Ô8Ð8rw   Úsym_intÚshape_idr  c                óÐ   — |€dS | j                              |¦  «        }|€|j        j        | j         |<   dS |                      |d¬¦  «        }t          j        ||k    ¦  «         dS )aH  
        Dedup unbacked symbols sharing a `shape_id` via a runtime equality
        check. The first symbol for a `shape_id` is recorded; subsequent
        symbols emit `torch._check(new == existing)` so the ShapeEnv learns
        the equality without changing symbol identity.

        No-op when `shape_id` is None.
        NrÏ  )rF  r‹  rq   ro   r‹  rp   r  )r‡   rS  rT  Úexisting_symÚexisting_symints        rv   Ú_add_shape_id_eq_checkzShapeEnv._add_shape_id_eq_check   su   € ð ÐØˆFØÔ8×<Ò<¸XÑFÔFˆØÐØ:A¼,Ô:KˆDÔ-¨hÑ7ØˆFØ×0Ò0°ÀDÐ0ÑIÔIˆÝŒ�W Ò/Ñ0Ô0Ð0Ð0Ð0rw   c                ó¼  — t          t          j        | j        d¬¦  «        }| xj        dz  c_        |                      ¦   «         s| j                             |¦  «         | j        dxx         dz  cc<   t          j	        d¬¦  «        | j
        |<   t          dd¦  «        x}| j        |<   |j        st          d¦  «        ‚|                      d¦  «        }t!          ||¦  «        | j        |<   |                      |t&          ¦  «        }t)          t+          j        |d¦  «        | t&          d	|¬
¦  «        }|                      d|||¬¦  «         t1          |¦  «        S )z.Create a symbolic boolean without a hint valueTri  rî   r5  rF  r   rP  z(default value range for unbacked SymBoolNr"  Úcreate_unbacked_symboolrI  )rP   rS   r5  r/  rï  r¤  rU  r6  rX   rJ  r%  rW   r§  r°  rm   rM  r¿   r$  r©  rr   r:   rÒ   r¤  rD  r    rN  s         rv   rZ  z ShapeEnv.create_unbacked_symbool2  so  € õ  +ÝÔ˜tÔ;ÀTð 
ñ  
ô  
ˆð 	Ð$Ô$¨Ñ)Ð$Ô$Ø×6Ò6Ñ8Ô8ð 	?ØÔ/×6Ò6°vÑ>Ô>Ð>ØŒÐ-Ð.Ð.Ô.°!Ñ3Ð.Ð.Ñ.Ý$5Ô$=À1Ð$EÑ$EÔ$EˆÔ˜&Ñ!Ý)4°Q¸Ñ):Ô):Ð:ˆˆTÔ˜vÑ&ØŒyð 	3Ý Ð!1Ñ2Ô2Ð2Ø�~Š~ÐHÑIÔIˆÝ)8¸¸tÑ)DÔ)DˆÔ˜vÑ&ð ×7Ò7¸ÅÑEÔEˆå�5œ8 F¨AÑ.Ô.°µd¸DÈ'ÐRÑRÔRˆØ×(Ò(Ø% v¨r¸Hð 	)ñ 	
ô 	
ð 	
õ �xÑ Ô Ð rw   úint | SymInt | float | SymFloatr
  rc  c           	     ó:   — |                       ||||dd|¬¦  «        S )z¼
        Create a symbol with an unspecified value

        Compared to standard symbols we do not assume the value is positive,
        nor do we specialze on zero or one values.
        NT)r­  rÏ  rR  )rÒ  )r‡   rÏ   rN  r	  r
  rR  s         rv   r*  z"ShapeEnv.create_unspecified_symbolM  s6   € ð( ×!Ò!ØØØØØØ'+Ø-ð "ñ 
ô 
ð 	
rw   r  r­  rÏ  c                óž  ‡‡‡‡— t          |t          ¦  «        rÝ|j        j        |j        j        k    rÃt
          j        }|j        j        ‰k    r't          d|j        j        › d‰› d‰j        › �¦  «        ‚t          |t          ¦  «        riddl
m} t          ‰|¦  «        st          dt          ‰¦  «        › �¦  «        ‚‰j        €t          d¦  «        ‚||j        ‰j        <   d|j        ‰j        <   d}‰j        }	t          |t"          ¦  «        r-t%          | ¦  «        |j        vri |j        t%          | ¦  «        <   t          |t"          ¦  «        r>|	r<|	|j        t%          | ¦  «                 v r |j        t%          | ¦  «                 |	         S |t
          j        u �rÒd}
d}d}t          |t          ¦  «        rC|j        �<ddl
m} t          ‰|¦  «        r&‰j        �|j                             ‰j        ¦  «        }
t          |t          ¦  «        rJ|j        �Cddl
m} t          ‰|¦  «        r-‰j        �&|j                             ‰j        ¦  «        }|�|\  }}|                      ‰¦  «        j        j        }|                      |¦  «         |€|�K|                      |d¬	¦  «        }|�t;          j        ||k    ¦  «         |�t;          j        ||k    ¦  «         |
�@t?          t@          |                      |d¬	¦  «        ¦  «        }|  !                    ||
¦  «         | j"         #                    |¦  «         t          |t"          ¦  «        r|	r||j        t%          | ¦  «                 |	<   |S |rd
}n| j$        }t          ‰tJ          ¦  «        s!t          t          ‰¦  «        › d‰› �¦  «        ‚|r&|t
          j        ur‰dk     rt          d‰› �¦  «        ‚|�t
          j&        }|t
          j        u rJtO          j(        ‰¦  «        }t          |t"          ¦  «        r|	r||j        t%          | ¦  «                 |	<   |S |t
          j)        u r| j*        }n#|t
          j&        u rd
}nt          d|› �¦  «        ‚|  +                    ¦   «         }‰dv r*|r(‰dk    rtN          j,        j-        S tN          j,        j.        S |r
‰| j/        v�r|  0                    ‰j        ¦  «        }t          ‰¦  «        tb          u ste          ‰¦  «        rtg          th          j5        ||d¬¦  «        Šntg          th          j6        ||d¬¦  «        Š‰| j7        |	<   t          ‰tb          ¦  «        rtO          j(        ‰¦  «        | j8        ‰<   nyt          ‰tr          ¦  «        rtO          j:        ‰¦  «        | j8        ‰<   nGtw          ‰j         <                    ¦   «         ‰j         =                    ¦   «         ¬¦  «        | j8        ‰<   g | j>        ‰<   |  ?                    ‰tb          ¦  «         |r
‰| j/        ‰<   t          ‰tb          ¦  «        �rA|rk|  @                    ‰dk    ¦  «         |  A                    |¦  «        | jB        ‰<   t‡          |  +                    | j$        rdnd¦  «        |¦  «        | jD        ‰<   n4|  E                    ¦   «         | jB        ‰<   t‡          ||¦  «        | jD        ‰<   t          |t          ¦  «        r.|rt          d¦  «        ‚|  F                    ‰|j        d¬¦  «         | jB        ‰         }|jG        st          d¦  «        ‚‰|vr"t          ‰› d|j        › d|j        › d�¦  «        ‚d|j        › d|j        › d�Šnˆt          ‰tr          ¦  «        rqt‘          tN          jI         tN          jI        ¦  «        x| jB        ‰<   }t‡          ||¦  «        | jD        ‰<   d|j        › d|j        › d�Š|jJ        st          d¦  «        ‚ndŠ‰}t–          jL        duo-t›          ‰¦  «        t–          jL         N                    d¦  «        v }d}|stŸ          jP        dd ¦  «        d!vrd"‰› d#�}|  Q                    |¦  «        \  }}| jR         S                    d$‰‰‰j        ‰||||¬%¦	  «	         t©          d&ˆˆˆˆfd'„¬(¦  «         | jU        d&xx         dz  cc<   n8| j/        ‰         }|| j7        |	<   | jR         V                    d)|‰j        ¦  «         t          |tN          jW        ¦  «        rq| j>        |         }| X                    ‰¦  «         ‰ Y                    ¦   «         s1|d          Y                    ¦   «         r|d*         |d         c|d<   |d*<   d| jZ        |<   t          |t"          ¦  «        r|	r||j        t%          | ¦  «                 |	<   |S )+z5Create a new symbol which is tracked by this ShapeEnvzStatic shape constraint of z does not match input size of z, for r   r[   z#Expected TensorPropertySource, got Nzsource.idx must not be NonerÏ  Fr  z!positive set for negative value: zunhandled dynamic_dim r  Tr¬  )r­  rr  )rŸ  rî   zÑuser code shown is first use of this value--the guard itself is not due user code but due to 0/1 specialization in the framework; to avoid specialization try torch._dynamo.decorators.mark_unbacked(tensor, dim)z-duck must be False for StrictMinMaxConstraint©Úis_constraintrP  z not in range [rØ  rê  r7  rG  rp  r2  ÚTORCHDYNAMO_EXTENDED_ADVICEÚ1)Ú0rp  zC, for more info run with TORCHDYNAMO_EXTENDED_DEBUG_CREATE_SYMBOL="zF" or to suppress this message run with TORCHDYNAMO_EXTENDED_ADVICE="0"z&create_symbol %s = %s for %s %s %s%s%sr3  rÒ  c            
     ó  •— t          ‰¦  «        t          ‰¦  «        ‰ ‰j        t          j        t          j        ¦   «         ¦  «        t          j        t          j        d¬¦  «         	                    ¦   «         ¦  «        dœS )Nrî   rF  )rù  rÏ   r%  rN  r9  rã  )
r×   rÙ   rZ  r.   Úfrom_tracebackr)   Úextract_stackrX   rJ  Úsummary)Ú	range_strrN  Ú
sympy_exprrÏ   s   €€€€rv   r|  z(ShapeEnv.create_symbol.<locals>.<lambda>|  st   ø€ Ý! *™oœoÝ ™9œ9Ø#Ø$œkÝ",Ô";Ý&Ô4Ñ6Ô6ñ#ô #õ (Ô6Ý)Ô1°qÐ9Ñ9Ô9×AÒAÑCÔCñô ð%ð %€ rw   r=  zcreate_symbol %s duck sized %srS  )[rj   r#  r%  r(  r)  r  r  rI  rZ  r±   r�  r\   rm   rs   r´  rh  rj  r²   r:  rx  r  ro  r‹  rp  rì  rq   ro   rÚ  r‹  rp   r  r   r"   rX  r=  rÖ  rü  r(   r  rÒ   rÓ   r  rý  rM  r   rò  r
  r-  Ú_generate_unique_idrt   r¨   rP   rS   rÓ  ÚFLOATr'  rŒ  rb  rc  rN   Ú
nested_intrï   r�  r’  r˜  Ú_default_value_ranger§  r¿   r$  rQ  Ú_update_var_to_ranger°  rW   ÚoorL  rÝ  r?  r×   r×  r:  Úgetenvr@  rÇ   r�  r/   r6  rÈ   r¦  rU  Úis_ephemeralr7  )r‡   rÏ   rN  r	  r
  r­  rÏ  rR  r\   r  rT  Úunbacked_minÚunbacked_maxÚboundsr¸  Ú
out_symintÚout_symrü  ÚduckrB  Ú	symbol_idr%  rI  rA  Úmaybe_more_inforC  Ú	r_sourcesrg  rh  s    ``                        @@rv   rÒ  zShapeEnv.create_symbolk  s_  øøøø€ õ �~Õ'=Ñ>Ô>ð	"àÔ!Ô'¨>Ô+<Ô+BÒBÐBå$Ô+ˆKØÔ Ô&¨#Ò-Ð-Ý.ð)°.Ô2CÔ2Ið )ð )Ðilð )ð )Ø!œ;ð)ð )ñô ð õ Ð*Õ,DÑEÔEð EØEÐEÐEÐEÐEÐEå! &Ð*>Ñ?Ô?ð Ý(ØL½dÀ6¹l¼lÐLÐLñô ð ð ”:Ð%Ý(Ð)FÑGÔGÐGØ=HÐ Ô.¨v¬zÑ:Ø@DÐ Ô1°&´*Ñ=Ø!ˆNð ”kˆåÐ'Õ)@ÑAÔAð	På�4‘”Ð 0Ô TÐTÐTàMOÐÔ@ÅÀDÁÄÑJõ Ð'Õ)@ÑAÔAð
	àð
	ð Ø#ÔGÍÈ4ÉÌÔQðRð Rð $ÔGÍÈ4ÉÌÔQØôð ð �*Ô-Ð-Ñ-ð ˆHØˆLØˆLåÐ+Õ-EÑFÔFðJà$Ô.Ð:àEÐEÐEÐEÐEÐEå˜fÐ&:Ñ;Ô;ð JÀÄ
Ð@VØ/Ô9×=Ò=¸f¼jÑIÔI�Hõ Ð+Õ-EÑFÔFð	<à$Ô4Ð@àEÐEÐEÐEÐEÐEå˜fÐ&:Ñ;Ô;ð <ÀÄ
Ð@VØ-Ô=×AÒAÀ&Ä*ÑMÔM�FØÐ)Ø5;Ñ2˜ lð ×-Ò-¨fÑ5Ô5Ô:Ô?ˆCØ×*Ò*¨3Ñ/Ô/Ð/ð Ð'¨<Ð+CØ!×3Ò3°C¸dÐ3ÑCÔC�
ØÐ+Ý”L ¨|Ò!;Ñ<Ô<Ð<ØÐ+Ý”L ¨|Ò!;Ñ<Ô<Ð<ð Ð#õ �v t×'=Ò'=¸cÈÐ'=Ñ'MÔ'MÑNÔN�Ø×+Ò+¨G°XÑ>Ô>Ð>àÔ ×$Ò$ SÑ)Ô)Ð)åÐ*Õ,CÑDÔDð Èð ð ð !ÔDÅRÈÁXÄXÔNØñð ˆJà%ð 	;Ø"'ÐÐà"&Ô":Ðå˜&¥&Ñ)Ô)ð 	=Ý ¥D¨¡L¤LÐ!;Ð!;°6Ð!;Ð!;Ñ<Ô<Ð<Øð 	L˜­:Ô+>Ð>Ð>À3ÈÂ7À7Ý Ð!JÀSÐ!JÐ!JÑKÔKÐKð Ð%Ý$Ô,ˆKà�*Ô+Ð+Ð+Ý”- Ñ$Ô$ˆCÝÐ*Õ,CÑDÔDð Èð ð ð !ÔDÅRÈÁXÄXÔNØñð ˆJà�JœOÐ+Ð+ð ”?ˆDˆDØ�JÔ.Ð.Ð.ØˆDˆDå Ð!G¸+Ð!GÐ!GÑHÔHÐHà�~Š~ÑÔˆà�&ˆ=ˆ=Ð0ˆ=Ø�aŠxˆxÝ”w”|Ð#å”w”{Ð"Øð N	M˜ D¤OÐ3Ñ3ð ×0Ò0°´Ñ=Ô=ˆIÝ�C‰yŒy�CÐÐ¥=°Ñ#5Ô#5ÐÝ(Ý”I˜y°8ÀTðñ ô �
�
õ )Ý”J 	°HÀ4ðñ ô �
ð /9ˆDÔ˜{Ñ+å˜#�sÑ#Ô#ð Ý5:´]À3Ñ5GÔ5G�Ô& zÑ2Ð2Ý˜C¥Ñ'Ô'ð Ý5:´[ÀÑ5EÔ5E�Ô& zÑ2Ð2õ 6BØ”H×'Ò'Ñ)Ô)°´×1JÒ1JÑ1LÔ1Lð6ñ 6ô 6�Ô& zÑ2ð
 /1ˆDÔ 
Ñ+à�OŠO˜J­Ñ,Ô,Ð,àð 2ð (2�” Ñ$å˜#�sÑ#Ô#ñ 7Øð Uà×'Ò'¨
°QªÑ7Ô7Ð7ð 59×4MÒ4MØ2ñ5ô 5�DÔ% jÑ1õ :IØŸšð  $Ô7ð&ð kð kð "&ñô ð ñ	:ô 	:�DÔ*¨:Ñ6Ð6ð ×=Ò=Ñ?Ô?ð Ô% jÑ1õ :IÈÈtÑ9TÔ9T�DÔ*¨:Ñ6õ ˜nÕ.DÑEÔEð Øð Ý,ØKñô ð ð ×-Ò-Ø" NÔ$5ÀTð .ñ ô ð ð Ô& zÔ2�Ø”yð ;Ý(Ð)9Ñ:Ô:Ð:à˜b�=�=Ý2ØÐFÐF¨r¬xÐFÐF¸2¼8ÐFÐFÐFñô ð ð 8 ¤Ð7Ð7¨B¬HÐ7Ð7Ð7�	�	Ý˜C¥Ñ'Ô'ð 	Ý5@Å%Ä(ÀÍEÌHÑ5UÔ5UÐU�Ô! *Ñ-°Ý5DÀTÈ4Ñ5PÔ5P�Ô& zÑ2Ø7 ¤Ð7Ð7¨B¬HÐ7Ð7Ð7�	Ø”{ð =Ý(Ð);Ñ<Ô<Ð<ð=ð
 �	àˆAåÔ:À$ÐFð @Í3ØñLô LåÔ4×:Ò:¸3Ñ?Ô?ðL@ˆHð !ˆOØð 	¥¤	Ð*GÈÑ MÔ Mð Vð !ð !ð
6ØAKð6ð 6ð 6ð  ð '+×&=Ò&=¸hÑ&GÔ&GÑ#ˆDÐ#ØŒH�MŠMØ8ØØØ”ØØØØ!Ø#ð ñ 
ô 
ð 
õ Øðð ð ð ð ð ð ðñ ô ð ð  ŒL˜Ð)Ð)Ô)¨QÑ.Ð)Ð)Ñ)Ð)ð ” Ô$ˆAØ./ˆDÔ˜{Ñ+ØŒH�NŠNÐ;¸QÀÄÑLÔLÐLå�a�œÑ&Ô&ð 
	-ØÔ+¨AÔ.ˆIØ×Ò˜VÑ$Ô$Ð$Ø×&Ò&Ñ(Ô(ð J¨Y°q¬\×-FÒ-FÑ-HÔ-Hð Jà.7¸¬m¸YÀq¼\Ð+�	˜!‘˜i¨™mð
 ,-ˆDÔ% aÑ(åÐ&Õ(?Ñ@Ô@ð 	À[ð 	ð ð Ô@ÅÀDÁÄÔJØñð ˆrw   c                ó°   — t                                d||d¬¦  «         || j        v rt          |› d�¦  «        ‚t	          j        |¦  «        | j        |<   dS )z.Adds a new symbol to the symbolic environment.zadd_backed_var_to_val %s %sTr3  z already existsN)rÇ   rÈ   rŒ  rm   rÒ   rÓ   ©r‡   ro   rÏ   s      rv   Úadd_backed_var_to_valzShapeEnv.add_backed_var_to_val¤  s_   € å�	Š	Ð/°°sÀtˆ	ÑLÔLÐLØ�4Ô)Ð)Ð)Ý  DÐ!9Ð!9Ð!9Ñ:Ô:Ð:Ý',¤}°SÑ'9Ô'9ˆÔ˜tÑ$Ð$Ð$rw   z7var_to_val is deprecated, use backed_var_to_val insteadrl  ú!dict[sympy.Symbol, sympy.Integer]c                ó   — | j         S )z*Deprecated: use backed_var_to_val instead.)rŒ  rÚ   s    rv   r4  zShapeEnv.var_to_val«  s   € ð Ô%Ð%rw   z?add_var_to_val is deprecated, use add_backed_var_to_val insteadc                ó.   — |                       ||¦  «        S )z.Deprecated: use add_backed_var_to_val instead.)r|  r{  s      rv   Úadd_var_to_valzShapeEnv.add_var_to_val´  s   € ð ×)Ò)¨$°Ñ4Ô4Ð4rw   c                óF   — |j         }| j                             ||¦  «        S r„   )rZ  r-  r‹  )r‡   rN  Úsrc_names      rv   Ú_debug_namezShapeEnv._debug_name¼  s"   € Ø”;ˆØÔ-×1Ò1°(¸HÑEÔEÐErw   r¬  ú0StrictMinMaxConstraint | RelaxedUnspecConstraintc                óü  — t          |t          ¦  «        rÓ|j        j        |j        j        }}|                      ¦   «         }||j        k    rd }||j        k    rd }|                      |¦  «        › d|j        › d�}|�$|�"|d|› d|                      |¦  «        › d|› �z  }nE|€!|�|d|                      |¦  «        › d|› �z  }n"|� |€|d|› d|                      |¦  «        › �z  }|S |                     |¦  «        S )Nr„  z in the specified ranger  r'  )	rj   r#  r%  r(  r)  rl  rƒ  rZ  r+  )r‡   rN  r¬  r(  r)  r¿  Úc_renders          rv   Ú&_render_range_for_constraint_violationz/ShapeEnv._render_range_for_constraint_violationÀ  sE  € õ �aÕ/Ñ0Ô0ð 	Øœ4œ: q¤t¤z�5ˆEØ×/Ò/Ñ1Ô1ˆGØ˜œÒ%Ð%Ø�Ø˜œÒ%Ð%Ø�à×#Ò# FÑ+Ô+ÐTÐT°´ÐTÐTÐTð ð Ð  UÐ%6ØÐP ÐPÐP¨4×+;Ò+;¸FÑ+CÔ+CÐPÐPÈÐPÐPÑP��Ø� 5Ð#4ØÐE × 0Ò 0°Ñ 8Ô 8ÐEÐE¸eÐEÐEÑE��ØÐ" u }ØÐE ÐEÐE¨4×+;Ò+;¸FÑ+CÔ+CÐEÐEÑE�ØˆOØ�xŠx˜ÑÔÐrw   r  c                ó:   —  | j         |i |¤ddi¤Žd         j        S )zŽ
        Like produce_guards_verbose, but only returns the non-verbose python guard expressions
        (no verbose guards produced.)
        Úlangs)Úpythonr   )Úproduce_guards_verboser"  )r‡   r�   rÔ  s      rv   Úproduce_guardszShapeEnv.produce_guardsÖ  s/   € ð
 +ˆtÔ*¨DÐN°FÐNÐNÀ+ÐNÐNÐNÈqÔQÔWÐWrw   c                ó   — | j         S r„   r]  r)  s    rv   r|  zShapeEnv.<lambda>á  s   € ¸¼€ rw   ©rŠ  Úverbose_python)rB  Úinput_contextsÚequalities_inputsÚ_simplifiedr  r‰  ÚplaceholdersúSequence[FakeTensor]rú  úSequence[Source]rð  rñ  rB  úlist[ShapeGuard] | Noner�  úDimList[SymbolicContext] | Noner‘  úEqualityConstraint | Noner’  r  r‰  útuple[str, ...]úlist[_ShapeGuardsHelper]c               ó.  ‡ ‡‡	‡S‡T‡U‡V‡W‡X‡Y‡Z‡[‡\‡]‡^‡_‡`‡a‡b‡c— ‰ j                              d¦  «         ‰ j        r)t          ‰ j        ¦  «        }
‰                      |
¦  «         t          ‰¦  «        t          |¦  «        k    rt          d‰› d|› d�¦  «        ‚t          j	        t          fŠUdtd	„ŠV|€ˆUˆVfd„‰D ¦   «         }nát          |¦  «        t          ‰¦  «        k    rt          d¦  «        ‚t          t          ‰|¦  «        ¦  «        D ]”\  }\  }}t          |‰U¦  «        r|€ ‰V|¦  «        ||<   Œ)t          |t          t          t           t"          f¦  «        st          dt%          |¦  «        › �¦  «        ‚t          |t&          ¦  «        rt          d¦  «        ‚Œ•ddlmŠSmŠT g ŠZt/          j        t&          ¦  «        Šct/          j        t2          ¦  «        Šbg ŠXg Š]t5          ‰c|‰ j        ¦  «        Š^‰	D ]]}|dv r‰]                     ‰^¦  «         Œ|dk    r*‰]                     t;          ‰c|‰ j        ¦  «        ¦  «         ŒLt=          d|› �¦  «        ‚	 dudvˆXfd„Š_dwˆSˆTfd „Š[|�r€i Š`t          |¦  «        D ]\  }}|‰`|j        <   Œdxˆˆ`fd$„}|j         D ]Ç\  }} ||¦  «         ||¦  «        }}‰  !                    tE          j#        ||¦  «        ¦  «        }|s‚tI          |j        › d%t          |t          ¦  «        r|n| %                    ‰ j&        ¦  «        › d&|j        › d%t          |t          ¦  «        r|n| %                    ‰ j&        ¦  «        › �¦  «        ‚ŒÈ|j'        D �]6\  }}} ||¦  «        }t          |tD          j(        ¦  «        r|‰ j        |         d         j        }}nLt          |tD          j)        ¦  «        r|tU          |¦  «        }}n  ||¦  «        ‰  +                    |¦  «        }} ||¦  «        }‰  !                    tE          j#        ||¦  «        ¦  «        }|sntI          d'|j        › d( |tE          j(        |¦  «        ¦  «        › d)|› d%| %                    ‰ j&        ¦  «        › d*| %                    ‰ j&        ¦  «        › �
¦  «        ‚�Œ8|j,        D ]B}t          |tD          j(        ¦  «        r&‰c|          -                    ‰ j        |         ¦  «         ŒC	 dudyˆZˆ^ˆ_ˆ ˆbˆcfd0„}dzˆ ˆcfd1„}d{ˆZˆcfd3„}t          ‰||¦  «        D �]ã\  }}}t          |tT          ¦  «        rdd4lm.}   | |¦  «        }t          |t^          ¦  «        st          d5t%          |¦  «        › �¦  «        ‚|€Œdt          |t          t          f¦  «        r#|€d
nta          |d.d
¦  «        }! ||||!¦  «         Œ£t          |t           t"          f¦  «        r |||¦  «         ŒÌt          |‰U¦  «        st          d6t%          |¦  «        › �¦  «        ‚tc          |¦  «        �ršdd7lm2}" t          |tf          ¦  «        st          d8t%          |¦  «        › �¦  «        ‚g }#|j4        r$|#                     |||j5        |j6        f¦  «         n†t          | 7                    ¦   «         ¦  «        D ]!\  }}$ | ‰T|‰Sj8        |¦  «        |$¦  «         Œ"t          | 9                    ¦   «         ¦  «        D ]!\  }}$ | ‰T|‰Sj:        |¦  «        |$¦  «         Œ"| ;                    ¦   «         \  }%}&|%D ]’}'ta          ||'¦  «        xxt          j	        d9˜ x�?\   }( |j<        |'         })|#                      |"||'¦  «        |(|)j5        |)j6        f¦  «         Œa  xtz          d9˜ x�\    Œr }*t          d:t%          |*¦  «        › �¦  «        ‚n|||j5        |j6        fg}#|#D �])\  }}+},}-t}          |+¦  «        rMt          |+ 7                    ¦   «         ¦  «        D ]*\  }}$ ‰T|‰Sj8        |¦  «        }. ||.|$|,|         ¦  «         Œ+Œdt          |+ 7                    ¦   «         ¦  «        D ]*\  }}$ ‰T|‰Sj8        |¦  «        }. ||.|$|,|         ¦  «         Œ+t          |+ 9                    ¦   «         ¦  «        D ]*\  }}$ ‰T|‰Sj:        |¦  «        }. ||.|$|-|         ¦  «         Œ+ | ‰T|‰Sj?        ¦  «        |+ @                    ¦   «         ¦  «         �Œ+�Œåd;„ ‰	D ¦   «         ŠWtƒ          ‰c‰ j&        t3          ‰b B                    ¦   «         ¦  «        ‰ jC        ¦  «        ‰ _D        |�sþ‰ZD �]ú\  }ŠY|j        }/‰ jE        r<|/‰ jF        v r3‰  G                    tE          j#        ‰ jF        |/         ‰Y¦  «        ¦  «         t          ‰YtD          j(        ¦  «        r(‰c H                    ‰Y¦  «        r|‰c‰Y         d         k    rŒ’|rAt          |‰T¦  «        r1‰YjI        r*‰ j          J                    d< ||¦  «        › d=‰Y› �¦  «         ŒÕ ‰[|¦  «        r‰ jD         K                    |‰Y¦  «         t          ‰W‰]‰	¦  «        D ]Ê\  }0}1}|1 L                    |¦  «        › d=|1 M                    ‰Y¦  «        › �}2|d>k    r|‰ jN         H                    |/¦  «        x}3�X|‰ j        |3         d         k    r|2› d?‰ j&        |3         › d@�}2n5‰ jO         H                    |3¦  «        x}4�|2› dA|4› �}2n|2› dB|3› dC�}2n|2› dD|/› dC�}2|0                     |2¦  «         ŒËt          |‰T¦  «        �r|jP        ‰Sj8        u �r|�r t          ‰YjQ        ¦  «        dEk    �rçt¥          t§          ‰YjQ        ¦  «        ¦  «        Šat          ‰YtD          j(        ¦  «        r¢‰Y‰bv rž| T                    |‰c‰Y         d         ¦  «        s|dF‰  +                    |¦  «        › d%|j        › dG‰  +                    ‰c‰Y         d         ¦  «        › d%‰c‰Y         d         j        › dH�	}5 ‰_|jU        ‰  +                    |¦  «        |5¦  «         t          ‰YtD          j(        ¦  «        sð‰a‰bv rì| V                    |‰c‰a         d         ˆYˆafdI„¦  «        sÅ‰c‰a         d         }dF‰  +                    |¦  «        › d%|j        › dJ‰  +                    |¦  «        › d%|j        › dK‰  +                    |¦  «        › d%‰Y %                    ‰atE          jW        ‰  +                    |¦  «        ¦  «        i¦  «        › dL�}5 ‰_|jU        ‰  +                    |¦  «        |5¦  «         �Œüt3          ¦   «         Š\d|ˆWˆ[ˆ\ˆ	ˆ]ˆ^ˆ_ˆ ˆbˆcf
dO„}6|�|n‰ jX        D ]1}7‰  Y                    |7jZ        d9|7j[        ¬P¦  «        	 �Œ& |6|7¦  «         Œ2‰ j\         H                    d
g ¦  «        D ]S}8‰  Y                    |8jZ        d9¬Q¦  «        �Œ‰  ]                    |8jZ        ¦  «        ŠY‰ jD         ^                    ‰Y¦  «         ŒT‰c _                    ¦   «         D �]6\  Ša}‰ j`         H                    ‰a¦  «        }9|9€Œ#‰ ja        ‰a         }:|st          dR‰a› �¦  «        ‚g }; ||d         ¦  «        }<dS}=|9jb        tD          jc         tÈ           fvr´tË          ˆ[fdT„|D ¦   «         ¦  «        r2‰ jD         ^                    tE          jf        ‰a|9jb        ¦  «        ¦  «         |r"|9jb        ‰  g                    ¦   «         jb        k    r/|;                     tE          jh        |9jb        ‰adU¬V¦  «        ¦  «         |9jb        › dW|<› dA|:jb        › �}=|9ji        tD          jc        tÈ          fvr·tË          ˆ[fdX„|D ¦   «         ¦  «        r2‰ jD         ^                    tE          jh        ‰a|9ji        ¦  «        ¦  «         |;                     tE          jh        ‰a|9ji        dU¬V¦  «        ¦  «         |=r%|9jb        › dW|<› dW|9ji        › dA|:jb        › dG|:ji        › �	}=n|<› dW|9ji        › dA|:ji        › �}=|;�rctE          jj        |;dYdUiŽ}>t          ‰W‰]‰	¦  «        D ]J\  }0}1}|d>k    r|0                     |=¦  «         Œ"|0                     |1 M                    |>¦  «        ¦  «         ŒK‰b‰a         }?|?D ]ë}@t          |@tÖ          ¦  «        rÔ|@jl        ‰  g                    ¦   «         z   m                    |9¦  «        s¥|d         }tE          jj        tE          jh        |9jb        ‰a¦  «        tE          jh        ‰a|9ji        ¦  «        ¦  «        ŠY‰^ M                    ‰Y¦  «        }A‰  n                    ||@¦  «        }BdZ|B› d[|A› �}5 ‰_|@jU        ‰  +                    |¦  «        |5¦  «         Œìtß          ‰atà          jq        ¦  «        r¼d\‰^ L                    |d         ¦  «        › d�}2t          ‰W‰]‰	¦  «        D ]‹\  }0}1}|d>k    r|0                     |2› d]�¦  «         Œ%|d^k    r|0                     |2¦  «         ŒA|dk    r3|0                     d_|1 L                    |d         ¦  «        › d�¦  «         Œzt=          d`|› �¦  «        ‚�Œ8dd
lrmsc mt}C |Cju        ræ|Cjv        sß‰ jw        rØˆcfda„‰ jw        D ¦   «         }D|DrÃtñ          ˆ fdb„|DD ¦   «         ¦  «        s¨t          |D¦  «        dEk    r0tE          jy        |Dd         d         |Dd         dE         dU¬V¦  «        }EntE          jz        dc„ |DD ¦   «         Ž }Et          ‰W‰]‰	¦  «        D ];\  }0}1}|1 M                    |E¦  «        }A|d>k    r|A› dd�}A|0                     |A¦  «         Œ<‰X�r$g }Fg }Gt3          ¦   «         }H‰XD ]u\  }I}}J|Ir6det          |F¦  «        dEz   › df |J¦   «         › �}K|F                     |K¦  «         Œ>dg |J¦   «         › �}K|G                     |K¦  «         |H ^                    |¦  «         Œvt          |G¦  «        dk    rLdh {                    tù          |H¦  «        ¦  «        }Ldi {                    |G¦  «        }MtI          dj|L› dk|M› �¦  «        ‚t          |F¦  «        dk    r(t            J                    dlt          |F¦  «        ¦  «         tû          dmdi ‰ j~        ¥‰ j        ¥t          ‰Wd         ¦  «        �t          dn„ ‰c �                    ¦   «         D ¦   «         ¦  «        tù          ‰ j‚         �                    ¦   «         do¬p¦  «        dqœ¥¦  «         ‰ jE        �rDddrlƒm„}N ‰ j\         �                    ¦   «         D ]!}O|OD ]}8‰  G                    |8jZ        ¦  «         ŒŒ"‰ j`         _                    ¦   «         D ]•\  }P}Q|Qjb        tD          jc         tÈ           fvr-‰  G                    tE          jh        |Qjb        |P¦  «        ¦  «         |Qji        tD          jc        tÈ          fvr-‰  G                    tE          jh        |P|Qji        ¦  «        ¦  «         Œ–�t          j†        ¦   «         5   |N‰ j‡        ‰ jˆ        ¦  «         ‰                    ¦   «          d
d
d
¦  «         n# 1 swxY w Y   |€‰  Š                    ¦   «          g }Rt          ‰W‰]‰	¦  «        D ]�\  }0}1}|dk    r^t          |1t:          ¦  «        st          dst%          |1¦  «        › �¦  «        ‚|R                     �t          |0|1jF        ¦  «        ¦  «         Œj|R                     �t          |0¦  «        ¦  «         ŒŽ|RS )}aÞ  
        Generates a list of guards strings which, when evaluated in a context that
        defines tensors for all the sources, returns True or False depending
        on if the guards in the list evaluated to True or not.  Primarily used by Dynamo,
        but this is also helpful for manual testing of guards (see
        evaluate_guards_for_args)

        For convenience in testing, a source is allowed to be a str,
        in which case we will assume it is a LocalSource

        simplified lets you omit duck sizing, equality and 0/1 guards.
        This is useful for testing when you don't care about the boilerplate
        guards, and it may be helpful for user output too (be careful though;
        some equality guards are nontrivial!  It would be nice to get simplified
        output to print them too).  It's private because it's not
        intended for normal use

        Returns guards in python and python with verbose comments (verbose) by
        default.
        rŒ  zlen(z	) != len(rn  rã  rZ   rf   ú"StatelessSymbolicContext[..., Any]c                ó   — t          t          j        g|                      ¦   «         z  t          j        g|                      ¦   «         z  d g|                      ¦   «         z  d g|                      ¦   «         z  ¬¦  «        S )Nr  )r±   r  r  rX  r  rç  s    rv   Ú_create_no_constraints_contextzGShapeEnv.produce_guards_verbose.<locals>._create_no_constraints_context  sk   € õ ,å)Ô1Ð2°Q·U²U±W´WÑ<Ý!+Ô!8Ð 9¸A¿EºE¹G¼GÑ CØ"& ¨!¯%ª%©'¬'Ñ!1Ø$( 6¨A¯EªE©G¬GÑ#3ðñ ô ð rw   Nc                óJ   •— g | ]}t          |‰¦  «        r ‰|¦  «        nd ‘Œ S r„   )rj   )r  rã  Ú
Tensorlikerž  s     €€rv   r  z3ShapeEnv.produce_guards_verbose.<locals>.<listcomp>#  sM   ø€ ð ð ð ð õ 6@ÀÀ:Ñ5NÔ5NÐXÐ.Ð.¨qÑ1Ô1Ð1ÐTXðð ð rw   z(len(input_contexts) != len(placeholders)z.Expected SymInt, int, SymFloat, or float, got zcontext must not be a listr   rÍ  rŽ  ÚcppzUnknown lang: r   rr   r™  r×   r°  ru   úCallable[[], str] | Noner‚   c                óD   •‡‡— ‰                      | |ˆˆfd„f¦  «         d S )Nc                 ó(   •— ‰ r‰›  ‰ ¦   «         › �n‰S r„   r’   )ru   r°  s   €€rv   r|  zVShapeEnv.produce_guards_verbose.<locals>.record_constraint_violation.<locals>.<lambda>˜  s"   ø€ ÀDÐ0Q°3Ð0@¸¸¹¼Ð0@Ð0@Ð0@Èc€ rw   )rU  )r   r™  r°  ru   Úconstraint_violationss     ``€rv   Úrecord_constraint_violationzDShapeEnv.produce_guards_verbose.<locals>.record_constraint_violation‘  s@   øøø€ ð "×(Ò(Ø˜JÐ(QÐ(QÐ(QÐ(QÐ(QÐRñô ð ð ð rw   rG  rÞ   úTypeGuard[TensorPropertySource]c                ó@   •— t          | ‰¦  «        o| j        ‰j        u S r„   )rj   ÚproprÓ  )rG  rÎ  r\   s    €€rv   Úis_dimz/ShapeEnv.produce_guards_verbose.<locals>.is_dim›  s(   ø€ å˜3Ð 4Ñ5Ô5ð 4Ø”H Ô 3Ð3ðrw   Útensor_dim_srcr(   rÐ   c                ób  •— ‰‰| j         j                          }| j        €t          d¦  «        ‚|j        | j                 }t          |t          j        ¦  «        r|j        j	        S t          |¦  «        t          urt          dt          |¦  «        › �¦  «        ‚t          j        |¦  «        S )Nz#tensor_dim_src.idx must not be Noneri   )r—  rZ  r´  rm   rO  rj   rp   r"   rq   ro   rs   rt   rÒ   rÓ   )r«  r~  Úsymintr“  Úsource_indexs      €€rv   Úget_expressionz7ShapeEnv.produce_guards_verbose.<locals>.get_expression¦  sœ   ø€ Ø# L°Ô1DÔ1IÔ$JÔK�Ø!Ô%Ð-Ý(Ð)NÑOÔOÐOØœ NÔ$6Ô7�Ý˜f¥e¤lÑ3Ô3ð 1Ø!œ;Ô+Ð+å˜F‘|”|­3Ð.Ð.Ý,Ð-PÅ$ÀvÁ,Ä,Ð-PÐ-PÑQÔQÐQÝ œ=¨Ñ0Ô0Ð0rw   r„  z is not equal to zExpected input z to be equal to z, where z
, but got rN  rÏ   ra   rd  rc  c           	     ó.  •‡ — t                                dt          ˆ fd„¦  «        ||¦  «         t          |t          ¦  «        rt          |¦  «        st          d¦  «        ‚t          |t          ¦  «        r2|j                             ¦   «         �|j                             ¦   «         }t          |t          ¦  «        �rœ|j        j	        }t          |t          j        ¦  «        rO‰|                              ‰ ¦  «         |�0t          |t          ¦  «        s‰|                              |¦  «         �nd}t          |t          ¦  «        rAˆfd„|j        D ¦   «         }t#          d„ |                     ¦   «         D ¦   «         ¦  «        rd}n1t          |t          ¦  «        r|j        rt)          |¦  «        }|dvrd}|rƒ|€t          d	¦  «        ‚dˆfd„}‰                     ‰ |¦  «        }d|› d‰                     ‰ ¦  «        › d�}	 ‰|j        ‰                     ‰ ¦  «        |	t1          j        ||¦  «        ¬¦  «         ‰                     ‰ |f¦  «         d S t          j        |¦  «        }‰                     ‰ |f¦  «         d}t          |t          ¦  «        r&||j        j        cxk    r|j        j        k    sn d}nt          |t          ¦  «        r|dvrd}|r´|€t          d	¦  «        ‚‰                     ‰ |¦  «        }‰j                             ‰ d ¦  «        }
d‰                     ‰ ¦  «        › d|› d�|
r*dd                      |
 !                    ¦   «         ¦  «        z   ndz   }	 ‰|j        ‰                     ‰ ¦  «        |	¦  «         d S d S )Nztrack_symint %s %s %sc                 ó   •— ‰ j         S r„   r]  r  s   €rv   r|  zGShapeEnv.produce_guards_verbose.<locals>.track_symint.<locals>.<lambda>ì  s	   ø€  6¤;€ rw   z&val must be symbolic if it is a SymIntFc                óH   •— i | ]}|‰j                              |d ¦  «        “ŒS r„   ©r§  r‹  ©r  rù  r‡   s     €rv   rŽ  zIShapeEnv.produce_guards_verbose.<locals>.track_symint.<locals>.<dictcomp>  s;   ø€ ð #ð #ð #ØBC˜A˜tÔ0×4Ò4°Q¸Ñ=Ô=ð#ð #ð #rw   c              3  ó   K  — | ]}|d u V — Œ	d S r„   r’   )r  r%  s     rv   r&  zHShapeEnv.produce_guards_verbose.<locals>.track_symint.<locals>.<genexpr>  s&   è è € ÐEÐE¨b˜r T˜zÐEÐEÐEÐEÐEÐErw   Tr  zconstraint must not be Noner  rÐ   rf   r×   c                ó8   •— ‰                      | ¦  «        }|› d�S rh  )r  )r  ÚsexprÚ
py_printers     €rv   ru   zCShapeEnv.produce_guards_verbose.<locals>.track_symint.<locals>.hint  s"   ø€ Ø$.×$6Ò$6°qÑ$9Ô$9˜EØ&+ ; ; ;Ð.rw   úNot all values of z are valid because z was inferred to be equal to rÏ  zYou marked z; as dynamic but your code specialized it to be a constant (z˜). If you're using mark_dynamic, either remove it or use maybe_mark_dynamic. If you're using Dim.DYNAMIC, replace it with either Dim.STATIC or Dim.AUTO.z

User stack:
rp  )r  rÐ   rf   r×   )"rÇ   rÈ   r-   rj   r"   r  rm   rq   Úmaybe_as_intro   rÒ   r¦  rU  r.  rÖ  r#  r¦   r’  r  r.  rt   r‡  rƒ  r   rû   r�  rÓ   r%  r(  r)  r=  r‹  r@  Úformat)rN  rÏ   rd  r  Úconstraint_violatedÚsym_vrsr‚  ru   Úvar_with_ranger°  r9  Úinput_guardsr¸  r¦  r‡   Úsymbol_to_constraintsrî  s   `          €€€€€€rv   Útrack_symintz5ShapeEnv.produce_guards_verbose.<locals>.track_symintç  sh  øø€ õ �IŠIØ'ÝÐ.Ð.Ð.Ð.Ñ/Ô/ØØñ	ô ð õ ˜#�vÑ&Ô&ð O­{¸3Ñ/?Ô/?ð OÝ$Ð%MÑNÔNÐNå˜#�vÑ&Ô&ð .¨3¬8×+@Ò+@Ñ+BÔ+BÐ+NØ”h×+Ò+Ñ-Ô-�å˜#�vÑ&Ô&ñ RØ”H”M�Ý˜a¥¤Ñ.Ô.ð +Ø$ QÔ'×.Ò.¨vÑ6Ô6Ð6Ø!Ð-µjØ"Õ$;ñ7ô 7Ð-ð .¨aÔ0×4Ò4°ZÑ@Ô@Ð@ùà*/Ð'Ý! *Õ.DÑEÔEð ;ð#ð #ð #ð #ØGHÄ~ð#ñ #ô #˜õ ÐEÐE°G·N²NÑ4DÔ4DÐEÑEÔEÑEÔEð 7à26Ð/øÝ# JÕ0GÑHÔHð ;Øœ;ð ;Ý # A¡¤˜Að  !¨˜˜Ø6:Ð 3Ø*ð Ø%Ð-Ý"0Ð1NÑ"OÔ"OÐOð/ð /ð /ð /ð /ð /ð *.×)TÒ)TØ" Jñ*ô *˜ðW°ð Wð WØ#×/Ò/°Ñ7Ô7ðWð Wð Wð ð 4Ð3Ø&Ô0Ø ×,Ò,¨VÑ4Ô4ØÝ!*Ô!2°4¸Ñ!;Ô!;ð	ñ ô ð ð ×#Ò# V¨Q KÑ0Ô0Ð0Ð0Ð0å”M #Ñ&Ô&�Ø×#Ò# V¨Q KÑ0Ô0Ð0Ø&+Ð#Ý˜jÕ*@ÑAÔAð 	3à˜Zœ]Ô0ÐGÐGÒGÐG°J´MÔ4GÒGÐGÐGÐGà.2Ð+øÝ 
Õ,CÑDÔDð 3ð  &Ð(Ð(Ø.2Ð+Ø&ð Ø!Ð)Ý,Ð-JÑKÔKÐKØ%)×%PÒ%PØ 
ñ&ô &�Nð "&Ô!;×!?Ò!?ÀÈÑ!MÔ!M�JðJ d×&6Ò&6°vÑ&>Ô&>ð Jð JØ<?ðJð Jð Jð  *ð$Ð/°"·'²'¸*×:KÒ:KÑ:MÔ:MÑ2NÔ2NÑNÐNà!#ñð ð 0Ð/Ø"Ô,¨d×.>Ò.>¸vÑ.FÔ.FÈñô ð ð ð ð%ð rw   c                ó<  •— t          |t          ¦  «        rt          |¦  «        rr|j        j        }t          |t
          j        ¦  «        rNt          ‰j                             |¦  «        t          ¦  «        r#‰|          
                    | ¦  «         d S d S d S d S d S r„   )rj   r"   r  rq   ro   rÒ   r¦  rŒ  r‹  rN   rU  )rN  rÏ   r  r‡   rî  s      €€rv   Útrack_singletonint_sourcezBShapeEnv.produce_guards_verbose.<locals>.track_singletonint_sourceJ  s±   ø€ Ý˜#�vÑ&Ô&ð 7­;°sÑ+;Ô+;ð 7Ø”H”M�Ý˜a¥¤Ñ.Ô.ð 7µ:ØÔ*×.Ò.¨qÑ1Ô1µ<ñ4ô 4ð 7ð % QÔ'×.Ò.¨vÑ6Ô6Ð6Ð6Ð6ð7ð 7ð 7ð 7ð7ð 7ð 7ð 7rw   r`   c                óŠ  •‡ — t                                dt          ˆ fd„¦  «        |¦  «         t          |t          ¦  «        rt          |¦  «        st          d¦  «        ‚t          |t          ¦  «        r2|j                             ¦   «         �|j                             ¦   «         }t          |t          ¦  «        rZ|j        j	        }t          |t          j        ¦  «        r‰|                              ‰ ¦  «         ‰                     ‰ |f¦  «         d S t          j        |¦  «        }‰                     ‰ |f¦  «         d S )Nztrack_symfloat %s %sc                 ó   •— ‰ j         S r„   r]  r  s   €rv   r|  zIShapeEnv.produce_guards_verbose.<locals>.track_symfloat.<locals>.<lambda>S  s	   ø€ ÀÄ€ rw   z(val must be symbolic if it is a SymFloat)rÇ   rÈ   r-   rj   r!   r  rm   rq   Úmaybe_as_floatro   rÒ   r¦  rU  rc  )rN  rÏ   r  r¿  rî  s   `  €€rv   Útrack_symfloatz7ShapeEnv.produce_guards_verbose.<locals>.track_symfloatR  s*  øø€ Ý�IŠIÐ,­jÐ9LÐ9LÐ9LÐ9LÑ.MÔ.MÈsÑSÔSÐSÝ˜#�xÑ(Ô(ð Qµ¸SÑ1AÔ1Að QÝ$Ð%OÑPÔPÐPå˜#�xÑ(Ô(ð 0¨S¬X×-DÒ-DÑ-FÔ-FÐ-RØ”h×-Ò-Ñ/Ô/�å˜#�xÑ(Ô(ð 1Ø”H”M�Ý˜a¥¤Ñ.Ô.ð 7Ø$ QÔ'×.Ò.¨vÑ6Ô6Ð6Ø×#Ò# V¨Q KÑ0Ô0Ð0Ð0Ð0å”K Ñ$Ô$�Ø×#Ò# V¨Q KÑ0Ô0Ð0Ð0Ð0rw   ©ÚLocalSourcezExpected Source, got zExpected Tensorlike, got )Ú
AttrSourcez&Expected SubclassSymbolicContext, got r’   z#expected Tensor or OpaqueBase, got c                ó   — g | ]}g ‘ŒS r’   r’   )r  r›  s     rv   r  z3ShapeEnv.produce_guards_verbose.<locals>.<listcomp>Ò  s   € Ð%8Ð%8Ð%8¨Q bÐ%8Ð%8Ð%8rw   zSkipping guard %srð  r�  zN  # duck sizing added this equality because these variables had the same size zY (to avoid this specialization, set torch.fx.experimental._config.use_duck_shape = False)ú  # z  # (unknown var z, please file a bug)z  # (unknown source rî   zThe values of ú and z must always be equal.c                ó2   •— ‰                      ‰| i¦  «        S r„   )r±  )rù  ro   rù  s    €€rv   r|  z1ShapeEnv.produce_guards_verbose.<locals>.<lambda>*  s   ø€  d§m¢m°V¸Q°KÑ&@Ô&@€ rw   z) must always be related to the values of z by r\  Úguardr&   c                ó&  •
— ‰                      | j        ¦  «        }|‰v rd S ‰                     |¦  «         	 d}t          ˆˆfd„|j        D ¦   «         ¦  «        r0‰j        €t          d¦  «        ‚‰j                             |¦  «        }t          ‰‰‰¦  «        D ]B\  }}}|                     |¦  «        }|dk    r|› d| j	        › �}| 
                    |¦  «         ŒC‰                     |¦  «         |sèt          |j        ¦  «        dk    rÒt          t          |j        ¦  «        ¦  «        }‰|         d         }‰|         }	|	D ]š}
t          |
t           ¦  «        rX‰                     ||
¦  «        }d|› d	‰                     |¦  «        › d
�} ‰|
j        ‰                     |¦  «        |¦  «         Œot          |
t(          ¦  «        rŒ…t          d|
› �¦  «        ‚d S d S d S # t*          $ r" ‰j                             d| j	        ¦  «         ‚ w xY w)NFc              3  óD   •K  — | ]}‰|         D ]} ‰|¦  «        V — ŒŒd S r„   r’   )r  r  rN  rª  rî  s      €€rv   r&  zGShapeEnv.produce_guards_verbose.<locals>.issue_guard.<locals>.<genexpr>L  s[   øè è € ð ð àØ"2°1Ô"5ðð ð ð �F˜6‘N”Nðð ð ð ð ð ð rw   z dim_constraints must not be Noner�  rÌ  rî   r   r¹  ú satisfy the generated guard r\  zunrecognized constraint zFailing guard allocated at %s)rv  ro   rÖ  r’  r¦   r4  rm   r€  r  rB  rU  r•  r¡  r'  r^  rj   r#  r‡  r   rƒ  r.  rÃ  rÇ   r¨  )rÏ  ro   Ú
is_trivialr"  ÚprinterÚlangÚ
guard_exprrù  rN  Úconstraintsr¬  r¾  r°  Ú	all_exprsrª  Úissuedr‰  Úprintersr¸  r¦  r‡   rÀ  rî  s                €€€€€€€€€€rv   Úissue_guardz4ShapeEnv.produce_guards_verbose.<locals>.issue_guardA  sº  ø€ Ø—=’= ¤Ñ,Ô,ˆDð �vˆ~ˆ~Ø�à�JŠJ�tÑÔÐð.Ø"�
Ýð ð ð ð ð à!Ô.ðñ ô ñ ô ð @ð
 Ô+Ð3Ý,Ð-OÑPÔPÐPØ!%Ô!5×!9Ò!9¸$Ñ!?Ô!?�Jå,/°	¸8ÀUÑ,KÔ,Kð -ð -Ñ(�E˜7 DØ!(§¢°Ñ!6Ô!6�JØÐ/Ò/Ð/Ø(2Ð%DÐ%D¸¼
Ð%DÐ%D˜
Ø—L’L Ñ,Ô,Ð,Ð,à×%Ò% dÑ+Ô+Ð+ð "ð Q¥c¨$Ô*;Ñ&<Ô&<ÀÒ&AÐ&AÝ!¥$ tÔ'8Ñ"9Ô"9Ñ:Ô:�FØ-¨fÔ5°aÔ8�FØ"7¸Ô"?�KØ(ð Qð Q˜Ý% aÕ)?Ñ@Ô@ð Qà $× KÒ KÈFÐTUÑ VÔ Vð +ð![°^ð ![ð ![Ø?I×?QÒ?QÐRVÑ?WÔ?Wð![ð ![ð ![ð  ð 8Ð7Ø !¤¨T×-=Ò-=¸fÑ-EÔ-EÀsñô ð ð õ (¨Õ+BÑCÔCð Qð
 !å"0Ð1OÈAÐ1OÐ1OÑ"PÔ"PÐPð/Qð QÐ&AÐ&AðQð Qøõ( ð ð ð Ø”× Ò Ð!@À%Ä*ÑMÔMÐMØðøøøs   ¸F&G$ Ç$,H©r!  r·  )r!  z%sources must not be empty for symbol rp  c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r„   r’   ©r  rN  rª  s     €rv   r&  z2ShapeEnv.produce_guards_verbose.<locals>.<genexpr>¢  ó+   øè è € Ð<Ð<¨&�v�v˜f‘~”~Ð<Ð<Ð<Ð<Ð<Ð<rw   Frê  r'  c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r„   r’   rÞ  s     €rv   r&  z2ShapeEnv.produce_guards_verbose.<locals>.<genexpr>ª  rß  rw   rë  r¹  rÒ  znot math.isnan(zM  # implicit guard for float input due to NaN specialization in the frameworkrŠ  z~std::isnan(zUnimplemented for lang: c                óH   •— g | ]\  }}‰                      |¦  «        ¯||f‘ŒS r’   )r‹  )r  rR  rÏ   rî  s      €rv   r  z3ShapeEnv.produce_guards_verbose.<locals>.<listcomp>#  sE   ø€ ð ð ð á�C˜Ø#×'Ò'¨Ñ,Ô,ðØ�c�
ðð ð rw   c              3  óZ   •K  — | ]%\  }}‰j                              |¦  «        |k    V — Œ&d S r„   )rŒ  r‹  )r  rR  rÏ   r‡   s      €rv   r&  z2ShapeEnv.produce_guards_verbose.<locals>.<genexpr>(  sN   øè è € ð %ð %Ù;C¸3À�Ô&×*Ò*¨3Ñ/Ô/°3Ò6ð%ð %ð %ð %ð %ð %rw   c                óB   — g | ]\  }}t          j        ||d ¬¦  «        ‘ŒS )Frê  )rÒ   rÉ  )r  rR  rÏ   s      rv   r  z3ShapeEnv.produce_guards_verbose.<locals>.<listcomp>1  s-   € ÐWÐWÐWÁÀÀc�%œ( 3¨°eÐ<Ñ<Ô<ÐWÐWÐWrw   z)  # exclusion guard for automatic dynamicz  ú. z  - rØ  r  zConstraints violated (rÙ  z$%s Warning only constraints violatedÚdynamicc              3  ó   K  — | ]}|¯d V — Œ	dS ©rî   Nr’   rÑ  s     rv   r&  z2ShapeEnv.produce_guards_verbose.<locals>.<genexpr>Z  s'   è è € Ð#NÐ#N¨!ÈAÐ#N AÐ#NÐ#NÐ#NÐ#NÐ#NÐ#Nrw   T)Úreverse)Ú
num_guardsr¦   Úsymbol_guard_counts)ÚPopulateValidatorz$Expected _ShapeGuardCppPrinter, got )rã  rZ   rf   rœ  r„   )
r   rr   r™  r×   r°  r×   ru   r¢  rf   r‚   )rG  rÞ   rf   r§  )r«  r(   rf   rÐ   )rN  r(   rÏ   ra   rd  rc  rf   r‚   )rN  r(   rÏ   ra   rf   r‚   )rN  r(   rÏ   r`   rf   r‚   )rÏ  r&   rf   r‚   )�rÇ   r�  r  r7   r  rd  r¡  rm   rp   rZ   r5   r¯  r€  rj   r"   rt   r!   rb  rs   rV  r�  rÎ  r\   r5  r	   rA  r
  r�  rU  r  rŽ  rZ  r2  Úevaluate_exprrÒ   r¤  rI  r±  rŒ  r3  r¦  rÓ   r×   rƒ  r4  ÚextendrÉ  r(   r`  r>   rÊ  r³   r|  rj  rk  r¶  rÓ  r·  rí  r“  r{  r0   r1   rî  r¸  r3  rñ  r-  r4  r  r  r•  r‹  r.  rÈ   re  rþ  r  r'  r)  r©  r¦   r'  r^  rN  r   rK  rª  rB  rÂ  ro   r·  r0  rv  rÖ  r�  r§  r$  r(  rn  rJ   r’  rï  rl  rð  r)  rÆ  r#  r%  r¨  r‡  rR   rS   rj  Útorch._dynamo.configr-  rÝ  Ú!automatic_dynamic_exclusion_guardÚenable_compiler_collectivesr+  r0  rÉ  rÇ  r@  rÅ  r2   r  r6  Úsumr  r7  r  rë  Úfx_tracebackÚpreserve_node_metarD  rA  Úrunr›  r$  r!  )dr‡   r“  rú  rð  rB  r�  r‘  r’  r  r‰  rl   r‚  rã  ÚcontextrÕ  rG  r¯  rL  rM  Úexpr1r‘  Úconcrete_valÚsrcEqr@  rA  r™  Úexpr2_Úphantom_symbolrÁ  rÃ  rÇ  rN  rÉ  rd  rÊ  Úsources_tensors_constraintsÚssrš  r›  rœ  Úinner_tÚinner_contextÚ
unexpectedÚcurr_tÚconstraint_sizeÚconstraint_strideÚproperty_sourcerŽ  r"  rÔ  r  Ús0rB  r°  rÛ  rÏ  r`  rI  Úvr_slocrs  ÚrfÚverbose_exprÚboundr×  r¬  rÖ  r¾  Údynamo_configÚ	all_pairsÚ	excl_exprÚ	warn_msgsÚ
error_msgsrä  r   Úmsg_cbÚstr_msgÚdebug_names_strÚerrrë  ra  rR  r%  ÚhelpersrÎ  r\   r   rž  rØ  r¥  ro   r¿  rª  rÙ  rÚ  r¸  r¦  r®  rù  rÀ  rî  sd   ``       `                                                                         @@@@@@@@@@@@@@@@@rv   r‹  zShapeEnv.produce_guards_verboseÝ  s/  øøøøøøøøøøøøøøøøøøøø€ ðH 	Œ�ŠÐ&Ñ'Ô'Ð'ð Ô%ð 	(Ý/°´Ñ<Ô<ˆIØ×Ò˜YÑ'Ô'Ð'åˆ|ÑÔ¥ G¡¤Ò,Ð,Ý Ð!I¨Ð!IÐ!I¸wÐ!IÐ!IÐ!IÑJÔJÐJÝ”l¥NÐ3ˆ
ð		ð 		ð 		ð 		ð Ð!ðð ð ð ð ð &ðñ ô ˆNˆNõ �>Ñ"Ô"¥c¨,Ñ&7Ô&7Ò7Ð7Ý$Ð%OÑPÔPÐPå#,­S°¸~Ñ-NÔ-NÑ#OÔ#Oð 
Kð 
K‘�‘<�A�wÝ˜a Ñ,Ô,ð 	KØ�Ø,JÐ,JÈ1Ñ,MÔ,M˜ qÑ)øå% a­&µ#µxÅÐ)GÑHÔHð Ý,ØVÍTÐRSÉWÌWÐVÐVñô ð õ " '­4Ñ0Ô0ð KÝ,Ð-IÑJÔJÐJðKð| 	NÐMÐMÐMÐMÐMÐMÐMð ˆå=HÔ=TÝñ>
ô >
Ðõ Ô#¥CÑ(Ô(ð 	ð LNÐà-/ˆÝ,Ø˜j¨$Ô*=ñ
ô 
ˆ
ð ð 
	Cð 
	CˆDØÐ3Ð3Ð3Ø—’ 
Ñ+Ô+Ð+Ð+Ø˜’�Ø—’Ý)Ø(¨*°dÔ6Iñô ñô ð ð õ *Ð*A¸4Ð*AÐ*AÑBÔBÐBð .2ð		ð 	ð 	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð ñ 9	ØˆLÝ# GÑ,Ô,ð +ð +‘��3Ø)*�˜SœXÑ&Ð&ð
1ð 
1ð 
1ð 
1ð 
1ð 
1ð 
1ð 0Ô<ð ð ‘
��dØ-˜~¨dÑ3Ô3°^°^ÀDÑ5IÔ5I�u�ð  $×1Ò1µ%´(¸5À%Ñ2HÔ2HÑIÔI�Ø#ð Ý2Øœ9ð wð wµ*¸UÅCÑ2HÔ2HÐ)t¨¨ÈeÏnÊnÐ]aÔ]sÑNtÔNtð wð wàœ9ðwð wå2<¸UÅCÑ2HÔ2HÐ)t¨¨ÈeÏnÊnÐ]aÔ]sÑNtÔNtðwð wñô ð ðð $5Ô#Gð ñ ‘��t˜RØ&˜ uÑ-Ô-�å˜d¥E¤LÑ1Ô1ð UØ(,¨dÔ.AÀ$Ô.GÈÔ.JÔ.O˜:�E�EÝ ¥e¤mÑ4Ô4ð UØ(,­c°$©i¬i˜:�E�Eà(6¨°tÑ(<Ô(<¸d×>NÒ>NÈtÑ>TÔ>T˜:�EØ˜˜E™œ�ð  $×1Ò1µ%´(¸5À&Ñ2IÔ2IÑJÔJ�Ø#ð Ý2ðL¨%¬*ð Lð LØ˜2�eœl¨:Ñ6Ô6Ñ7Ô7ðLð Là!+ðLð Là05·²¸tÔ?UÑ0VÔ0VðLð Lð $)§>¢>°$Ô2HÑ#IÔ#IðLð Lñô ð ñð #4Ô"Cð ð �Ý˜n­e¬lÑ;Ô;ð à$ ^Ô4×;Ò;ØÔ+¨NÔ;ñô ð øð  KOða	ð a	ð a	ð a	ð a	ð a	ð a	ð a	ð a	ð a	ð a	ð a	ðF	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1õ$ #& l°G¸^Ñ"LÔ"Lð h	ñ h	ÑˆAˆv�wÝ˜&¥#Ñ&Ô&ð -Ø<Ð<Ð<Ð<Ð<Ð<à$˜ VÑ,Ô,�Ý˜f¥fÑ-Ô-ð MÝ$Ð%K½TÀ&¹\¼\Ð%KÐ%KÑLÔLÐLØˆyØÝ˜!�f¥c˜]Ñ+Ô+ð à#˜O�D�Dµ¸À,ÐPTÑ1UÔ1Uð ð �˜V Q¨
Ñ3Ô3Ð3ØÝ˜A¥­%Ð0Ñ1Ô1ð Ø�˜v qÑ)Ô)Ð)ØÝ˜a Ñ,Ô,ð LÝ$Ð%JÅÀaÁÄÐ%JÐ%JÑKÔKÐKÝ,¨QÑ/Ô/ñ 7Ø;Ð;Ð;Ð;Ð;Ð;å! 'Õ+BÑCÔCð Ý(ØPÅÀgÁÄÐPÐPñô ð ð SUÐ+ØÔ2ð Ø/×6Ò6à"ØØ#Ô4Ø#Ô6ð	ñô ð ð õ "+¨1¯6ª6©8¬8Ñ!4Ô!4ð ð ™˜˜2Ø1Ð1Ø0Ð0°¸Ô9LÈaÑPÔPÐRTñô ð ð õ "+¨1¯8ª8©:¬:Ñ!6Ô!6ð ð ™˜˜2Ø1Ð1Ø0Ð0°¸Ô9NÐPQÑRÔRÐTVñô ð ð ð ×/Ò/Ñ1Ô1‘��qØ!ð ð �DÝ! ! TÑ*Ô*Ø6Ð6�Uœ\˜^˜^˜^˜^™^˜^˜^Ø,3Ô,BÀ4Ô,H˜MØ7×>Ò>à$. J¨v°tÑ$<Ô$<Ø$+Ø$1Ô$BØ$1Ô$Dð	!"ñô ð ð ð 7Ð6ð *�Z˜\˜\˜\˜\™\˜\Ø ð *à'Ý"0Ø XÅdÈ:ÑFVÔFVÐ XÐ Xñ#ô #ð ðð( ˜Q Ô 8¸'Ô:TÐUð/Ð+ð -ðñ ñ ØØØØ!å  Ñ(Ô(ð Ý!*¨6¯;ª;©=¬=Ñ!9Ô!9ð Nð N™˜˜2Ø*>Ð*>Ø Ô!4°añ+ô +˜ð %˜ _°b¸/È!Ô:LÑMÔMÐMÐMð	Nõ "+¨6¯;ª;©=¬=Ñ!9Ô!9ð Nð N™˜˜2Ø*>Ð*>Ø Ô!4°añ+ô +˜ð %˜ _°b¸/È!Ô:LÑMÔMÐMÐMå!*¨6¯=ª=©?¬?Ñ!;Ô!;ð Pð P™˜˜2Ø*>Ð*>Ø Ô!6¸ñ+ô +˜ð %˜ _°bÐ:KÈAÔ:NÑOÔOÐOÐOØ �LØ,Ð,¨S°.Ô2OÑPÔPØ×-Ò-Ñ/Ô/ñô ð ñ ñ1ðB &9Ð%8°%Ð%8Ñ%8Ô%8ˆ	å-ØØÔ"ÝÐ%×*Ò*Ñ,Ô,Ñ-Ô-ØÔ*ñ	 
ô  
ˆÔð ñ Z	Ø ,ð Yñ Y‘�˜Ø œ+�ØÔ7ð à $Ô"7Ð7Ð7Ø×-Ò-Ý!œH TÔ%:¸7Ô%CÀTÑJÔJñô ð õ ˜t¥U¤\Ñ2Ô2ðà(×,Ò,¨TÑ2Ô2ðð Ð"2°4Ô"8¸Ô";Ò;Ð;àð
 !ð !¥Z°Ð8LÑ%MÔ%Mð !Ø”~ð !ØœŸšØ/°J°J¸vÑ4FÔ4FÐ1RÐ1RÈDÐ1RÐ1Rñô ð ð !à�6˜&‘>”>ð DØÔ(×5Ò5°f¸dÑCÔCÐCå,/°	¸8ÀUÑ,KÔ,Kð &ð &Ñ(�E˜7 DØ$×1Ò1°&Ñ9Ô9ÐVÐV¸w¿ºÈtÑ?TÔ?TÐVÐV�CàÐ/Ò/Ð/Ø"&Ô"4×"8Ò"8¸Ñ"AÔ"AÐA˜BÐNØ%¨Ô)<¸RÔ)@ÀÔ)CÒCÐCà'*ð %ð %ØCGÔCYÐZ\ÔC]ð%ð %ð %ð !$ ð
 +/Ô*A×*EÒ*EÀbÑ*IÔ*IÐ"I $Ð!VØ),Ð&8Ð&8°$Ð&8Ð&8  à),Ð&WÐ&W¸rÐ&WÐ&WÐ&W  à%(Ð"[Ð"[¸gÐ"[Ð"[Ð"[˜CØ—L’L Ñ%Ô%Ð%Ð%õ ˜vÐ';Ñ<Ô<ñ(àœ ~Ô':Ð:Ñ:Ø)ñ ;å˜DÔ-Ñ.Ô.°!Ò3Ñ3å!¥$ tÔ'8Ñ"9Ô"9Ñ:Ô:�Få" 4­¬Ñ6Ô6ðà Ð$9Ð9Ð9Ø 1× :Ò :Ø"Ð$4°TÔ$:¸1Ô$=ñ!ô !ð :ð4¨T×-=Ò-=¸fÑ-EÔ-Eð 4ð 4È&Ì+ð 4ð 4Ø#×/Ò/Ð0@ÀÔ0FÀqÔ0IÑJÔJð4ð 4ØO_Ð`dÔOeÐfgÔOhÔOmð4ð 4ð 4ð ð
 4Ð3Ø-Ô7¸×9IÒ9IÈ&Ñ9QÔ9QÐSVñô ð õ
 ' t­U¬\Ñ:Ô:ðà"Ð&;Ð;Ð;Ø 1× <Ò <Ø"Ø,¨VÔ4°QÔ7Ø@Ð@Ð@Ð@Ð@ñ!ô !ð <ð /¨vÔ6°qÔ9˜ð}¨T×-=Ò-=¸fÑ-EÔ-Eð }ð }È&Ì+ð }ð }Ø-1×-=Ò-=¸cÑ-BÔ-Bð}ð }ØGJÄxð}ð }à#×/Ò/°Ñ7Ô7ð}ð }à<@¿MºMÈ6ÕSXÔS`Ðae×aqÒaqÐruÑavÔavÑSwÔSwÐJxÑ<yÔ<yð}ð }ð }ð ð
 4Ð3Ø-Ô7¸×9IÒ9IÈ&Ñ9QÔ9QÐSVñô ð ùõ ‘”ˆð7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ðx  &Ð1�V�V°t´{ð 		ð 		ˆEà×+Ò+Ø”J r¸%Ô:Nð ,ñ ô ð ðð
 àˆK˜ÑÔÐÐð Ô/×3Ò3°D¸"Ñ=Ô=ð 	+ð 	+ˆBØ×*Ò*¨2¬7¸2Ð*Ñ>Ô>ÐJØØ—=’= ¤Ñ)Ô)ˆDàÔ ×$Ò$ TÑ*Ô*Ð*Ð*ð  0×5Ò5Ñ7Ô7ð L	Uñ L	U‰OˆF�GØÔ!×%Ò% fÑ-Ô-ˆAØˆyØØÔ,¨VÔ4ˆGàð WÝ$Ð%UÈVÐ%UÐ%UÑVÔVÐVØ(*ˆFØ�˜G AœJÑ'Ô'ˆBØˆLØŒw¥¤˜y­6¨'Ð2Ð2Ð2ÝÐ<Ð<Ð<Ð<°GÐ<Ñ<Ô<Ñ<Ô<ð HØÔ(×,Ò,­U¬X°f¸a¼gÑ-FÔ-FÑGÔGÐGð #ð M a¤g°×1JÒ1JÑ1LÔ1LÔ1RÒ&RÐ&RØ—M’M¥%¤(¨1¬7°FÀUÐ"KÑ"KÔ"KÑLÔLÐLØ"#¤'ÐFÐF¨rÐFÐF°w´}ÐFÐF�ØŒw�uœx­Ð0Ð0Ð0ÝÐ<Ð<Ð<Ð<°GÐ<Ñ<Ô<Ñ<Ô<ð HØÔ(×,Ò,­U¬X°f¸a¼gÑ-FÔ-FÑGÔGÐGà—’�eœh v¨q¬wÀÐGÑGÔGÑHÔHÐHØð KØ&'¤gÐ#kÐ#k°2Ð#kÐ#k¸1¼7Ð#kÐ#kÈÌÐ#kÐ#kÐ\cÔ\iÐ#kÐ#k�L�Là&(Ð#JÐ#J¨a¬gÐ#JÐ#J¸7¼=Ð#JÐ#J�LØñ Ýœ	 6Ð:°EÐ:Ð:�å,/°	¸8ÀUÑ,KÔ,Kð =ð =Ñ(�E˜7 DØÐ/Ò/Ð/ØŸš \Ñ2Ô2Ð2Ð2àŸš W§_¢_°UÑ%;Ô%;Ñ<Ô<Ð<Ð<ð 4°FÔ;�Ø$ð ð �AÝ! !Õ%;Ñ<Ô<ð ð !"¤ t×'@Ò'@Ñ'BÔ'BÑ B×LÒLÈQÑOÔOð Ø%,¨Q¤Z˜Få#(¤9Ý %¤¨¬°&Ñ 9Ô 9½5¼8ÀFÈAÌGÑ;TÔ;Tñ$ô $˜Dð *4×);Ò);¸DÑ)AÔ)A˜Jà $× KÒ KÈFÐTUÑ VÔ Vð +ð #q°~Ð"pÐ"pÐdnÐ"pÐ"p˜CØ7Ð7Ø !¤Ø $× 0Ò 0°Ñ 8Ô 8Ø #ñô ð øõ ˜f¥d¤jÑ1Ô1ð UØN¨
×(?Ò(?ÀÈÄ
Ñ(KÔ(KÐNÐNÐN�Ý,/°	¸8ÀUÑ,KÔ,Kð 
Uð 
UÑ(�E˜7 DØÐ/Ò/Ð/ØŸšØ"ÐqÐqÐqñô ð ð ð  Ò)Ð)ØŸš SÑ)Ô)Ð)Ð)Ø š˜ØŸšÐ%W°G×4HÒ4HÈÐQRÌÑ4TÔ4TÐ%WÐ%WÐ%WÑXÔXÐXÐXå1Ð2SÈTÐ2SÐ2SÑTÔTÐTùðt 	5Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ð Ô;ð	-à!Ô=ð	-ð Ô*ð	-ð
ð ð ð à $Ô :ðñ ô ˆIð
 ð -¥ð %ð %ð %ð %ØGPð%ñ %ô %ñ "ô "ð -õ �y‘>”> QÒ&Ð&Ý %¤Ø! !œ Qœ¨°1¬°a¬À5ð!ñ !ô !�I�Iõ !&¤ØWÐWÈYÐWÑWÔWð!�Iõ -0°	¸8ÀUÑ,KÔ,Kð -ð -Ñ(�E˜7 DØ!(§¢°Ñ!;Ô!;�JØÐ/Ò/Ð/à)ÐTÐTÐTð #ð —L’L Ñ,Ô,Ð,Ð,à ñ 	RØ#%ˆIØ$&ˆJÝ™%œ%ˆKØ1Fð 0ð 0Ñ-�	˜: vØð 0ØC¥3 y¡>¤>°AÑ#5ÐCÐC¸¸¹¼ÐCÐC�GØ×$Ò$ WÑ-Ô-Ð-Ð-à/ V V¡X¤XÐ/Ð/�GØ×%Ò% gÑ.Ô.Ð.à—O’O JÑ/Ô/Ð/Ð/Ý�:‰Œ Ò"Ð"Ø"&§)¢)­F°;Ñ,?Ô,?Ñ"@Ô"@�Ø—i’i 
Ñ+Ô+�Ý.ð¨_ð ð àðð ñô ð õ
 �Y‘” !Ò#Ð#Ý—	’	Ð@Å#ÀiÁ.Ä.ÑQÔQÐQåØØð
Ø”.ð
à”,ð
õ " )¨A¤,Ñ/Ô/Þ #Ð#NÐ#NÐ/?×/FÒ/FÑ/HÔ/HÐ#NÑ#NÔ#NÑ NÔ Nõ (.ØÔ-×4Ò4Ñ6Ô6Àð(ñ (ô (ð
ð 
ð 
ñ	
ô 	
ð 	
ð  Ô/ñ 	DØIÐIÐIÐIÐIÐIð
 Ô4×;Ò;Ñ=Ô=ð 3ð 3�Øð 3ð 3�BØ×)Ò)¨"¬'Ñ2Ô2Ð2Ð2ð3ð  Ô,×2Ò2Ñ4Ô4ð Cð C‘��RØ”8¥U¤X Iµ¨wÐ#7Ð7Ð7Ø×)Ò)­%¬(°2´8¸SÑ*AÔ*AÑBÔBÐBØ”8¥E¤H­fÐ#5Ð5Ð5Ø×)Ò)­%¬(°3¸¼Ñ*AÔ*AÑBÔBÐBøö Ô0Ñ2Ô2ð Dð DØ!Ð! $¤*¨d¬nÑ=Ô=×AÒAÑCÔCÐCðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Dð ˆ>Ø×,Ò,Ñ.Ô.Ð.à,.ˆÝ$'¨	°8¸UÑ$CÔ$Cð 	:ð 	:Ñ ˆE�7˜DØ�uŠ}ˆ}Ý! 'Õ+@ÑAÔAð Ý(ØN½tÀG¹}¼}ÐNÐNñô ð ð —’Ö4°U¸GÔ<TÑUÔUÑVÔVÐVÐVà—’Ö1°%Ñ8Ô8Ñ9Ô9Ð9Ð9Øˆs   ÁX)AY ÁY AYÁYAY©rB  r  úSequence[SymInt | FakeTensor]c               óØ   ‡— ddl mŠ d„ t          t          |¦  «        ¦  «        D ¦   «         }|                      |ˆfd„|D ¦   «         ||¬¦  «        }|rd                     |¦  «        S dS )a  
        Expected to be used with evaluate_guards_expression(). Produces the guards
        for the given placeholders and returns a string expression to be evaluated
        by evaluate_guards_expression given concrete values for the placeholders.
        r   rÈ  c                ó   — g | ]}d |› �‘ŒS rç  r’   ©r  r‚  s     rv   r  z6ShapeEnv.produce_guards_expression.<locals>.<listcomp>™  s   € Ð?Ð?Ð? �W˜�W�WÐ?Ð?Ð?rw   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r’   r’   )r  rd   rÉ  s     €rv   r  z6ShapeEnv.produce_guards_expression.<locals>.<listcomp>œ  s!   ø€ Ð/Ð/Ð/ ˆ[ˆ[˜‰^Œ^Ð/Ð/Ð/rw   r  rÍ  N)r�  rÉ  r‘  r¡  rŒ  r@  )r‡   r“  rB  r  Ú	arg_namesÚproduced_guardsrÉ  s         @rv   Úproduce_guards_expressionz"ShapeEnv.produce_guards_expression‹  s•   ø€ ð 	5Ð4Ð4Ð4Ð4Ð4à?Ð?¥e­C°Ñ,=Ô,=Ñ&>Ô&>Ð?Ñ?Ô?ˆ	Ø×-Ò-ØØ/Ð/Ð/Ð/ YÐ/Ñ/Ô/ØØ'ð	 .ñ 
ô 
ˆð ð 	1Ø—<’< Ñ0Ô0Ð0Øˆtrw   Úcodeúint | float | boolc                ót   — d„ | j                              ¦   «         D ¦   «         }t          |t          |¦  «        S )z?
        To be used by compile_fx to evaluate symexprs
        c                ó4   — i | ]\  }}t          |¦  «        |“ŒS r’   )r×   )r  r%  rÏ   s      rv   rŽ  z-ShapeEnv.evaluate_symexpr.<locals>.<dictcomp>¨  s$   € ÐIÐIÐI¡  3•�A‘”˜ÐIÐIÐIrw   ©rŒ  r�  Úevalr¥   ©r‡   r  r�   s      rv   Úevaluate_symexprzShapeEnv.evaluate_symexpr¤  s9   € ð JÐI¨$Ô*@×*FÒ*FÑ*HÔ*HÐIÑIÔIˆÝ�D�,¨Ñ-Ô-Ð-rw   rz  c                óz   ‡ — ˆ fd„‰ j                              ¦   «         D ¦   «         }t          |t          |¦  «        S )zB
        To be used by compile_fx to deserialize symexprs
        c                ó˜   •— i | ]F\  }}t          |¦  «        t          t          |‰t          t          |¦  «        d ¬¦  «        ¦  «        “ŒGS )Nr"  )r×   r"   r:   rt   )r  r%  rÏ   r‡   s      €rv   rŽ  z0ShapeEnv.deserialize_symexpr.<locals>.<dictcomp>¯  sV   ø€ ð 
ð 
ð 
á��3õ �‰FŒF•F�7 1 d­Cµ°S±´À4ÐHÑHÔHÑIÔIð
ð 
ð 
rw   r   r"  s   `  rv   Údeserialize_symexprzShapeEnv.deserialize_symexpr«  sN   ø€ ð
ð 
ð 
ð 
àÔ0×6Ò6Ñ8Ô8ð
ñ 
ô 
ˆõ �D�,¨Ñ-Ô-Ð-rw   úSequence[object]c                ó´   — d„ t          t          |¦  «        ¦  «        D ¦   «         }t          |t          dt	          t          ||¦  «        ¦  «        i¦  «        S )z«
        Expected to be used with produce_guards_expression(). Evaluates an expression
        generated by produce_guards_expression for the given concrete args.
        c                ó   — g | ]}d |› �‘ŒS rç  r’   r  s     rv   r  z7ShapeEnv.evaluate_guards_expression.<locals>.<listcomp>º  s   € Ð7Ð7Ð7 �W˜�W�WÐ7Ð7Ð7rw   ÚL)r‘  r¡  r!  r¥   r  r€  )r‡   r  r�   r  s       rv   Úevaluate_guards_expressionz#ShapeEnv.evaluate_guards_expressionµ  sN   € ð
 8Ð7¥e­C°©I¬IÑ&6Ô&6Ð7Ñ7Ô7ˆ	Ý�D�,¨­dµ3°yÀ$Ñ3GÔ3GÑ.HÔ.HÐ(IÑJÔJÐJrw   r  úSequence[Tensor]c               ód   — |                       ||¬¦  «        }|r|                      ||¦  «        S dS )zRGenerate guards for a graph's placeholder values and evaluate the guards with argsr  T)r  r+  )r‡   r“  r�   r  r  s        rv   r  z!ShapeEnv.evaluate_guards_for_args½  s?   € ð ×-Ò-¨lÈ-Ð-ÑXÔXˆØð 	?Ø×2Ò2°4¸Ñ>Ô>Ð>Øˆtrw   ÚsymintsúSequence[torch.SymInt]úlist[ShapeGuard]c                óF   ‡— d„ ‰D ¦   «         Šˆfd„| j         D ¦   «         }|S )z…
        Get a list of guards, but pruned so it only provides guards that
        reference symints from the passed in input
        c                ón   — h | ]2}t          |j        j        t          j        ¦  «        ¯&|j        j        ’Œ3S r’   )rj   rq   ro   rÒ   r¦  r;  s     rv   r  z-ShapeEnv.get_pruned_guards.<locals>.<setcomp>Ð  sA   € ð 
ð 
ð 
Ø­J°q´v´{ÅEÄLÑ,QÔ,Qð
ØŒFŒKð
ð 
ð 
rw   c                ó^   •— g | ])}t          ˆfd „|j        j        D ¦   «         ¦  «        ¯'|‘Œ*S )c              3  ó    •K  — | ]}|‰v V — Œ	d S r„   r’   )r  r  r.  s     €rv   r&  z8ShapeEnv.get_pruned_guards.<locals>.<listcomp>.<genexpr>Ô  s'   øè è € Ð)TÐ)T¸1¨!¨w¨,Ð)TÐ)TÐ)TÐ)TÐ)TÐ)Trw   )r0  ro   r¦   )r  r]  r.  s     €rv   r  z.ShapeEnv.get_pruned_guards.<locals>.<listcomp>Ó  sP   ø€ ð 
ð 
ð 
Ø¥cÐ)TÐ)TÐ)TÐ)TÀÄÔ@SÐ)TÑ)TÔ)TÑ&TÔ&Tð
Øð
ð 
ð 
rw   ©rB  )r‡   r.  rB  s    ` rv   Úget_pruned_guardszShapeEnv.get_pruned_guardsÊ  sR   ø€ ð
ð 
Ø!(ð
ñ 
ô 
ˆð
ð 
ð 
ð 
Ø”{ð
ñ 
ô 
ˆð ˆrw   r  c                ó|  ‡— i Šd	ˆfd„}t          ||¦  «        D �] \  }}|€Œ	t          |t          ¦  «        r |||¦  «         Œ+t          |t          j        ¦  «        st          dt          |¦  «        › �¦  «        ‚t          |                     ¦   «         ¦  «        D ]$\  }} ||                     |¦  «        |¦  «         Œ%t          | 	                    ¦   «         ¦  «        D ]$\  }} || 	                    |¦  «        |¦  «         Œ% || 
                    ¦   «         | 
                    ¦   «         ¦  «         �Œ"‰S )
a5  
        Given a paired list of placeholders (fake tensors with
        symbolic sizes) and concrete arguments (regular tensors
        with real sizes), returns a dictionary mapping each
        symbol to its real value.  So for example, if you
        have a placeholder with size (s0, s1), binding
        (2, 4) to it will give you {s0: 2, s1: 4}.  This is
        not guaranteed to bind ALL symbols in the ShapeEnv;
        we can't bind a symbol if it doesn't occur in any placeholder,
        and symbols that already have replacements won't get bindings.

        This is a little duplicative with evaluate_guards but
        it's different enough that it seemed cleanest to make
        another copy.  This assumes the guards are already checked,
        though if it's cheap we'll check for shenanigans
        r7  rÞ   rÏ   rf   r‚   c                óú  •— t          |t          ¦  «        rât          | t          ¦  «        st          dt	          | ¦  «        › �¦  «        ‚|j        j        }t          |t          j        ¦  «        r3|‰v r(‰|         | k    rt          ‰|         › d| › �¦  «        ‚d S | ‰|<   d S t          | t          j        ¦  «        r<| ‰v r,‰|          |  k    rt          ‰|          › d|  › �¦  «        ‚d S |  ‰| <   d S d S d S )Nri   ry  )	rj   r"   rt   rm   rs   rq   ro   rÒ   r¦  )r7  rÏ   r  r…  s      €rv   Úbind_symintz*ShapeEnv.bind_symbols.<locals>.bind_symintí  s8  ø€ Ý˜#�vÑ&Ô&ð ,Ý! #¥sÑ+Ô+ð KÝ(Ð)I½dÀ3¹i¼iÐ)IÐ)IÑJÔJÐJØ”H”M�å˜a¥¤Ñ.Ô.ð ,Ø˜H�}�}Ø# Aœ;¨#Ò-Ð-Ý"0°H¸Q´KÐ1JÐ1JÀSÐ1JÐ1JÑ"KÔ"KÐKð .Ð-ð '*˜ ™˜˜Ý  ¥E¤LÑ1Ô1ð ,Ø�r˜X�~�~Ø# Q Bœ<¨C¨4Ò/Ð/Ý"0°H¸a¸R´LÐ1LÐ1LÀsÀdÐ1LÐ1LÑ"MÔ"MÐMð 0Ð/ð ), t˜ ! ™˜˜ð!,ð ,ð,ð ,rw   Nrv  )r7  rÞ   rÏ   rÞ   rf   r‚   )r€  rj   r"   rp   rZ   rm   rs   r¯  r¶  r·  r¸  )	r‡   r“  r�   r9  rã  r7  r‚  r  r…  s	           @rv   r  zShapeEnv.bind_symbolsØ  s`  ø€ ð& -/ˆð	,ð 	,ð 	,ð 	,ð 	,ð 	,õ& ˜,¨Ñ-Ô-ð 	Bñ 	B‰FˆAˆsØˆyØÝ˜!�VÑ$Ô$ð Ø�˜C Ñ#Ô#Ð#ØÝ˜a¥¤Ñ.Ô.ð HÝ$Ð%F½TÀ!¹W¼WÐ%FÐ%FÑGÔGÐGÝ! !§&¢&¡(¤(Ñ+Ô+ð ,ð ,‘��1Ø�˜CŸHšH Q™KœK¨Ñ+Ô+Ð+Ð+Ý! !§(¢(¡*¤*Ñ-Ô-ð .ð .‘��1Ø�˜CŸJšJ q™MœM¨1Ñ-Ô-Ð-Ð-ØˆK˜×*Ò*Ñ,Ô,¨a×.>Ò.>Ñ.@Ô.@ÑAÔAÐAÑAàˆrw   úlist[SympyBoolean]c                ó*   ‡ — ˆ fd„‰ j         D ¦   «         S )zSReturns a list of guard expressions that aren't statically known (i.e. not trivial)c                óŠ   •— g | ]?}‰                      |j        d |j        ¬¦  «        	 ­%‰                     |j        ¦  «        ‘Œ@S )r’   rÜ  )rÂ  ro   r·  rv  )r  rÏ  r‡   s     €rv   r  z2ShapeEnv.get_nontrivial_guards.<locals>.<listcomp>  se   ø€ ð 
ð 
ð 
àØ×*Ò*Ø”
 2°eÔ6Jð +ñ ô ð ðð �MŠM˜%œ*Ñ%Ô%ðð ð rw   r5  rÚ   s   `rv   Úget_nontrivial_guardszShapeEnv.get_nontrivial_guards  s0   ø€ ð
ð 
ð 
ð 
àœð
ñ 
ô 
ð 	
rw   Úverbosec                óP   ‡— d                      ˆfd„| j        D ¦   «         ¦  «        S )zQFormat this shape env's guard expressions with optional traceback info if verboser  c              3  ób   •K  — | ])}d |j         › ‰rdt          |j        ¦  «        z   nd› �V — Œ*dS )z - r  rp  N)ro   r×   rB  )r  rÏ  r>  s     €rv   r&  z)ShapeEnv.format_guards.<locals>.<genexpr>  s^   øè è € ð 
ð 
àð I�%”*ÐH°wÐF˜c¥C¨¬
¡O¤OÑ3Ð3ÀBÐHÐHð
ð 
ð 
ð 
ð 
ð 
rw   )r@  rB  )r‡   r>  s    `rv   Úformat_guardszShapeEnv.format_guards  sC   ø€ ð �yŠyð 
ð 
ð 
ð 
àœð
ñ 
ô 
ñ 
ô 
ð 	
rw   r·  c                óÌ   ‡ — ˆ fd„|j         D ¦   «         }|r?‰ j        |                     ¦   «         z  D ]"}||         �t          dt          ¦  «        ||<   Œ#t          ||¦  «        S )zPGiven a sympy expression, computes a ValueRanges bound for what values it can bec                óH   •— i | ]}|‰j                              |d ¦  «        “ŒS r„   r³  r´  s     €rv   rŽ  z(ShapeEnv.bound_sympy.<locals>.<dictcomp>(  s.   ø€ ÐUÐUÐU¸a˜˜4Ô,×0Ò0°°DÑ9Ô9ÐUÐUÐUrw   Nr—  )r¦   r,  rñ  rW   rJ   rT   )r‡   ro   r·  r§  rù  s   `    rv   rT   zShapeEnv.bound_sympy#  s~   ø€ ð
 VÐUÐUÐUÀ4ÔCTÐUÑUÔUˆØð 		=ð ”^ l×&7Ò&7Ñ&9Ô&9Ñ9ð =ð =�Ø ”?Ð.õ '2°!µVÑ&<Ô&<�L ‘OøÝ˜4 Ñ.Ô.Ð.rw   rj  útuple[sympy.Symbol] | NoneÚcompute_hintútuple[SympyBoolean, ...]c                óJ  ‡ — |€$d„ ‰ j                              ¦   «         D ¦   «         }nˆ fd„|D ¦   «         }d„ ‰ j        D ¦   «         }t          j        ||¦  «        }|rˆ fd„|D ¦   «         }t          t                               |¦  «                             ¦   «         ¦  «        S )zî
        Given the symbols in an expression, it returns all the runtime asserts that have those symbols
        concatenated with all the guards.
        If symbols is None, it returns all the runtime asserts (and all the guards)
        Nc              3  ó.   K  — | ]}|D ]}|j         V — ŒŒd S r„   rr  )r  ÚrsrI  s      rv   r&  z&ShapeEnv.get_axioms.<locals>.<genexpr>A  sJ   è è € ð ð ØÐQSðð ØLM�”ðð ð ð ð ð ð rw   c              3  ót   •K  — | ]2}|‰j         v¯‰j                             |d ¦  «        D ]}|j        V — ŒŒ3dS )r’   N)rŒ  r0  r‹  ro   )r  r  rI  r‡   s      €rv   r&  z&ShapeEnv.get_axioms.<locals>.<genexpr>E  sc   øè è € ð ð àØ˜DÔ2Ð2Ð2ØÔ6×:Ò:¸1¸bÑAÔAð 3Ð2Øð ”à2Ð2Ð2Ð2Ð2ðð rw   c              3  ó$   K  — | ]}|j         V — Œd S r„   rr  r\  s     rv   r&  z&ShapeEnv.get_axioms.<locals>.<genexpr>K  s$   è è € Ð)FÐ)F°Q¨!¬&Ð)FÐ)FÐ)FÐ)FÐ)FÐ)Frw   c              3  óf   •K  — | ]+}t          |                     ‰j        ¦  «        ¦  «        V — Œ,d S r„   )r¤   r±  rŒ  )r  rd   r‡   s     €rv   r&  z&ShapeEnv.get_axioms.<locals>.<genexpr>N  sN   øè è € ð ð àõ ' q§z¢z°$Ô2HÑ'IÔ'IÑJÔJðð ð ð ð ð rw   )	r0  r  rB  r  r  r¢  r  Úfromkeysrñ  )r‡   rj  rE  Úruntime_assertsrB  r!  s   `     rv   Ú
get_axiomszShapeEnv.get_axioms5  sâ   ø€ ð ˆ?ðð Ø!%Ô!>×!EÒ!EÑ!GÔ!Gðñ ô ˆOˆOðð ð ð à ðñ ô ˆOð *GÐ)F¸$¼+Ð)FÑ)FÔ)FˆÝ)2¬¸ÀÑ)QÔ)QˆØð 	ðð ð ð àðñ ô ˆFõ •T—]’] 6Ñ*Ô*×/Ò/Ñ1Ô1Ñ2Ô2Ð2rw   r%  ú@tuple[tuple[SympyBoolean, sympy.logic.boolalg.BooleanAtom], ...]c                ó@  ‡— i Šd	ˆfd„} ||¦  «         t          |t          j        ¦  «        rU |t          j        |j        |j        d¬¦  «        ¦  «          |t          j        |j        |j        d¬¦  «        ¦  «         nût          |t          j        ¦  «        rš |t          j        |j        |j        d¬¦  «        ¦  «          |t          j        |j        |j        d¬¦  «        ¦  «         |j        j	        r9|j        j	        r- |t          j        |j        |j        dz
  d¬¦  «        ¦  «         nGt          |t          j        ¦  «        r- |t          j        |j        |j        dz   d¬¦  «        ¦  «         t          ‰                     ¦   «         ¦  «        S )
zGGiven a expression, it returns a list of predicates that follow from itro   rË   rf   r‚   c                ó°  •— t          | ¦  «        } t          | t          j        t          j        f¦  «        rât          | t          j        ¦  «        rt          j        nt          j        }t          j        ‰ t          | ¦  «        | j        | j        d¬¦  «        <   t          j        ‰ t          | ¦  «        | j        | j        d¬¦  «        <   t          j	        ‰ || j        | j        d¬¦  «        <   t          j	        ‰ || j        | j        d¬¦  «        <   d S t          j        ‰| <   t          j	        ‰t          t          j
        | ¦  «        ¦  «        <   d S )NFrê  )r¤   rj   rÒ   r¤  rÉ  r\  rs   r¥  r©  r]  rÈ  )ro   rô  Úequivs     €rv   Úadd_exprz+ShapeEnv.get_implications.<locals>.add_expr[  s  ø€ Ý)¨$Ñ/Ô/ˆDÝ˜$¥¤­5¬8Ð 4Ñ5Ô5ð Mõ (2°$½¼Ñ'AÔ'AÐO�5œ8˜8ÅuÄx�åHMÌ
��j•d˜4‘j”j ¤¨4¬8¸eÐDÑDÔDÑEÝHMÌ
��j•d˜4‘j”j ¤¨4¬8¸eÐDÑDÔDÑEÝFKÄk��h�h˜tœx¨¬¸EÐBÑBÔBÑCÝFKÄk��h�h˜tœx¨¬¸EÐBÑBÔBÑCÐCÐCõ $œj��d‘õ BGÄ�Õ,­U¬Y°t©_¬_Ñ=Ô=Ñ>Ð>Ð>rw   Frê  rî   ©ro   rË   rf   r‚   )rj   rÒ   r¤  rð  r¥  r©  rï  rî  rÉ  Ú
is_integerr¢  r�  )r‡   r%  rT  rS  s      @rv   rQ  zShapeEnv.get_implicationsT  s™  ø€ ð
 FHˆð	Mð 	Mð 	Mð 	Mð 	Mð 	Mð& 	ˆ�‰Œˆå�a�œÑ"Ô"ð 		AØˆH•U”X˜aœe Q¤U°UÐ;Ñ;Ô;Ñ<Ô<Ð<ØˆH•U”X˜aœe Q¤U°UÐ;Ñ;Ô;Ñ<Ô<Ð<Ð<Ý˜�5œ8Ñ$Ô$ð 	AØˆH•U”X˜aœe Q¤U°UÐ;Ñ;Ô;Ñ<Ô<Ð<ØˆH•U”X˜aœe Q¤U°UÐ;Ñ;Ô;Ñ<Ô<Ð<ØŒuÔð E A¤EÔ$4ð EØ��œ !¤%¨¬°©¸UÐCÑCÔCÑDÔDÐDøÝ˜�5œ8Ñ$Ô$ð 	AØˆH•U”X˜aœe Q¤U¨Q¡Y¸Ð?Ñ?Ô?Ñ@Ô@Ð@å�U—[’[‘]”]Ñ#Ô#Ð#rw   r÷  c                ó€   — |j         r)| j                             |¦  «        }|duo
|j        dk    S |j        r|dk    S dS )zWCheck if a single term is non-negative (symbol with non-neg range or non-neg constant).Nr   F)r4  r§  r‹  r(  r.  )r‡   r÷  r%  s      rv   Ú_is_nonneg_termzShapeEnv._is_nonneg_term}  sP   € àŒ>ð 	4ØÔ"×&Ò& tÑ,Ô,ˆBØ˜T�>Ð3 b¤h°!¢mÐ3ØŒ>ð 	Ø˜1’9ÐØˆurw   c                ó¨   — t          |t          j        ¦  «        s|                      |¦  «        S |j        D ]}|                      |¦  «        s dS ŒdS )z´
        Check if expr is a sum of non-negative terms (Add of symbols with non-neg range
        and non-negative constants). Returns True only for simple Add expressions.
        FT)rj   rÒ   rÕ  rX  r�   )r‡   ro   r7  s      rv   Ú_is_nonneg_sumzShapeEnv._is_nonneg_sum†  sh   € õ
 ˜$¥¤	Ñ*Ô*ð 	.Ø×'Ò'¨Ñ-Ô-Ð-ð ”9ð 	ð 	ˆCØ×'Ò'¨Ñ,Ô,ð Ø�u�uðð ˆtrw   r   úsympy.Basic | Nonec                ó   — t          |j        ¦  «        dk    rdS |j        \  }}t          |t          j        ¦  «        r	|dk    r|}n%t          |t          j        ¦  «        r	|dk    r|}ndS |                      |¦  «        rt          j        S dS )z“
        Fast path for trivial comparisons: sum of non-negative terms >= 0.
        Returns sympy.true if pattern matches, None otherwise.
        r—  Nr   )r¡  r�   rj   rÒ   rï  rð  rZ  r\  )r‡   ro   r¥  r©  Úsum_exprs        rv   Ú_maybe_fast_eval_comparisonz$ShapeEnv._maybe_fast_eval_comparison•  s—   € õ
 ˆtŒy‰>Œ>˜QÒÐØ�4à”9‰ˆˆSõ �d�EœHÑ%Ô%ð 	¨#°ª(¨(ØˆHˆHÝ˜�eœhÑ'Ô'ð 	¨C°1ªH¨HØˆHˆHà�4à×Ò˜xÑ(Ô(ð 	Ý”:Ðàˆtrw   ry   c                ó„   ‡ — ˆ fd„|j         D ¦   «         }t          ||¦  «        }|                     ¦   «         r|j        S |S )a&  
        Lightweight range-based evaluation using only bound_sympy (value range
        analysis), without expensive simplification, axiom matching, or symbol
        reallocation.

        Returns the resolved value if range analysis determines it, otherwise
        returns fallback.
        c                óF   •— i | ]}|‰j                              |¦  «        “ŒS r’   r³  r´  s     €rv   rŽ  z7ShapeEnv._maybe_evaluate_range_only.<locals>.<dictcomp>¹  s,   ø€ ÐMÐMÐM°a�a˜Ô*×.Ò.¨qÑ1Ô1ÐMÐMÐMrw   )r¦   rT   rk  r(  )r‡   ro   ry   Ú
var_rangesr¸  s   `    rv   Ú_maybe_evaluate_range_onlyz#ShapeEnv._maybe_evaluate_range_only¬  sR   ø€ ð NÐMÐMÐM¸4Ô;LÐMÑMÔMˆ
Ý˜$ 
Ñ+Ô+ˆØ×ÒÑÔð 	Ø”9ÐØˆrw   )r¨  rE  r·  r!  r§  r¨  r!  útuple[SympyBoolean] | Noner§  ú:tuple[tuple[sympy.Symbol, ValueRanges[sympy.Expr]]] | Nonec          
     ó&  ‡ ‡— |r|rt          d¦  «        ‚‰                      ||¦  «        }|r2|                     ‰ j        ¦  «                             ‰ j        ¦  «        }t          |¦  «        }d
ˆ fd„}|€ |‰ j        ¦  «         ‰ j        }nyi }|D ]i}	|	j                             |j        ¦  «        rH| 	                    t          ‰                      ‰                      |	¦  «        ¦  «        ¦  «        ¦  «         Œj ||¦  «         |                     |¦  «        }|j        }
|
s|j        s|j        r|S |€‰ j        Šnt          |¦  «        Št          ˆ ˆfd„t!          |
t"          ¬	¦  «        D ¦   «         ¦  «        }t%          ||||¦  «        }|S )a;  
        Tries to evaluate expr without introducing guards

        If unbacked_only == True, then we only do substitutions on
        unbacked SymInts (leaving regular hinted integers alone).  This could
        result in an expression that still contains backed SymInts, which you
        could then potentially guard on.

        Use compute_hint == True if you are trying to compute a non-binding
        hint for the particular hint values of backed and unbacked SymInts,
        e.g., if s0 happens to be 3 this run, compute_hint will substitute s0 with 3.
        z*compute_hint and axioms cannot both be setr!  údict[sympy.Expr, sympy.Expr]rf   r‚   c                ó,  •— ‰j         sd S d‰_         i }t          |                      ¦   «         ¦  «        D ]I\  }}|                     t          ¦  «        r*|                     ‰                     |¦  «        |i¦  «         ŒJ|                      |¦  «         d S r�  )r:  rV  r�  r[  rB   r€  rv  )r!  Ú	new_itemsrŒ  r�  r‡   s       €rv   Úresimplify_floor_divz=ShapeEnv._maybe_evaluate_static.<locals>.resimplify_floor_divã  s•   ø€ ØÔ4ð Ø�Ø05ˆDÔ-ØˆIÝ˜VŸ\š\™^œ^Ñ,Ô,ð <ð <‘��1ð —5’5�‘?”?ð <Ø×$Ò$ d§m¢m°AÑ&6Ô&6¸Ð%:Ñ;Ô;Ð;øØ�MŠM˜)Ñ$Ô$Ð$Ð$Ð$rw   Nc              3  ó    •K  — | ]H}t          |‰                     |¦  «        ‰j                             |¦  «        |‰j        v ¦  «        V — ŒId S r„   )r¤  r‹  rŒ  r,  )r  r  r‡   ra  s     €€rv   r&  z2ShapeEnv._maybe_evaluate_static.<locals>.<genexpr>  ss   øè è € ð 
ð 
ð õ ØØ—’˜qÑ!Ô!ØÔ&×*Ò*¨1Ñ-Ô-Ø�T”^Ð#ñ	ô ð
ð 
ð 
ð 
ð 
ð 
rw   rÃ  )r!  rf  rf   r‚   )rm   rv  r±  rŒ  r#  r¤   r!  r¦   r¨  r€  r  rQ  r.  r/  r§  r¢  rÅ  r×   r¹  )r‡   ro   r¨  rE  r·  r!  r§  ri  Úsubstr%  Úfsr¦  rI  ra  s   `            @rv   rÂ  zShapeEnv._maybe_evaluate_static¿  sô  øø€ ð2 ð 	O˜Fð 	OÝ Ð!MÑNÔNÐNØ�}Š}˜T >Ñ2Ô2ˆàð 	Ø—=’= Ô!7Ñ8Ô8×AÒAØÔ3ñô ˆDõ & dÑ+Ô+ˆð	%ð 	%ð 	%ð 	%ð 	%ð 	%ð  ˆ>Ø Ð  ¤Ñ-Ô-Ð-Ø”KˆEˆEàˆEØð Pð P�Ø”>×*Ò*¨4Ô+<Ñ=Ô=ð PØ—L’L¥ d×&;Ò&;¸D¿MºMÈ!Ñ<LÔ<LÑ&MÔ&MÑ!NÔ!NÑOÔOÐOøà Ð  Ñ'Ô'Ð'à�}Š}˜UÑ#Ô#ˆð Ôˆàð 	�t”~ð 	¨¬ð 	ØˆKàÐØÔ*ˆJˆJå˜lÑ+Ô+ˆJåð 
ð 
ð 
ð 
ð 
õ ˜B¥CÐ(Ñ(Ô(ð
ñ 
ô 
ñ 
ô 
ˆõ *Ø�+˜}¨nñ
ô 
ˆð ˆrw   rÍ   c                ó´   — i }|j         D ])}|                      |¦  «        }|j        r||k    r|||<   Œ*|r"t          |                     |¦  «        ¦  «        S |S )a¿  
        Apply symbol replacements to any symbols in the given expression.

        IMPORTANT: The output of this method MUST depend only on
        self.replacements and the input expr. Do not add dependencies on other
        mutable state. SymNode.expr uses _replacements_version_counter (which
        tracks only replacement changes) to cache calls to this method, so
        depending on other state would cause stale cache results.
        )r¦   r<  r4  r¢  r±  )r‡   ro   r(  r  rI  s        rv   rQ  zShapeEnv.replace  so   € ð 8:ˆàÔ"ð 	$ð 	$ˆAØ—
’
˜1‘”ˆAð
 ”;ð $ ! q¢& &Ø"#�˜Q‘øØð 	å˜tŸ}š}¨\Ñ:Ô:Ñ;Ô;Ð;àˆKrw   c                óÎ   — t          ¦   «         }| j        D ]3}|                      |¦  «        }|j        s|                     |¦  «         Œ4|| _        |                      ¦   «          d S r„   )rA  r*  rQ  r.  rÖ  rÂ  )r‡   Únew_divisiblerŒ  r  s       rv   Ú_update_divisiblezShapeEnv._update_divisible5  si   € å™œˆØ”ð 	%ð 	%ˆAØ—,’,˜q‘/”/ˆCØ”=ð %Ø×!Ò! !Ñ$Ô$Ð$øà&ˆŒØ×$Ò$Ñ&Ô&Ð&Ð&Ð&rw   c                óÄ  — t          |¦  «        }|                      |¦  «        }|sÏi }|                     t          ¦  «        D ]›}t	          |j        ¦  «        dk    rŒ|j        \  }}|dk    s|dk    r||}}|dk    r-|                      t          j        |d¦  «        ¦  «        r|||<   |dk    r-|                      t          j        |d¦  «        ¦  «        r|||<   Œœ|r| 	                    |¦  «        }| 
                    t          ¦  «        r¦i }|                     t          ¦  «        D ]r}t          |j        d         t          ¦  «        rP|j        d         j        \  }}	t          ||	¦  «        dk    rt          ||	¦  «        ||<   Œ_t!          ||	¦  «        ||<   Œs|r| 	                    |¦  «        }| 
                    t           ¦  «        rá|                      ¦   «          i }
|                     t           ¦  «        D ]Š}|j        \  }}	t          |	t           ¦  «        ri|	j        \  }}|                      t          ||	¦  «        ¦  «        | j        v r5||k    r/|                      t          ||¦  «        ¦  «        | j        v r||
|<   Œ‹|
r$| 	                    |
¦  «        }t          |¦  «        }| 
                    t           ¦  «        �r”i }
|                     t          j        ¦  «        }|                     t          j        ¦  «                             |                     t          j        ¦  «        ¦  «        }|                     t           ¦  «        D ]I}|j        \  }}	|                      t          ||	¦  «        ¦  «        | j        v rt          ||	¦  «        |
|<   ŒJ|
r¾| 	                    |
¦  «        }t          |¦  «        }|                     t          j        ¦  «        }|                     t          j        ¦  «                             |                     t          j        ¦  «        ¦  «        }|                     |¦  «        r|                     |¦  «        r|}|S )zAUse known constraints and replacements to simplify the given exprr—  rî   r   )r¢  rQ  r  rF   r¡  r�   rÂ  rÒ   rï  r±  r[  rI   rj   rD   rG   rA   rB   rp  r*  ÚPowÚRationalrU  rÓ   r¨  )r‡   ro   r·  Úmin_max_replacementsÚatomrd   rT  Útrunc_replacementsr—  rl  Údiv_replacementsÚbase1Údivisor1ÚpowsÚ	rationalsÚfdr·  Únew_powsÚnew_rationalss                      rv   rv  zShapeEnv.simplify@  s  € õ ˜4Ñ Ô ˆØ�|Š|˜DÑ!Ô!ˆð ð 	;ØCEÐ ØŸ
š
¥3™œð 
3ð 
3�Ý�t”y‘>”> AÒ%Ð%ØØ”y‘��1Ø˜’6�6˜Q !šV˜VØ˜a�q�Aà˜’6�6˜d×9Ò9½%¼(À1Àa¹.¼.ÑIÔI�6Ø12Ð(¨Ñ.Ø˜’6�6˜d×9Ò9½%¼(À1Àa¹.¼.ÑIÔI�6Ø12Ð(¨Ñ.øØ#ð ;Ø—}’}Ð%9Ñ:Ô:�à�8Š8•JÑÔð 	9ØACÐØŸ
š
¥:Ñ.Ô.ð Kð K�Ý˜dœi¨œl­JÑ7Ô7ð KØ$(¤I¨a¤LÔ$5‘M�D˜'Ý˜4 Ñ)Ô)¨QÒ.Ð.Ý3;¸DÀ'Ñ3JÔ3JÐ*¨4Ñ0Ð0õ 4<¸DÀ'Ñ3JÔ3JÐ*¨4Ñ0øØ!ð 9Ø—}’}Ð%7Ñ8Ô8�ð �8Š8•HÑÔð 	)Ø×"Ò"Ñ$Ô$Ð$Ø?AÐØŸ
š
¥8Ñ,Ô,ð 	:ð 	:�Ø $¤	‘��gÝ˜g¥xÑ0Ô0ð :Ø&-¤l‘O�E˜8àŸš¥S¨¨wÑ%7Ô%7Ñ8Ô8¸D¼NÐJÐJØ  EšM˜MØ ŸLšL­¨U°HÑ)=Ô)=Ñ>Ô>À$Ä.ÐPÐPà19Ð(¨Ñ.øØð )Ø—}’}Ð%5Ñ6Ô6�Ý" 4Ñ(Ô(�Ø�8Š8•HÑÔñ 	$Ø?AÐØ—:’:�eœiÑ(Ô(ˆDØŸ
š
¥5¤>Ñ2Ô2×=Ò=¸d¿jºjÍÌÑ>WÔ>WÑXÔXˆIØ—j’j¥Ñ*Ô*ð Cð C�Ø "¤‘��gØ—<’<¥ D¨'Ñ 2Ô 2Ñ3Ô3°t´~ÐEÐEÝ+3°D¸'Ñ+BÔ+BÐ$ RÑ(øØð 	$ØŸ=š=Ð)9Ñ:Ô:�Ý& xÑ0Ô0�Ø#Ÿ>š>­%¬)Ñ4Ô4�Ø (§¢­u¬~Ñ >Ô >× IÒ IØ—N’N¥5¤=Ñ1Ô1ñ!ô !�ð ×$Ò$ TÑ*Ô*ð $¨}×/EÒ/EÀiÑ/PÔ/Pð $Ø#�DØˆrw   z7use guarding_hint_or_throw or optimization_hint insteadr�  )Ú
allow_noner  c               ó  ‡‡— t          ‰¦  «                             | j        ¦  «        }|j        s×ddlm} t          ||¦  «        rdS |                      |d¬¦  «        }|�|S |rdS | j        rƒ|                     | j        ¦  «        Š‰j	        sbt                               d‰‰¦  «         t          dˆˆfd„¬	¦  «         |                      t          j        |‰¦  «        d
|› d‰› �¦  «         ‰S |                      |‰¦  «        ‚|S )a  
        Gets a size hint for a given expression from the underlying shapes we had.
        Does not introduce a guard, so only use this when you can guarantee that
        your code is still valid for arbitrary shapes (such as optimization decisions)
        r   rM   NT©rE  z*propagate_real_tensors size_hint(%s) -> %sÚpropagate_real_tensorsc                 ó²   •— t          ‰ ¦  «        t          ‰¦  «        t          j        t          j        d¬¦  «                             ¦   «         ¦  «        dœS ©Nrî   rF  )ro   r“  rã  ©rÙ   r.   rd  rX   rJ  rf  )ro   Úunsound_exprs   €€rv   r|  z$ShapeEnv.size_hint.<locals>.<lambda>±  sP   ø€ Ý$(¨¡J¤JÝ&*¨<Ñ&8Ô&8Ý%/Ô%>Ý 1Ô 9¸qÐ AÑ AÔ A× IÒ IÑ KÔ Kñ&ô &ð-ð -€ rw   r=  úpropagate_real_tensors: rð  )r¢  r±  rŒ  r.  Ú torch.utils._sympy.singleton_intrN   rj   rÂ  r#  r¦   rÇ   r¨  r/   Úguard_or_defer_runtime_assertrÒ   r¤  Ú_make_data_dependent_error)r‡   ro   r  Úresult_exprrN   rI  r†  s    `    @rv   Ú	size_hintzShapeEnv.size_hint�  sf  øø€ õ " $Ñ'Ô'×0Ò0°Ô1GÑHÔHˆØÔ$ð !	EØEÐEÐEÐEÐEÐEå˜+ |Ñ4Ô4ð Ø�tØ×+Ò+¨KÀdÐ+ÑKÔKˆAØˆ}Ø�Øð Ø�tàÔ2ð (Ø*×3Ò3°DÔ4WÑXÔX�Ø#Ô0ð (Ý—K’KØDÀdÈLñô ð õ %Ø0ð%ð %ð %ð %ð %ð	ñ 	ô 	ð 	ð ×6Ò6Ýœ ¨lÑ;Ô;ØR°;ÐRÐRÀLÐRÐRñô ð ð (Ð'à×1Ò1°+¸tÑDÔDÐDØÐrw   úsympy.Expr | intrg   c                ó$   — t          | |i ¦  «        S )z¼
        Return a concrete hint for an expression.

        Returns Python bool (True/False) for boolean expressions (e.g. Eq, Ne),
        and Python int for integer expressions.
        )rb   ré  s     rv   rn   zShapeEnv.guarding_hint_or_throwÂ  s   € õ ,¨D°$¸Ñ;Ô;Ð;rw   c                óV   — 	 |                       |¦  «         n# t          $ r Y dS w xY wdS )NFT)rn   r~   ré  s     rv   r]  zShapeEnv.has_guarding_hintÌ  sE   € ð	Ø×'Ò'¨Ñ-Ô-Ð-Ð-øÝ*ð 	ð 	ð 	Ø�5�5ð	øøøàˆts   ‚ ˜
&¥&c                ó(   — t          | |i |¬¦  «        S )aÎ  
        Return a concrete integer hint for an expression.

        This function should be used for non-guarding based optimizations. If you
        want a hint that you can guard on, use the guarding_hint API instead.

        This function will hint unbacked symbols using user provided optimization
        hints. If not provided, fallback will be used along with some heuristics
        that try to maximize consistency with the shape environment.

        Special cases:

        - Complex numbers (containing sympy.I): raises an error since tensor
          dimensions cannot be complex.
        - Infinity (int_oo, sympy.oo): returns sys.maxsize.
        - NaN (sympy.nan): returns the fallback value.
        )Úprecomputed_replacementsry   )rc   )r‡   ro   ry   s      rv   r|   zShapeEnv.optimization_hintÔ  s$   € õ( 'Ø�$°¸hð
ñ 
ô 
ð 	
rw   ©Úexpr_sym_node_idÚunhinted_exprr“  r~   c               ón  ‡ ‡‡— g }‰j         D ]n}d                     ‰ j        |                              ¦   «         ¦  «        }‰ j                             d||¦  «         |‰ j        v r|                     |¦  «         Œod}‰                      d¦  «        \  }}	‰j	        rd}
nd}
d}|
› d‰› d‰› d	d
                     t          t          |¦  «        ¦  «        pd› d|› d|› dd                     t          t          ‰j         ¦  «        ¦  «        › d�|	z   }t          dˆˆ ˆfd„¬¦  «         t          ‰|¦  «        S )Nrp  z-Data dependent variable '%s' allocated at:
%sTzDCould not extract specialized integer from data-dependent expressionz,Could not guard on data-dependent expressionzlconsider using data-dependent friendly APIs such as guard_or_false, guard_or_true and statically_known_true.r  z (unhinted: z).  (Size-like symbols: rØ  Únonez)

z
Caused by: z’
For more information, run with TORCH_LOGS="dynamic"
For extended logs when we create symbols, also add TORCHDYNAMO_EXTENDED_DEBUG_CREATE_SYMBOL="r2  zÖ"
If you suspect the guard was triggered from C++, add TORCHDYNAMO_EXTENDED_DEBUG_CPP=1
For more debugging help, see https://docs.google.com/document/d/1HSuTTVvYH1pTew89Rtpeu84Ht3nQEFTYhAX3Ypa_xJs/edit?usp=sharing
Úguard_on_data_dependent_errorc                 ó¾   •— t          ‰ ¦  «        t          ‰¦  «        ‰j        t          j        t	          j        d¬¦  «                             ¦   «         ¦  «        dœS )Nrî   rF  )ro   r”  Úexpr_idrã  )rÙ   rX  r.   rd  rX   rJ  rf  )ro   r‡   r”  s   €€€rv   r|  z5ShapeEnv._make_data_dependent_error.<locals>.<lambda>  sV   ø€ Ý˜T™
œ
Ý!% mÑ!4Ô!4ØÔ1Ý#Ô2Ý%Ô-°1Ð5Ñ5Ô5×=Ò=Ñ?Ô?ñô ð	!ð !€ rw   r=  )r¦   r@  r%  r»  rÇ   rÈ   r,  rU  r@  rV  rì  r×   r,   r~   )r‡   ro   r”  r“  Úsize_like_symbolsr  Ú
stacktraceÚsize_oblivious_result_msgrB  rC  Údescr°  s   ```         rv   rŠ  z#ShapeEnv._make_data_dependent_errorì  sÐ  øøø€ ð ÐØÔ"ð 	,ð 	,ˆAØŸš Ô!2°1Ô!5×!<Ò!<Ñ!>Ô!>Ñ?Ô?ˆJØŒH�NŠNØ@À!ÀZñô ð ð �D”NÐ"Ð"Ø!×(Ò(¨Ñ+Ô+Ð+øØ$&Ð!Ø"&×"9Ò"9¸$Ñ"?Ô"?ÑˆÐØŒ?ð 		àVð ˆDð BˆDðKð &ð ð 	qð 	q�dð 	qð 	q¨ð 	qð 	qØ#'§9¢9­SµÐ6GÑ-HÔ-HÑ#IÔ#IÐ#SÈVð	qð 	qà(ð	qð 	qð ð	qð 	qð :=¿ºÅ#ÅcÈ4ÔK\ÑB]ÔB]Ñ9^Ô9^ð	qð 	qð 	qð  ñ
 ð 	õ  	Ø+ðð ð ð ð ð ð
	
ñ 
	
ô 
	
ð 
	
õ +¨4°Ñ5Ô5Ð5rw   r^  r  úValueRangesSLoc | Noner_  c               ó  — |j         |j        }}|dk     r|| j        v rt          |d¦  «        }|| j        vrW| j                             d||¦  «         || j        |<   |€$|                      ¦   «         }t          ||¦  «        }|| j	        |<   n²| j        |         }||z  }	|	|k    rš|€$|                      ¦   «         }t          ||¦  «        }|	j         |j         k    r|j         | j	        |         _         |	j        |j        k    r|j        | j	        |         _        |	| j        |<   | j                             d||	¦  «         | j
                             |¦  «        x}
�+| j        |         }|
|vr|s|
|vrt          |
› d|› �¦  «        ‚d S d S d S d S )Nr—  z"_update_var_to_range %s = %s (new)z%_update_var_to_range %s = %s (update)rü  )r(  r)  r,  rW   r§  rÇ   rÈ   rM  r¿   r$  rŒ  r‹  rm   )r‡   rù  r%  r  r_  r(  r)  rB  rt  rs  r�  rI  s               rv   rm  zShapeEnv._update_var_to_range'  sÌ  € ð ”x ¤ˆuˆð �1Š9ˆ9˜ 4¤>Ð1Ð1Ý˜U AÑ&Ô&ˆBð ˜Ô*Ð*Ð*ØŒH�NŠNÐ?ÀÈÑLÔLÐLØ(*ˆDÔ˜fÑ%ØˆØ—~’~Ñ'Ô'�Ý)¨$°Ñ5Ô5�Ø-4ˆDÔ" 6Ñ*Ð*àÔ# FÔ+ˆCØ˜‘(ˆCØ�cŠzˆzØ�?ØŸ>š>Ñ+Ô+�DÝ-¨d°DÑ9Ô9�GØ”9 ¤	Ò)Ð)Ø;B¼=�DÔ*¨6Ô2Ô8Ø”9 ¤	Ò)Ð)Ø;B¼=�DÔ*¨6Ô2Ô8Ø,/�Ô! &Ñ)Ø”—’ÐFÈÐPSÑTÔTÐTàÔ'×+Ò+¨FÑ3Ô3Ð3ˆAÐ@ØÔ! &Ô)ˆAØ˜ˆzˆzð %ð @Ø �z�zÝ,°Ð->Ð->¸1Ð->Ð->Ñ?Ô?Ð?ð AÐ@àˆzð@ð @Ø!�zrw   Útgtr°  c                ó8	  ‡ ‡‡‡‡— ‰‰ j                              ‰d¦  «        k    rdS ‰‰j        v rdS t          ‰t          j        ¦  «        st          dt          ‰¦  «        › �¦  «        ‚‰ j        rt          ‰¦  «        sdS d}‰‰ j
        v �r›‰ j
        ‰         }‰                      ‰¦  «        }‰                      ‰|¦  «         |                     |¦  «        �s/t          ‰j        ¦  «        dk    �rt          t!          ‰j        ¦  «        ¦  «        }t#          t	          j        ‰‰¦  «        |d¬¦  «        }|�Î‰ j                             d|‰‰|¦  «         ‰                      |d         ¦  «        }t+          t-          |j        ¦  «        t1          |j        ¦  «        ¦  «        }	‰                      ||	‰ j        ‰         ¦  «         ‰                      ‰¦  «        }|                     |¦  «        st          d|›d|›�¦  «        ‚‰‰ j        v r5t          ‰t          j        ¦  «        r‰ j                             ‰¦  «         n=t          ‰t          j        ¦  «        r#‰‰ j        v r‰ j                             ‰¦  «         |                     |¦  «        s!‰ j                             d	‰‰‰||¦  «         dS ‰‰ j        v rd‰                      ‰d
¬¦  «        }
‰                      ‰d
¬¦  «        }|
                     |¦  «        s!‰ j                             d‰‰‰|
|¦  «         dS t          ‰t          j        t          j        f¦  «        r¯t?          j         ¦   «         ŠtC          dˆˆˆ ˆˆfd„¬¦  «         ‰ j"                             ‰g ¦  «        D ]}‰r
‰‰ j#        |<   ŒtH          j%        rN‰ j         &                    d‰ j"        ‰         d         j'        ‰¦  «         ‰ j                             dd
¬¦  «         t&           (                    d‰‰‰|¦  «         ‰‰ j         ‰<   ‰‰ j)        vr‰  *                    ¦   «         ‰ j)        ‰<   ‰ xj+        dz  c_+        ‰  ,                    ¦   «          ‰  -                    t	          j        ‰‰d¬¦  «        ¦  «         dS )zw
        Adds or updates a replacement for a symbol.
        Use this instead of `self.replacements[a] = tgt`.
        Nrõ  rî   F©Úfloordiv_inequalityz2set_replacement: solve for %s in %s == %s gives %sz
tgt_bound=z not a subset of src_bound=z:skipped set_replacement %s = %s (%s) [%s not subset of %s]T©r·  zVskipped set_replacement %s = %s (%s) [%s not subset of %s (size-oblivious conditions)]Úsymbolic_shape_specializationc            	     ó*  •— t          ‰ ¦  «        d„ ‰j                             ‰ g ¦  «        D ¦   «         t          ‰¦  «        ‰t          j        t          j        d¬¦  «                             ¦   «         ¦  «        ‰rt          j        ‰¦  «        nd dœS )Nc                ó   — g | ]	}|j         ‘Œ
S r’   r]  r;  s     rv   r  z?ShapeEnv._set_replacement.<locals>.<lambda>.<locals>.<listcomp>å  s   € ÐOÐOÐO¨1 ¤ÐOÐOÐOrw   rî   rF  )rù  rú  rY  Úreasonrã  r9  )rÙ   r�  r‹  r.   rd  rX   rJ  rf  )rd   r°  r‡   r   Úuser_tbs   €€€€€rv   r|  z+ShapeEnv._set_replacement.<locals>.<lambda>ã  s�   ø€ Ý" 1™gœgØOÐO°Ô0C×0GÒ0GÈÈ2Ñ0NÔ0NÐOÑOÔOÝ! #™YœYØ!Ý'Ô6Ý)Ô1°qÐ9Ñ9Ô9×AÒAÑCÔCñô ð ?FÐO�
Ô1°'Ñ:Ô:Ð:È4ð%ð %€ rw   r=  zSpecializing %s to %sr   ÚSPECIALIZATIONr3  zset_replacement %s = %s (%s) %srê  ).r(  r‹  r¦   rj   rÒ   r¦  rm   rs   rþ  rY  r§  rT   rm  r¨  r¡  r'  r^  rO   r¤  rÇ   rÈ   rW   r@   r(  rC   r)  r$  r,  rÖ  rÓ   rc  r)   re  r/   r�  r=  rÝ  Úprint_specializationsr¨  rZ  r�  r)  rM  r9  rÂ  r•  )r‡   rd   r   r°  Ú	tgt_boundÚ	src_boundrT  rI  Úrat_b_boundÚb_boundÚtgt_bound_soÚsrc_bound_sorN  r©  s   ````         @rv   ru  zShapeEnv._set_replacement[  s  øøøøø€ ð �$Ô#×'Ò'¨¨4Ñ0Ô0Ò0Ð0ØˆFà�Ô Ð Ð ØˆFõ ˜!�Uœ\Ñ*Ô*ð 	JÝ Ð!H½tÀA¹w¼wÐ!HÐ!HÑIÔIÐIð Ô<ð	å-¨cÑ2Ô2ð	ð ˆFð ˆ	Ø�Ô!Ð!Ñ!ØÔ)¨!Ô,ˆIð ×(Ò(¨Ñ-Ô-ˆIØ×%Ò% a¨Ñ3Ô3Ð3ð ×%Ò% iÑ0Ô0ñ µS¸Ô9IÑ5JÔ5JÈaÒ5OÑ5OÝ�˜cÔ.Ñ/Ô/Ñ0Ô0�å�eœh q¨#Ñ.Ô.°ÀuÐMÑMÔM�Ø�=Ø”H—N’NØLØØØØñô ð ð #'×"2Ò"2°1°Q´4Ñ"8Ô"8�KÝ)Ý! +Ô"3Ñ4Ô4µjÀÔARÑ6SÔ6Sñô �Gð ×-Ò-¨a°¸$Ô:PÐQRÔ:SÑTÔTÐTØ $× 0Ò 0°Ñ 5Ô 5�IØ$×-Ò-¨iÑ8Ô8ð Ý,ØH˜yÐHÐH¸IÐHÐHñô ð ð, �D”NÐ"Ð"¥z°#µu´|Ñ'DÔ'DÐ"Ø”×"Ò" 3Ñ'Ô'Ð'Ð'Ý˜C¥¤Ñ.Ô.ð &°3¸$¼.Ð3HÐ3HØ”×"Ò" 1Ñ%Ô%Ð%ð ×%Ò% iÑ0Ô0ð Ø”—’ØPØØØØØñô ð ð �Ø�d”nÐ$Ð$Ø#×/Ò/°ÀDÐ/ÑIÔI�Ø#×/Ò/°À$Ð/ÑGÔG�Ø#×,Ò,¨\Ñ:Ô:ð 
Ø”H—N’NðLàØØØ$Ø$ñô ð ð �Få�c�EœM­5¬;Ð7Ñ8Ô8ð 	Bõ %Ô2Ñ4Ô4ˆGÝØ/ðð ð ð ð ð ð ð ðñ ô ð ð  Ô-×1Ò1°!°RÑ8Ô8ð Að A�Øð AØ9@�DÔ.¨vÑ6øåÔ+ð BØ”× Ò Ø+¨TÔ-@ÀÔ-CÀAÔ-FÔ-KÈSñô ð ð ”—’Ð/¸D�ÑAÔAÐAÝ�ŠÐ2°A°s¸CÀÑKÔKÐKØ"ˆÔ˜!Ñð �DÔ+Ð+Ð+Ø)-¯ªÑ)9Ô)9ˆDÔ# AÑ&ØÐ*Ô*¨aÑ/Ð*Ô*Ø×$Ò$Ñ&Ô&Ð&ð 	×Ò�eœh q¨#¸Ð>Ñ>Ô>Ñ?Ô?Ð?Ð?Ð?rw   c                ób   — | j                              |¦  «         |                      ¦   «          d S r„   )r*  rÖ  rÂ  ré  s     rv   Ú_add_divisiblezShapeEnv._add_divisible  s0   € ØŒ×Ò˜4Ñ Ô Ð Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&rw   c                óì   ‡ — |‰ j         vr|S ‰ j         |         }ˆ fd„|j        D ¦   «         }‰ j         |                              |¦  «        \  }}|r‰                      ||d¦  «         ‰ j         |         S )aÛ  
        Implements a DSU-like algorithm to find the variable that represents a
        Also handles transitive non-identity replacements.

        a: b + c
        c: d

        IMPORTANT: The output of this method MUST depend only on
        self.replacements and the input symbol. Do not add dependencies on other
        mutable state. SymNode.expr uses _replacements_version_counter (which
        tracks only replacement changes) to cache calls to replace() (and
        transitively this method), so depending on other state would cause
        stale cache results. (Note: _set_replacement,  may read other fields
        like var_to_range, but those are side effects that do not affect the
        returned value.)
        c                ó<   •— i | ]}|‰                      |¦  «        “ŒS r’   )r<  )r  r  r‡   s     €rv   rŽ  z"ShapeEnv._find.<locals>.<dictcomp>"  s%   ø€ ÐBÐBÐB¨A�q˜$Ÿ*š* Q™-œ-ÐBÐBÐBrw   Úfind)r(  r¦   Ú	_xreplaceru  )r‡   rd   r  Úcur_replaceÚreplacedÚchangeds   `     rv   r<  zShapeEnv._find  s�   ø€ ð& �DÔ%Ð%Ð%ØˆHØÔ Ô"ˆØBÐBÐBÐB°Ô1AÐBÑBÔBˆØ Ô-¨aÔ0×:Ò:¸;ÑGÔGÑˆ�'Øð 	7Ø×!Ò! ! X¨vÑ6Ô6Ð6ØÔ  Ô#Ð#rw   c                óª  ‡ — t          |t          j        ¦  «        r!|j        D ]}‰                      |¦  «         ŒdS t          |t          j        ¦  «        sdS t          |t          j        ¦  «        rdS t          |j        ¦  «        }t          |¦  «        dk    rt          d|› �¦  «        ‚t          |¦  «        dk    rdS dˆ fd	„}t          ||d
¬¦  «        }|j        }|j        }‰                      |¦  «         t          |t          j        ¦  «        sdS |                     t"          ¦  «        �s£	 |                     t&          ¦  «                             |                     t&          ¦  «        ¦  «        }t          |¦  «        dk    r t+          d„ |D ¦   «         ¦  «        rt,          ‚dˆ fd„} |||¦  «        r+‰                      |‰                      |¦  «        d¦  «         nÜ |||¦  «        r+‰                      |‰                      |¦  «        d¦  «         n¥t3          ||d         d¬¦  «        }	|	�‹t5          d„ t          j        |	d         ¦  «        D ¦   «         ¦  «        rZ‰                      |	d         ¦  «        }
t          t9          |
¦  «        ¦  «        dk    }|r‰                      |d         |
d¦  «         n‹# t,          $ r Y nw xY wt;          t=          |                     t"          ¦  «        ¦  «        ¦  «        }	 t3          ||d¬¦  «        }	|	�!|	d         dk    r‰                      |¦  «         n# t,          $ r Y nw xY wdS )zŠ
        The relational guard is guarded to be true.  Use this information to
        simplify shapes (i.e. a == b or a % 5 == 0)
        Nr   z3The expression should not be static by this point: é   rù  rˆ  rf   útuple[int, int, str]c                óf  •— | ‰j         v o#t          d„ ‰j         |          D ¦   «         ¦  «        }‰j                             | ¦  «        }|�t	          |t
          ¦  «        rt          j        }n6t          | t          j
        ¦  «        rt          |¦  «        }nt          j        }| j        }|rdnd||fS )Nc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r„   )rp  r;  s     rv   r&  zHShapeEnv._maybe_guard_rel.<locals>._smart_symbol_sort.<locals>.<genexpr>J  sE   è è € ð Jð JØ%&�—’Ñ Ô ðJð Jð Jð Jð Jð Jrw   rî   r   )r�  r0  rŒ  r‹  rj   rN   r"  rñ   rR   rS   rÓ  rt   rZ  )rù  Úhas_only_ephemeral_sourcesru   r¶  rZ  r‡   s        €rv   Ú_smart_symbol_sortz5ShapeEnv._maybe_guard_rel.<locals>._smart_symbol_sortI  sÈ   ø€ Ø)*¨dÔ.AÐ)Að *Åcð Jð JØ*.Ô*=¸aÔ*@ðJñ Jô Jñ Gô GÐ&ð Ô)×-Ò-¨aÑ0Ô0ˆDØˆ|�z¨$µÑ=Ô=ˆ|õ ”{��Ý ¥4¤9Ñ-Ô-ð #Ý˜4‘y”y��å”{�Ø”6ˆDà3Ð:�A�A¸¸DÀ$ÐGÐGrw   T)rÄ  rè  c              3  ó,   K  — | ]}|j         d k    V — ŒdS rç  ro  r¡  s     rv   r&  z,ShapeEnv._maybe_guard_rel.<locals>.<genexpr>k  s9   è è € ð 4ð 4Ø'(�A”I ’Nð4ð 4ð 4ð 4ð 4ð 4rw   r¥  rÐ   r©  rr   c                óÀ   •— t          | t          j        ¦  «        rBt          | ¦  «        rt	          |‰j        ¦  «        sdS t          | t          j        ¦  «        rdS dS rp  )	rj   rÒ   r¦  r<  rA  r=  rR   rS   rj  )r¥  r©  r‡   s     €rv   Útrivial_solvez0ShapeEnv._maybe_guard_rel.<locals>.trivial_solve�  sm   ø€ Ý! #¥u¤|Ñ4Ô4ð (Ý0Øñô ð (å"CØ Ô!5ñ#ô #ð(ð
 $( 4Ý)¨#­t¬zÑ:Ô:ð (Ø#' 4ð !˜5rw   Útrivial_lhsÚtrivial_rhsFr¢  c              3  ó$   K  — | ]}|j         V — Œd S r„   )rV  )r  rã  s     rv   r&  z,ShapeEnv._maybe_guard_rel.<locals>.<genexpr>–  s5   è è € ð -ð -Ø)*˜œð-ð -ð -ð -ð -ð -rw   rî   r”  )rù  rˆ  rf   r½  )r¥  rÐ   r©  rÐ   rf   rr   ) rj   rÒ   rÆ  r�   Ú_maybe_guard_relrÅ  rÉ  rV  r¦   r¡  rm   rÅ  r¥  r©  Ú_refine_rangesr¤  r[  rG   r  rB   r)  r’  rŽ  ru  r<  rO   r0  Úpreorder_traversalr<  r'  r^  r³  )r‡   ro   r7  ÚfreerÁ  r¥  r©  Úfloor_div_atomsrÄ  rI  r…  ÚokÚmod_exprs   `            rv   rÈ  zShapeEnv._maybe_guard_rel(  s´  ø€ õ �d�EœIÑ&Ô&ð 	Ø”yð +ð +�Ø×%Ò% cÑ*Ô*Ð*Ð*ØˆFÝ˜D¥%¤)Ñ,Ô,ð 	ØˆFõ
 �d�EœHÑ%Ô%ð 	ØˆFå�DÔ%Ñ&Ô&ˆåˆt‰9Œ9˜Š>ˆ>Ý ØLÀdÐLÐLñô ð õ ˆt‰9Œ9�qŠ=ˆ=ØˆFð	Hð 	Hð 	Hð 	Hð 	Hð 	Hõ* �dÐ 2¸DÐAÑAÔAˆØŒhˆØŒhˆà×Ò˜DÑ!Ô!Ð!õ ˜$¥¤Ñ)Ô)ð 	ØˆFà�xŠx�‰}Œ}ñ @	ð6Ø"%§)¢)­HÑ"5Ô"5×";Ò";¸C¿IºIÅhÑ<OÔ<OÑ"PÔ"P�Ý�Ñ'Ô'¨!Ò+Ð+µð 4ð 4Ø,;ð4ñ 4ô 4ñ 1ô 1Ð+õ .Ð-ð&!ð !ð !ð !ð !ð !ð !�=  cÑ*Ô*ð MØ×)Ò)¨#¨t¯zªz¸#©¬ÀÑNÔNÐNÐNØ"�] 3¨Ñ,Ô,ð 
MØ×)Ò)¨#¨t¯zªz¸#©¬ÀÑNÔNÐNÐNå! $¨¨Q¬ÀUÐKÑKÔK�AØ�}­ð -ð -Ý.3Ô.FÀqÈÄtÑ.LÔ.Lð-ñ -ô -ñ *ô *�}ð #'§*¢*¨Q¨q¬TÑ"2Ô"2˜Ý Õ!6°wÑ!?Ô!?Ñ@Ô@ÀAÒE˜Øð MØ ×1Ò1°$°q´'¸7ÀGÑLÔLÐLøøå&ð ð ð Ø�ðøøøõ �D §¢­C¡¤Ñ1Ô1Ñ2Ô2ˆHðÝ˜d HÀ%ÐHÑHÔH�Ø�= Q q¤T¨Q¢Y YØ×'Ò'¨Ñ1Ô1Ð1øøÝ&ð ð ð Ø�ðøøøàˆs%   Ä6FK Ë
KËKÌ5M Í
MÍMc                óF   — |s| j         sdnd}t          |t          ¦  «        S )Nr   r—  )rü  rW   rJ   )r‡   rÏ  r(  s      rv   rl  zShapeEnv._default_value_range¬  s+   € ð 1ÐX¸Ô8PÐX��ÐWXˆÝ˜5¥&Ñ)Ô)Ð)rw   c                ó(   — t          j        ¦   «         S r„   )rW   Úunknown_intrÚ   s    rv   rQ  z)ShapeEnv._default_unspecified_value_range²  s   € ÝÔ&Ñ(Ô(Ð(rw   c                ó&  — t          |                     t          ¦  «        ¦  «        }t          |¦  «        D ]F}|j        \  }}t          ||¦  «        }t          j        |d¦  «        }|                      |¦  «         ŒG|  	                    |¦  «        S rå  )
r¢  r  rB   rT  r�   rG   rÒ   r¤  rì  rv  )r‡   ro   Ú
floor_divsr|  r—  rl  rÎ  Úeq_exprs           rv   Ú_simplify_floor_divzShapeEnv._simplify_floor_divµ  sˆ   € å˜4Ÿ:š:¥hÑ/Ô/Ñ0Ô0ˆ
õ ˜:Ñ&Ô&ð 	(ð 	(ˆBØœG‰MˆD�'Ý˜4 Ñ)Ô)ˆHÝ”h˜x¨Ñ+Ô+ˆGà×Ò˜wÑ'Ô'Ð'Ð'Ø�}Š}˜TÑ"Ô"Ð"rw   r÷  c                óD  — | j         rt          d|› d|› �¦  «        ‚| j        r|| j        dxx         dz  cc<   t	          ddi | j        ¥|› d|› �ddœ¥¦  «         t                               d	||t                               ¦   «         t          j
        k     ¬
¦  «         d S d S )Nz2Guard attempted while ShapeEnv guards are frozen: rð  Úignored_backward_guardrî   rå  Úevaluate_expr_frozenr—  )Úignored_guardÚversionz>Ignored guard %s == %s, this could result in accuracy problemsr3  )r2  r•   rK  r6  r2   r  rÇ   r�  ÚgetEffectiveLevelr
  ÚWARNING)r‡   ro   r÷  s      rv   Ú_check_frozenzShapeEnv._check_frozenÅ  sù   € ØÔ$ð 	Ý%Ø]ÀTÐ]Ð]È|Ð]Ð]ñô ð ð Œ;ð 	ØŒLÐ1Ð2Ð2Ô2°aÑ7Ð2Ð2Ñ2ÝØØ&ðØ”nðà(,Ð%@Ð%@°,Ð%@Ð%@ð  !ðð ð ñ
ô 
ð 
õ �HŠHØPØØå×0Ò0Ñ2Ô2µW´_ÒDð ñ ô ð ð ð ð	ð 	rw   útypes.FrameType | Nonec                óz   — t          j        ¦   «         }|�%|j        j        t	          ¦   «         vr|S |j        }|­%|S r„   )r  rõ  rø  rù  rC  rö  )r‡   rû  s     rv   Ú_get_user_framezShapeEnv._get_user_frameß  sH   € ÝÔ$Ñ&Ô&ˆØÐØŒ|Ô'Õ/BÑ/DÔ/DÐDÐDØ�Ø”LˆEð Ðð ˆrw   rA  Úframework_locútuple[SLoc, str]c                óè  — |}|€N|                       ¦   «         }	 |�/t          j        |j        j        |j        |j        j        ¦  «        }~n# ~w xY wd }t          j        ¦   «         }|rpt          |¦  «        dz
  }|dk    rA||         j
        t          ¦   «         v r&|dz  }|dk    r||         j
        t          ¦   «         v °&t          ||         d¬¦  «        }d}|r,|r*dd                     t          j        |¦  «        ¦  «        z   }|rOt          j        rCt#          j        d¬¦  «        }	|dd                     |	                     ¦   «         ¦  «        z   z  }n|r|d	z  }t)          ||¦  «        |fS )
Nrî   r   T)Úlinerp  zM
User Stack (most recent call last):
  (snipped, see stack below for prefix)
)r¡  z
C++ stack trace:
z?
For C++ stack trace, run with TORCHDYNAMO_EXTENDED_DEBUG_CPP=1)rà  Ú	tracebackÚFrameSummaryrø  rù  rú  Úco_namer)   re  r¡  ÚfilenamerC  rY   r@  Úformat_listrÝ  Úextended_debug_cpprX   rJ  r»  r'   )
r‡   rA  rá  Úflocrû  Úmaybe_user_locr©  r´  rC  Ú	cpp_stacks
             rv   r@  zShapeEnv._get_stack_summaryç  s´  € ð 5BˆØˆ<Ø×(Ò(Ñ*Ô*ˆEðØÐ$Ý$Ô1ØœÔ0ØœØœÔ,ñô �Dð �Eø�E�	�	�	�	ð ˆÝ Ô.Ñ0Ô0ˆØð 	CÝ�g‘,”, Ñ"ˆCØ˜’'�'˜g cœlÔ3Õ7JÑ7LÔ7LÐLÐLØ�q‘�ð ˜’'�'˜g cœlÔ3Õ7JÑ7LÔ7LÐLÐLå)¨'°#¬,¸TÐBÑBÔBˆNàÐØð 	˜ð 	ð>à—'’'�)Ô/°Ñ8Ô8Ñ9Ô9ñ:ð ð
 ð 	�Ô1ð 	Ý)Ô1°dÐ;Ñ;Ô;ˆIØÐ!7¸"¿'º'À)×BRÒBRÑBTÔBTÑ:UÔ:UÑ!UÑUÐÐØð 	ØØRñÐõ �D˜.Ñ)Ô)Ð+<Ð<Ð<s   š1A ÁAr'   c                ó8   — |                       |¬¦  «        \  }}|S )N)rá  )r@  )r‡   rá  rB  r›  s       rv   rM  zShapeEnv._get_sloc  s!   € Ø×)Ò)¸Ð)ÑFÔF‰ˆˆaØˆrw   r  c                óú   — t          t          j        |                     ¦   «         ¦  «                             ¦   «         d¦  «        dz  }|| j        v r|dz  }|| j        v °| j                             |¦  «         |S )Né   éd   rî   )rt   ÚhashlibÚsha256ÚencodeÚ	hexdigestr"  rÖ  )r‡   r  Úattempts      rv   ri  zShapeEnv._generate_unique_id  sx   € Ý•g”n [×%7Ò%7Ñ%9Ô%9Ñ:Ô:×DÒDÑFÔFÈÑKÔKÈcÑQˆØ˜œÐ(Ð(Ø�q‰LˆGð ˜œÐ(Ð(àŒ×Ò˜GÑ$Ô$Ð$Øˆrw   r  c                ó(  ‡ ‡‡‡— i }i Št          ¦   «         x}	 �|j        j        dk    rt          ¦   «         S t	          t          j        |j        ¦  «        ¦  «        }t          j        |j        ¦  «        \  }}d\  }}}t          |¦  «        D ](\  }	}
|
j
        �|
j
        }||j        k    rŒ|€|	x}}Œ&|	}Œ)|�|€t          ¦   «         S dˆˆˆ fd„Š|j        }|||d	z   …         D ]ƒ}
|
j
        x}�t          ||¦  «        }t          |
j        t          ¦  «        rN|
j        |j        v r@t#          j        |j        |
j                 ¦  «        d
         }ˆfd„|D ¦   «         ||
j        <   Œ„||j        |z
  |d	z   |z
  …         }|st          ¦   «         S t'          |d
         ¦  «        t'          |d
                              ¦   «         ¦  «        z
  Šd                     ˆfd„|D ¦   «         ¦  «                             ¦   «         }t          ||‰¬¦  «        S )z”
        Given the current user code frame, finds the relevant lines of code,
        values of symbolic locals, and free symbols involved.
        Nr  )NNNrù  r   rf   r  c                ó’  •— t          | t          j        ¦  «        r£|                      ¦   «         D ]} ‰|¦  «         Œ|                      ¦   «         D ]} ‰|¦  «         Œ ‰|                      ¦   «         ¦  «         d|                      ¦   «         › d|                      ¦   «         › d|                      ¦   «         › d�S t          | t          t          t          f¦  «        rf| j	        j
        j        D ]E}t          |¦  «        ‰v rŒ|‰j        v r(‰j        |         d         j        ‰t          |¦  «        <   ŒFt          | ¦  «        S d S )NzTensor(shape: z
, stride: z, storage_offset: rn  r   )rj   rp   rZ   r¶  r·  r¸  r    r"   r!   rq   ro   r¦   r×   r�  rZ  )rù  rÑ  r  Úframe_symbolsr†  r‡   s      €€€rv   r†  z'ShapeEnv._find_frame_locals.<locals>.go>  sV  ø€ Ý˜!�Uœ\Ñ*Ô*ð ØŸš™œð ð �AØ�B�q‘E”E�E�EØŸš™œð ð �AØ�B�q‘E”E�E�EØ��1×#Ò#Ñ%Ô%Ñ&Ô&Ð&ð= Q§V¢V¡X¤Xð =ð =Ø Ÿxšx™zœzð=ð =à'(×'7Ò'7Ñ'9Ô'9ð=ð =ð =ðõ
 ˜A¥­µÐ:Ñ;Ô;ð ØœœÔ1ð Oð O�AÝ˜1‘v”v Ð.Ð.Ø Ø˜DÔ/Ð/Ð/Ø04Ô0CÀAÔ0FÀqÔ0IÔ0N˜¥c¨!¡f¤fÑ-øÝ˜1‘v”v�Ø�4rw   rî   r   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r’   r’   )r  Ú
flat_localr†  s     €rv   r  z/ShapeEnv._find_frame_locals.<locals>.<listcomp>Z  s.   ø€ ð .ð .ð .Ø'1�B�B�z‘N”Nð.ð .ð .rw   rp  c                ó$   •— g | ]}|‰d …         ‘ŒS r„   r’   )r  r  Úindents     €rv   r  z/ShapeEnv._find_frame_locals.<locals>.<listcomp>d  s!   ø€ Ð:Ð:Ð:¨c˜S   œ\Ð:Ð:Ð:rw   )r  r	  rj  )rù  r   rf   r  )Ú_find_user_code_framerø  rù  r  rV  ÚdisÚBytecoder  Úgetsourcelinesr¯  Ústarts_linerú  rá  rj   Úargvalr×   Úf_localsr›  Útree_flattenr¡  Úlstripr@  rÞ  )r‡   Úframe_localsrû  ÚinstructionsÚco_linesr¶  ÚstartÚendr   r‚  ÚinstrÚlast_linenoÚlinenoÚflat_localsÚlocsÚ	frame_locrù  r†  rý  s   `               @@@rv   Ú_find_frame_localszShapeEnv._find_frame_locals  su  øøøø€ ð
 (*ˆØ(*ˆõ +Ñ,Ô,Ð,ˆEØðà”\Ô-°Ò;Ð;Ý$Ñ&Ô&Ð&õ �CœL¨¬Ñ6Ô6Ñ7Ô7ˆÝ"Ô1°%´,Ñ?Ô?Ñˆ�&Ø*‰ˆˆs�Cå! ,Ñ/Ô/ð 	ð 	‰HˆAˆuØÔ Ð,ØÔ'�Ø�e”nÒ$Ð$ØØˆ}Ø��˜˜à��àˆ=˜C˜KÝ$Ñ&Ô&Ð&ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð, ”nˆØ! %¨#°©' /Ô2ð 	ð 	ˆEØÔ+Ð+�Ð8Ý! +¨vÑ6Ô6�Ý˜%œ,­Ñ,Ô,ð °´ÀÄÐ1OÐ1OÝ$Ô1°%´.ÀÄÔ2NÑOÔOÐPQÔR�ð.ð .ð .ð .Ø5@ð.ñ .ô .�˜Uœ\Ñ*øð
 ˜œ¨Ñ/°+À±/ÀFÑ2JÐJÔKˆØð 	'Ý$Ñ&Ô&Ð&å�T˜!”W‘”¥ D¨¤G§N¢NÑ$4Ô$4Ñ 5Ô 5Ñ5ˆØ—G’GÐ:Ð:Ð:Ð:°TÐ:Ñ:Ô:Ñ;Ô;×AÒAÑCÔCˆ	Ý Ø ,¸ð
ñ 
ô 
ð 	
rw   r]  Úforcing_specc           	     óš  ‡ ‡‡— t          dˆˆˆ fd„¬¦  «         t          dˆfd„¬¦  «         ‰ j                             t          j        ¦  «        ryt          ‰¦  «        }t          j        d uo|t          j        k    }‰  	                    |¦  «        \  }}d}|sd|› d�}‰ j         
                    d	|s‰n‰› d
�|||||¬¦  «         d S d S )NÚguard_addedc            
     ó  •— t          ‰ ¦  «        ‰‰j        t          j        d¦  «        t          j        d¦  «        ˆ fd„‰j                             ¦   «         D ¦   «         t          ‰                     ¦   «         ¦  «        dœS )Nr  c                óH   •— i | ]\  }}|‰j         v ¯t          |¦  «        |“ŒS r’   ©r¦   r×   )r  rŒ  r�  r]  s      €rv   rŽ  z9ShapeEnv._log_guard.<locals>.<lambda>.<locals>.<dictcomp>r  s<   ø€ ð &ð &ð &á˜˜1Ø˜AœNÐ*Ð*õ ˜‘F”F˜Aà*Ð*Ð*rw   )ro   r/  Úexpr_node_idr9  rã  Úsymbol_to_sourcesr  )	r×   rX  r.   r;  r<  r'  r�  r   r  )r]  r/  r‡   s   €€€rv   r|  z%ShapeEnv._log_guard.<locals>.<lambda>l  s‹   ø€ Ý˜A™œØ Ø $Ô 6Ý(Ô7¸Ñ:Ô:Ý#Ô7¸Ñ:Ô:ð&ð &ð &ð &à $Ô 2× 8Ò 8Ñ :Ô :ð&ñ &ô &õ
 !' t×'>Ò'>Ñ'@Ô'@Ñ AÔ Að!ð !€ rw   r=  Úguard_added_fastc                 óÞ   •— t          ‰ ¦  «        t          j        t          j        ¦   «         ¦  «        t          j        t          j        d¬¦  «                             ¦   «         ¦  «        dœS )Nrî   rF  )ro   r9  rã  )r×   r.   rd  r)   re  rX   rJ  rf  )r]  s   €rv   r|  z%ShapeEnv._log_guard.<locals>.<lambda>|  s\   ø€ Ý˜A™œÝ(Ô7½Ô8TÑ8VÔ8VÑWÔWÝ#Ô2Ý%Ô-°1Ð5Ñ5Ô5×=Ò=Ñ?Ô?ñô ð!ð !€ rw   rp  zA, for more info run with TORCHDYNAMO_EXTENDED_DEBUG_GUARD_ADDED="ú"z%s %s [guard added] %s%s%sz (forcing_spec)r3  )r,   r/   rÇ   r	  r
  ÚINFOr×   rÝ  Úextended_debug_guard_addedr@  r�  )	r‡   r/  r]  r  Ústr_grA  rB  rC  rx  s	   ```      rv   Ú
_log_guardzShapeEnv._log_guardi  sV  øøø€ ÝØðð ð ð ð ð ð	
ñ 	
ô 	
ð 	
õ  	Øðð ð ð ð		
ñ 		
ô 		
ð 		
ð Œ8× Ò ¥¤Ñ.Ô.ð 	Ý˜‘F”FˆEåÔ1¸Ð=ð ?Ø�VÔ>Ò>ð ð '+×&=Ò&=¸hÑ&GÔ&GÑ#ˆDÐ#Ø ˆOØð ðHØ?DðHð Hð Hð  ð ŒH�MŠMØ,Ø*ÐJ��°6Ð0JÐ0JÐ0JØØØØ!Ø#ð ñ ô ð ð ð ð	ð 	rw   rX  r:   r¸  c                ó|   — t          |¦  «        | _        |                      |j        |j        |j        ||¬¦  «        S )zW
        Given a SymNode, evaluates sym_node.expr, adding guards if necessary.
        )r¸  )r:  rX  rì  ro   ru   r#  )r‡   r)  r·  r¸  s       rv   r¼  zShapeEnv.evaluate_sym_node   sE   € õ "$ H¡¤ˆÔØ×!Ò!ØŒMØŒMØÔØØ)ð "ñ 
ô 
ð 	
rw   c                óö  — |                       ¦   «         }|€t          d¦  «        ‚t          t          j        |j        ¦  «        ¦  «        }t          j        dk    rddlm	}  |||j
        d„ ¬¦  «        }n
|j
        dz  }t          j        dk    r||         j        d	v r|d
z  }t          j        j                             d¦  «        }||d
z   |d
z   t!          |¦  «        z   …         }d„ |D ¦   «         }||k    S )Nzframe must not be None)r  é   r   )Úbisect_leftc                ó   — | j         S r„   )r¶  rþ  s    rv   r|  z,ShapeEnv._is_python_assert.<locals>.<lambda>Å  s   € À!Ä(€ rw   rÃ  r—  )r  é   )ÚTO_BOOLÚ
COMPARE_OPrî   Fc                ó   — g | ]	}|j         ‘Œ
S r’   )Úopname)r  Úinsts     rv   r  z.ShapeEnv._is_python_assert.<locals>.<listcomp>Ô  s   € Ð7Ð7Ð7 T�T”[Ð7Ð7Ð7rw   )rà  rm   rV  rÿ  Úget_instructionsrø  r"  Úversion_infoÚbisectr%  Úf_lastir+  rp   r-  Úsymbolic_convertÚget_assert_bytecode_sequencer¡  )r‡   rû  Úinstsr%  r   Úassert_instsÚ	cur_instss          rv   Ú_is_python_assertzShapeEnv._is_python_assert³  s  € ð ×$Ò$Ñ&Ô&ˆØˆ=Ý Ð!9Ñ:Ô:Ð:å•SÔ)¨%¬,Ñ7Ô7Ñ8Ô8ˆÝÔ˜wÒ&Ð&à*Ð*Ð*Ð*Ð*Ð*à�+˜e U¤]Ð8JÐ8JÐKÑKÔKˆCˆCð ”- 1Ñ$ˆCåÔ˜wÒ&Ð&Ø�SŒzÔ Ð$=Ð=Ð=à�q‘�å”}Ô5×RÒRØñ
ô 
ˆð ˜# ™' C¨!¡G­c°,Ñ.?Ô.?Ñ$?Ð?Ô@ˆ	Ø7Ð7¨YÐ7Ñ7Ô7ˆ	Ø˜LÒ(Ð(rw   r_  Úunsound_resultc                óš   ‡ ‡‡— t                                d‰‰¦  «         t          dˆˆfd„¬¦  «         t          dˆˆ ˆfd„¬¦  «         d S )Nz.propagate_real_tensors evaluate_expr(%s) -> %sr‚  c                 ó²   •— t          ‰ ¦  «        t          ‰¦  «        t          j        t          j        d¬¦  «                             ¦   «         ¦  «        dœS r„  r…  )r_  r7  s   €€rv   r|  z7ShapeEnv._log_real_tensor_propagation.<locals>.<lambda>á  sP   ø€ Ý˜Y™œÝ˜~Ñ.Ô.Ý#Ô2Ý%Ô-°1Ð5Ñ5Ô5×=Ò=Ñ?Ô?ñô ð!ð !€ rw   r=  Ú!propagate_real_tensors_provenancec            
     ó"  •— t          ‰ ¦  «        t          ‰¦  «        ‰j        t          j        d¦  «        t          j        d¦  «        ˆ fd„‰j                             ¦   «         D ¦   «         t          ‰                     ¦   «         ¦  «        dœS )Nr  c                óH   •— i | ]\  }}|‰j         v ¯t          |¦  «        |“ŒS r’   r  )r  rŒ  r�  r_  s      €rv   rŽ  zKShapeEnv._log_real_tensor_propagation.<locals>.<lambda>.<locals>.<dictcomp>ñ  s=   ø€ ð &ð &ð &á˜˜1Ø˜IÔ2Ð2Ð2õ ˜‘F”F˜Aà2Ð2Ð2rw   )ro   r“  r  r9  rã  r  r  )	rÙ   rX  r.   r;  r<  r'  r�  r   r  )r_  r‡   r7  s   €€€rv   r|  z7ShapeEnv._log_real_tensor_propagation.<locals>.<lambda>ë  s“   ø€ Ý˜Y™œÝ˜~Ñ.Ô.Ø $Ô 6Ý(Ô7¸Ñ:Ô:Ý#Ô7¸Ñ:Ô:ð&ð &ð &ð &à $Ô 2× 8Ò 8Ñ :Ô :ð&ñ &ô &õ
 !' t×'>Ò'>Ñ'@Ô'@Ñ AÔ Að!ð !€ rw   )rÇ   r¨  r/   r,   )r‡   r_  r7  s   ```rv   Ú_log_real_tensor_propagationz%ShapeEnv._log_real_tensor_propagation×  sŸ   øøø€ õ 	�ŠØ<ØØñ	
ô 	
ð 	
õ
 	Ø$ðð ð ð ð ð		
ñ 		
ô 		
ð 		
õ 	Ø/ðð ð ð ð ð ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
rw   ©r  úint | bool | float | Noner#  c          	     ój   — t                                ¦   «         }|                      |||||||¦  «        S )zÈ
        Given an expression, evaluates it, adding guards if necessary
        When fallback_value is not None the function return fallback_value instead of failing with data dependent error.
        )rœ   r³  Ú_inner_evaluate_expr)r‡   r_  ru   r#  r·  r¸  r  Úsuppress_guards_tlss           rv   rì  zShapeEnv.evaluate_exprú  sC   € õ  '×;Ò;Ñ=Ô=ÐØ×(Ò(ØØØØØØØñ
ô 
ð 	
rw   rì  )Úsave_tracked_fakesrZ  r³  c                óÈ   — 	 |                       ||||||¬¦  «        S # t          $ r:}t          |t          ¦  «        rn| j                             d||||¦  «         ‚ d }~ww xY w)Nr>  zKfailed during evaluate_expr(%s, hint=%s, size_oblivious=%s, forcing_spec=%s)Ú_evaluate_exprrÃ  rj   r~   rÇ   r¨  )	r‡   r_  ru   r#  r·  r  r³  r¸  r%  s	            rv   rA  zShapeEnv._inner_evaluate_expr   s›   € ð	Ø×&Ò&ØØØØØØ)ð 'ñ ô ð øõ ð 	ð 	ð 	Ý˜!Õ8Ñ9Ô9ð 	Øà”× Ò ØaØØØ"Ø ñô ð ð øøøøð	øøøs   ‚ �
A!§5AÁA!Úassumed_valuec                ór   — |                       d¦  «        \  }}t                               d||||¦  «         d S )NTzfcould not evaluate %s due to data dependency, it was assumed to be %s with no runtime assertions %s %s)r@  rÇ   r�  )r‡   rd   rF  rB  r¯  s        rv   Ú_log_suppressed_ddezShapeEnv._log_suppressed_dde7   sH   € Ø×-Ò-¨dÑ3Ô3‰ˆˆeÝ�ŠØtØØØØñ	
ô 	
ð 	
ð 	
ð 	
rw   úbool | int | float | Nonec          	     ó  ‡ ‡‡— t          ‰t          j        j        j        t          j        j        j        f¦  «        r‰S t          j        dˆˆˆ fd„¦   «         }d }d}	‰ j        �rB|��?‰  	                    ¦   «         �s*|�s't          d„ ‰j        D ¦   «         ¦  «        �s|�€ |¦   «         }
|
t          j        u r%‰                      t          j        |f¦  «        \  }}	n |
t          j        u rI‰                      t"          j        |f¦  «        \  }}‰                      t          j        |f¦  «        \  }}	nI‰                      t"          j        ||
f¦  «        \  }}‰                      t          j        |f¦  «        \  }}	|€t)          d¦  «        ‚|	r‰                      |¦  «         d }	 ‰j        rx‰ j                             d‰¦  «         ‰�Yt          ‰t2          ¦  «        r‰‰k    rt)          ‰› d‰› �¦  «        ‚n)t          j        ‰‰¦  «        st)          ‰› d‰› �¦  «        ‚‰S ‰}t          j        j        j        j        t>          j         k     r‰  !                    |¦  «        }|�|S t          j        j        j        j        }‰€b|d	k    r\|�Z|t>          j         k    r‰  "                    ‰|¦  «         |S ‰  #                    ||¦  «        }||u r‰  "                    ‰|¦  «         |S ‰  $                    ||¬
¦  «        }|�P‰ j                             d|rd‰› d�n||¦  «         |s(tJ          j&        r‰�|‰k    rt)          |› d‰› �¦  «        ‚|S d}d }
|j        ‰ j'         (                    ¦   «         k    �s-‰  $                    |d¬¦  «        }|€t)          d¦  «        ‚|j        ‰ j'         (                    ¦   «         k    sád}|s|�‰  "                    ‰|¦  «         |S |s\‰ j)        rU‰ *                    ‰ j)        ¦  «         *                    ‰ j'        ¦  «        x}j        s‰  +                    ‰|¦  «         d}|}
d}|s+‰ j,        r$‰  -                    ¦   «         rt          j        }
d}d}|s5‰  .                    | *                    ‰ j'        ¦  «        |‰ j/        ¬¦  «        ‚n|}|
€
 |¦   «         }
‰  0                    ||
¦  «         tJ          j1        rOt          ‰t2          ¦  «        r:t          |t          j        t          j2        f¦  «        rt          j3        |¦  «        }|
t          j        u rti          tj          |¦  «        }n8|
t          j        u rt          j3        |¦  «        }nt          j        ||
¦  «        }|r‰  6                    |d‰› d|
› �¦  «         |
S ‰  	                    ¦   «         sø‰  7                    d||¬¦  «         ‰  8                    |¦  «         t          j9         :                    ¦   «         r!‰ j;        r‰  6                    |d‰› �¦  «         n¤ty          |‰  =                    ¦   «         |¬
¦  «        }‰ j>         ?                    |¦  «         ‰ j@         A                    t…          ‰  C                    ‰  D                    |¦  «        ¦  «        ¦  «        ¦  «         n‰  7                    d||¬¦  «         n&# tŠ          $ r |	r‰  F                    |¦  «         ‚ w xY w‰  	                    ¦   «         s‡|�…|j        D ]}}‰ jG        |xx         dz  cc<   |sdtJ          jH        �X‰ jG        |         tJ          jH        k    r=‰ j         I                    dtJ          jH        |¦  «         ‰  J                    |d¬¦  «         Œ~|
S )Nrf   r   c                 óØ   •— ‰€T	 t          j        ‰                     ‰¦  «        ¦  «        S # t          $ r ‰                     ‰d¬¦  «        } | �| cY S ‚ w xY wt          j        ‰¦  «        S )NTr�  )rÒ   rª  rn   r~   rÂ  )rI  ru   r_  r‡   s    €€€rv   Úcompute_concrete_valz5ShapeEnv._evaluate_expr.<locals>.compute_concrete_valT   sƒ   ø€ àˆ|ð
Ý œ=¨×)DÒ)DÀYÑ)OÔ)OÑPÔPÐPøÝ2ð ð ð ð
 ×3Ò3°IÈDÐ3ÑQÔQ�AØ�}Ø ˜˜˜Øðøøøõ ”} TÑ*Ô*Ð*s   …&, ¬%AÁAFc              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r„   )rR   rS   rj  r;  s     rv   r&  z*ShapeEnv._evaluate_expr.<locals>.<genexpr>|   s.   è è € ÐVÐV¸!� q­$¬*Ñ5Ô5ÐVÐVÐVÐVÐVÐVrw   únode must not be Nonezeval %s [trivial]ry  r   r¤  z eval %s == %s [statically known]zsize_oblivious(rn  T©r¨  únew_expr must not be Noner’  r‡  rð  r!  r>  zevaluate_expr: zeval [guard suppressed]rî   z6symbol_guard_limit_before_specialize=%s exceeded on %s)rf   r   )Krj   rÒ   re  rf  rg  rh  rû   Úcacher  r³  r’  r¦   r\  r¦  rp   Ú_assertr]  rÎ  Únot_r°  rm   r°  r.  rÇ   rÈ   rr   r¤  r&  r'  r3   Úaggressive_guard_free_semanticsr4   ÚSKIP_RANGE_ANALYSISr^  rH  rb  rÂ  rÝ  r¹  rŒ  rñ  r#  r±  r=  rÿ  r6  rŠ  rX  rÝ  Ú/inject_EVALUATE_EXPR_flip_equality_TESTING_ONLYrÉ  rÈ  r   rË   r‰  r!  rÈ  ÚcompilerÚis_exportingrþ  r&   rM  rB  rU  r!  r€  r  rQ  rv  rÃ  r¬  r7  Ú$symbol_guard_limit_before_specializer�  rì  )r‡   r_  ru   r#  r·  r¸  r  rL  rq   r¥  r÷  rö  r›  ÚeqlrÏ  ro   Úfast_resultÚaggressive_levelÚrange_resultÚstatic_exprÚtransmute_into_runtime_assertr·  rÍ  r7  r]  r  s   ```                       rv   rE  zShapeEnv._evaluate_exprA   sÑ  øøø€ õ ØÝŒ[Ô Ô,­e¬kÔ.AÔ.NÐOñ
ô 
ð 	ð Ðõ 
Œð	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ñ 
Œð	+ð@ ˆØˆàÔ0ñ	1àÑ#Ø×-Ò-Ñ/Ô/ñ $à"ñ $õ ÐVÐV¸yÔ?UÐVÑVÔVÑVÔVñ $ð Ñ&ð 0Ð/Ñ1Ô1ˆLØ�uœzÐ)Ð)Ø"×;Ò;½E¼MÈGÈ:ÑVÔV‘��e�eØ¥¤Ð,Ð,Ø×6Ò6µx´}ÀwÀjÑQÔQ‘��QØ"×;Ò;½E¼MÈCÈ6ÑRÔR‘��e�eà×6Ò6Ý”K '¨<Ð!8ñô ‘��Qð #×;Ò;½E¼MÈCÈ6ÑRÔR‘��eàˆ|Ý$Ð%<Ñ=Ô=Ð=ð
 ð 1Ø×*Ò*¨4Ñ0Ô0Ð0ð ˆðr	ØÔ"ð 	!Ø”—’Ð2°IÑ>Ô>Ð>ØÐ#Ý! $­Ñ-Ô-ð KØ$¨Ò,Ð,Ý"0°IÐ1IÐ1IÀ4Ð1IÐ1IÑ"JÔ"JÐJð -õ  %œx¨	°4Ñ8Ô8ð KÝ"0°IÐ1IÐ1IÀ4Ð1IÐ1IÑ"JÔ"JÐJØ Ð àˆDõ
 ”Ô%Ô-ÔMÝ)Ô=ò>ð >ð #×>Ò>¸tÑDÔD�ØÐ*Ø&Ð&õ ”Ô%Ô-ÔMð ð ˆ|Ð 0°1Ò 4Ð 4¸Ð9SØ#Õ'>Ô'RÒRÐRà×,Ò,¨Y¸ÑGÔGÐGØ)Ð)ð $(×#BÒ#BÀ4ÈÑ#XÔ#X�LØ# ~Ð5Ð5Ø×0Ò0°¸NÑKÔKÐKØ'Ð'à×5Ò5Ø ^ð 6ñ ô ˆKð Ð&Ø”—’Ø6ð *ð,Ð6¨)Ð6Ð6Ð6Ð6à+àñô ð ð 'ðIåÔ4ðIð Ð(ð # dÒ*Ð*Ý,°Ð-GÐ-GÀÐ-GÐ-GÑHÔHÐHØ"Ð"à,1Ð)àˆLØÔ%¨Ô)?×)DÒ)DÑ)FÔ)FÒFÑFð  ×6Ò6°tÈ4Ð6ÑPÔP�ØÐ#Ý(Ð)DÑEÔEÐEØ Ô-°Ô1G×1LÒ1LÑ1NÔ1NÒNÐNØ�Bð ð . .Ð"<Ø×0Ò0°¸NÑKÔKÐKØ-Ð-ð ð"à Ô?ð"ð /8×.@Ò.@Ø $Ô Cñ/ô /ç&šh tÔ'=Ñ>Ô>ð?˜Nô 'ð"ð ×9Ò9¸)À^ÑTÔTÐTØ8<Ð5à'5˜Ø!˜ð ð " $Ô"4ð "¸×9OÒ9OÑ9QÔ9Qð "Ý',¤z˜Ø8<Ð5Ø!˜àð Ø"×=Ò=Ø ŸMšM¨$Ô*@ÑAÔAØ Ø-1Ô-Cð >ñ ô ð ðð $�DàÐ#Ø3Ð3Ñ5Ô5�Ø×Ò˜t \Ñ2Ô2Ð2õ ÔFð'å˜t¥TÑ*Ô*ð'õ ˜t¥e¤hµ´Ð%9Ñ:Ô:ð'õ
 ”y ‘”�ð �uœzÐ)Ð)Ý� tÑ,Ô,��Ø¥¤Ð,Ð,Ý”I˜d‘O”O��å”H˜T <Ñ0Ô0�à,ð $Ø×2Ò2ØÐO°)ÐOÐOÀÐOÐOñô ð ð $Ð#à×,Ò,Ñ.Ô.ð YØ—’ ¨¸�ÑEÔEÐEð ×%Ò% aÑ(Ô(Ð(õ ”N×/Ò/Ñ1Ô1ðVàÔHðVð ×6Ò6°qÐ:WÈIÐ:WÐ:WÑXÔXÐXÐXõ
 'Ø˜4Ÿ>š>Ñ+Ô+¸Nðñ ô �Eð ”K×&Ò& uÑ-Ô-Ð-Ø”K×&Ò&¥t¨D×,AÒ,AÀ$Ç-Â-ÐPQÑBRÔBRÑ,SÔ,SÑ'TÔ'TÑUÔUÐUÐUà—’Ð 9¸1È<�ÑXÔXÐXøøåð 	ð 	ð 	Øð +Ø×$Ò$ TÑ*Ô*Ð*Øð	øøøð
 ×(Ò(Ñ*Ô*ð 	AØÐ Øœð Að A�AØÔ-¨aÐ0Ð0Ô0°AÑ5Ð0Ð0Ñ0ð )ðAå"ÔGÐSØ Ô5°aÔ8Ý ÔEòFð Fð œŸšØTÝ"ÔGØñô ð ð
 ×*Ò*¨1¸4Ð*Ñ@Ô@Ð@øàÐs=   Æ+A>[ È*A[ É.A[ Ê;1[ Ë-A([ ÍB[ Ï%F=[ Ö#D$[ Û#[+c                óÚ   — | j                              ¦   «         D ]}|                     ¦   «          Œ| j                             ¦   «         D ] }|D ]}|j                             ¦   «          ŒŒ!dS )z°
        Break reference cycles.

        This destroys the stacks. If you really want to keep them, we
        just need some way to break references on code objects.
        N)r%  r  Úcleanupr0  rã  )r‡   r  ra  r`  s       rv   ra  zShapeEnv.cleanupg!  s„   € ð Ô"×)Ò)Ñ+Ô+ð 	ð 	ˆAØ�IŠI‰KŒKˆKˆKØÔ0×7Ò7Ñ9Ô9ð 	#ð 	#ˆCØð #ð #�Ø”× Ò Ñ"Ô"Ð"Ð"ð#ð	#ð 	#rw   c                ó„  — d}t          |t          j        ¦  «        r|j        dk    r|j        }n,t          |t          j        ¦  «        r|j        dk    r|j        }t          |t          j        ¦  «        rJt          |t          j	        ¦  «        r0| j
        |         }|j        t           k    r|j        t          k    rdS dS )a  Check if we should skip _maybe_evaluate_static for the given expression.

        Skips static evaluation for single unbacked symbol >= 0 (or 0 <= symbol)
        when the symbol has unknown range [-int_oo, int_oo].
        This pattern is common during tracing and doesn't benefit from static evaluation
        since the symbol has no constraints.
        Note that the first time this is called value range will be updated and next time
        it's called (if any) we would call _maybe_evaluate_static and it would return True.
        Nr   TF)rj   rÒ   ÚGreaterThanr©  r¥  ÚLessThanr¦  rR   rS   r5  r§  r(  rJ   r)  )r‡   ro   Úunbacked_symr%  s       rv   Ú_should_skip_static_evalz!ShapeEnv._should_skip_static_evalt!  s·   € ð ˆÝ�d�EÔ-Ñ.Ô.ð 	$°4´8¸q²=°=Øœ8ˆLˆLÝ˜�eœnÑ-Ô-ð 	$°$´(¸a²-°-Øœ8ˆLÝ�l¥E¤LÑ1Ô1ð 	µnØ�$Ô+ñ7
ô 7
ð 	ð Ô" <Ô0ˆBØŒx�F˜7Ò"Ð" r¤xµ6Ò'9Ð'9Ø�tØˆurw   )rC  c           	     óò  — |}|                       |¦  «        }|�t          |¦  «        S |                      |¦  «        r|}nj|                      |¦  «        }|�+| j                             d||¦  «         t          |¦  «        S |                      |d¬¦  «        }|€t          d¦  «        ‚| j        s9|j        | j	         
                    ¦   «         k    r|                      ||¬¦  «        S | j        rb|�`|                      ¦   «         sL|                      t          j        |f¦  «        \  }}	|€t          d¦  «        ‚|	r|                      |¦  «         |                      ¦   «         �sv|                      d|d	¬
¦  «         | j        rt                               d|¦  «         |                      |t*          j        ¦  «         |                      |¦  «         |}t1          |¦  «        }t3          j        d¬¦  «        }
t7          |||
¦  «        }dd„}t9          d„ |j        D ¦   «         |¬¦  «        }|r|d         nd}| j                             |g ¦  «                             |¦  «         | j          !                    tE          |  #                    |  $                    |¦  «        ¦  «        ¦  «        ¦  «         | xj%        dz  c_%        |  &                    ¦   «          n|                      d|d	¬
¦  «         dS )a   
        Adds a guard that orig_expr is True if we can or fall back to adding an assert
        that is checked at runtime.

        Args:
            orig_expr (sympy.Expr): Boolean expression to assert is true
            msg (str): Message to display on assertion failure
            fx_node (Optional, torch.fx.Node): node in ``self.graph`` corresponding
                to the expression, if applicable
        Nz*runtime_assert %s == %s [statically known]TrO  rP  r"  rN  Úruntime_assertFr>  z&runtime_asserts_frozen but then got %srî   rF  r  rˆ  rf   útuple[int, str]c                ó  — t           j        t           j        fD ]U}t          | |¦  «        rCt	          | j        t          t          |         ¦  «        d …         ¦  «        t          |         fc S ŒVt          d| › �¦  «        ‚)Nzexpected unbacked symbol, got )	rS   r5  r6  rR   rt   rZ  r¡  rQ   rm   )r  Úsymbol_types     rv   Úunbacked_symbol_sort_keyzHShapeEnv.guard_or_defer_runtime_assert.<locals>.unbacked_symbol_sort_keyØ!  s�   € Ý$(Ô$5µtÔ7JÐ#Kð ð �KÝ% a¨Ñ5Ô5ð å ¤¥s­:°kÔ+BÑ'CÔ'CÐ'EÐ'EÔ FÑGÔGÝ& {Ô3ð ð ð ð ðõ
 %Ð%IÀaÐ%IÐ%IÑJÔJÐJrw   c              3  óf   K  — | ],}t          |t          j        t          j        f¦  «        ¯(|V — Œ-d S r„   r:  r;  s     rv   r&  z9ShapeEnv.guard_or_defer_runtime_assert.<locals>.<genexpr>â!  sQ   è è € ð ð àÝ% a­$Ô*;½TÔ=PÐ)QÑRÔRðØðð ð ð ð ð rw   rÃ  rS  z!runtime_assert [guard suppressed])r  rˆ  rf   ri  )'r^  rr   rf  rÂ  rÇ   rÈ   rm   rþ  r¦   rŒ  rñ  rì  r  r³  r¦  rp   rR  r°  r!  r3  rÝ  rÒ   r\  rÈ  r¤   rX   rJ  râ  rÅ  r0  Ú
setdefaultrU  r!  r€  r  rQ  rv  r1  rÂ  )r‡   r_  r°  r#  ro   r[  r·  r^  rq   r¥  rã  r`  rl  ÚcandsÚixs                  rv   r‰  z&ShapeEnv.guard_or_defer_runtime_assert‹!  sL  € ð ˆð
 ×6Ò6°tÑ<Ô<ˆØÐ"Ý˜Ñ$Ô$Ð$à×(Ò(¨Ñ.Ô.ð 	BØˆHˆHà×5Ò5°dÑ;Ô;ˆKØÐ&Ø”—’Ø@À)È[ñô ð õ ˜KÑ(Ô(Ð(ð ×2Ò2°4ÀtÐ2ÑLÔLˆHØÐÝ$Ð%@ÑAÔAÐAàÔ@ð	AàÔ%¨Ô)?×)DÒ)DÑ)FÔ)FÒFÐFð ×%Ò% h¸Ð%Ñ@Ô@Ð@ð
 Ô0ð		1àÐ#Ø×-Ò-Ñ/Ô/ð $ð ×7Ò7½¼ÈÀzÑRÔR‰KˆD�%Øˆ|Ý$Ð%<Ñ=Ô=Ð=Øð 1Ø×*Ò*¨4Ñ0Ô0Ð0à×(Ò(Ñ*Ô*ñ -	Ø�OŠOÐ,¨iÀeˆOÑLÔLÐLð Ô*ð JÝ—	’	ÐBÀDÑIÔIÐIØ×Ò˜t¥U¤ZÑ0Ô0Ð0à×!Ò! $Ñ'Ô'Ð'ð ˆIÝ)¨$Ñ/Ô/ˆDÝ%Ô-°1Ð5Ñ5Ô5ˆEÝ˜t S¨%Ñ0Ô0ˆBðKð Kð Kð Kõ ðð à!Ô.ðñ ô ð
 -ðñ ô ˆEð $Ð-��r”�¨ˆBØÔ)×4Ò4°R¸Ñ<Ô<×CÒCÀBÑGÔGÐGØŒK×Ò�t D×$9Ò$9¸$¿-º-ÈÑ:MÔ:MÑ$NÔ$NÑOÔOÑPÔPÐPØÐ-Ô-°Ñ2Ð-Ô-Ø×(Ò(Ñ*Ô*Ð*Ð*à�OŠOØ3°YÈUð ñ ô ð ð ˆtrw   c                ó®  — |                       |¦  «        }|j        D �]6}t          |t          j        ¦  «        st          dt          |¦  «        › �¦  «        ‚t          | j                             |d ¦  «        t          ¦  «        rŒkt          ||¦  «        }|�|j        r|d         j        sŒ’|\  }}| j        |         }|j        |j        }}t          || j        ¦  «        }	||	j        k    r`t          |t          j        t          j        t          j        f¦  «        r/|	j        t'          t          |t          j        ¦  «        ¦  «        z   }||	j        k    r`t          |t          j        t          j        t          j        f¦  «        r/|	j        t'          t          |t          j        ¦  «        ¦  «        z
  }|t-          ||¦  «        k    r�Œ³|                      |t-          ||¦  «        ¦  «         | j        |                              ¦   «         r'|                      || j        |         j        d¦  «         | j                             ¦   «          �Œ8d S )Nrõ  rî   Úrange_refined_to_singleton)rv  r¦   rj   rÒ   r¦  rm   rs   rŒ  r‹  rN   rO   rV  r§  r(  r)  rT   r¤  rï  rí  rt   rð  rî  rW   rm  rk  ru  rÂ  r  )
r‡   ro   rù  rI  Úr_exprr©  r%  r(  r)  Úrhs_vrs
             rv   rÉ  zShapeEnv._refine_ranges"  s+  € Ø�}Š}˜TÑ"Ô"ˆàÔ'ð :	6ñ :	6ˆFÝ˜f¥e¤lÑ3Ô3ð SÝ$Ð%QÅ4ÈÁ<Ä<Ð%QÐ%QÑRÔRÐRå˜$Ô0×4Ò4°V¸TÑBÔBÅLÑQÔQð ð å˜$ Ñ'Ô'ˆAàˆy Ô!2ˆy°q¸´t´ˆyð à‰KˆF�CØÔ" 6Ô*ˆBØœ8 R¤X�5ˆEå   dÔ&7Ñ8Ô8ˆFð ˜œÒ$Ð$­Ø�œ¥5¤8­U¬XÐ6ñ*ô *Ð$ð
 œ¥s­:°f½e¼hÑ+GÔ+GÑ'HÔ'HÑH�Ø˜œÒ$Ð$­Ø�œ¥5¤8­U¬XÐ6ñ*ô *Ð$ð œ¥s­:°f½e¼hÑ+GÔ+GÑ'HÔ'HÑH�ð •[ ¨Ñ.Ô.Ò.Ð.Ùð ×%Ò% f­k¸%ÀÑ.GÔ.GÑHÔHÐHàÔ  Ô(×5Ò5Ñ7Ô7ð Ø×%Ò%ØØÔ% fÔ-Ô3Ø0ñô ð ð Ô'×3Ò3Ñ5Ô5Ð5Ñ5ðu:	6ð :	6rw   )rñ   r  r  r€  c                ó"  — t          ||¦  «        }| j                             |t          j        ¦   «         ¦  «        }|                      ||¦  «         | j        |         x}|k    r)t
                               d||j        |j        ¦  «         d S d S )Nz"constrain_symbol_range %s [%s, %s])	rW   r§  r‹  rK  rm  rÇ   r�  r(  r)  )r‡   r  r  r€  Úupd_vrÚold_vrÚnew_vrs          rv   r�  zShapeEnv.constrain_symbol_range@"  s—   € õ
 ˜\¨<Ñ8Ô8ˆØÔ"×&Ò& q­+Ô*=Ñ*?Ô*?Ñ@Ô@ˆØ×!Ò! ! VÑ,Ô,Ð,ØÔ'¨Ô*Ð*ˆF¨vÒ5Ð5Ý�HŠHØ4°a¸¼ÀvÄ|ñô ð ð ð ð 6Ð5rw   )r  rÑ  r  r  rÔ  r   rf   r‚   )rù  rr   rú  rr   rû  rr   rü  rr   rý  rÑ  r  r  rþ  rr   rÿ  rr   rf   r‚   ©rf   rr   )rN  r(   rO  rO  rf   ró  )rÝ   rœ   rf   r‚   )rf   r  rç   ©rf   ró  )rr  rˆ  r´  rÐ   rf   r‚   )rŒ  rˆ  r�  rv  rf   r‚   )rr  rˆ  r´  rˆ  rf   r‚   )rd   rˆ  rÜ  rt   rf   r‚   ©NN)rd   rˆ  rà  rz   rá  rz   rf   r‚   )rd   rÐ   rà  rt   rá  rt   rf   r‚   )rd   r"   rT  r"   rf   r‚   ©rT  rr   rf   rr   r  )rN  r(   rf   rB  )rù  rˆ  rs   rs   rf   r‚   rU  )r™  rœ  r�   r�  rf   rž  )rù  rˆ  rs   rs   rf   r§  )rq   r§  rf   r‚   )rq   r’  rf   r‚   )rf   r¸  )rf   r¾  )rÃ  rÄ  rN  r(   rR  r°   rf   rÎ  r„   )
rÈ  rÄ  rN  r(   rR  r°   rÉ  rÊ  rf   rÎ  )rÙ  rK  rN  r(   rR  rm  rf   rÚ  )r½  rÄ  rW  rÄ  r¸  ra   rN  r(   rR  rm  rÉ  rÊ  rf   rÚ  )rÃ  rÄ  rñ  rÄ  rò  ra   rÿ  r   rN  r(   rR  rm  rÉ  rÊ  rf   rÚ  )rN  r(   r¶  r  rÃ  rÄ  rñ  rÄ  ri  r  rk  r  r  rr   rR  r°   rf   rÎ  )rR  rÐ   ru   r  rN  r  rf   ra   )rR  rÐ   ru   r  rN  r  rf   r`   )rR  rˆ  rÏ   rt   rf   r‚   )
rY  rt   rN  r(   r	  r  r(  rz   rf   ra   )rR  rÐ   rf   r    )r/  r×   rù  rˆ  r%  r$  rN  r  r)  r0  rf   r‚   )rf   r!   )rN  r  rf   r"   )rù  rˆ  rf   rr   )rS  r"   rT  r  rf   r‚   )rf   r    )rÏ   r[  rN  r(   r	  r  r
  rc  rR  rm  rf   rÐ   )rÏ   r  rN  r(   r	  r  r
  rc  r­  rÑ  rÏ  rr   rR  rm  rf   rÐ   )ro   rˆ  rÏ   rt   rf   r‚   )rf   r}  r,  )rN  r(   r¬  r„  rf   r×   )r�   r   rÔ  r   rf   r  )r“  r”  rú  r•  rð  rñ  rB  r–  r�  r—  r‘  r˜  r’  rr   r  rr   r‰  r™  rf   rš  )r“  r  rB  r–  r  rr   rf   r  )r  r×   rf   r  )r  r×   rf   rz  )r  r×   r�   r'  rf   rr   )r“  r”  r�   r,  r  rr   rf   rr   )r.  r/  rf   r0  )r“  r”  r�   r,  rf   r  )rf   r:  rÝ  )r>  rr   rf   r×   )ro   rÐ   r·  rr   rf   r$  r�  )rj  rD  rE  rr   rf   rF  )r%  rË   rf   rP  )r÷  rÐ   rf   rr   )ro   rÐ   rf   rr   )ro   r   rf   r[  )ro   r   ry   r[  rf   r[  )ro   r   r¨  rr   rE  rr   r·  rr   r!  rc  r§  rd  rf   r[  ©ro   rÍ   rf   rÍ   )ro   rÍ   r·  rr   rf   rÍ   )ro   r   r  rr   rf   r[  )ro   r�  rf   rg   )ro   r�  ry   rz   rf   rt   )ro   r   r”  r   r“  rz   rf   r~   )
rù  rˆ  r%  r$  r  rž  r_  rr   rf   r‚   )rd   rˆ  r   rÐ   r°  r×   rf   r‚   )ro   rÐ   rf   r‚   )rd   rˆ  rf   rÐ   )rÏ  rr   rf   r$  )rf   r$  ©ro   rÐ   rf   rÐ   )ro   r   r÷  r   rf   r‚   ©rf   rÞ  )FN)rA  rr   rá  r  rf   râ  )rá  r  rf   r'   )r  r×   rf   rt   )rf   r  )r/  r×   r]  rË   r  rr   rf   r‚   )r)  r:   r·  rr   r¸  rÑ  rf   r   )r_  r   r7  r   rf   r‚   )NNFN)r_  r   ru   r?  r#  r§  r·  rr   r¸  rÑ  r  rr   rf   r   )r_  r   ru   r?  r#  r§  r·  rr   r  rr   r³  rr   r¸  rÑ  rf   r   )rd   r    rF  rr   rf   r‚   )r_  r   ru   rI  r#  r§  r·  rr   r¸  rÑ  r  rr   rf   r   ré  )r_  rË   r°  r×   r#  r§  rf   rr   )r  rˆ  r  rt   r€  rt   rf   r‚   )†r‰   rŠ   r‹   r†   r  Úpropertyrù  rú  rû  rü  rý  rþ  r   rV  rd  rl  rn  rq  r6   r©  r˜  r«  rÞ  rÚ  rë  rñ  rï  rò  rì  rŠ  rŒ  r�  r’  r•  r˜  r›  r¦  r©  r¬  r°  rè   r³  r  r  r²  r½  rÖ  rÂ  rÇ  rÆ  rß  rÝ  rÞ  r  r‹  r&  rÔ  r+  r.  rD  rH  rì  rÙ  rX  rZ  r  r  r*  rÒ  r|  r   ÚFutureWarningr4  r€  rƒ  r‡  rŒ  r‹  r  r#  r&  r+  r  r6  r  r=  rA  rT   rà  rO  r  rQ  rX  rZ  r^  rb  rÂ  rQ  rp  rv  rŒ  rn   r]  r|   rŠ  rm  ru  r³  r<  rÈ  rl  rQ  rÕ  rÝ  rà  r@  rM  ri  r  r!  rX  rŒ   r¼  r6  r=  rì  rA  rH  rE  ra  rf  r‰  rÉ  r�  r’   rw   rv   rœ   rœ   þ  s§  € € € € € € ð -1Ø*.ð	8ð 8ñ 8ð 8ð 8ð 8ðD &*Ø/3ð
 */ð %)ð #'à+/ð =Bð $ðI_ð _ñ _ð _ð _ð _ðB	 ñ2ð 2ð 2ñ „Xð2ð ñ<ð <ð <ñ „Xð<ð ñ6ð 6ð 6ñ „Xð6ð ñ1ð 1ð 1ñ „Xð1ð ñ(ð (ð (ñ „Xð(ð ñIð Ið Iñ „XðIð ñ+ ð + ð + ñ „^ð+ ñZ=Vð =Vð =Vð =Vñ~Kð Kð Kð Kñ($ð $ð $ð $ð ñ&ð &ð &ñ „^ð&ð ÐÑÔñCð Cð Cñ ÔðCð ÐÑÔñBð Bð Bñ ÔðBð ÐÑÔñJð Jð Jñ ÔðJð, ÐÑÔñð ð ñ Ôðð ÐÑÔàIMññ ð ð ñ Ôðð* ÐÑÔñð ð ñ Ôðð" ÐÑÔñ&9ð &9ð &9ñ Ôð&9ñP4ð 4ð 4ð 4ð ÐÑÔñ5ð 5ð 5ñ Ôð5ð ñð ð ñ „^ðð ÐÑÔñð ð ñ Ôðð ÐÑÔñ	+ð 	+ð 	+ñ Ôð	+ñ.ð .ð .ð .ñ1ð 1ð 1ð 1ñ1ð 1ð 1ð 1ñ/ð /ð /ð /ñ&ð &ð &ð &ð ÐÑÔñ=ð =ð =ñ Ôð=ñ@,ð ,ð ,ð ,ñ8(ð (ð (ð (ñ
=ð =ð =ð =ð ñ6ð 6ð 6ñ „\ð6ð ÐÑÔñ#ð #ð #ñ Ôð#ð ÐÑÔñ"ð "ð "ñ Ôð"ñ&ð &ð &ð &ð ñ2ð 2ð 2ñ „^ð2ñ"

ð 

ð 

ð 

ñ'ð 'ð 'ð 'ñ&
ð 
ð 
ð 
ð 15ñGñ Gð Gð Gð Gð\ 48ð 
ð  
ñ  
ð  
ð  
ð  
ðR 48Ø04ðt@ð t@ñ t@ð t@ð t@ð t@ðl ÐÑÔð 48Ø04ðIGð IGñ IGð IGð IGñ ÔðIGñV9ð 9ð 9ð 9ðv ÐÑÔð !%ð+ð +ñ +ð +ð +ñ Ôð+ðZ ÐÑÔð !%ð'ð 'ñ 'ð 'ð 'ñ Ôð'ðR ÐÑÔñ6ð 6ð 6ñ Ôð6ð ÐÑÔð &*ñ
ñ 
ð 
ð 
ñ Ôð
ñ*7ð 7ð 7ð 7ð !%Ø#'ñ#
ñ #
ð #
ð #
ð #
ðJ ÐÑÔñ"ð "ð "ñ Ôð"ð4 ÐÑÔñ ñ  ð  ð  ñ Ôð ñ29ð 9ð 9ð 9ñ1ð 1ð 1ð 1ð$ ÐÑÔñ!ð !ð !ñ Ôð!ð4 ÐÑÔð
 #-¤/Ø(,Ø37ð
ñ 
ð 
ð 
ñ Ôð
ð: ÐÑÔð
 #-¤/Ø(,Ø $Ø+0Ø37ðvñ vð vð vñ Ôðvñp	:ð :ð :ð :ð Ø€ZØAØðñ ô ñ&ð &ð &ñ	ô ñ „Xð
&ð €ZØIØðñ ô ñ5ð 5ð 5ñ	ô ð5ñFð Fð Fð Fñ ð  ð  ð  ñ,Xð Xð Xð Xð /?Ð.>ð	lð +/Ø:>ð 8<Ø!à"Ø!=ðlð lñ lð lð lð lðd +/Ø"ðð ñ ð ð ð ñ2.ð .ð .ð .ñ.ð .ð .ð .ñKð Kð Kð Kð #ðð ñ ð ð ð ñð ð ð ñ6ð 6ð 6ð 6ñp	
ð 	
ð 	
ð 	
ñ
ñ 
ð 
ð 
ð 
ð 8=ñ/ñ /ð /ð /ð /ð$ ð /3Ø"ñ3ñ 3ð 3ð 3ñ „Zð3ð< €Yˆt�_„_ñ&$ð &$ð &$ñ „_ð&$ñPð ð ð ñð ð ð ñð ð ð ð4 (,ññ ð ð ð ð& ð
 $Ø"Ø$Ø-1ØSWðXð Xñ Xñ Xð Xñ „ZðXðt ññ ð ñ „Zðð4 ñ'ñ 'ð 'ñ „Zð'ð ñLñ Lñ Lð Lñ „ZðLð^ €ZÙAØðñ ô ð €Y‰s�^„^à7<ñ+ð +ñ +ñ +ð +ñ „^ñ	ô ð
+ðZ €Y‰s�^„^ñ<ñ <ð <ñ „^ð<ð €Y‰s�^„^ññ ð ñ „^ðð >Bñ
ñ 
ñ 
ð 
ð 
ð: (,ñ96ð 96ñ 96ñ 96ð 96ð 96ð~ +/ñ	2@ð $ñ2@ð 2@ñ 2@ñ 2@ð 2@ð 2@ñhk@ñ k@ð k@ð k@ñZ'ñ 'ð 'ð 'ð ØÐÑÔñ$ñ $ð $ñ Ôñ „Zð$ð4 €Y‰s�^„^ñ@ñ @ð @ñ „^ð@ðH 27ñ*ñ *ñ *ð *ð *ñ)ñ )ð )ð )ð ñ#ñ #ð #ñ „Zð#ññ ð ð ñ4ñ ð ð ð CGñ)=ñ )=ñ )=ð )=ð )=ñXñ ñ ð ð ññ ð ð ñI
ñ I
ð I
ð I
ñV0ñ 0ð 0ð 0ðj %)ÐÐ(Ð(Ñ(Ñ(ð
  %Ø&*ñ	
ñ 
ñ 
ð 
ð 
ñ&")ñ ")ð ")ð ")ñH!
ñ !
ð !
ð !
ðL +/Ø(,Ø$Ø&*ñ
ð #ñ
ð 
ñ 
ñ 
ð 
ð 
ð6 €Y‰s�^„^ØÐ¨d¹ÑIÑIÔIð '+ññ ñ ð ñ JÔIñ „^ðñ@
ñ 
ð 
ð 
ð +/Ø(,Ø$Ø&*ñdð #ñdð dñ dñ dð dð dñL	#ñ #ð #ð #ññ ð ð ð. €Y‰s�^„^ØÐ¨dÑ3Ñ3Ô3àQUñhñ hñ hð hñ 4Ô3ñ „^ðhñh=6ñ =6ð =6ð =6ð~ €Y�tÑÑÔØÐÑÔñ	ñ 	ð 	ñ Ôñ Ôð	ð 	ð 	rw   c                óN   — t          | t          ¦  «        o| j        j        j        S r„   )rj   r"   rq   ro   r.  rr  s    rv   Ú_is_intrƒ  N"  s   € Ý�d�FÑ#Ô#Ð@¨¬	¬Ô(@Ð@rw   rã  Údc                ó4   — t          | d¦  «        o|| j        v S )NÚ_dynamo_dynamic_indices)r   r†  )rã  r„  s     rv   Ú_is_dim_dynamicr‡  S"  s    € Ý�1Ð/Ñ0Ô0ÐS°Q¸!Ô:SÐ5SÐSrw   c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚPropagateUnbackedSymIntsr‘  r’  rf   r�  c                ó¸   •— ddl m} t          ¦   «                              |¦  «        } |¦   «         }|€t	          d¦  «        ‚t          |j        ||¦  «         |S )z]
        Run an FX node, propagating unbacked Symbol bindings to the new fake tensor
        r   )Údetect_fake_modeNzfake_mode must not be None)Útorch._guardsr‹  r…   Úrun_noderm   r¼   rl   )r‡   r‘  r‹  r“  rÜ  rˆ   s        €rv   r�  z!PropagateUnbackedSymInts.run_nodeX"  sk   ø€ ð 	3Ð2Ð2Ð2Ð2Ð2å‘”×!Ò! !Ñ$Ô$ˆØ$Ð$Ñ&Ô&ˆ	ØÐÝ Ð!=Ñ>Ô>Ð>Ý˜	Ô+¨Q°Ñ7Ô7Ð7Øˆrw   )r‘  r’  rf   r�  )r‰   rŠ   r‹   r�  r�   rŽ   s   @rv   r‰  r‰  W"  s=   ø€ € € € € ðð ð ð ð ð ð ð ð ð rw   r‰  rÞ  c                 ó  — t          j        ¦   «         } | �o| j        j                             t
          j                             t          j        t          ¦  «        ¦  «        t
          j        j
        z   ¦  «        sn	| j        } | ­o| S r„   )r  rõ  rø  rù  Ú
startswithr:  r;  r<  r  rp   Úseprö  )rû  s    rv   rþ  rþ  f"  sr   € ÝÔ Ñ"Ô"€EØ
Ð
ØŒ|Ô'×2Ò2ÝŒG�OŠO�GœO­EÑ2Ô2Ñ3Ô3µb´g´kÑAñ
ô 
ð 	ð Ø”ˆð Ð
ð €Lrw   r%  rÃ  rû  útypes.FrameTypec                ó$  — t          j        |j        j        |j        |j        j        ¦  «        }| j        d         }|dd                     t           j         	                    |g¦  «         
                    ¦   «         ¦  «        z   z  }|f| _        d S )Nr   z(

The following call raised this error:
rp  )rå  ræ  rø  rù  rú  rç  r�   r@  ÚStackSummaryÚ	from_listr»  )r%  rû  Úframe_summaryr°  s       rv   Ú_blame_user_coder–  q"  s‰   € ÝÔ*ØŒÔ ØŒØŒÔñô €Mð
 Œ&�Œ)€CØÐ8¸2¿7º7ÝÔ×(Ò(¨-¨Ñ9Ô9×@Ò@ÑBÔBñ<ô <ñ ñ €Cð ˆV€A„F€F€Frw   c                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd
„Zˆ xZS )Ú_PythonMsgPrinterz¶
    Util printer that replaces sympy symbols with their source-level names
    and renders sympy relational operators (e.g., Eq, Ne, Ge, Le) inline
    (i.e., as ==, !=, >, <).
    Úsrc_mapúdict[str, list[str]]rf   r‚   c                óV   •— t          ¦   «                              ¦   «          || _        d S r„   )r…   r†   r™  )r‡   r™  rˆ   s     €rv   r†   z_PythonMsgPrinter.__init__…"  s$   ø€ Ý‰Œ×ÒÑÔÐØˆŒˆˆrw   rR  rˆ  r×   c                ó2   — | j         |j                 d         S rå  )r™  rZ  r-  s     rv   r   z_PythonMsgPrinter._print_Symbol‰"  s   € ØŒ|˜CœHÔ% aÔ(Ð(rw   )r™  rš  rf   r‚   )rR  rˆ  rf   r×   r1  rŽ   s   @rv   r˜  r˜  ~"  s[   ø€ € € € € ðð ðð ð ð ð ð ð)ð )ð )ð )ð )ð )ð )ð )rw   r˜  r™  údefaultdict[str, list[str]]c                óV  ‡— | j         }d                     ˆfd„|j        D ¦   «         ¦  «        }|rt                               d|¦  «         dS t          ‰¦  «        }| j        d         }|dz  }|                     t          j	        |¦  «        ¦  «        }d|                     |¦  «        › d�d|› d�g}t          |¦  «        D ]\  }}	|d	|d
z   › d|	› �z  }Œd                     ˆfd„t          d„ |j        D ¦   «         ¦  «        D ¦   «         ¦  «        }
|d|
› d|› d�z  }|f| _        dS )av  
    Enhances a GuardOnDataDependentSymNode error with suggested fixes using torch._check.

    This function analyzes the condition that caused the data-dependent error and generates
    user-friendly suggestions for fixing it by adding appropriate torch._check calls.
    It handles special cases like non-negative checks with specific recommendations.

    Args:
        e: The GuardOnDataDependentSymNode error to enhance with suggestions
        src_map: A mapping from symbol names to their corresponding source-level variable names

    Returns:
        None. Modifies the error message in-place by updating e.args[0].
    rØ  c              3  ó8   •K  — | ]}|j         ‰v¯|j         V — Œd S r„   r]  ©r  r  r™  s     €rv   r&  z(_suggest_torch_checks.<locals>.<genexpr> "  s1   øè è € ÐPÐP ¸!¼&ÈÐ:OÐ:O�Q”VÐ:OÐ:OÐ:OÐ:OÐPÐPrw   z.Unable to find user code corresponding to {%s}Nr   zG
To fix the error, insert one of the following checks before this call:ztorch._check(rn  rÜ  rî   rä  c              3  óZ   •K  — | ]%}d |› dd                      ‰|         ¦  «        › �V — Œ&dS )ú`z` with rý  N)r@  r   s     €rv   r&  z(_suggest_torch_checks.<locals>.<genexpr>³"  sW   øè è € ð ð àð 	0ˆAÐ/Ð/�f—k’k '¨!¤*Ñ-Ô-Ð/Ð/ðð ð ð ð ð rw   c              3  ó$   K  — | ]}|j         V — Œd S r„   r]  r;  s     rv   r&  z(_suggest_torch_checks.<locals>.<genexpr>µ"  s$   è è € Ð:Ð: 1˜œÐ:Ð:Ð:Ð:Ð:Ð:rw   z3

(These suggested fixes were derived by replacing z in z and its negation.))r€   r@  r¦   rÇ   r¨  r˜  r�   r  rÒ   rÈ  r¯  rÅ  )r%  r™  r€   ÚdiffrÔ  r°  Únot_cond_strÚsuggested_fixesr‚  ÚfixÚ
src_mappeds    `         rv   Ú_suggest_torch_checksr©  �"  sƒ  ø€ ð$ Œ6€DØ�9Š9ÐPÐPÐPÐP TÔ%6ÐPÑPÔPÑPÔP€DØð Ý�ŠÐDÀdÑKÔKÐKØˆÝ Ñ(Ô(€GØ
Œ&�Œ)€CØÐUÑU€Cà—?’?¥5¤9¨T¡?¤?Ñ3Ô3€Lð
 	1˜Ÿš¨Ñ-Ô-Ð0Ð0Ð0Ø'˜Ð'Ð'Ð'ð€Oõ
 ˜OÑ,Ô,ð %ð %‰ˆˆ3ØÐ$�a˜!‘eÐ$Ð$˜sÐ$Ð$Ñ$ˆˆØ—’ð ð ð ð åÐ:Ð:¨Ô(9Ð:Ñ:Ô:Ñ:Ô:ðñ ô ñ ô €Jð ÐlÀ:ÐlÐlÐSWÐlÐlÐlÑl€CØˆV€A„F€F€Frw   c           	     ó®  — t          ¦   «         }|��Át          | |¦  «         t          t          ¦  «        }|j                             ¦   «         D �]G\  }}	 t          j        |¦  «        }n9# t          $ r, t           
                    dt          |¦  «        |¦  «         Y ŒQw xY w|D ]ï\  }}|t          j        |¦  «        z   }t          |t          j        ¦  «        r3|t!          |j        j        ¦  «                                      |¦  «         Œit          |t          j        ¦  «        rlt+          |j        ¦  «        D ]W\  }	}
t          |
t          j        ¦  «        r8|t!          |
j        j        ¦  «                                      |› d|	› d�¦  «         ŒXŒð�ŒIt          | j        t0          j        j        j        ¦  «        rt9          | |¦  «         dS dS dS )zå
    Given a raised data-dependent error, add the following to the error message:
    1. the closest user code location that raised the error;
    2. suggested fixes for the error in terms of live variables at that location.
    NzQpytree.tree_leaves_with_path failed for value of type {%s} in local variable {%s}z.shape[rê  )rþ  r–  r	   rV  r  r�  r›  Útree_leaves_with_pathrÛ  rÇ   r¨  rs   Úkeystrrj   rp   r"   r×   rq   ro   rU  rZ   r¯  rO  r€   rÒ   re  rf  ÚBooleanr©  )r%  rû  r™  ÚvarrÏ   r«  r;  ÚleafrZ  r‚  rX  s              rv   Ú2_suggest_fixes_for_data_dependent_error_non_strictr°  »"  sì  € õ "Ñ#Ô#€EØÑå˜˜EÑ"Ô"Ð"õ �dÑ#Ô#ˆØœ×,Ò,Ñ.Ô.ð 	Uñ 	U‰HˆC�ðÝ(.Ô(DÀSÑ(IÔ(IÐ%Ð%øÝð ð ð Ý—’ØgÝ˜‘I”IØñô ð ð
 �ðøøøð 4ð Uð U‘
��dØ�Vœ]¨4Ñ0Ô0Ñ0�Ý˜d¥E¤LÑ1Ô1ð UØ�C ¤	¤Ñ/Ô/Ô0×7Ò7¸Ñ=Ô=Ð=Ð=Ý ¥e¤lÑ3Ô3ð UÝ"+¨D¬JÑ"7Ô"7ð Uð U™˜˜3Ý% c­5¬<Ñ8Ô8ð UØ#¥C¨¬¬Ñ$6Ô$6Ô7×>Ò>À$Ð?SÐ?SÈqÐ?SÐ?SÐ?SÑTÔTÐTøøñUõ �a”f�eœkÔ1Ô9Ñ:Ô:ð 	.Ý! ! WÑ-Ô-Ð-Ð-Ð-ð; Ðð8	.ð 	.s   ÁA+Á+3B!Â B!c              #  óÌ   K  — | j                              di ¦  «        }d„ |                     ¦   «         D ¦   «         }|| j         d<   	 dV — || j         d<   dS # || j         d<   w xY w)aó  
    Temporarily modifies unbacked_bindings in a node's metadata by removing the first element
    of each path, which corresponds to an effect token.

    This is used when processing nodes that have effect tokens as the first element in their
    unbacked_bindings paths. The context manager ensures that the original bindings are
    restored after the operation is complete.

    Args:
        node: The FX node whose unbacked_bindings will be temporarily modified

    Yields:
        None
    r–  c                ó2   — i | ]\  }}||r
|d d…         n|“ŒS rç  r’   )r  rŒ  r;  s      rv   rŽ  z:_remove_effect_token_unbacked_bindings.<locals>.<dictcomp>û"  s/   € ÐVÐVÐV±g°a¸�A 4Ð1�t˜A˜B˜B”x�x¨TÐVÐVÐVrw   N)rš  r‹  r�  )rq   Úold_bindingsÚnew_bindingss      rv   Ú&_remove_effect_token_unbacked_bindingsrµ  æ"  s‡   è è € ð$ ”9—=’=Ð!4°bÑ9Ô9€Lð WÐVÀ×ASÒASÑAUÔAUÐVÑVÔV€Là%1€D„IÐ!Ñ"ð6Øˆˆˆà)5ˆŒ	Ð%Ñ&Ð&Ð&ø¨ˆŒ	Ð%Ñ&Ð5Ð5Ð5Ð5s   ÁA ÁA#r)  c                óp   — | j         }|€t          d¦  «        ‚| j        }||j        v r|j        |         S |S )Nz/shape_env is required for _get_placeholder_expr)rl   rm   rŸ  rŠ  )r)  rl   r“  s      rv   Ú_get_placeholder_exprr·  	#  sG   € ØÔ"€IØÐÝÐNÑOÔOÐOØŒ^€FØ�Ô-Ð-Ð-ØÔ+¨FÔ3Ð3Ø€Mrw   )rd   re   rf   rg   r„   )rd   rx   ry   rz   rf   rt   )rÄ   rÅ   rf   r‚   )ré   rê   rf   rë   )rñ   rz   rf   rò   )rf   r  )rJ  rK  rf   rr   )rO  rP  rf   rQ  )rd   rY  rf   rr   )rd   ra   rf   rr   )rd   r`   rf   rr   )rd   r_   rf   rr   )rd   ri  rf   rr   )ro   rn  rf   rr   )rs  rÌ   rt  rÌ   rf   r‚   )rl   r„  r…  r†  rf   r†  )rl   r„  r‘  r’  r“  r�  rf   r‚   )rq   r’  rf   rr   )ro   rÌ   rf   rÌ   )TN)
rÌ  rÍ  r�   rÎ  rÏ  rr   rÐ  rÑ  rf   rÐ   )ro   rË   rf   rË   r~  )r  r  rf   r  )rÏ   r  rf   r  )rÏ   r   rf   r  )rÏ   r  rf   r!  )rÏ   r  rf   rr   )rù  r  rf   rr   )rù  r  rf   r!  )rù  r  r=  r!  rf   r!  )rq   r’  rf   rB  )rD  rE  rf   rF  )NNNF)rd   rÞ   r;  rq  rr  rs  rl   r„  rt  ru  rv  rr   rf   rw  r�  )
rl   r„  rµ  rÞ   r¡  rs  r¢  rr   rf   r†  )rd   r_   r¿  rr   rf   rr   )rù  r    rf   rÑ  )rq   r:   rž  rr   rf   rr   )rù  r_   rf   rr   )rù  r_   rÌ  r_   rf   r_   )rù  rÌ   rÑ  rÌ   rf   r_   )rd   rÕ  rf   rÖ  )rd   r"   rf   r‚   )rd   r"   rÜ  ra   rf   r‚   r{  )rd   r"   rà  rz   rá  rz   rf   r‚   )rd   rí  rT  rí  rf   r‚   r›  )rd   r_   ró  rt   rf   rr   )rd   ra   rf   rt   )rd   r`   rf   rb  )rÿ  r   rf   r  )rÿ  r   rf   r  )rÿ  r   r�   rZ   r  rr   rf   rr   )rÿ  r   r�   rZ   rf   r  )rR  rÞ   rf   rS  )ro   rÐ   rf   rW  rè  )rÏ   r‚  rf   rƒ  )r�   rÎ  rf   r…  r}  )rI  rÍ   rf   rÍ   )
ro   rÍ   r¦  r§  r¨  rr   r·  rr   rf   r©  )rf   r   )r½  r¾  rW  r¾  rf   rt   )r½  r¾  rW  r¾  rf   rr   )rù  rË   rf   rÐ   )rË  rÌ  rf   rÍ  )r�   rt   rf   rt   )rA  rõ   rñ   rz   rf   rö   ry  r|  rz  )rl   rœ   rf   ró  )ro   rÞ   rf   r  )rã  rK  r„  rt   rf   rr   r  )r%  rÃ  rû  r‘  rf   r‚   )r%  r~   r™  r�  rf   r‚   )r%  r~   rf   r‚   )rq   r’  rf   ró  )r)  r:   rf   rÐ   (?  Ú
__future__r   rÒ   r   Útorch._prims_commonr   r   r   r  r  r5  rÿ  rû   r?  rò  r  r  r
  r  rÎ  r:  r  r"  Ú	threadingrå  r   r	   Úcollections.abcr
   r   r   r   r   Ú
contextlibr   r   Údataclassesr   r   r   Úenumr   Útypingr   r   r   r   r   r   r   r   r   Útyping_extensionsr   r   rp   Útorch.fxÚtorch.fx.tracebackr&  rò  Útorch.utils._pytreer\  Ú_pytreer›  r    r!   r"   Útorch._C._functorchr#   r$   r%   rŒ  r&   r'   r(   r)   Ú"torch._library.fake_class_registryr*   Útorch._library.opaque_objectr+   r  r,   r-   r.   r/   Útorch._opaque_baser0   r   r1   Útorch._utils_internalr2   Útorch.fx.experimentalr3   rÝ  Útorch.fx.experimental._configr4   Útorch.fx.experimental.recordingr5   r6   r7   r8   r9   Útorch.fx.experimental.sym_noder:   r;   Útorch.typesr<   Útorch.utils._ordered_setr=   Útorch.utils._python_dispatchr>   Útorch.utils._sympy.functionsr?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   Útorch.utils._sympy.numbersrJ   Útorch.utils._sympy.printersrK   rL   rˆ  rN   Útorch.utils._sympy.solverO   Útorch.utils._sympy.symbolrP   rQ   rR   rS   Útorch.utils._sympy.value_rangesrT   rU   rV   rW   Útorch.utils._tracebackrX   rY   ÚtypesrZ   r�  r\   r  r^   r_   r`   ra   rV  Ú	InputListÚDimListÚ	getLoggerr‰   rÇ   Ú#torch.fx.experimental._size_hintingrb   rc   rn   r|   rÿ  r~   r�   r•   Ú_opsr¼  r½  Ú__all__r©   rª   rÊ   rË   rŒ   rÌ   r  r£  rÍ   rÀ   rð   r  rC  rI  rš   rt   rN  r›   rb  rr   rY  r]  r�   rž   rŸ   r    r�  r¸   r¹   r½   r¢  r�  r¼   r¾   r¤   rá  rË  ró  r¨   r  r  r  r   r¦   r«   r¬   r<  rA  r§   rJ  rÁ   r»   rY  re  rk  r�  rº   r½  r˜   r™   rº  rÆ  r·   r¶   r­   r®   r¯   r£   rÛ  rß  rÚ  rì  rò  r÷  r»  r¡   r¢   r  r  r  r  r  r  r#  r.  rc  r1  rV  rY  r`  r°   r´   re  rf  r±   r²   r³   rµ   r  ÚIndicatorTypesrŠ  r�  r¢  r¤  r¹  r¼  rÁ  rÀ  rª  rV  rÒ  r¥   rà  râ  rå  ÚABCrí  r
  r  r  r!  r$  r&  r+  r3  Úlocalrî  rï  rò  rö  rø  r¿   r  r  rœ   rƒ  r‡  ÚInterpreterr‰  rþ  r–  r˜  r©  r°  rµ  r·  r’   rw   rv   ú<module>rã     sá  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ðð €
€
€
Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø Ð Ð Ð Ð Ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à €€€Ø €€€Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ð ,Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ )Ð )Ð )Ð )Ð )Ð )Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø AÐ AÐ AÐ AÐ AÐ Aðð ð ð ð ð ð ð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø $Ð $Ð $Ð $Ð $Ð $Ø /Ð /Ð /Ð /Ð /Ð /Ø FÐ FÐ FÐ FÐ FÐ Fðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø .Ð .Ð .Ð .Ð .Ð .Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ Sðð ð ð ð ð ð ð ð ð ð ð ð CÐ BÐ BÐ BÐ BÐ BÐ BÐ Bð ð EØ€L€L€LàÐÐÐÐÐØ9Ð9Ð9Ð9Ð9Ð9Ø8Ð8Ð8Ð8Ð8Ð8ØDÐDÐDÐDÐDÐDÐDÐDÐDÐDð €	Ø
€à€gÔ˜Ñ!Ô!€ðð ð ð ð ð ð ð ñð ð ð ñ4ñ ð ð ð ð ð ð ð ð  ,ñ ô ð ð	ð 	ð 	ð 	ð 	 Lñ 	ô 	ð 	ðYð Yð Yð Yð Y˜,ñ Yô Yð Yð „z„~Ô€ð-ð -ð -€ð` &Ð Ø!Ð ñð ð ð ð, 8€Ð 7Ð 7Ð 7Ñ 7ð €WˆT�]„]€Ø
ˆ'�)˜UœZ¨°u´{Ñ
CÔ
C€ðð ð ð ð ñ ô ð ñD	ð 	ð 	ð 	ñ#ð #ð #ð #ðP €ˆ4�„ñ+ð +ð +ñ „ð+ð\	ð 	ð 	ð 	ð 	˜|ñ 	ô 	ð 	ñ,ð ,ð ,ð ,ð ” Ñ#€Ð #Ð #Ð #Ñ #ñ#ð #ð #ð #ð ”L 5¤>Ñ1°E´MÑAÀCÑGÈ%ÑOÐRVÑV€Ð VÐ VÐ VÑ Vñ	ð 	ð 	ð 	ñð ð ð ñ*ð ð ð ñ(ð ð ð ñ.Dð Dð Dð Dð2 €ðSàðñ ô ñ
ð ð ñô ð
ñ"Ið Ið Ið Iñ:Tð Tð Tð Tð& ”L 5¨¬°sÐ):Ô#;Ñ;€Ð ;Ð ;Ð ;Ñ ;ñF:ð F:ð F:ð F:ñZð ð ð ñ@.ð .ð .ð .ð< Ø"&ñ	4Cñ 4Cð 4Cð 4Cð 4Cñn+'ð +'ð +'ð +'ñ\.ð .ð .ð .ñbBð Bð Bð Bð
 ˆXÑ˜Ñ #Ñ%¨Ñ-°Ñ4°u´{ÑBÀUÄ\ÑQð ð ð ð ñ ð +¨XÐ6FÔ-GÑG€Ð GÐ GÐ GÑ Gñ5Yð 5Yð 5Yð 5Yñp<ð <ð <ð <ñ,Ið Ið Ið Iñ>Oð Oð Oð Oñ

ð 
ð 
ð 
ñð ð ð ñð ð ð ñð ð ð ñ4ð ð ð ð0 €�$˜dÐ#Ñ#Ô#ð
$ð 
$ð 
$ð 
$ð 
$ñ 
$ô 
$ñ $Ô#ð
$ð €�$˜dÐ#Ñ#Ô#ð3ð 3ð 3ð 3ð 3ñ 3ô 3ñ $Ô#ð3ð €�$˜dÐ#Ñ#Ô#ð'ð 'ð 'ð 'ð 'ñ 'ô 'ñ $Ô#ð'ð €�$˜dÐ#Ñ#Ô#ð+ð +ð +ð +ð +ñ +ô +ñ $Ô#ð+ð €�$˜dÐ#Ñ#Ô#ð!ð !ð !ð !ð !ñ !ô !ñ $Ô#ð!ð Ø!%Ø(,ØñEñ Eð Eð Eð EðV (,Øñ	añ að að að añrð ð ð ñ6ð ð ð ñð ð ð ñð ð ð ñ&
ð 
ð 
ð 
ñð ð ð ñ6ð ð ð ñ0ð ð ð ñOð Oð Oð Oñð ð ð ñ9ð 9ð 9ð 9ñ6(%ð (%ð (%ð (%ñV	Ið 	Ið 	Ið 	Ið :>ñFñ Fð Fð Fð Fð& FJð )=ð )=ñ )=ð )=ð )=ð )=ñX%ð %ð %ð %ñfñ ð ð ð ñ ð ð ð ñð ð ð ñð ð ð ñLð Lð Lð LñGð Gð Gð Gð DHð	ð 	ñ 	ð 	ð 	ð 	ñDð Dð Dð Dðð ð ð ð �ñ ô ð ðf €�$˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ðð €�$˜dÐ#Ñ#Ô#ðFð Fð Fð Fð F˜Zñ Fô Fñ $Ô#ñFð8 €�$˜dÐ#Ñ#Ô#ð9ð 9ð 9ð 9ð 9˜jñ 9ô 9ñ $Ô#ñ9ñ6 'Ñ)@Ñ@À4ÑG�ð €�$˜dÐ#Ñ#Ô#ðgCð gCð gCð gCð gC˜ñ gCô gCñ $Ô#ñgCñTð ð ñ ñ*ð *ð *ñ *ñ ð ð ñ ð €�$˜dÐ#Ñ#Ô#ð	ð 	ð 	ð 	ð 	ñ 	ô 	ñ $Ô#ñ	ð €�$˜dÐ#Ñ#Ô#ðð ð ð ñ ™Oñ ô ñ $Ô#ñð €i‘ÑÔ�Ø€g‰e�n„n�ð €�$˜dÐ#Ñ#Ô#ð1ð 1ñ 1ð 1ñ 1™°¹¹S¸Ô0Añ 1ô 1ñ $Ô#ñ1ðT €�$˜d¨DÑ1Ñ1Ô1ð9ð 9ñ 9ð 9ñ 9Ñ6°s¸C°xÔ@ñ 9ô 9ñ 2Ô1ñ9ð< €�$˜dÐ#Ñ#Ô#ð)ð )ñ )ð )ñ )Ñ5ñ )ô )ñ $Ô#ñ)ð €�ÑÑÔðð ñ ð ñ ñ ô ñ Ôññ&"ñ "ð "ñ "ð 4Ð5�ñGñ Gð Gñ GñB5ñ 5ð 5ñ 5ðp €‰3�„ññ ð ñ „ñð(ð ñ ð ñ �*ñ ô ñ ð €ˆ4�„ña/ñ a/ð a/ñ „ña/ñH-ñ -ð -ñ -ñ
Oñ Oð Oñ Oñ(ñ (ð (ñ (ñV.ñ .ð .ñ .ññ ð ñ ñ4Qñ Qð Qñ Qñ *QÙ(HØØñ	ð �ð 26ñ5ñ 5ñ 5ð 5ñ 5ðp €�$˜dÐ#Ñ#Ô#ð
1ð 
1ñ 
1ð 
1ñ 
1ñ 
1ô 
1ñ $Ô#ñ
1ð ð  ñ  ð  ñ  �]ñ  ô  ñ  ð
_ð _ñ _ð _ñ _˜�ñ _ô _ñ _ðD0ð 0ñ 0ð 0ñ 0Ñ0°-ñ 0ô 0ñ 0ðf €ñZàðñ ô ð
	ð 	ñ 	ð 	ñ 	Ñ/ñ 	ô 	ñô ñ
	ð.ð .ñ .ð .ñ .Ñ.°
ñ .ô .ñ .ð4 €�$˜dÐ#Ñ#Ô#ðð ñ ð ñ ñ ô ñ $Ô#ñð
 €�$˜dÐ#Ñ#Ô#ð1ð 1ñ 1ð 1ñ 1Ñ.ñ 1ô 1ñ $Ô#ñ1ðKð Kñ Kð Kñ KÑ6ñ Kô Kñ Kð
3ð 3ñ 3ð 3ñ 3 -ñ 3ô 3ñ 3ð4hð hñ hð hñ hñ hô hñ hðV €i…oÑÔ�ñ@ñ @ð @ñ @ññ ð ñ ð ñ1ñ 1ð 1ñ „ñ1ð €�$˜dÐ#Ñ#Ô#ðð ñ ð ñ ñ ô ñ $Ô#ñð €�ÑÑÔðð ñ ð ñ ñ ô ñ Ôñð ñ*ñ *ð *ñ „ñ*ð €�ÑÑÔð:ð :ñ :ð :ñ :ñ :ô :ñ Ôñ:ðMMð MMñ MMð MMñ MMñ MMô MMñ MMñ`ZAñ Að Añ Añ
Tñ Tð Tñ Tðð ñ ð ñ ˜uœxÕ3ñ ô ñ ññ ð ñ ñ
ñ 
ð 
ñ 
ð)ð )ñ )ð )ñ )˜ñ )ô )ñ )ñ+ñ +ð +ñ +ñ\(.ñ (.ð (.ñ (.ðV ñ6ñ 6ð 6ñ „ñ6ñDñ ð ñ ð ð rw   