+
    ‹°³jª.  ã                  óà   a € 0 t $ ^ RIHt ^ RIHt ^ RIHtHtHtH	t	H
t
HtHt ^ RIHt ^ RIHt ^ RIHtHt RR ltR tR	 tR
 tR tR tR tR tR tR tR]R]R]R]R]R]R]R]/tR]R&   R# )é    )Úannotations)ÚCallable)ÚSÚAddÚExprÚBasicÚMulÚPowÚRational)Ú	fuzzy_not)ÚBoolean)ÚaskÚQc                óì  € \        V \        4      '       g   V # V P                  '       g5   V P                   Uu. uF  p\	        W!4      NK  	  ppV P
                  ! V!  p \        V R4      '       d   V P                  V4      pVe   V# V P                  P                  p\        P                  VR4      pVf   V # V! W4      pVe   W8X  d   V # \        V\        4      '       g   V# \	        Wq4      # u upi )a³  
Simplify an expression using assumptions.

Explanation
===========

Unlike :func:`~.simplify` which performs structural simplification
without any assumption, this function transforms the expression into
the form which is only valid under certain assumptions. Note that
``simplify()`` is generally not done in refining process.

Refining boolean expression involves reducing it to ``S.true`` or
``S.false``. Unlike :func:`~.ask`, the expression will not be reduced
if the truth value cannot be determined.

Examples
========

>>> from sympy import refine, sqrt, Q
>>> from sympy.abc import x
>>> refine(sqrt(x**2), Q.real(x))
Abs(x)
>>> refine(sqrt(x**2), Q.positive(x))
x

>>> refine(Q.real(x), Q.positive(x))
True
>>> refine(Q.positive(x), Q.real(x))
Q.positive(x)

See Also
========

