§
    Ì²ÅjÖ  ã                   óŽ  — d Z ddlZddlZddlmZmZmZ ddlZddlm	Z
mZ ddlZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%  ej&        e'¦  «        Z( ej)        d¦  «        d„ ¦   «         Z*h d£Z+ej,        fd	„Z- e.¦   «         Z/ej,        dd
œdeej0        ef         deej1        e
f         fd„Z2dS )a±  
This is a simple interpreter for Sympy expressions that dispatches to
classes following the torch._inductor.virtualized calling convention.
For directness, the interpreter takes the handler directly rather than
consulting the TLS.  It does not use most of the methods on the full
handler; only those with corresponding Sympy expressions.  To see an example
of a full handler, see torch.utils._sympy.value_ranges.ValueRangeAnalysis.
é    N)ÚAnyÚDictÚUnion)ÚBooleanÚBooleanAtomé   )ÚBitwiseFn_bitwise_andÚBitwiseFn_bitwise_orÚ	CeilToIntÚCleanDivÚFloatPowÚFloatTrueDivÚFloorDivÚ
FloorToIntÚIdentityÚ
IntTrueDivÚ!IsNonOverlappingAndDenseIndicatorÚMaxÚMinÚModÚModularIndexingÚOpaqueUnaryFn_log2ÚPowByNaturalÚ	PythonModÚRoundDecimalÚ
RoundToIntÚToFloatÚTruncToFloatÚ
TruncToIntÚWherec                  ó˜  — i t           j        d“t           j        d“t           j        d“t           j        d“t           j        d“t           j        d“t           j        d“t           j        d“t           j	        d	“t          d
“t          d“t          d“t          d“t          d“t          d“t           j        d“t           j        d“i t$          d“t&          d“t           j        d“t*          d“t,          d“t           j        d“t           j        d“t           j        d“t           j        d“t           j        d“t           j        d“t4          d“t6          d“t8          d“t           j        j        j        j         d“t           j!        d“tD          d“¥tF          dtH          dtJ          dtL          d tN          d!i¥} d"D ]}|| tQ          t           |¦  «        <   Œ| S )#NÚor_Úand_ÚeqÚneÚltÚgtÚleÚgeÚnot_Úint_truedivÚtruedivÚfloordivÚtruncÚwhereÚaddÚmulÚpowÚpow_by_naturalÚmodÚabsÚlogÚexpÚminimumÚmaximumÚmodular_indexingÚexpr_cond_pairÚ	piecewiseÚidentityÚ&is_non_overlapping_and_dense_indicatorÚround_decimalÚlog2Úbitwise_andÚ
bitwise_or)	ÚcosÚsinÚtanÚsinhÚcoshÚtanhÚasinÚacosÚatan))ÚsympyÚOrÚAndÚEqÚNeÚLtÚGtÚLeÚGeÚNotr   r   r   r   r   r    ÚAddÚMulr   r   ÚPowr   r   ÚAbsr6   r7   r   r   r   Ú	functionsÚ
elementaryr<   ÚExprCondPairÚ	Piecewiser   r   r   r   r	   r
   Úgetattr)ÚHANDLERSÚnames     úJC:\Projects\Historical\venv\Lib\site-packages\torch/utils/_sympy/interp.pyÚhandlersrb   6   sK  € ð2ÝŒ�%ð2åŒ	�6ð2õ 	Œ�$ð2õ 	Œ�$ð	2õ
 	Œ�$ð2õ 	Œ�$ð2õ 	Œ�$ð2õ 	Œ�$ð2õ 	Œ	�6ð2õ 	�Mð2õ 	�ið2õ 	�*ð2õ 	�*ð2õ 	�gð2õ 	ˆwð2õ  	Œ	�5ð!2õ" 	Œ	�5ð#2ð 2õ$ 	�%ð%2õ& 	Ð&ð'2õ4 	Œ	Ð#ð52õ6 	ˆUð72õ8 	�5ð92õ@ 	Œ	�5ðA2õB 	Œ	�5ðC2õD 	Œ	�5ðE2õF 	Œ	�5ðG2õH 	Œ	�9ðI2õJ 	Œ	�9ðK2õL 	ˆYðM2õN 	ˆYðO2õP 	Ð+ðQ2õR 	ŒÔ"Ô,Ô9Ð;KðS2õT 	Œ˜ðU2õV 	�*ðW2ð 2õX 	*Ð+SÝ�oå˜FÝ˜}Ý˜lðc2ð 2€Hðj Vð .ð .ˆØ)-ˆ•� Ñ%Ô%Ñ&Ð&à€Oó    >   r0   r1   r"   r#   r9   r8   c                 ó&  — t          |t          j        ¦  «        rJt          |j        d         t          j        j        j        ¦  «        r|                      |d         ¦  «        S t          |t          ¦  «        r&|  	                    |d         t          j        ¦  «        S t          dt          j        dt          j        dt          dt           dt"          di}|                     |j        ¦  «        x}� t)          | |¦  «        g |¢|‘R Ž S |j        t          j        u rJ|j        rCt/          | d¦  «        r3|                      |¦  «        }t2                               d||¦  «         |S t/          |j        d	¦  «        r|j        j        }nt9          ¦   «         |j                 }t)          | |¦  «        }	 |t:          v r~t=          |¦  «        dk    sJ ‚ ||d         |d         ¦  «        }t?          d
