Ë
    7^(hª.  ã            	      óÈ   — U d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZ dd„Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZeeeeeeeedœZded<   y)é    )Úannotations)ÚCallable)ÚSÚAddÚExprÚBasicÚMulÚPowÚRational)Ú	fuzzy_not)ÚBoolean)ÚaskÚQc                ó®  — t        | t        «      s| S | j                  s2| j                  D �cg c]  }t	        ||«      ‘Œ }} | j
                  |Ž } t        | d«      r| j                  |«      }|�|S | j                  j                  }t        j                  |d«      }|€| S  || |«      }|�| |k(  r| S t        |t        «      s|S t	        ||«      S c c}w )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           úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/assumptions/refine.pyr   r      sØ   € ôJ �dœEÔ"Øˆà�<Š<Ø48·I±IÖ>¨S”�s˜KÕ(Ð>ˆÐ>àˆt�y‰y˜$ÐˆÜˆt�^Ô$Ø×$Ñ$ [Ó1ˆØÐØˆOØ�>‰>×"Ñ"€DÜ×Ñ  dÓ+€GØ€ØˆÙ�t˜[Ó)€HØÐ˜d hÒ.ØˆÜ�h¤Ô%ØˆÜ�(˜KÓ(Ð(ùò! ?s   ­Cc                óB  — ddl m} | j                  d   }t        t	        j
                  |«      |«      r*t        t        t	        j                  |«      |«      «      r|S t        t	        j                  |«      |«      r| S t        |t        «      rŠ|j                  D �cg c]  }t        t        |«      |«      ‘Œ }}g }g }|D ]>  }t        ||«      r|j                  |j                  d   «       Œ.|j                  |«       Œ@ t        |Ž  |t        |Ž «      z  S yc c}w )aF  
    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

    r   ©Ú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àˆ
Ü
Œ1�:‰:�c‹?˜KÔ(Øˆtˆä�#”sÔØ25·(±(Ö;¨QŒV”C˜“F˜KÕ(Ð;ˆÐ;ØˆØˆØò 	"ˆAÜ˜!˜SÔ!Ø—‘˜aŸf™f Q™iÕ(à—‘˜qÕ!ð		"ô
 �Gˆ}™s¤3¨ <Ó0Ñ0Ð0ð ùÚ;s   ÂDc                ó~	  — ddl m} ddlm} t	        | j
                  |«      r…t        t        j                  | j
                  j                  d   «      |«      rOt        t        j                  | j                  «      |«      r&| j
                  j                  d   | j                  z  S t        t        j                  | j
                  «      |«      �rì| j
                  j                  r©t        t        j                  | j                  «      |«      r"t        | j
                  «      | j                  z  S t        t        j                  | j                  «      |«      r5 || j
                  «      t        | j
                  «      | j                  z  z  S t	        | j                  t        «      r]t	        | j
                  t         «      rCt        | j
                  j
                  «      | j
                  j                  | j                  z  z  S | j
                  t"        j$                  u �r˜| j                  j&                  �r€| }| j                  j)                  «       \  }}t+        |«      }t+        «       }t+        «       }t-        |«      }	|D ]d  }
t        t        j                  |
«      |«      r|j/                  |
«       Œ4t        t        j                  |
«      |«      sŒT|j/                  |
«       Œf ||z  }t-        |«      dz  r||z  }|t"        j0                  z   dz  }n
||z  }|dz  }||k7  st-        |«      |	k  r&|j/                  |«       | j
                  t3        |Ž z  } d| j                  z  }t        t        j                  |«      |«      r|j5                  «       r|| j
                  z  }|j&                  rû|j7                  «       \  }}|j8                  rÜ|j
                  t"        j$                  u rÀt        t        j:                  |j                  «      |«      r—|dz   dz  }t        t        j                  |«      |«      r| j
                  |j                  z  S t        t        j                  |«      |«      r| j
                  |j                  dz   z  S | j
                  |j                  |z   z  S || k7  r| S yyyy)as  
    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   r%   )Úsigné   é   N)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_PowrQ   m   sj  € õ8 9Ý$Ü�$—)‘)˜SÔ!ÜŒq�v‰v�d—i‘i—n‘n QÑ'Ó(¨+Ô6Ü”A—F‘F˜4Ÿ8™8Ó$ kÔ2Ø—9‘9—>‘> !Ñ$¨¯©Ñ0Ð0Ü
Œ1�6‰6�$—)‘)Ó˜kÕ*Ø�9‰9×ÒÜ”1—6‘6˜$Ÿ(™(Ó# [Ô1Ü˜4Ÿ9™9“~¨¯©Ñ1Ð1Ü”1—5‘5˜Ÿ™“? KÔ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‘��uÜ˜E›
�Ü ›U�
Ü›E�	Ü*-¨e«*Ð'àò )�AÜœ1Ÿ6™6 !›9 kÔ2Ø"Ÿ™ qÕ)ÜœQŸU™U 1›X {Õ3Ø!Ÿ™ aÕ(ð	)ð ˜Ñ#�Ü�y“> AÒ%Ø˜YÑ&�EØ!&¬¯©¡°!Ñ 3‘Ià˜YÑ&�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Ø˜dŸi™i™˜Ø—9’9ØŸ?™?Ó,‘D�A�qØ—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                ó*  — ddl m} | j                  \  }}t        t	        j
                  |«      t	        j                  |«      z  |«      r |||z  «      S t        t	        j                  |«      t	        j                  |«      z  |«      r |||z  «      t        j                  z
  S t        t	        j                  |«      t	        j                  |«      z  |«      r |||z  «      t        j                  z   S t        t	        j                  |«      t	        j                  |«      z  |«      rt        j                  S t        t	        j                  |«      t	        j                  |«      z  |«      rt        j                  dz  S t        t	        j                  |«      t	        j                  |«      z  |«      rt        j                   dz  S t        t	        j                  |«      t	        j                  |«      z  |«      rt        j                  S | S )aÃ  
    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
    r   )Úatanr4   )Ú(sympy.functions.elementary.trigonometricrT   r   r   r   r(   Úpositiver)   r   ÚPiÚzeroÚNaN)r   r   rT   ÚyÚxs        r#   Úrefine_atan2r\   Ñ   s\  € õ2 >Ø�9‰9�D€A€qÜ