sympy.simplify.simplify.simplify : Structural simplification without assumptions.
sympy.assumptions.ask.ask : Query for boolean expressions using assumptions.
Ú_eval_refineN)Ú
isinstancer   Úis_AtomÚargsÚrefineÚfuncÚhasattrr   Ú	__class__Ú__name__Úhandlers_dictÚgetr   )ÚexprÚassumptionsÚargr   Úref_exprÚnameÚhandlerÚnew_exprs   &&      ÚY/home/luca/screen-checking/.venv/lib/python3.14/site-packages/sympy/assumptions/refine.pyr   r      sÚ   € ôJ �dœE×"Ò"Øˆà�<�<ˆ<Ø48·I²IÓ>±I¨S”�sÖ(±IˆÐ>à�yŠy˜$ÑˆÜˆt�^×$Ò$Ø×$Ñ$ [Ó1ˆØÒØˆOØ�>‰>×"Ñ"€DÜ×Ñ  dÓ+€GØ‚ØˆÙ�tÓ)€HØÒ˜dÔ.ØˆÜ�h¤×%Ò%ØˆÜ�(Ó(Ð(ùò! ?s   ¹C1c                óª  € ^ RI Hp V P                  ^ ,          p\        \        P
                  ! V4      V4      '       d2   \        \        \        P                  ! V4      V4      4      '       d   V# \        \        P                  ! V4      V4      '       d   V) # \        V\        4      '       dŸ   VP                   Uu. uF  p\        \        V4      V4      NK  	  pp. p. pV FI  p\        W‚4      '       d%   VP                  VP                  ^ ,          4       K8  VP                  V4       KK  	  \        V!  V! \        V!  4      ,          # R# u upi )a  
Handler for the absolute value.

Examples
========

>>> from sympy import Q, Abs
>>> from sympy.assumptions.refine import refine_abs
>>> from sympy.abc import x
>>> refine_abs(Abs(x), Q.real(x))
>>> refine_abs(Abs(x), Q.positive(x))
x
>>> refine_abs(Abs(x), Q.negative(x))
-x

©ÚAbsN)Ú$sympy.functions.elementary.complexesr&   r   r   r   Úrealr   Únegativer   r	   r   ÚabsÚappend)	r   r   r&   r   ÚaÚrÚnon_absÚin_absÚis	   &&       r#   Ú
refine_absr1   G   sõ   € õ" 9Ø
�)‰)�A�,€CÜ
Œ1�6Š6�#‹;˜×$Ò$Ü”cœ!Ÿ*š* S›/¨;Ó7×8Ò8àˆ
Ü
Œ1�:Š:�c‹?˜K×(Ò(Øˆtˆä�#”s×ÒØ25·(²(Ó;±(¨QŒV”C˜“F˜KÖ(±(ˆÐ;ØˆØˆÛˆAÜ˜!×!Ò!Ø—‘˜aŸf™f Q�iÖ(à—‘˜qÖ!ñ	 ô
 �G‰}™s¤3¨¡<Ó0Õ0Ð0ñ ùÚ;s   Â>Ec                óf  € ^ RI Hp ^ RIHp \	        V P
                  V4      '       d    \        \        P                  ! V P
                  P                  ^ ,          4      V4      '       d_   \        \        P                  ! V P                  4      V4      '       d/   V P
                  P                  ^ ,          V P                  ,          # \        \        P                  ! V P
                  4      V4      '       Ed¹   V P
                  P                  '       dÄ   \        \        P                  ! V P                  4      V4      '       d'   \        V P
                  4      V P                  ,          # \        \        P                  ! V P                  4      V4      '       d>   V! V P
                  4      \        V P
                  4      V P                  ,          ,          # \	        V P                  \        4      '       dl   \	        V P
                  \         4      '       dL   \        V P
                  P
                  4      V P
                  P                  V P                  ,          ,          # V P
                  \"        P$                  J Ed.   V P                  P&                  '       Ed   T pV P                  P)                  4       w  rV\+        V4      p\+        4       p\+        4       p\-        V4      p	V Fu  p
\        \        P                  ! V
4      V4      '       d   VP/                  V
4       K<  \        \        P                  ! V
4      V4      '       g   Kd  VP/                  V
4       Kw  	  Wg,          p\-        V4      ^,          '       d(   Wh,          pV\"        P0                  ,           ^,          pMWh,          pV^,          pWµ8w  g   \-        V4      V	8  d,   VP/                  V4       V P
                  \3        V!  ,          p ^V P                  ,          p\        \        P                  ! V4      V4      '       d)   VP5                  4       '       d   WÀP
                  ,          pVP&                  '       Ed5   VP7                  4       w  rÞVP8                  '       Ed   VP
                  \"        P$                  J dò   \        \        P:                  ! VP                  4      V4      '       dÂ   V^,           ^,          p\        \        P                  ! V4      V4      '       d   V P
                  VP                  ,          # \        \        P                  ! V4      V4      '       d%   V P
                  VP                  ^,           ,          # V P
                  VP                  V,           ,          # W@8w  d   V # R# R# R# R# )a  
Handler for instances of Pow.

Examples
========

>>> from sympy import Q
>>> from sympy.assumptions.refine import refine_Pow
>>> from sympy.abc import x,y,z
>>> refine_Pow((-1)**x, Q.real(x))
>>> refine_Pow((-1)**x, Q.even(x))
1
>>> refine_Pow((-1)**x, Q.odd(x))
-1

For powers of -1, even parts of the exponent can be simplified:

>>> refine_Pow((-1)**(x+y), Q.even(x))
(-1)**y
>>> refine_Pow((-1)**(x+y+z), Q.odd(x) & Q.odd(z))
(-1)**y
>>> refine_Pow((-1)**(x+y+2), Q.odd(x))
(-1)**(y + 1)
>>> refine_Pow((-1)**(x+3), True)
(-1)**(x + 1)

r%   )ÚsignN)r'   r&   Úsympy.functionsr3   r   Úbaser   r   r(   r   ÚevenÚexpÚ	is_numberr*   Úoddr   r
   r   ÚNegativeOneÚis_AddÚas_coeff_addÚsetÚlenÚaddÚOner   Úcould_extract_minus_signÚas_two_termsÚis_PowÚinteger)r   r   r&   r3   ÚoldÚcoeffÚtermsÚ
