ó
    "Eñi{™  ã                  ó  • S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
JrJrJrJrJrJr  S SKJr  S SKrS SKJrJr  S SKrS SKJr  S SKJr  S	S
KJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,  S	SK-J.r.  S	SK/J0r0J1r1J2r2  \Rf                  " \45      r5SS/r6\" S\Rn                  \5      r8 " S S\95      r:S r;S r<SS jr=SS jr>SS jr?\@\A-  \Rn                  -  rB\C\-  rD\B\D-  rE\	\Rn                  /\Rn                  4   rF\	\Rn                  \Rn                  /\Rn                  4   rG\	\/\4   rH\	\\/\4   rI\F\H-  rJ\G\I-  rK\R˜                  " SS9 " S S\\8   5      5       rM " S S5      rN S      S!S jjrOg)"é    )ÚannotationsN)ÚCallable)ÚGenericÚoverloadÚSupportsFloatÚTYPE_CHECKINGÚ	TypeGuardÚTypeVar)ÚTypeIs)ÚBooleanÚBooleanAtom)Ú
LazyString)Údtype_to_typeé   )Ú_keep_floatÚFloatTrueDivÚFloorDivÚ
IntTrueDivÚOpaqueUnaryFn_expÚOpaqueUnaryFn_logÚOpaqueUnaryFn_log2ÚOpaqueUnaryFn_sqrtÚPowByNaturalÚRoundDecimalÚ
RoundToIntÚsafe_powÚToFloatÚTruncToFloatÚ
TruncToInt)Úsympy_interp)Úint_ooÚIntInfinityÚNegativeIntInfinityÚValueRangesÚbound_sympyÚ_Tc                  ó   • \ rS rSrSrg)ÚValueRangeErroré1   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r*   ó    Ú\/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/utils/_sympy/value_ranges.pyr(   r(   1   s   † Úr0   r(   c                óÆ  • [        U [        5      (       a'  U (       a  [        R                  $ [        R                  $ [        U [
        5      (       a  [        R                  " U 5      $ [        U [        5      (       aX  [        R                  " U 5      (       a'  U S:”  a  [        R                  $ [        R                  * $ [        R                  " U 5      $ [        U [        R                  5      (       a>  [        U SS5      (       d  [        U 5      eU [        R                  :X  a  [        S5      eU $ [        U [         5      (       a  U $ [        S[#        U 5       SU  35      e)Nr   Ú	is_numberFzsympy expression is NaNznot simple sympy type ú: )Ú
isinstanceÚboolÚsympyÚtrueÚfalseÚintÚIntegerÚfloatÚmathÚisinfÚooÚFloatÚExprÚgetattrÚAssertionErrorÚnanr   Útype)Úes    r1   Úsimple_sympifyrG   7   sû   € Ü�!”T×ÑÞŒu�z‰zÐ/¤E§K¡KÐ/Ü	�A”s×	Ñ	Ü�}Š}˜QÓÐÜ	�A”u×	Ñ	ä�:Š:�a�=‰=Ø  1›u”5—8‘8Ð3¬5¯8©8¨)Ð3Ü�{Š{˜1‹~ÐÜ	�A”u—z‘z×	"Ñ	"Ü�q˜+ u×-Ñ-Ü  Ó#Ð#ð
 ”—	‘	‹>Ü Ð!:Ó;Ð;ØˆÜ	�A”{×	#Ñ	#ØˆäÐ5´d¸1³g°Y¸bÀÀÐDÓEÐEr0   c                ó2  • [        U [        R                  5      (       a.  [        U[        R                  5      (       d  [        S5      eX:¬  $ [        U [        5      (       a  [        U[        5      (       d  [        X45      eU =(       a    U(       + (       + $ )Nz5upper must be a sympy.Expr when lower is a sympy.Expr)r5   r7   rA   rC   ÚSympyBoolean©ÚlowerÚuppers     r1   Úsympy_generic_lerM   R   sv   € Ü�%œŸ™×$Ñ$Ü˜%¤§¡×,Ñ,Ü ØGóð ð
 ‰~Ðô ˜%¤×.Ñ.´jÀÌ×6UÑ6UÜ  % Ó0Ð0Ø×' %œiÔ(Ð(r0   c                ó   • U R                   $ ©N©Úis_bool©Úvrs    r1   Ú
vr_is_boolrT   b   s   € Ø�:‰:Ðr0   c                ó$   • U R                   (       + $ rO   rP   rR   s    r1   Ú
vr_is_exprrV   f   s   € Ø�z‰zŒ>Ðr0   c                ó6   • [        U [        R                  5      $ rO   )r5   r7   r;   )Úvalues    r1   Úis_sympy_integerrY   j   s   € Ü�eœUŸ]™]Ó+Ð+r0   T)Úfrozenc                  ó¨  • \ rS rSr% \(       a  \\R                     r\\	   r
\\
-  rS\S'   S\S'   S\S'   S\S'   S\S'   S*S	 jr\        S+S
 j5       r\        S,S j5       rS-S jrS.S jrS/S jrS rS0S jr\      S1S j5       r\      S2S j5       rS3S jr\      S1S j5       r\      S2S j5       rS3S jrS4S jr\\R2                  S5S j5       5       r\\R2                  S5S j5       5       r\\R2                  S.S j5       5       r\\S6S j5       5       r\\S7S j5       5       r\S8S j5       r\S9S j5       r\\S9S j5       5       r\\S:S  j5       5       r\S;S! j5       r\S9S" j5       r \S9S# j5       r!\\        S<S$ j5       5       r"\\        S=S% j5       5       r"\        S>S& j5       r"\#S' 5       r$S(r%g))?r$   éy   r&   rK   rL   r6   rQ   Úis_intÚis_floatc                ó<   • SU R                    SU R                   S3$ )NzVR[z, Ú]rJ   ©Úselfs    r1   Ú__repr__ÚValueRanges.__repr__Œ   s   € Ø�T—Z‘Z�L  4§:¡: ,¨aÐ0Ð0r0   c                ó   • g rO   r*   ©rb   rK   rL   s      r1   Ú__init__ÚValueRanges.__init__�   ó   € ð
 r0   c                ó   • g rO   r*   rf   s      r1   rg   rh   –   ri   r0   c                óf  • [        U5      n[        U5      n [        X5      (       d  [        SU SU S35      e [	        U[
        5      n[	        U[
        5      nXE:w  a  [        X45      e[	        U[        R                  5      (       a  U[        R                  :X  a  [        n[	        U[        R                  5      (       a  U[        R                  * :X  a  [        * n[        R                  [        [        4n[	        X5      n[	        X&5      n[        R                  U SU5        [        R                  U SU5        [        R                  U SU5        [        R                  U S	U R                  (       + =(       a    U=(       a    U5         [        R                  U S
U R                  (       + =(       a    U R                   (       + 5        U R                  (       d0  U R                   (       d  U R"                  (       d  [        X45      eg g g ! [         a  n[        SU SU 35      UeS nAff = f)NzInvalid ranges [Ú:r`   zCould not compare z <= rK   rL   rQ   r]   r^   )rG   rM   r(   Ú	TypeErrorr5   rI   rC   r7   r;   r?   r!   r#   r"   ÚobjectÚ__setattr__rQ   r]   r^   )	rb   rK   rL   rF   Úis_bool_lowerÚis_bool_upperÚinteger_typesÚis_int_lowerÚis_int_uppers	            r1   rg   rh   �   sÈ  € Ü˜uÓ%ˆÜ˜uÓ%ˆð	LÜ# E×1Ñ1Ü%Ð(8¸¸¸qÀÀÀqÐ&IÓJÐJð 2ô
 # 5¬,Ó7ˆÜ" 5¬,Ó7ˆØÓ)Ü  % Ó0Ð0ô �eœUŸ]™]×+Ñ+°¼¿¹Ó0AÜˆEÜ�eœUŸ]™]×+Ñ+°¼%¿(¹(¸Ó0BÜ�GˆEäŸ™Ô(;¼[ÐIˆÜ! %Ó7ˆÜ! %Ó7ˆô 	×Ñ˜4 ¨%Ô0Ü×Ñ˜4 ¨%Ô0ô 	×Ñ˜4 ¨MÔ:Ü×ÑØØØ—‘Ô×> ×>°,ô	
ð
	ô 	×Ñ˜4 °·±Ô-=×-QÀdÇkÁkÄ/ÔRØ�|�| D§K§K¸¿¿Ü  % Ó0Ð0ð 9F Kˆ|øôc ó 	LÜÐ0°°°t¸E¸7ÐCÓDÈ!ÐKûð	Lús   ˜"H È
H0ÈH+È+H0c                óš   • [        U 5      (       a  U $ U [        R                  5       :X  a  [        R                  5       $ [	        SU  35      e)Nznot bool like )rT   r$   ÚunknownÚunknown_boolrC   ra   s    r1   ÚboolifyÚValueRanges.boolifyÙ   sD   € Ü�d×ÑØˆKØ”[×(Ñ(Ó*Ó*Ü×+Ñ+Ó-Ð-ä  >°$°Ð!8Ó9Ð9r0   c                óJ   • [         R                  U5      R                  U 5      $ rO   )r$   ÚwrapÚissubset)rb   Úxs     r1   Ú__contains__ÚValueRanges.__contains__á   s   € Ü×Ñ Ó"×+Ñ+¨DÓ1Ð1r0   c                ó¶   • XR                  5       L a  g[        UR                  U R                  5      =(       a     [        U R                  UR                  5      $ )NT)Úunknown_intrM   rK   rL   ©rb   Úothers     r1   r|   ÚValueRanges.issubsetä   sE   € Ø×$Ñ$Ó&Ò&ØÜ §¡¨T¯Z©ZÓ8÷ 
Ô=MØ�J‰J˜Ÿ™ó>
ð 	
r0   c                ó
   • X-  $ )z1Given two ValueRanges, returns their intersectionr*   r‚   s     r1   ÚtightenÚValueRanges.tightenë   s
   € à‰|Ðr0   c                ó   • g rO   r*   r‚   s     r1   Ú__and__ÚValueRanges.__and__ð   ó   € ð #&r0   c                ó   • g rO   r*   r‚   s     r1   r‰   rŠ   ö   ó   € ð %(r0   c                ó8  • U[         R                  5       [         R                  5       4;   a  U $ U [         R                  5       [         R                  5       4;   a  U$ U R                  UR                  :w  a  [	        X45      eU R
                  UR
                  :w  a  [	        X45      eU R                  UR                  :w  a  [	        X45      eU R                  (       a^  [        [        R                  " U R                  UR                  5      [        R                  " U R                  UR                  5      5      $ [        [        R                  " U R                  UR                  5      [        R                  " U R                  UR                  5      5      $ rO   )r$   rv   r�   rQ   rC   r]   r^   r7   ÚOrrK   ÚAndrL   ÚMaxÚMinr‚   s     r1   r‰   rŠ   ü   s  € Ø”[×(Ñ(Ó*¬K×,CÑ,CÓ,EÐFÓFØˆKØ”K×'Ñ'Ó)¬;×+BÑ+BÓ+DÐEÓEØˆLØ�<‰<˜5Ÿ=™=Ó(Ü  $ Ó/Ð/Ø�;‰;˜%Ÿ,™,Ó&Ü  $ Ó/Ð/Ø�=‰=˜EŸN™NÓ*Ü  $ Ó/Ð/Ø�<�<ÜÜ—’˜Ÿ™ U§[¡[Ó1´5·9²9¸T¿Z¹ZÈÏÉÓ3Uóð ô Ü—	’	˜$Ÿ*™* e§k¡kÓ2´E·I²I¸d¿j¹jÈ%Ï+É+Ó4Vóð r0   c                ó   • g rO   r*   r‚   s     r1   Ú__or__ÚValueRanges.__or__  r‹   r0   c                ó   • g rO   r*   r‚   s     r1   r”   r•     r�   r0   c                óÚ  • [         R                  5       X4;   a  [         R                  5       $ U R                  UR                  :w  a  [        X45      eU R                  UR                  :w  a  [        X45      eU R
                  UR
                  :w  a  [        X45      eU R                  (       a^  [        [        R                  " U R                  UR                  5      [        R                  " U R                  UR                  5      5      $ [        [        R                  " U R                  UR                  5      [        R                  " U R                  UR                  5      5      $ rO   )r$   rv   rQ   rC   r]   r^   r7   r�   rK   r�   rL   r’   r‘   r‚   s     r1   r”   r•     sô   € Ü×ÑÓ  T MÓ1Ü×&Ñ&Ó(Ð(Ø�<‰<˜5Ÿ=™=Ó(Ü  $ Ó/Ð/Ø�;‰;˜%Ÿ,™,Ó&Ü  $ Ó/Ð/Ø�=‰=˜EŸN™NÓ*Ü  $ Ó/Ð/Ø�<�<ÜÜ—	’	˜$Ÿ*™* e§k¡kÓ2´E·H²H¸T¿Z¹ZÈÏÉÓ4Uóð ô Ü—	’	˜$Ÿ*™* e§k¡kÓ2´E·I²I¸d¿j¹jÈ%Ï+É+Ó4Vóð r0   c                ó4   • U R                   U R                  :H  $ rO   rJ   ra   s    r1   Úis_singletonÚValueRanges.is_singleton/  s   € Ø�z‰z˜TŸZ™ZÑ'Ð'r0   c                 óT   • [        [        R                  * [        R                  5      $ rO   ©r$   r7   r?   r*   r0   r1   rv   ÚValueRanges.unknown2  ó   € ô œEŸH™H˜9¤e§h¡hÓ/Ð/r0   c                 ó,   • [        [        * [        5      $ rO   )r$   r!   r*   r0   r1   r�   ÚValueRanges.unknown_int7  s   € ô œF˜7¤FÓ+Ð+r0   c                 óR   • [        [        R                  [        R                  5      $ rO   )r$   r7   r9   r8   r*   r0   r1   rw   ÚValueRanges.unknown_bool<  s   € ô œ5Ÿ;™;¬¯
©
Ó3Ð3r0   c                ó   • g rO   r*   ©Úargs    r1   r{   ÚValueRanges.wrapA  s   € ð 	r0   c                ó   • g rO   r*   r¤   s    r1   r{   r¦   G  ó   € ð 	r0   c                óÎ   • [        U [        5      (       a  U $ [        U [        5      (       a/  [        R                  " U 5      (       a  [        R                  5       $ [        X 5      $ rO   )r5   r$   r<   r=   Úisnanrv   r¤   s    r1   r{   r¦   L  sG   € ä�cœ;×'Ñ'ØˆJÜ�cœ5×!Ñ!¤d§j¢j°§o¡oÜ×&Ñ&Ó(Ð(ä˜3Ó$Ð$r0   c                ó„   • [         R                  U 5      n [        U" U R                  5      U" U R                  5      5      $ )z#Increasing: x <= y => f(x) <= f(y).©r$   r{   rK   rL   ©r}   Úfns     r1   Úincreasing_mapÚValueRanges.increasing_mapU  s1   € ô ×Ñ˜QÓˆÜ™2˜aŸg™g›;©¨1¯7©7«Ó4Ð4r0   c                ó   • g rO   r*   r­   s     r1   Údecreasing_mapÚValueRanges.decreasing_map[  s   € àBEr0   c                ó   • g rO   r*   r­   s     r1   r²   r³   _  r¨   r0   c                ó„   • [         R                  U 5      n [        U" U R                  5      U" U R                  5      5      $ )z#Decreasing: x <= y => f(x) >= f(y).)r$   r{   rL   rK   r­   s     r1   r²   r³   d  s1   € ô ×Ñ˜QÓˆä™2˜aŸg™g›;©¨1¯7©7«Ó4Ð4r0   c                ó°   • [         R                  U 5      n U" U R                  5      nU" U R                  5      n[        [	        X#5      [        X#5      5      $ )zIt's increasing or decreasing.)r$   r{   rK   rL   ÚminÚmax)r}   r®   ÚlÚus       r1   Úmonotone_mapÚValueRanges.monotone_mapk  sC   € ô ×Ñ˜QÓˆÙˆq�w‰w‹KˆÙˆq�w‰w‹KˆÜœ3˜q›9¤c¨!£iÓ0Ð0r0   c                óf  • [         R                  U 5      n SU ;   a‚  [        U" U R                  5      U" U R                  5      5      n[        U5      n[        U[        R                  5      (       d  U[        R                  :X  a  [        SU5      $ [        SU5      $ [         R                  X5      $ )z$Fn is convex and has a minimum at 0.r   ç        )r$   r{   r¸   rK   rL   rG   r5   r7   r@   r?   r»   )r}   r®   rL   s      r1   Úconvex_min_zero_mapÚValueRanges.convex_min_zero_maps  sˆ   € ô ×Ñ˜QÓˆØ�‹6Ü™˜1Ÿ7™7›¡R¨¯©£[Ó1ˆEÜ" 5Ó)ˆEÜ˜%¤§¡×-Ñ-°¼%¿(¹(Ó1BÜ" 3¨Ó.Ð.Ü˜q %Ó(Ð(Ü×'Ñ'¨Ó.Ð.r0   c                ó   • g rO   r*   ©r}   Úyr®   s      r1   Úcoordinatewise_increasing_mapÚ)ValueRanges.coordinatewise_increasing_map  ó   € ð r0   c                ó   • g rO   r*   rÂ   s      r1   rÄ   rÅ   ‡  rÆ   r0   c                óØ   • [         R                  U 5      [         R                  U5      p[        U" U R                  UR                  5      U" U R                  UR                  5      5      $ )zŽ
It's increasing on each coordinate.

Mathematically:
For every 1 <= i <= n and x_i <= y_i we have that
f(x1, .., xn) <= f(x1, , yi, ..., xn)
r¬   rÂ   s      r1   rÄ   rÅ   �  sR   € ô ×Ñ Ó"¤K×$4Ñ$4°QÓ$7ˆ1ÜÙˆq�w‰w˜Ÿ™Ó Ùˆq�w‰w˜Ÿ™Ó ó
ð 	
r0   c                óF  • U R                  U5      U R                  U5      p![        R                  " UR                  UR                  /UR                  UR                  /5       VVs/ s H  u  pEU" XE5      PM     nnn[        [        U5      [        U5      5      $ s  snnf )z1It's increasing or decreasing on each coordinate.)r{   Ú	itertoolsÚproductrK   rL   r$   r·   r¸   )Úclsr}   rÃ   r®   ÚaÚbÚproductss          r1   Úcoordinatewise_monotone_mapÚ'ValueRanges.coordinatewise_monotone_map¢  s†   € ð �x‰x˜‹{˜CŸH™H Q›Kˆ1ô "×)Ò)¨1¯7©7°A·G±GÐ*<¸q¿w¹wÈÏÉÐ>PÔQô
âQ‘�ñ ˆqŽHÙQð 	ñ 
ô œ3˜x›=¬#¨h«-Ó8Ð8ùó	
s   Á(Br*   N)ÚreturnÚstr)rb   úValueRanges[sympy.Expr]rK   ÚExprInrL   rÕ   rÒ   ÚNone)rb   úValueRanges[SympyBoolean]rK   ÚBoolInrL   rØ   rÒ   rÖ   )rK   ÚAllInrL   rÙ   rÒ   rÖ   )rÒ   r×   )r}   rÙ   rÒ   r6   )rÒ   r$   )rb   rÔ   rƒ   rÔ   rÒ   rÔ   )rb   r×   rƒ   r×   rÒ   r×   )rb   ÚAllVRrƒ   rÚ   rÒ   rÚ   )rÒ   r6   )rÒ   rÔ   )r¥   úExprIn | ExprVRrÒ   ÚExprVR)r¥   úBoolIn | BoolVRrÒ   ÚBoolVR)r¥   úAllIn | AllVRrÒ   rÚ   )r}   rÛ   r®   ÚExprFnrÒ   rÜ   )r}   rÝ   r®   ÚBoolFnrÒ   rÞ   )r}   rß   r®   ÚAllFnrÒ   rÚ   )r}   rÛ   rÃ   rÛ   r®   ÚExprFn2rÒ   rÜ   )r}   rÝ   rÃ   rÝ   r®   ÚBoolFn2rÒ   rÞ   )r}   rß   rÃ   rß   r®   ÚAllFn2rÒ   rÚ   )&r+   r,   r-   r.   r   r$   r7   rA   rÜ   rI   rÞ   rÚ   Ú__annotations__rc   r   rg   rx   r~   r|   r†   r‰   r”   r™   ÚstaticmethodÚ	functoolsÚcacherv   r�   rw   r{   r¯   r²   r»   r¿   rÄ   ÚclassmethodrÐ   r/   r*   r0   r1   r$   r$   y   s“  ‡ æð ˜UŸZ™ZÑ(ˆà˜\Ñ*ˆØ˜‘ˆð
 ƒIØƒIØƒMØƒLØƒNô1ð ðØ%ðàðð ðð 
ó	ó ðð ðØ'ðàðð ðð 
ó	ó ðô:1ôx:ô2ò
ôð
 ð&Ø%ð&à&ð&ð 
!ó&ó ð&ð
 ð(Ø'ð(à(ð(ð 
#ó(ó ð(ô
ð* ð&Ø%ð&à&ð&ð 
!ó&ó ð&ð
 ð(Ø'ð(à(ð(ð 
#ó(ó ð(ô
ô$(ð Ø‡_�_ó0ó ó ð0ð Ø‡_�_ó,ó ó ð,ð Ø‡_�_ó4ó ó ð4ð Øóó ó ðð Øóó ó ðð ó%ó ð%ð ó5ó ð5ð
 ØÛEó ó àEàØóó ó ðð ó5ó ð5ð ó1ó ð1ð ó	/ó ð	/ð ØðØðàðð ðð 
ó	ó ó ðð ØðØðàðð ðð 
ó	ó ó ðð ð
Øð
àð
ð ð
ð 
ó	
ó ð
ð$ ñ9ó ó9r0   c                  óœ  • \ rS rSrSr\S 5       r\S=S j5       r\S 5       r\S 5       r	\S 5       r
\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r \S 5       r!\S 5       r"\S  5       r#\S! 5       r$\S" 5       r%\S# 5       r&\S$ 5       r'\S% 5       r(\S& 5       r)\S' 5       r*\S( 5       r+\S) 5       r,\S* 5       r-\S+ 5       r.\S, 5       r/\S- 5       r0\S. 5       r1\S/ 5       r2\S0 5       r3\S1 5       r4\S2 5       r5\S3 5       r6\S4 5       r7\S5 5       r8\S6 5       r9\S7 5       r:\S8 5       r;\S9 5       r<\S: 5       r=\S; 5       r>S<r?g)>ÚSymPyValueRangeAnalysisi­  z¤
It gives bounds on a SymPy operator given bounds on its arguments
See the function `bound_sympy` for a function that applies this logic to a full SymPy expression
c                ó  • [        U [        5      (       a,  U R                  5       (       d  [        S5      eU R                  n [        U [
        [        [        45      nU(       dK  [        U [        [        R                  [        R                  45      (       d  [        S[        U 5       35      e[        U [        5      (       a|  [        R                  " U 5      (       aa  U[         R                  :X  a  [        R#                  5       $ UR$                  (       a  [        R'                  5       $ [        R)                  5       $ U(       a  [+        U5      nU" U 5      n O‘U[         R                  :X  a!  [        U [        5      (       d  [        S5      eO\UR$                  (       a.  U R,                  (       a  U R.                  (       d  [        S5      eO[1        U SS5      (       d  [        S5      e[        R3                  U 5      nU$ )Nz.ValueRanges must be a singleton for constant()znot a supported constant type: z#expected BooleanAtom for bool dtypez/expected float-like sympy value for float dtypeÚ
is_integerFz*expected integer sympy value for int dtype)r5   r$   r™   rC   rK   r:   r<   r6   r   r7   r;   ÚNumberrE   r   r=   rª   Útorchrw   Úis_floating_pointrv   r�   r   Ú	is_finiteÚis_realrB   r{   )rX   ÚdtypeÚ	is_pythonÚtype_Úrs        r1   ÚconstantÚ SymPyValueRangeAnalysis.constant³  s|  € ä�eœ[×)Ñ)Ø×%Ñ%×'Ñ'Ü$Ð%UÓVÐVØ—K‘KˆEä˜u¤s¬E´4Ð&8Ó9ˆ	Þ¤Ø”K¤§¡´·±Ð=÷"
ñ "
ô !Ð#BÄ4ÈÃ;À-Ð!PÓQÐQô �eœ]×+Ñ+´·
²
¸5×0AÑ0AØœŸ
™
Ó"Ü"×/Ñ/Ó1Ð1Ø×(×(Ü"×*Ñ*Ó,Ð,ä"×.Ñ.Ó0Ð0æÜ! %Ó(ˆEÙ˜%“L‰Eð œŸ
™
Ó"Ü! %¬×5Ñ5Ü(Ð)NÓOÐOð 6à×(×(à—?—?¨5¯=¯=Ü(ØIóð øô
 ˜u l°E×:Ñ:Ü(Ð)UÓVÐVä×Ñ˜UÓ#ˆØˆr0   Nc                ó   • U[         R                  :X  a  [        R                  U [        5      $ U[         R
                  :X  a  [        R                  5       $ UR                  (       d  [        R                  5       $ [        R                  5       $ rO   )
rð   Úfloat64r$   r¯   r   r6   rw   rñ   r�   rv   )rÍ   rô   Ú	src_dtypes      r1   Úto_dtypeÚ SymPyValueRangeAnalysis.to_dtypeá  sc   € à”E—M‘MÓ!ä×-Ñ-¨a´Ó9Ð9Ø”e—j‘jÓ Ü×+Ñ+Ó-Ð-Ø×(×(Ü×*Ñ*Ó,Ð,Ü×"Ñ"Ó$Ð$r0   c                ó6   • [         R                  U [        5      $ rO   )r$   r¯   r   )rÍ   rô   s     r1   Útrunc_to_intÚ$SymPyValueRangeAnalysis.trunc_to_intì  s   € ô ×)Ñ)¨!¬ZÓ8Ð8r0   c                óÌ   • [         R                  U 5      n U R                  5       n U R                  (       d  [	        S5      e[         R                  U [        R                  5      $ )Nz"not_ expects a boolean ValueRanges)r$   r{   rx   rQ   rC   r²   r7   ÚNot)rÍ   s    r1   Únot_ÚSymPyValueRangeAnalysis.not_ñ  sG   € ä×Ñ˜QÓˆØ�I‰I‹KˆØ�y�yÜ Ð!EÓFÐFÜ×)Ñ)¨!¬U¯Y©YÓ7Ð7r0   c                óJ   • [         R                  X[        R                  5      $ rO   )r$   rÄ   r7   r�   ©rÍ   rÎ   s     r1   Úor_ÚSymPyValueRangeAnalysis.or_ù  s   € ä×8Ñ8¸¼u¿x¹xÓHÐHr0   c                óJ   • [         R                  X[        R                  5      $ rO   )r$   rÄ   r7   r�   r  s     r1   Úand_ÚSymPyValueRangeAnalysis.and_ý  s   € ä×8Ñ8¸¼u¿y¹yÓIÐIr0   c                ó  • U R                  5       (       aD  [        R                  [        R                  " U R
                  (       a
  S5      5      $ S5      5      $ [        [        R                  " S5      [        R                  " S5      5      $ ©Nr   r   )r™   r$   r{   r7   r;   rK   ©r}   s    r1   Ú_bool_to_intÚ$SymPyValueRangeAnalysis._bool_to_int  sY   € à�>‰>×ÑÜ×#Ñ#¤E§M¢M°q·w·w°!Ó$FÓGÐGÀAÓ$FÓGÐGäœuŸ}š}¨QÓ/´·²¸qÓ1AÓBÐBr0   c                óš  • [         R                  U5      [         R                  U5      p!UR                  (       a"  UR                  (       a  U R                  X5      $ UR                  (       a  U R	                  U5      nUR                  (       a  U R	                  U5      n[        UR                  UR                  5      nUS:  aC  U[        R                  * :w  a.  U[        * :w  a#   S[        U* S-
  5      R                  5       -  * nOSn[        U[        UR                  UR                  5      5      $ ! [         a
    [        * n N=f = f)Nr   r   )r$   r{   rQ   r  r  r·   rK   r7   r?   r!   r:   Ú
bit_lengthÚ	Exceptionr¸   rL   )rÌ   rÍ   rÎ   rK   s       r1   Úbitwise_andÚ#SymPyValueRangeAnalysis.bitwise_and  sù   € ä×Ñ Ó"¤K×$4Ñ$4°QÓ$7ˆ1Ø�9�9˜ŸŸØ—8‘8˜A“>Ð!Ø�9�9Ø× Ñ  Ó#ˆAØ�9�9Ø× Ñ  Ó#ˆAÜ�A—G‘G˜QŸW™WÓ%ˆØ�1‹9˜¤5§8¡8 )Ó+°¼&¸Ó0@ð Øœs E 6¨A¡:›×9Ñ9Ó;Ñ;Ð<‘ð ˆEÜ˜5¤# a§g¡g¨q¯w©wÓ"7Ó8Ð8øô	 ó  Ü˜’ð ús   Ã(!D6 Ä6E
Å	E
c                ó®  • [         R                  U5      [         R                  U5      p!UR                  (       a"  UR                  (       a  U R                  X5      $ UR                  (       a  U R	                  U5      nUR                  (       a  U R	                  U5      n[        UR                  UR                  5      nUS:X  a  SnOMUS:”  a?  U[        R                  :w  a+  U[        :w  a!   S[        U5      R                  5       -  S-
  nOUS:  a  Sn[        [        UR                  UR                  5      U5      $ ! [         a	    [        n N<f = f)Nr   r   éÿÿÿÿ)r$   r{   rQ   r  r  r¸   rL   r7   r?   r!   r:   r  r  r·   rK   )rÌ   rÍ   rÎ   rL   s       r1   Ú
bitwise_orÚ"SymPyValueRangeAnalysis.bitwise_or  s  € ä×Ñ Ó"¤K×$4Ñ$4°QÓ$7ˆ1Ø�9�9˜ŸŸØ—7‘7˜1“=Ð Ø�9�9Ø× Ñ  Ó#ˆAØ�9�9Ø× Ñ  Ó#ˆAÜ�A—G‘G˜QŸW™WÓ%ˆØ�A‹:Ø‰EØ�Q‹Y˜5¤E§H¡HÓ,°¼&³ðØœc %›j×3Ñ3Ó5Ñ5¸Ñ:‘ð �Q‹YØˆEÜœ3˜qŸw™w¨¯©Ó0°%Ó8Ð8øô	 ó Ü’ðús   Ã/E ÅEÅEc                ób  • [         R                  U5      [         R                  U5      p!UR                  (       Ga  UR                  (       aÿ  UR                  UR                  -  UR                  UR                  -  UR                  UR                  -  UR                  UR                  -  1n[        S U 5       5      n[        S U 5       5      nU(       a'  U(       a   [        R                  [        R                  pvO@U(       a  [        R                  =pgO'U(       a  [        R                  =pgO[        SU 35      e[        Xg5      $ UR                  (       a  U R                  U5      nUR                  (       a  U R                  U5      nUR                  UR                  :X  ar  UR                  UR                  :X  aX  [        UR                  5      (       a>  [        UR                  5      (       a$  UR                  UR                  -  n[        Xˆ5      $ [        [        * [        5      $ )Nc              3  óF   #   • U  H  o[         R                  :H  v •  M     g 7frO   )r7   r9   ©Ú.0Úbounds     r1   Ú	<genexpr>Ú6SymPyValueRangeAnalysis.bitwise_xor.<locals>.<genexpr>A  s   é € ÐEºf°U¤U§[¡[Ö0ºfùó   ‚!c              3  óF   #   • U  H  o[         R                  :H  v •  M     g 7frO   ©r7   r8   r  s     r1   r   r!  B  s   é € ÐCºF°5¤E§J¡JÖ.ºFùr"  zNon-boolean xor result: )r$   r{   rQ   rK   rL   Úanyr7   r9   r8   rC   r  rY   r!   )	rÌ   rÍ   rÎ   ÚboundsÚ	has_falseÚhas_truerK   rL   Úvalue_ranges	            r1   Úbitwise_xorÚ#SymPyValueRangeAnalysis.bitwise_xor6  sƒ  € ä×Ñ Ó"¤K×$4Ñ$4°QÓ$7ˆ1Ø�9�9ˆ9˜ŸŸà—‘˜!Ÿ'™'Ñ!Ø—‘˜!Ÿ'™'Ñ!Ø—‘˜!Ÿ'™'Ñ!Ø—‘˜!Ÿ'™'Ñ!ð	ˆFô ÑE¹fÓEÓEˆIÜÑC¹FÓCÓCˆHæžXÜ$Ÿ{™{¬E¯J©J‘uÞÜ %§
¡
Ð*�˜ÞÜ %§¡Ð+�˜ä$Ð'?À¸xÐ%HÓIÐIä˜uÓ,Ð,Ø�9�9Ø× Ñ  Ó#ˆAØ�9�9Ø× Ñ  Ó#ˆAà�G‰G�q—w‘wÓØ—‘˜1Ÿ7™7Ó"Ü  §¡×)Ñ)Ü  §¡×)Ñ)àŸ'™' A§G¡GÑ+ˆKÜ˜{Ó8Ð8ÜœF˜7¤FÓ+Ð+r0   c                ó"  • [         R                  U 5      n [         R                  U5      nU R                  5       (       aR  UR                  5       (       a=  U R                  UR                  :X  a#  [         R                  [        R
                  5      $ U R                  UR                  :”  d  UR                  U R                  :”  a#  [         R                  [        R                  5      $ [        [        R                  [        R
                  5      $ rO   )r$   r{   r™   rK   r7   r8   rL   r9   r  s     r1   ÚeqÚSymPyValueRangeAnalysis.eq\  s¨   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�>‰>×Ñ §¡× 0Ñ 0°Q·W±WÀÇÁÓ5GÜ×#Ñ#¤E§J¡JÓ/Ð/Ø�W‰W�q—w‘wÓ !§'¡'¨A¯G©GÓ"3Ü×#Ñ#¤E§K¡KÓ0Ð0Üœ5Ÿ;™;¬¯
©
Ó3Ð3r0   c                óB   • U R                  U R                  X5      5      $ rO   )r  r-  ©rÌ   rÍ   rÎ   s      r1   ÚneÚSymPyValueRangeAnalysis.nef  ó   € à�x‰x˜Ÿ™˜q›Ó%Ð%r0   c                ó,   • [         R                  U5      $ rO   )r$   r{   )rÌ   rÍ   s     r1   ÚidentityÚ SymPyValueRangeAnalysis.identityj  s   € ä×Ñ Ó"Ð"r0   c                óH  • [         R                  U5      n[         R                  U5      nUR                  UR                  :w  a  [        S5      eUR                  (       a!  U R	                  U R                  U5      U5      $ UR                  UR                  :  a#  [         R                  [        R                  5      $ UR                  UR                  :¼  a#  [         R                  [        R                  5      $ [        [        R                  [        R                  5      $ )Nú=operands must both be boolean ValueRanges or both non-boolean)r$   r{   rQ   rC   r  r  rL   rK   r7   r8   r9   r0  s      r1   ÚltÚSymPyValueRangeAnalysis.ltn  sÃ   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�9‰9˜Ÿ	™	Ó!Ü ØOóð ð �9�9Ø—8‘8˜CŸH™H Q›K¨Ó+Ð+à�w‰w˜Ÿ™Ó Ü"×'Ñ'¬¯
©
Ó3Ð3Ø—‘˜AŸG™GÓ#Ü"×'Ñ'¬¯©Ó4Ð4ÜœuŸ{™{¬E¯J©JÓ7Ð7r0   c                ó$   • U R                  X!5      $ rO   )r9  r0  s      r1   ÚgtÚSymPyValueRangeAnalysis.gt  s   € à�v‰v�a‹|Ðr0   c                óB   • U R                  U R                  X5      5      $ rO   )r  r<  r0  s      r1   ÚleÚSymPyValueRangeAnalysis.leƒ  r3  r0   c                óB   • U R                  U R                  X5      5      $ rO   )r  r9  r0  s      r1   ÚgeÚSymPyValueRangeAnalysis.ge‡  r3  r0   c                ó\   • [         R                  X[        [        R                  5      5      $ rO   )r$   rÄ   r   ÚoperatorÚaddr  s     r1   rF  ÚSymPyValueRangeAnalysis.add‹  s#   € ä×8Ñ8Ø”+œhŸl™lÓ+ó
ð 	
r0   c                ó(  • [         R                  U5      n[         R                  U5      nUR                  UR                  :w  a  [        S5      eUR                  (       a  U R	                  X5      $ S n[         R                  X[        U5      5      $ )Nr8  c                óB   • U S:X  d  U S:X  a  U $ US:X  d  US:X  a  U$ X-  $ )Nr¾   r   r*   r  s     r1   Úsafe_mulÚ-SymPyValueRangeAnalysis.mul.<locals>.safe_mul�  s-   € à�C‹x˜1 ›6Ø�Ø�c“˜Q !›VØ�à‘u�r0   )r$   r{   rQ   rC   r  rÐ   r   )rÌ   rÍ   rÎ   rJ  s       r1   ÚmulÚSymPyValueRangeAnalysis.mul‘  sx   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆà�9‰9˜Ÿ	™	Ó!Ü ØOóð ð �9�9Ø—8‘8˜A“>Ð!ò	ô ×6Ñ6°q¼[ÈÓ=RÓSÐSr0   c                ó&  • [         R                  U 5      n [         R                  U5      nSU;   d*  [        * U ;   d
  [        U ;   a)  [        * U;   d
  [        U;   a  [         R                  5       $ [         R	                  U U[        [        5      5      $ ©Nr   )r$   r{   r!   rv   rÐ   r   r   r  s     r1   Úint_truedivÚ#SymPyValueRangeAnalysis.int_truediv¨  sv   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�‹6œ�w !“|¤v°£{¼&¸ÀA»ÌÐSTËÜ×&Ñ&Ó(Ð(ä×:Ñ:ØØÜœJÓ'óð r0   c                óv  • [         R                  U 5      n [         R                  U5      nSU;   dR  [        R                  * U ;   d  [        R                  U ;   a=  [        R                  * U;   d  [        R                  U;   a  [         R	                  5       $ [         R                  U U[        [        5      5      $ rO  )r$   r{   r7   r?   rv   rÐ   r   r   r  s     r1   ÚtruedivÚSymPyValueRangeAnalysis.truedivµ  s‡   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�‹6Ü�h‰hˆY˜!‹^œuŸx™x¨1›}´E·H±H°9À³>ÄUÇXÁXÐQRÃ]ä×&Ñ&Ó(Ð(ä×:Ñ:ØØÜœLÓ)óð r0   c                óÎ  • [         R                  U 5      n [         R                  U5      nSU;   aÖ  UR                  S:¼  a   U R                  S:¼  a  [        S[        5      $ UR                  S::  a   U R                  S::  a  [        S[        5      $ UR                  S::  a!  U R                  S:¼  a  [        [        * S5      $ UR                  S:¼  a!  U R                  S::  a  [        [        * S5      $ [         R                  5       $ / n[        R                  " U R                  U R                  /UR                  UR                  /5       Hy  u  p4[        X45      nU[        R                  L aE  UR                  [        R                  " U5      [        R                  " U5      -  [        -  5        Mh  UR                  U5        M{     [        [        U5      [        U5      5      $ rO  )r$   r{   rK   r!   rL   r�   rÊ   rË   r   r7   rD   ÚappendÚsignr·   r¸   )rÍ   rÎ   rÏ   r}   rÃ   r÷   s         r1   ÚfloordivÚ SymPyValueRangeAnalysis.floordivÄ  s\  € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆð �‹6Ø�w‰w˜!‹| §¡¨1£Ü" 1¤fÓ-Ð-Ø�w‰w˜!‹| §¡¨1£Ü" 1¤fÓ-Ð-Ø�w‰w˜!‹| §¡¨1£Ü"¤F 7¨AÓ.Ð.Ø�w‰w˜!‹| §¡¨1£Ü"¤F 7¨AÓ.Ð.Ü×*Ñ*Ó,Ð,ØˆÜ×%Ò% q§w¡w°·±Ð&8¸1¿7¹7ÀAÇGÁGÐ:LÖM‰DˆAÜ˜“ˆAØ”E—I‘IŠ~Ø—‘¤§¢¨A£´·²¸A³Ñ!>Ä&Ñ HÖIà—‘ Ö"ñ Nô œ3˜x›=¬#¨h«-Ó8Ð8r0   c                óÄ  ^^• [         R                  U5      n[         R                  U5      nS mS nSU;   a  [         R                  5       $ UR                  5       (       aÕ  [	        UR
                  5      mU" UR
                  T5      U" UR                  T5      :X  a  [         R                  UUU4S j5      $ UR                  S:  a  [        T* S-   S5      $ UR
                  S:”  a  [        STS-
  5      $ [        T* S-   UR
                  5      n[        TS-
  UR                  5      n[        XE5      $ U R	                  U5      R                  S-
  n[        U* U5      $ )Nc                óJ   • [        U 5      [        U5      -  nU S:  a  US-  nU$ )Nr   r  )Úabs)rÍ   rÎ   Úrets      r1   Úc_modÚ*SymPyValueRangeAnalysis.mod.<locals>.c_modä  s(   € Ü�a“&œ3˜q›6‘/ˆCØ�1‹uØ�r‘	�ØˆJr0   c                ó~   • X-  nUR                   (       a'  U[        [        * 4;  a  [        R                  " U5      $ U$ rO   )rò   r!   r7   r;   )rÍ   rÎ   r}   s      r1   Úc_divÚ*SymPyValueRangeAnalysis.mod.<locals>.c_divê  s2   € Ø‘ˆAØ'(§{§{°qÄÌ&ÈÐ@QÓ7Q”5—=’= Ó#ÐXÐWXÐXr0   r   c                ó   >• T" U T5      $ rO   r*   )rº   r^  Úy_vals    €€r1   Ú<lambda>Ú-SymPyValueRangeAnalysis.mod.<locals>.<lambda>ö  s   ø€ ¹uÀQÈ¼r0   r   )
r$   r{   r�   r™   r\  rK   rL   r¯   r¸   r·   )rÌ   r}   rÃ   ra  rK   rL   r^  rd  s         @@r1   ÚmodÚSymPyValueRangeAnalysis.modÞ  s.  ù€ ä×Ñ˜QÓˆÜ×Ñ˜QÓˆò	ò	Yð �‹6Ü×*Ñ*Ó,Ð,Ø�^‰^×ÑÜ˜Ÿ™“LˆEñ �Q—W‘W˜eÓ$©¨a¯g©g°uÓ(=Ó=Ü"×1Ñ1°!Õ5NÓOÐOØ�w‰w˜‹{ä" E 6¨A¡:¨qÓ1Ð1Ø—‘˜1“ä" 1 e¨a¡iÓ0Ð0ô ˜U˜F Q™J¨¯©Ó0�Ü˜E A™I q§w¡wÓ/�Ü" 5Ó0Ð0ð —G‘G˜A“J×$Ñ$ qÑ(ˆEÜ ˜v uÓ-Ð-r0   c                óZ  • [         R                  U5      n[         R                  U5      nUR                  S:¼  a%  UR                  S:¼  a  [        R	                  X5      $ UR                  S:  a  UR                  S-   OSnUR
                  S:”  a  UR
                  S-
  OSn[        X45      $ )z«Python-style modulo: result has same sign as divisor.

Assumes valid input where y is never 0.
- When y > 0: result is in [0, y - 1]
- When y < 0: result is in [y + 1, 0]
r   r   )r$   r{   rK   rì   rg  rL   )rÌ   r}   rÃ   rK   rL   s        r1   Ú
python_modÚ"SymPyValueRangeAnalysis.python_mod  s‡   € ô ×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�7‰7�a‹<˜AŸG™G q›LÜ*×.Ñ.¨qÓ4Ð4Ø Ÿw™w¨›{�—‘˜!’°ˆØ Ÿw™w¨›{�—‘˜!’°ˆÜ˜5Ó(Ð(r0   c                óD   • U R                  U R                  X5      U5      $ rO   )rg  rX  )rÌ   rÍ   rÎ   Úcs       r1   Úmodular_indexingÚ(SymPyValueRangeAnalysis.modular_indexing  s   € à�w‰w�s—|‘| AÓ)¨1Ó-Ð-r0   c                ó*   • [         R                  5       $ rO   )r$   r�   )rÌ   Úargss     r1   Ú&is_non_overlapping_and_dense_indicatorÚ>SymPyValueRangeAnalysis.is_non_overlapping_and_dense_indicator  s   € ä×&Ñ&Ó(Ð(r0   c                óî  ^• [         R                  U5      n[         R                  T5      mUR                  5       (       aH  TR                  5       (       a3  [         R                  [        UR                  TR                  5      5      $ UR                  S:¼  a,  [         R                  UT[        S[        5      -  [        5      $ TR                  5       (       aG  TR                  S-  S:X  a  [         R                  UU4S j5      $ [         R                  UU4S j5      $ [        UR                  UR                  * 5      n[        [        UTR                  5      * [        UTR                  5      5      $ )Nr   r   é   c                ó0   >• [        U TR                  5      $ rO   ©r   rK   ©r}   rÎ   s    €r1   re  Ú8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>3  s   ø€ ¤¨!¨Q¯W©WÔ!5r0   c                ó0   >• [        U TR                  5      $ rO   rw  rx  s    €r1   re  ry  7  s   ø€ ¼xÈÈ1Ï7É7Ô?Sr0   )r$   r{   r™   r   rK   rÄ   r!   r   r¿   r¯   r¸   rL   )rÌ   rÍ   rÎ   Úmax_bases     ` r1   Úpow_by_naturalÚ&SymPyValueRangeAnalysis.pow_by_natural   s   ø€ ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�>‰>×Ñ §¡× 0Ñ 0Ü×#Ñ#¤H¨Q¯W©W°a·g±gÓ$>Ó?Ð?à�W‰W˜‹\ô
 ×<Ñ<Ø�1”{ 1¤fÓ-Ñ-¬|óð ð �^‰^×ÑØ�w‰w˜‰{˜aÓä"×6Ñ6ØÔ5óð ô
 #×1Ñ1°!Ô5SÓTÐTô ˜1Ÿ7™7 Q§W¡W HÓ-ˆHÜÜ˜8 Q§W¡WÓ-Ð.´¸À1Ç7Á7Ó0Kóð r0   c                ó*   • [         R                  5       $ rO   )r$   rv   r0  s      r1   ÚpowÚSymPyValueRangeAnalysis.powB  s   € ä×"Ñ"Ó$Ð$r0   c                óŽ   • [         R                  U 5      n SU ;   a  [         R                  5       $ [         R                  U S 5      $ )zENeeded as it's used in pow, but it won't appear on a SymPy expressionr   c                ó   • [        SU 5      $ )Nç      ð?)r   )rÃ   s    r1   re  Ú4SymPyValueRangeAnalysis.reciprocal.<locals>.<lambda>v  s   € ¼<ÈÈQÔ;Or0   )r$   r{   rv   r²   r  s    r1   Ú
reciprocalÚ"SymPyValueRangeAnalysis.reciprocalo  s>   € ô ×Ñ˜QÓˆØ�‹6Ü×&Ñ&Ó(Ð(ä×-Ñ-¨aÑ1OÓPÐPr0   c                ó6   • [         R                  U [        5      $ rO   )r$   r¿   r\  r  s    r1   r\  ÚSymPyValueRangeAnalysis.absx  s   € ä×.Ñ.¨q´#Ó6Ð6r0   c                ó6   • [         R                  U [        5      $ rO   )r$   r¯   r   r  s    r1   ÚexpÚSymPyValueRangeAnalysis.exp|  s   € ä×)Ñ)¨!Ô->Ó?Ð?r0   c                ó¨   • [         R                  U 5      n U R                  S::  a  [         R                  5       $ [         R	                  U [
        5      $ rO  )r$   r{   rK   rv   r¯   r   r  s    r1   ÚlogÚSymPyValueRangeAnalysis.log€  s@   € ä×Ñ˜QÓˆØ�7‰7�a‹<Ü×&Ñ&Ó(Ð(Ü×)Ñ)¨!Ô->Ó?Ð?r0   c                ó¨   • [         R                  U 5      n U R                  S::  a  [         R                  5       $ [         R	                  U [
        5      $ rO  )r$   r{   rK   rv   r¯   r   r  s    r1   Úlog2ÚSymPyValueRangeAnalysis.log2‡  s@   € ä×Ñ˜QÓˆØ�7‰7�a‹<Ü×&Ñ&Ó(Ð(Ü×)Ñ)¨!Ô-?Ó@Ð@r0   c                óB   • U R                  X[        R                  5      $ rO   )Ú
min_or_maxr7   r’   r0  s      r1   ÚminimumÚSymPyValueRangeAnalysis.minimumŽ  ó   € à�~‰~˜a¤E§I¡IÓ.Ð.r0   c                óB   • U R                  X[        R                  5      $ rO   )r“  r7   r‘   r0  s      r1   ÚmaximumÚSymPyValueRangeAnalysis.maximum’  r–  r0   c                ó‚   • [         R                  U 5      n [         R                  U5      n[         R                  XU5      $ rO   )r$   r{   rÄ   )rÍ   rÎ   r®   s      r1   r“  Ú"SymPyValueRangeAnalysis.min_or_max–  s5   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆÜ×8Ñ8¸¸rÓBÐBr0   c                ó†   • [         R                  U[        R                  R                  R
                  R                  5      $ rO   )r$   r¯   r7   Ú	functionsÚ
elementaryÚintegersÚfloor©rÌ   r}   rô   s      r1   Úfloor_to_intÚ$SymPyValueRangeAnalysis.floor_to_intœ  s+   € ä×)Ñ)¨!¬U¯_©_×-GÑ-G×-PÑ-P×-VÑ-VÓWÐWr0   c                ó†   • [         R                  U[        R                  R                  R
                  R                  5      $ rO   )r$   r¯   r7   r�  rž  rŸ  Úceilingr¡  s      r1   Úceil_to_intÚ#SymPyValueRangeAnalysis.ceil_to_int   s0   € ä×)Ñ)ØŒu�‰×)Ñ)×2Ñ2×:Ñ:ó
ð 	
r0   c                ó˜   • [         R                  U[        [        R                  R
                  R                  R                  5      5      $ rO   )r$   r¯   r   r7   r�  rž  rŸ  r   ©rÌ   r}   s     r1   r   ÚSymPyValueRangeAnalysis.floor¸  s5   € ä×)Ñ)ØŒ{œ5Ÿ?™?×5Ñ5×>Ñ>×DÑDÓEó
ð 	
r0   c                ó˜   • [         R                  U[        [        R                  R
                  R                  R                  5      5      $ rO   )r$   r¯   r   r7   r�  rž  rŸ  r¥  r©  s     r1   ÚceilÚSymPyValueRangeAnalysis.ceil¾  s5   € ä×)Ñ)ØŒ{œ5Ÿ?™?×5Ñ5×>Ñ>×FÑFÓGó
ð 	
r0   c                ó¤   ^• TR                  5       (       d  [        R                  5       $ TR                  mU4S jn[        R	                  X5      $ )Nc                ó   >• [        U T5      $ rO   )r   )ÚnumberÚndigitss    €r1   re  Ú7SymPyValueRangeAnalysis.round_decimal.<locals>.<lambda>Ì  s   ø€ œL¨°Ô9r0   )r™   r$   rv   rK   r¯   )rÌ   r°  r±  r®   s     ` r1   Úround_decimalÚ%SymPyValueRangeAnalysis.round_decimalÄ  sB   ø€ à×#Ñ#×%Ñ%Ü×&Ñ&Ó(Ð(à—-‘-ˆô :ˆä×)Ñ)¨&Ó5Ð5r0   c                ó6   • [         R                  U[        5      $ rO   )r$   r¯   r   )rÌ   r°  rô   s      r1   Úround_to_intÚ$SymPyValueRangeAnalysis.round_to_intÐ  s   € ô ×)Ñ)¨&´*Ó=Ð=r0   c                ó¨   • [         R                  U 5      n U R                  S:  a  [         R                  5       $ [         R	                  U [
        5      $ rO  )r$   r{   rK   rv   r¯   r   r  s    r1   ÚsqrtÚSymPyValueRangeAnalysis.sqrtÖ  s@   € ä×Ñ˜QÓˆØ�7‰7�Q‹;Ü×&Ñ&Ó(Ð(Ü×)Ñ)¨!Ô-?Ó@Ð@r0   c                óŒ  • [         R                  U5      n[         R                  U5      nU R                  5       n UR                  UR                  :w  a$  [         R	                  5       X4;  a  [        S5      eUR                  (       a^  [        [        R                  " UR                  UR                  5      [        R                  " UR                  UR                  5      5      $ [        [        R                  " UR                  UR                  5      [        R                  " UR                  UR                  5      5      $ )NzIwhere() requires b and c to have the same boolean-ness or allow unknown())r$   r{   rx   rQ   rv   rC   r7   r�   rK   r�   rL   r’   r‘   )rÍ   rÎ   rm  s      r1   ÚwhereÚSymPyValueRangeAnalysis.whereÝ  sÐ   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�I‰I‹Kˆð �9‰9˜Ÿ	™	Ó!¤k×&9Ñ&9Ó&;ÀAÀ6Ó&IÜ Ø[óð ð �9�9ÜœuŸyšy¨¯©°!·'±'Ó:¼E¿HºHÀQÇWÁWÈaÏgÉgÓ<VÓWÐWäœuŸyšy¨¯©°!·'±'Ó:¼E¿IºIÀaÇgÁgÈqÏwÉwÓ<WÓXÐXr0   c                ó(   • UR                  5       nX4$ rO   )rx   r  s     r1   Úexpr_cond_pairÚ&SymPyValueRangeAnalysis.expr_cond_pairð  s   € à�I‰I‹KˆØˆvˆr0   c                 ób   • S nU  H&  u  p#[         R                  U;   d  M  Uc  UnM"  X-  nM(     U$ rO   r$  )ÚrangesÚ
init_rangeÚ
expr_rangeÚ
cond_ranges       r1   Ú	piecewiseÚ!SymPyValueRangeAnalysis.piecewiseú  s;   € àˆ
Û&,Ñ"ˆJÜ�z‰z˜ZÕ'ØÑ%Ø!+’Jà!+Ñ!8’Jñ '-ð Ðr0   c                ó   • [        SS5      $ ©Ng      ð¿rƒ  ©r$   r  s    r1   ÚcosÚSymPyValueRangeAnalysis.cos  s   € ô
 ˜4 Ó%Ð%r0   c                ó6   • [        S[        R                  5      $ )Nr¾   rœ   r  s    r1   ÚcoshÚSymPyValueRangeAnalysis.cosh  s   € ä˜3¤§¡Ó)Ð)r0   c                ó   • [        SS5      $ rÉ  rÊ  r  s    r1   ÚsinÚSymPyValueRangeAnalysis.sin  s   € ô ˜4 Ó%Ð%r0   c                óT   • [        [        R                  * [        R                  5      $ rO   rœ   r  s    r1   ÚsinhÚSymPyValueRangeAnalysis.sinh  rž   r0   c                óT   • [        [        R                  * [        R                  5      $ rO   rœ   r  s    r1   ÚtanÚSymPyValueRangeAnalysis.tan#  ó   € äœEŸH™H˜9¤e§h¡hÓ/Ð/r0   c                óT   • [        [        R                  * [        R                  5      $ rO   rœ   r  s    r1   ÚtanhÚSymPyValueRangeAnalysis.tanh'  rž   r0   c                óT   • [        [        R                  * [        R                  5      $ rO   rœ   r  s    r1   ÚasinÚSymPyValueRangeAnalysis.asin,  rÙ  r0   c                óT   • [        [        R                  * [        R                  5      $ rO   rœ   r  s    r1   ÚacosÚSymPyValueRangeAnalysis.acos6  rÙ  r0   c                óT   • [        [        R                  * [        R                  5      $ rO   rœ   r  s    r1   ÚatanÚSymPyValueRangeAnalysis.atan@  rÙ  r0   c                ó6   • [         R                  U [        5      $ rO   )r$   r¯   r   r  s    r1   ÚtruncÚSymPyValueRangeAnalysis.truncE  s   € ô ×)Ñ)¨!¬\Ó:Ð:r0   r*   rO   )@r+   r,   r-   r.   Ú__doc__rç   rø   rý   r   r  r  r  r  rê   r  r  r*  r-  r1  r5  r9  r<  r?  rB  rF  rL  rP  rS  rX  rg  rj  rn  rr  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*   r0   r1   rì   rì   ­  s„  † ñð
 ñ+ó ð+ðZ ó%ó ð%ð ñ9ó ð9ð ñ8ó ð8ð ñIó ðIð ñJó ðJð ñCó ðCð ñ9ó ð9ð* ñ9ó ð9ð. ñ#,ó ð#,ðJ ñ4ó ð4ð ñ&ó ð&ð ñ#ó ð#ð ñ8ó ð8ð  ñó ðð ñ&ó ð&ð ñ&ó ð&ð ñ
ó ð
ð
 ñTó ðTð, ñ
ó ð
ð ñó ðð ñ9ó ð9ð2 ñ&.ó ð&.ðP ñ)ó ð)ð  ñ.ó ð.ð ñ)ó ð)ð ñó ððB ñ*ó ð*ðX ñQó ðQð ñ7ó ð7ð ñ@ó ð@ð ñ@ó ð@ð ñAó ðAð ñ/ó ð/ð ñ/ó ð/ð ñCó ðCð
 ñXó ðXð ñ
ó ð
ð. ñ
ó ð
ð
 ñ
ó ð
ð
 ñ	6ó ð	6ð ñ>ó ð>ð
 ñAó ðAð ñYó ðYð$ ñó ðð ñó ðð ñ&ó ð&ð ñ	ó ð	ð ñ&ó ð&ð
 ñ0ó ð0ð ñ0ó ð0ð ñ0ó ð0ð ñó ðð ñó ðð ñ0ó ð0ð ñ;ó ó;r0   rì   c                óB  ^ ^• [         R                  ST [        U U4S j5      5        [        T [        R
                  5      (       a  [        R                  T 5      $ T=(       d    0 m[        R                  R                  R                  5       nU(       ax  UR                  (       ag  UR                  R                  (       aL  T(       a%  0 UR                  R                  R                  ETEmO UR                  R                  R                  mS n[        [         TT US9$ )Nzbound_sympy(%s)%sc                 ón   >• T(       a,  SSR                  U 4S jTR                  5        5       5      -   $ S$ )NÚ
c              3  ó\   >#   • U  H!  u  pUTR                   ;   d  M  S U SU 3v •  M#     g7f)z  r4   N)Úfree_symbols)r  Úkr÷   Úexprs      €r1   r   Ú0bound_sympy.<locals>.<lambda>.<locals>.<genexpr>T  s1   øé € ð Ú.<¡d aÀÀT×EVÑEVÑ@V“M�b˜˜˜2˜a˜S•Mªnùs   ƒ,�,Ú )ÚjoinÚitems)rð  rÂ  s   €€r1   re  Úbound_sympy.<locals>.<lambda>R  s@   ø€ ö
 ð	 Ø—)‘)ô Ø.4¯l©l¬nóó ñð ð
 ðr0   c                ó
  • U R                   (       a]  U R                  (       a  [        S[        5      nU$ U R                  (       a  [        S[        5      nU$ [        R                  5       n U$ [        R                  5       nU$ r  )rî   Úis_positiver$   r!   Úis_nonnegativer�   rv   )ÚsrS   s     r1   Úmissing_handlerÚ$bound_sympy.<locals>.missing_handleri  sm   € Ø�<�<Ø�}�}Ü  ¤FÓ+�ð ˆ	ð ×!×!Ü  ¤FÓ+�ð ˆ	ô	 !×,Ñ,Ó.‘ð ˆ	ô ×$Ñ$Ó&ˆBØˆ	r0   )rú  )r�  Údebugr   r5   r7   rï   r$   r{   rð   Ú_guardsÚTracingContextÚtry_getÚ	fake_modeÚ	shape_envÚvar_to_ranger    rì   )rð  rÂ  Úcontextrú  s   ``  r1   r%   r%   K  sÜ   ù€ ô ‡I�IØØÜõó		
ôô �$œŸ™×%Ñ%Ü×Ñ Ó%Ð%à�\�r€Fô �m‰m×*Ñ*×2Ñ2Ó4€GÞ�7×$×$¨×):Ñ):×)D×)DÞØK˜×)Ñ)×3Ñ3×@Ñ@ÐKÀFÐK‰Fà×&Ñ&×0Ñ0×=Ñ=ˆFòô Ü ¨¸ñð r0   )rS   úValueRanges[_T]rÒ   z$TypeGuard[ValueRanges[SympyBoolean]])rS   r  rÒ   z"TypeGuard[ValueRanges[sympy.Expr]])rÒ   zTypeIs[sympy.Integer]rO   )rð  z
sympy.ExprrÂ  z&dict[sympy.Symbol, ValueRanges] | NonerÒ   r$   )PÚ
__future__r   Údataclassesrè   rÊ   Úloggingr=   rE  Úcollections.abcr   Útypingr   r   r   r   r	   r
   Útyping_extensionsr   r7   Úsympy.logic.boolalgr   rI   r   rð   Útorch._loggingr   Útorch._prims_commonr   r�  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úinterpr    Únumbersr!   r"   r#   Ú	getLoggerr+   r�  Ú__all__rA   r&   ÚRuntimeErrorr(   rG   rM   rT   rV   rY   r:   r<   rÕ   r6   rØ   rÙ   rà   rã   rá   rä   râ   rå   Ú	dataclassr$   rì   r%   r*   r0   r1   Ú<module>r     s¤  ðå "ã Û Û Û Û Û Ý $ß V× VÝ $ã ß Dã Ý %Ý -÷÷ ÷ ÷ ñ õ" !ß =Ñ =ð ×Ò˜Ó!€à˜-Ð
(€áˆT�5—:‘:˜|Ó,€ô	�lô 	òFò6)ô ôô,ð 
ˆu‰�u—z‘zÑ	!€Ø	�Ñ	€Ø�‰€Ø	�5—:‘:�, §
¡
Ð*Ñ	+€Ø
�E—J‘J §
¡
Ð+¨U¯Z©ZÐ7Ñ
8€Ø	�<�. ,Ð.Ñ	/€Ø
�L ,Ð/°Ð=Ñ
>€Ø�‰€Ø	�7Ñ	€ð ×Ò˜dÑ#ôp9�'˜"‘+ó p9ó $ðp9÷f	[
;ñ [
;ð~ HLð-Ø
ð-ØDð-àö-r0   