Œ1�6‰6�!‹9”q—z‘z !“}Ñ$ kÔ2Ù�A˜‘E‹{ÐÜ	ŒQ�Z‰Z˜‹]œQŸZ™Z¨›]Ñ*¨KÔ	8Ù�A˜‘E‹{œQŸT™TÑ!Ð!Ü	ŒQ�Z‰Z˜‹]œQŸZ™Z¨›]Ñ*¨KÔ	8Ù�A˜‘E‹{œQŸT™TÑ!Ð!Ü	ŒQ�V‰V�A‹YœŸ™ A›Ñ&¨Ô	4Ü�t‰tˆÜ	ŒQ�Z‰Z˜‹]œQŸV™V A›YÑ&¨Ô	4Ü�t‰t�A‰vˆÜ	ŒQ�Z‰Z˜‹]œQŸV™V A›YÑ&¨Ô	4Ü—‘ˆu�Q‰wˆÜ	ŒQ�V‰V�A‹YœŸ™ ›Ñ" KÔ	0Ü�u‰uˆàˆrR   c                óØ   — | j                   d   }t        t        j                  |«      |«      r|S t        t        j                  |«      |«      rt
        j                  S t        | |«      S )a  
    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   r(   Ú	imaginaryr   ÚZeroÚ_refine_reim©r   r   r   s      r#   Ú	refine_rerb   þ   sQ   € ð �)‰)�A‰,€CÜ
Œ1�6‰6�#‹;˜Ô$Øˆ
Ü
Œ1�;‰;�sÓ˜[Ô)Ü�v‰vˆÜ˜˜kÓ*Ð*rR   c                óü   — | j                   d   }t        t        j                  |«      |«      rt        j
                  S t        t        j                  |«      |«      rt        j                   |z  S t        | |«      S )a  
    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_   r^   ÚImaginaryUnitr`   ra   s      r#   Ú	refine_imre     s^   € ð �)‰)�A‰,€CÜ
Œ1�6‰6�#‹;˜Ô$Ü�v‰vˆÜ
Œ1�;‰;�sÓ˜[Ô)Ü—‘Ð  3Ñ&Ð&Ü˜˜kÓ*Ð*rR   c                óÞ   — | j                   d   }t        t        j                  |«      |«      rt        j
                  S t        t        j                  |«      |«      rt        j                  S y)a"  
    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
    r   N)r   r   r   rV   r   r_   r)   rW   )r   r   Úrgs      r#   Ú
refine_argrh   +  sJ   € ð 
�‰�1‰€BÜ
Œ1�:‰:�b‹>˜;Ô'Ü�v‰vˆÜ
Œ1�:‰:�b‹>˜;Ô'Ü�t‰tˆØrR   c                óX   — | j                  d¬«      }|| k7  rt        ||«      }||k7  r|S y )NT)Úcomplex)Úexpandr   )r   r   ÚexpandedÚrefineds       r#   r`   r`   B  s6   € à�{‰{ Tˆ{Ó*€HØ�4ÒÜ˜ ;Ó/ˆØ�hÒØˆNàrR   c                óš  — | j                   d   }t        t        j                  |«      |«      rt        j
                  S t        t        j                  |«      «      r^t        t        j                  |«      |«      rt        j                  S t        t        j                  |«      |«      rt        j                  S t        t        j                  |«      «      rr|j                  «       \  }}t        t        j                  |«      |«      rt        j                  S t        t        j                  |«      |«      rt        j                   S | S )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   r   rX   r   r_   r(   rV   rB   r)   r<   r^   Úas_real_imagrd   )r   r   r   Úarg_reÚarg_ims        r#   Úrefine_signrr   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Ð#Ð#Ø€KrR   c                ó¬   — ddl m} | j                  \  }}}t        t	        j
                  |«      |«      r||z
  j                  «       r| S  ||||«      S y)aU  
    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]
    r   )ÚMatrixElementN)Ú"sympy.matrices.expressions.matexprrt   r   r   r   Ú	symmetricrC   )r   r   rt   Úmatrixr0   Újs         r#   Úrefine_matrixelementry   v  sS   € õ AØ—9‘9�L€FˆAˆqÜ
Œ1�;‰;�vÓ Ô,Ø�‰E×+Ñ+Ô-ØˆKÙ˜V Q¨Ó*Ð*ð -rR   )r&   r
   Úatan2ÚreÚimr   r3   rt   z*dict[str, Callable[[Expr, Boolean], Expr]]r   N)T)Ú
__future__r   Útypingr   Ú
sympy.corer   r   r   r   r	   r
   r   Úsympy.core.logicr   Úsympy.logic.boolalgr   Úsympy.assumptionsr   r   r   r1   rQ   r\   rb   re   rh   r`   rr   ry   r   Ú__annotations__© rR   r#   ú<module>r…      s~   ðÞ "Ý ç >× >Ñ >Ý &Ý 'ç $ó9)òx#1òLa òH*òZ+ò.+ò,ò.ò&òR+ð. ØØØ
Ø
ØØØ)ñ	=€Ð9ô 	rR   