even_termsÚ	odd_termsÚinitial_number_of_termsÚtÚ	new_coeffÚe2r0   Úps   &&             r#   Ú
refine_PowrO   m   sŽ  € õ8 9Ý$Ü�$—)‘)˜S×!Ò!ÜŒq�vŠv�d—i‘i—n‘n QÕ'Ó(¨+×6Ò6Ü”A—F’F˜4Ÿ8™8Ó$ k×2Ò2Ø—9‘9—>‘> !Õ$¨¯©Õ0Ð0Ü
Œ1�6Š6�$—)‘)Ó˜k×*Ó*Ø�9‰9××ÐÜ”1—6’6˜$Ÿ(™(Ó# [×1Ò1Ü˜4Ÿ9™9“~¨¯©Õ1Ð1Ü”1—5’5˜Ÿ™“? K×0Ò0Ù˜DŸI™I“¬¨T¯Y©Y«¸4¿8¹8Õ)CÕCÐCÜ�d—h‘h¤×)Ò)Ü˜$Ÿ)™)¤S×)Ò)Ü˜4Ÿ9™9Ÿ>™>Ó*¨t¯y©y¯}©}¸t¿x¹xÕ/GÕHÐHà�9‰9œŸ™Ô%Ø�x‰x��‰à�ð  $Ÿx™x×4Ñ4Ó6‘�Ü˜E›
�Ü ›U�
Ü›E�	Ü*-¨e«*Ð'ã�AÜœ1Ÿ6š6 !›9 k×2Ò2Ø"Ÿ™ qÖ)ÜœQŸUšU 1›X {×3Ô3Ø!Ÿ™ aÖ(ñ	 ð Õ#�Ü�y“> A×%Ô%ØÕ&�EØ!&¬¯©¥°!Õ 3‘IàÕ&�EØ %¨¥	�IàÔ%¬¨U«Ð6MÔ)MØ—I‘I˜iÔ(ØŸ9™9¤s¨E¡{Õ3�Dð �t—x‘x•Z�Ü”q—v’v˜b“z ;×/Ò/Ø×2Ñ2×4Ò4ØŸi™i�˜Ø—9—9‘9ØŸ?™?Ó,‘D�AØ—x—x‘x A§F¡F¬a¯m©mÓ$;ÜœqŸyšy¨¯©Ó/°×=Ò=Ø!" Q¥¨¥	˜AÜ"¤1§6¢6¨!£9¨k×:Ò:Ø'+§y¡y°!·%±%Õ'7Ð 7Ü!$¤Q§U¢U¨1£X¨{×!;Ò!;Ø'+§y¡y°1·5±5¸1µ9Õ'=Ð =à'+§y¡y°1·5±5¸1µ9Õ'=Ð =à”;Ø�Kñ ñg ñ &ñ +ó    c                ó  € ^ RI Hp V P                  w  r4\        \        P
                  ! V4      \        P                  ! V4      ,          V4      '       d   V! W4,          4      # \        \        P                  ! V4      \        P                  ! V4      ,          V4      '       d$   V! W4,          4      \        P                  ,
          # \        \        P                  ! V4      \        P                  ! V4      ,          V4      '       d$   V! W4,          4      \        P                  ,           # \        \        P                  ! V4      \        P                  ! V4      ,          V4      '       d   \        P                  # \        \        P                  ! V4      \        P                  ! V4      ,          V4      '       d   \        P                  ^,          # \        \        P                  ! V4      \        P                  ! V4      ,          V4      '       d   \        P                  ) ^,          # \        \        P                  ! V4      \        P                  ! V4      ,          V4      '       d   \        P                  # V # )ao  
Handler for the atan2 function.

Examples
========

>>> from sympy import Q, atan2
>>> from sympy.assumptions.refine import refine_atan2
>>> from sympy.abc import x, y
>>> refine_atan2(atan2(y,x), Q.real(y) & Q.positive(x))
atan(y/x)
>>> refine_atan2(atan2(y,x), Q.negative(y) & Q.negative(x))
atan(y/x) - pi
>>> refine_atan2(atan2(y,x), Q.positive(y) & Q.negative(x))
atan(y/x) + pi
>>> refine_atan2(atan2(y,x), Q.zero(y) & Q.negative(x))
pi
>>> refine_atan2(atan2(y,x), Q.positive(y) & Q.zero(x))
pi/2
>>> refine_atan2(atan2(y,x), Q.negative(y) & Q.zero(x))
-pi/2
>>> refine_atan2(atan2(y,x), Q.zero(y) & Q.zero(x))
nan
)Úatan)Ú(sympy.functions.elementary.trigonometricrR   r   r   r   r(   Úpositiver)   r   ÚPiÚzeroÚNaN)r   r   rR   ÚyÚxs   &&   r#   Úrefine_atan2rZ   Ñ   si  € õ2 >Ø�9‰9�D€AÜ
Œ1�6Š6�!‹9”q—z’z !“}Õ$ k×2Ò2Ù�A•E‹{ÐÜ	ŒQ�ZŠZ˜‹]œQŸZšZ¨›]Õ*¨K×	8Ò	8Ù�A•E‹{œQŸT™TÕ!Ð!Ü	ŒQ�ZŠZ˜‹]œQŸZšZ¨›]Õ*¨K×	8Ò	8Ù�A•E‹{œQŸT™TÕ!Ð!Ü	ŒQ�VŠV�A‹YœŸš A›Õ&¨×	4Ò	4Ü�t‰tˆÜ	ŒQ�ZŠZ˜‹]œQŸVšV A›YÕ&¨×	4Ò	4Ü�t‰t�A�vˆÜ	ŒQ�ZŠZ˜‹]œQŸVšV A›YÕ&¨×	4Ò	4Ü—‘ˆu�Q�wˆÜ	ŒQ�VŠV�A‹YœŸš ›Õ" K×	0Ò	0Ü�u‰uˆàˆrP   c                óú   € V P                   ^ ,          p\        \        P                  ! V4      V4      '       d   V# \        \        P                  ! V4      V4      '       d   \
        P                  # \        W4      # )zà