t=          |¦  «        ¦  «        D ]}	 ||||	         ¦  «        }Œt2                               d|||¦  «         |S  ||Ž }t2                               d|||¦  «         |S # t@          $ r ‚ tB          $ r t2           "                    d||¦  «         ‚ w xY w)Nr   r   Útrunc_to_intÚfloor_to_intÚceil_to_intÚround_to_intÚsym_sumzsym_sum(%s) -> %sÚ_torch_handler_nameé   z%s(%s) -> %szfailed while executing %s(%s))#Ú
isinstancerL   rX   ÚargsÚcoreÚnumbersÚHalfÚsqrtr   Úto_dtypeÚtorchÚfloat64r   ÚfloorÚceilingr   r   r   ÚgetÚfuncr^   rV   Ú
is_integerÚhasattrri   r6   Údebugrj   rb   ÚASSOCIATIVE_OPSÚlenÚrangeÚNotImplementedErrorÚ	ExceptionÚwarning)
Úanalysisrm   ÚexprÚindex_dtypeÚINDEX_DTYPE_HANDLERSÚhandler_nameÚrÚhandlerÚaccÚis
             ra   Ú_run_sympy_handlerr‹   {   s…  € å�$�œ	Ñ"Ô"ð &¥zØŒ	�!Œ•e”jÔ(Ô-ñ(ô (ð &ð �}Š}˜T !œWÑ%Ô%Ð%Ý�$�Ñ Ô ð 9Ø× Ò   a¤­%¬-Ñ8Ô8Ð8õ 	�NÝŒ�^ÝŒ�}Ý�NÝ�=Ý�NðÐð -×0Ò0°´Ñ;Ô;Ð;ˆÐHØ.�w�x Ñ.Ô.ÐB°ÐB°kÐBÐBÐBÐBð „y•E”IÐÐ $¤/Ðµg¸hÈ	Ñ6RÔ6RÐØ×Ò˜TÑ"Ô"ˆÝ�	Š	Ð% t¨QÑ/Ô/Ð/ØˆåˆtŒyÐ/Ñ0Ô0ð -Ø”yÔ4ˆˆå‘z”z $¤)Ô,ˆÝ�h Ñ-Ô-€GðØ�?Ð*Ð*Ý�t‘9”9˜q’=�=�=�=Ø�'˜$˜qœ' 4¨¤7Ñ+Ô+ˆCÝ˜1�c $™iœiÑ(Ô(ð ,ð ,�Ø�g˜c 4¨¤7Ñ+Ô+��Ý�IŠI�n l°D¸#Ñ>Ô>Ð>ØˆJà�˜�ˆAÝ�IŠI�n l°D¸!Ñ<Ô<Ð<ØˆHøÝð ð ð ØÝð ð ð Ý�ŠÐ3°\À4ÑHÔHÐHØðøøøs   Æ3BI È:#I É2J©r„   Úmissing_handlerÚenvrƒ   c                ó"  ‡ ‡‡‡— d }t          |t          ¦  «        rt          j        }nMt          |t          j        ¦  «        rt          j        }n&t          |t          j        ¦  «        rt          j        }|�‰  	                    ||¦  «        S t          |t          j
        ¦  «        rB‰                     |t          ¦  «        x}t          ur|S ‰r ‰|¦  «        S t          |¦  «        ‚t          ‰ ˆ ˆˆˆfd„|j        D ¦   «         |‰¬¦  «        S )Nc           	      ó8   •— g | ]}t          ‰‰|‰‰¬ ¦  «        ‘ŒS )rŒ   )Úsympy_interp)Ú.0Úargr‚   rŽ   r„   r�   s     €€€€ra   ú
<listcomp>z sympy_interp.<locals>.<listcomp>Õ   sI   ø€ ð 		
ð 		
ð 		
ð õ ØØØØ'Ø /ðñ ô ð		
ð 		
ð 		
rc   )r„   )rl   r   rs   ÚboolrL   ÚIntegerÚint64ÚNumberÚdoubleÚconstantÚSymbolrw   Ú_nilÚKeyErrorr‹   rm   )r‚   rŽ   rƒ   r„   r�   Údtyper‡   s   `` ``  ra   r‘   r‘   ·   s4  øøøø€ ð €EÝ�$�Ñ$Ô$ð Ý”
ˆˆÝ	�D�%œ-Ñ	(Ô	(ð Ý”ˆˆÝ	�D�%œ,Ñ	'Ô	'ð Ý”ˆàÐØ× Ò   uÑ-Ô-Ð-Ý	�D�%œ,Ñ	'Ô	'ð !Ø—’˜�tÑ$Ô$Ð$ˆA­TÐ1Ð1ØˆHØð 	!Ø"�? 4Ñ(Ô(Ð(å˜4‘.”.Ð õ Øð		
ð 		
ð 		
ð 		
ð 		
ð 		
ð 		
ð ”yð		
ñ 		
ô 		
ð 	Øðñ ô ð rc   )3Ú__doc__Ú	functoolsÚloggingÚtypingr   r   r   rL   Úsympy.logic.boolalgr   ÚSympyBooleanr   rs   rZ   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    Ú	getLoggerÚ__name__r6   Ú	lru_cacherb   r|   r—   r‹   Úobjectrœ   r›   ÚExprr‘   © rc   ra   ú<module>r«      sC  ððð ð Ð Ð Ð Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #à €€€Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dà €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð8 €gÔ˜Ñ!Ô!€ð €Ô�TÑÔð>ð >ñ Ôð>ðB FÐEÐE€ð :?¼ð 6ð 6ð 6ð 6ðr €v�x„x€ð ”Øð*ð *ð *à	ˆeŒl˜CÐÔ	 ð*ð �”
˜LÐ(Ô
)ð*ð *ð *ð *ð *ð *rc   