Handler for real part.

Examples
========

>>> from sympy.assumptions.refine import refine_re
>>> from sympy import Q, re
>>> from sympy.abc import x
>>> refine_re(re(x), Q.real(x))
x
>>> refine_re(re(x), Q.imaginary(x))
0
)r   r   r   r(   Ú	imaginaryr   ÚZeroÚ_refine_reim©r   r   r   s   && r#   Ú	refine_rer`   þ   sU   € ð �)‰)�A�,€CÜ
Œ1�6Š6�#‹;˜×$Ò$Øˆ
Ü
Œ1�;Š;�sÓ˜[×)Ò)Ü�v‰vˆÜ˜Ó*Ð*rP   c                ó&  € V P                   ^ ,          p\        \        P                  ! V4      V4      '       d   \        P
                  # \        \        P                  ! V4      V4      '       d   \        P                  ) V,          # \        W4      # )zî
Handler for imaginary part.

Explanation
===========

>>> from sympy.assumptions.refine import refine_im
>>> from sympy import Q, im
>>> from sympy.abc import x
>>> refine_im(im(x), Q.real(x))
0
>>> refine_im(im(x), Q.imaginary(x))
-I*x
)	r   r   r   r(   r   r]   r\   ÚImaginaryUnitr^   r_   s   && r#   Ú	refine_imrc     sb   € ð �)‰)�A�,€CÜ
Œ1�6Š6�#‹;˜×$Ò$Ü�v‰vˆÜ
Œ1�;Š;�sÓ˜[×)Ò)Ü—‘Ð  3Õ&Ð&Ü˜Ó*Ð*rP   c                ó  € V P                   ^ ,          p\        \        P                  ! V4      V4      '       d   \        P
                  # \        \        P                  ! V4      V4      '       d   \        P                  # R# )zö
Handler for complex argument

Explanation
===========

>>> from sympy.assumptions.refine import refine_arg
>>> from sympy import Q, arg
>>> from sympy.abc import x
>>> refine_arg(arg(x), Q.positive(x))
0
>>> refine_arg(arg(x), Q.negative(x))
pi
N)r   r   r   rT   r   r]   r)   rU   )r   r   Úrgs   && r#   Ú
refine_argrf   +  sP   € ð 
�‰�1�€BÜ
Œ1�:Š:�b‹>˜;×'Ò'Ü�v‰vˆÜ
Œ1�:Š:�b‹>˜;×'Ò'Ü�t‰tˆÙrP   c                ó\   € V P                  R R7      pW 8w  d   \        W!4      pW28w  d   V# R# )T)ÚcomplexN)Úexpandr   )r   r   ÚexpandedÚrefineds   &&  r#   r^   r^   B  s0   € à�{‰{ Tˆ{Ó*€HØÔÜ˜Ó/ˆØÔØˆNárP   c                ó  € V P                   ^ ,          p\        \        P                  ! V4      V4      '       d   \        P
                  # \        \        P                  ! V4      4      '       dm   \        \        P                  ! V4      V4      '       d   \        P                  # \        \        P                  ! V4      V4      '       d   \        P                  # \        \        P                  ! V4      4      '       d€   VP                  4       w  r4\        \        P                  ! V4      V4      '       d   \        P                  # \        \        P                  ! V4      V4      '       d   \        P                  ) # V # )aÚ  
Handler for sign.

Examples
========

>>> from sympy.assumptions.refine import refine_sign
>>> from sympy import Symbol, Q, sign, im
>>> x = Symbol('x', real = True)
>>> expr = sign(x)
>>> refine_sign(expr, Q.positive(x) & Q.nonzero(x))
1
>>> refine_sign(expr, Q.negative(x) & Q.nonzero(x))
-1
>>> refine_sign(expr, Q.zero(x))
0
>>> y = Symbol('y', imaginary = True)
>>> expr = sign(y)
>>> refine_sign(expr, Q.positive(im(y)))
I
>>> refine_sign(expr, Q.negative(im(y)))
-I
)r   r   r   rV   r   r]   r(   rT   r@   r)   r:   r\   Úas_real_imagrb   )r   r   r   Úarg_reÚarg_ims   &&   r#   Úrefine_signrp   M  së   € ð0 �)‰)�A�,€CÜ
Œ1�6Š6�#‹;˜×$Ò$Ü�v‰vˆÜ
Œ1�6Š6�#‹;×ÒÜŒq�zŠz˜#‹ ×,Ò,Ü—5‘5ˆLÜŒq�zŠz˜#‹ ×,Ò,Ü—=‘=Ð Ü
Œ1�;Š;�sÓ×ÒØ×)Ñ)Ó+‰ˆÜŒq�zŠz˜&Ó! ;×/Ò/Ü—?‘?Ð"ÜŒq�zŠz˜&Ó! ;×/Ò/Ü—O‘OÐ#Ð#Ø€KrP   c                óÊ   € ^ RI Hp V P                  w  r4p\        \        P
                  ! V4      V4      '       d(   WE,
          P                  4       '       d   V # V! W5V4      # R# )a)  
Handler for symmetric part.

Examples
========

>>> from sympy.assumptions.refine import refine_matrixelement
>>> from sympy import MatrixSymbol, Q
>>> X = MatrixSymbol('X', 3, 3)
>>> refine_matrixelement(X[0, 1], Q.symmetric(X))
X[0, 1]
>>> refine_matrixelement(X[1, 0], Q.symmetric(X))
X[0, 1]
)ÚMatrixElementN)Ú"sympy.matrices.expressions.matexprrr   r   r   r   Ú	symmetricrA   )r   r   rr   Úmatrixr0   Újs   &&    r#   Úrefine_matrixelementrw   v  sS   € õ AØ—9‘9�L€FˆqÜ
Œ1�;Š;�vÓ ×,Ò,Ø�E×+Ñ+×-Ò-ØˆKÙ˜V¨Ó*Ð*ñ -rP   r&   r
   Úatan2ÚreÚimr   r3   rr   z*dict[str, Callable[[Expr, Boolean], Expr]]r   N)T) Ú__conditional_annotations__Ú
__future__r   Útypingr   Ú
sympy.corer   r   r   r   r	   r
   r   Úsympy.core.logicr   Úsympy.logic.boolalgr   Úsympy.assumptionsr   r   r   r1   rO   rZ   r`   rc   rf   r^   rp   rw   r   Ú__annotations__)r{   s   @r#   Ú<module>rƒ      s“   øðß "Ð "Ý ç >× >Ñ >Ý &Ý 'ç $ô9)òx#1òLa òH*òZ+ò.+ò,ò.ò&òR+ð. 
ˆ:Ø	ˆ:Øˆ\Øˆ)Øˆ)Ø	ˆ:Ø
ˆKØÐ)ð	=€Ð9õ 	rP   