§
    OŠtjÊ$  ã                   ó  — 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
 d dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d„ Zd	„ Zd
„ Z G d„ d¦  «        Z e¦   «         Z e
d¦  «        Ze                     e¦  «        d„ ¦   «         Ze                     e¦  «        d„ ¦   «         Ze                     e¦  «        d„ ¦   «         Ze                     e¦  «        d„ ¦   «         Ze                     e¦  «        d„ ¦   «         Ze                     e¦  «        d„ ¦   «         Ze                     e¦  «        d„ ¦   «         Ze                     e¦  «        d„ ¦   «         Ze                     e¦  «        d„ ¦   «         Ze                     e¦  «        d„ ¦   «         Zej        d„ ej         d„ ej!        d„ ej"        d„ ej#        d„ ej$        d„ ej%        d„ ej&        d„ ej'        d „ ej(        d!„ i
Z)e                     ee	e¦  «        d"„ ¦   «         Zd#S )$é    )Údefaultdict)ÚQ)ÚAddÚMulÚPowÚNumberÚNumberSymbolÚSymbol)ÚImaginaryUnit)ÚAbs)Ú
EquivalentÚAndÚOrÚImplies)ÚMatMulc                 ó<   ‡ ‡— t          ˆˆ fd„|j        D ¦   «         Ž S )aú  
    Apply all arguments of the expression to the fact structure.

    Parameters
    ==========

    symbol : Symbol
        A placeholder symbol.

    fact : Boolean
        Resulting ``Boolean`` expression.

    expr : Expr

    Examples
    ========

    >>> from sympy import Q
    >>> from sympy.assumptions.sathandlers import allargs
    >>> from sympy.abc import x, y
    >>> allargs(x, Q.negative(x) | Q.positive(x), x*y)
    (Q.negative(x) | Q.positive(x)) & (Q.negative(y) | Q.positive(y))

    c                 ó<   •— g | ]}‰                      ‰|¦  «        ‘ŒS © ©Úsubs©Ú.0ÚargÚfactÚsymbols     €€ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/assumptions/sathandlers.pyú
<listcomp>zallargs.<locals>.<listcomp>(   ó'   ø€ Ð=Ð=Ð=¨C�—’˜6 3Ñ'Ô'Ð=Ð=Ð=ó    )r   Úargs©r   r   Úexprs   `` r   Úallargsr#      s+   øø€ õ2 Ð=Ð=Ð=Ð=Ð=°4´9Ð=Ñ=Ô=Ð>Ð>r   c                 ó<   ‡ ‡— t          ˆˆ fd„|j        D ¦   «         Ž S )a÷  
    Apply any argument of the expression to the fact structure.

    Parameters
    ==========

    symbol : Symbol
        A placeholder symbol.

    fact : Boolean
        Resulting ``Boolean`` expression.

    expr : Expr

    Examples
    ========

    >>> from sympy import Q
    >>> from sympy.assumptions.sathandlers import anyarg
    >>> from sympy.abc import x, y
    >>> anyarg(x, Q.negative(x) & Q.positive(x), x*y)
    (Q.negative(x) & Q.positive(x)) | (Q.negative(y) & Q.positive(y))

    c                 ó<   •— g | ]}‰                      ‰|¦  «        ‘ŒS r   r   r   s     €€r   r   zanyarg.<locals>.<listcomp>D   s'   ø€ Ð<Ð<Ð<¨3�—	’	˜& #Ñ&Ô&Ð<Ð<Ð<r   )r   r    r!   s   `` r   Úanyargr&   +   s+   øø€ õ2 Ð<Ð<Ð<Ð<Ð<°$´)Ð<Ñ<Ô<Ð=Ð=r   c                 ó’   ‡ ‡‡— ˆˆ fd„|j         D ¦   «         Št          ˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         Ž }|S )aÿ  
    Apply exactly one argument of the expression to the fact structure.

    Parameters
    ==========

    symbol : Symbol
        A placeholder symbol.

    fact : Boolean
        Resulting ``Boolean`` expression.

    expr : Expr

    Examples
    ========

    >>> from sympy import Q
    >>> from sympy.assumptions.sathandlers import exactlyonearg
    >>> from sympy.abc import x, y
    >>> exactlyonearg(x, Q.positive(x), x*y)
    (Q.positive(x) & ~Q.positive(y)) | (Q.positive(y) & ~Q.positive(x))

    c                 ó<   •— g | ]}‰                      ‰|¦  «        ‘ŒS r   r   r   s     €€r   r   z!exactlyonearg.<locals>.<listcomp>`   r   r   c           
      óv   •— g | ]5}t          ‰|         gd „ ‰d|…         ‰|dz   d…         z   D ¦   «         ¢R Ž ‘Œ6S )c                 ó   — g | ]}| ‘ŒS r   r   )r   Úlits     r   r   z,exactlyonearg.<locals>.<listcomp>.<listcomp>a   s&   € ð #ð #ð #¨C C 4ð #ð #ð #r   Né   )r   )r   ÚiÚ	pred_argss     €r   r   z!exactlyonearg.<locals>.<listcomp>a   sz   ø€ ð :ð :ð :Øõ �9˜Q”<ð ð #ð #°9¸R¸a¸R´=Ø�!�A‘#�$�$Œñ4ð #ñ #ô #ð ð ð ð :ð :ð :r   )r    r   ÚrangeÚlen)r   r   r"   Úresr.   s   ``  @r   Úexactlyoneargr2   G   sh   øøø€ ð2 >Ð=Ð=Ð=Ð=°4´9Ð=Ñ=Ô=€IÝ
ð :ð :ð :ð :Ý#(­¨Y©¬Ñ#8Ô#8ð:ñ :ô :ð ;€Cà€Jr   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚClassFactRegistrya¦  
    Register handlers against classes.

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

    ``register`` method registers the handler function for a class. Here,
    handler function should return a single fact. ``multiregister`` method
    registers the handler function for multiple classes. Here, handler function
    should return a container of multiple facts.

    ``registry(expr)`` returns a set of facts for *expr*.

    Examples
    ========

    Here, we register the facts for ``Abs``.

    >>> from sympy import Abs, Equivalent, Q
    >>> from sympy.assumptions.sathandlers import ClassFactRegistry
    >>> reg = ClassFactRegistry()
    >>> @reg.register(Abs)
    ... def f1(expr):
    ...     return Q.nonnegative(expr)
    >>> @reg.register(Abs)
    ... def f2(expr):
    ...     arg = expr.args[0]
    ...     return Equivalent(~Q.zero(arg), ~Q.zero(expr))

    Calling the registry with expression returns the defined facts for the
    expression.

    >>> from sympy.abc import x
    >>> reg(Abs(x))
    {Q.nonnegative(Abs(x)), Equivalent(~Q.zero(x), ~Q.zero(Abs(x)))}

    Multiple facts can be registered at once by ``multiregister`` method.

    >>> reg2 = ClassFactRegistry()
    >>> @reg2.multiregister(Abs)
    ... def _(expr):
    ...     arg = expr.args[0]
    ...     return [Q.even(arg) >> Q.even(expr), Q.odd(arg) >> Q.odd(expr)]
    >>> reg2(Abs(x))
    {Implies(Q.even(x), Q.even(Abs(x))), Implies(Q.odd(x), Q.odd(Abs(x)))}

    c                 ój   — t          t          ¦  «        | _        t          t          ¦  «        | _        d S ©N)r   Ú	frozensetÚsinglefactsÚ
multifacts)Úselfs    r   Ú__init__zClassFactRegistry.__init__˜   s%   € Ý&¥yÑ1Ô1ˆÔÝ%¥iÑ0Ô0ˆŒˆˆr   c                 ó   ‡ ‡— ˆˆ fd„}|S )Nc                 ó4   •— ‰j         ‰xx         | hz  cc<   | S r6   )r8   )ÚfuncÚclsr:   s    €€r   Ú_z%ClassFactRegistry.register.<locals>._�   s)   ø€ ØÔ˜SÐ!Ð!Ô! d VÑ+Ð!Ð!Ñ!ØˆKr   r   )r:   r?   r@   s   `` r   ÚregisterzClassFactRegistry.registerœ   s)   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð ˆr   c                 ó   ‡ ‡— ˆˆ fd„}|S )Nc                 ó>   •— ‰D ]}‰j         |xx         | hz  cc<   Œ| S r6   )r9   )r>   r?   Úclassesr:   s     €€r   r@   z*ClassFactRegistry.multiregister.<locals>._£   s:   ø€ Øð /ð /�Ø” Ð$Ð$Ô$¨¨Ñ.Ð$Ð$Ñ$Ð$ØˆKr   r   )r:   rD   r@   s   `` r   ÚmultiregisterzClassFactRegistry.multiregister¢   s)   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð ˆr   c                 óæ   — | j         |         }| j         D ]"}t          ||¦  «        r|| j         |         z  }Œ#| j        |         }| j        D ]"}t          ||¦  «        r|| j        |         z  }Œ#||fS r6   )r8   Ú
issubclassr9   )r:   ÚkeyÚret1ÚkÚret2s        r   Ú__getitem__zClassFactRegistry.__getitem__©   s‘   € ØÔ Ô$ˆØÔ!ð 	,ð 	,ˆAÝ˜#˜qÑ!Ô!ð ,Ø˜Ô(¨Ô+Ñ+�øàŒ˜sÔ#ˆØ”ð 	+ð 	+ˆAÝ˜#˜qÑ!Ô!ð +Ø˜œ¨Ô*Ñ*�øà�TˆzÐr   c                 óÜ   ‡— t          ¦   «         }| t          ‰¦  «                 \  }}|                     ˆfd„|D ¦   «         ¦  «         |D ] }|                      |‰¦  «        ¦  «         Œ!|S )Nc              3   ó.   •K  — | ]} |‰¦  «        V — Œd S r6   r   )r   Úhr"   s     €r   ú	<genexpr>z-ClassFactRegistry.__call__.<locals>.<genexpr>»   s+   øè è € Ð.Ð.˜q�1�1�T‘7”7Ð.Ð.Ð.Ð.Ð.Ð.r   )ÚsetÚtypeÚupdate)r:   r"   ÚretÚ	handlers1Ú	handlers2rO   s    `    r   Ú__call__zClassFactRegistry.__call__¶   sy   ø€ Ý‰eŒeˆà#¥D¨¡J¤JÔ/Ñˆ	�9à�
Š
Ð.Ð.Ð.Ð. IÐ.Ñ.Ô.Ñ.Ô.Ð.Øð 	 ð 	 ˆAØ�JŠJ�q�q˜‘w”wÑÔÐÐØˆ
r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r;   rA   rE   rL   rW   r   r   r   r4   r4   h   sj   € € € € € ð.ð .ð^1ð 1ð 1ðð ð ðð ð ðð ð ðð ð ð ð r   r4   Úxc                 ó   — | j         d         }t          j        | ¦  «        t          t          j        |¦  «         t          j        | ¦  «         ¦  «        t          j        |¦  «        t          j        | ¦  «        z	  t          j        |¦  «        t          j        | ¦  «        z	  t          j        |¦  «        t          j        | ¦  «        z	  gS )Nr   )r    r   Únonnegativer   ÚzeroÚevenÚoddÚinteger)r"   r   s     r   r@   r@   Ê   s�   € à
Œ)�AŒ,€CÝŒM˜$ÑÔÝ�œ˜s™œ�|¥a¤f¨T¡l¤l ]Ñ3Ô3ÝŒF�3‰KŒK�1œ6 $™<œ<Ñ'ÝŒE�#‰JŒJ�!œ% ™+œ+Ñ%ÝŒI�c‰NŒN�aœi¨™oœoÑ-ð	ð r   c                 ó  — t          t          t          j        t          ¦  «        | ¦  «        t          j        | ¦  «        z	  t          t          t          j        t          ¦  «        | ¦  «        t          j        | ¦  «        z	  t          t          t          j        t          ¦  «        | ¦  «        t          j        | ¦  «        z	  t          t          t          j        t          ¦  «        | ¦  «        t          j        | ¦  «        z	  t          t          t          j        t          ¦  «        | ¦  «        t          j        | ¦  «        z	  t          t          t          j        t          ¦  «         | ¦  «        t          j        | ¦  «         z	  gS r6   )	r#   r\   r   ÚpositiveÚnegativeÚrealÚrationalrb   r2   ©r"   s    r   r@   r@   ×   sï   € å•A•q”z¥!‘}”} dÑ+Ô+­q¬z¸$Ñ/?Ô/?Ñ?Ý•A•q”z¥!‘}”} dÑ+Ô+­q¬z¸$Ñ/?Ô/?Ñ?Ý•A•q”v�a‘y”y $Ñ'Ô'­1¬6°$©<¬<Ñ7Ý•A•q”z¥!‘}”} dÑ+Ô+­q¬z¸$Ñ/?Ô/?Ñ?Ý•A•q”y¥‘|”| TÑ*Ô*­a¬i¸©o¬oÑ=Ý�!�aœi­™lœl˜]¨DÑ1Ô1µa´iÀ±o´oÐ5EÑEðð r   c           	      ó  — t          t          t          j        t          ¦  «        | ¦  «        }t	          t          t          j        t          ¦  «        | ¦  «        }t          |t          |t          j        | ¦  «        ¦  «        ¦  «        S r6   ©r#   r\   r   rf   r2   Ú
irrationalr   ©r"   Úallargs_realÚonearg_irrationals      r   r@   r@   á   óZ   € å�1�aœf¥Q™iœi¨Ñ.Ô.€LÝ%¥a­¬µa©¬¸$Ñ?Ô?ÐÝ�<¥Ð):½A¼LÈÑ<NÔ<NÑ!OÔ!OÑPÔPÐPr   c                 ó®  — t          t          j        | ¦  «        t          t          t          j        t          ¦  «        | ¦  «        ¦  «        t          t          t          j        t          ¦  «        | ¦  «        t          j        | ¦  «        z	  t          t          t          j        t          ¦  «        | ¦  «        t          j        | ¦  «        z	  t          t          t          j        t          ¦  «        | ¦  «        t          j        | ¦  «        z	  t          t          t          j	        t          ¦  «        | ¦  «        t          j	        | ¦  «        z	  t          t          t          j        t          ¦  «         | ¦  «        t          j	        | ¦  «         z	  t          t          t          j        t          ¦  «        | ¦  «        t          j        | ¦  «        z	  gS r6   )r   r   r_   r&   r\   r#   rd   rf   rg   rb   r2   Úcommutativerh   s    r   r@   r@   ê   s  € å•q”v˜d‘|”|¥V­A­q¬vµa©y¬y¸$Ñ%?Ô%?Ñ@Ô@Ý•A•q”z¥!‘}”} dÑ+Ô+­q¬z¸$Ñ/?Ô/?Ñ?Ý•A•q”v�a‘y”y $Ñ'Ô'­1¬6°$©<¬<Ñ7Ý•A•q”z¥!‘}”} dÑ+Ô+­q¬z¸$Ñ/?Ô/?Ñ?Ý•A•q”y¥‘|”| TÑ*Ô*­a¬i¸©o¬oÑ=Ý�!�aœj­™mœm˜^¨TÑ2Ô2µq´yÀ±´Ð6FÑFÝ•A•q”}¥QÑ'Ô'¨Ñ.Ô.µ!´-ÀÑ2EÔ2EÑEðð r   c                 ó¢   — t          t          t          j        t          ¦  «        | ¦  «        }t	          |t          j        | ¦  «         ¦  «        S r6   )r#   r\   r   Úprimer   )r"   Úallargs_primes     r   r@   r@   õ   s7   € õ �A�qœw¥q™zœz¨4Ñ0Ô0€MÝ�=¥1¤7¨4¡=¤= .Ñ1Ô1Ð1r   c           	      óJ  — t          t          t          j        t          ¦  «        t          j        t          ¦  «        z  | ¦  «        }t          t          t          j        t          ¦  «        | ¦  «        }t          |t          |t          j        | ¦  «        ¦  «        ¦  «        S r6   )r#   r\   r   Ú	imaginaryrf   r2   r   )r"   Úallargs_imag_or_realÚonearg_imaginarys      r   r@   r@   þ   sk   € õ #¥1¥a¤kµ!¡n¤nµq´v½a±y´yÑ&@À$ÑGÔGÐÝ$¥Q­¬µA©¬¸Ñ=Ô=ÐÝÐ'­Ð1AÅ1Ä;ÈtÑCTÔCTÑ)UÔ)UÑVÔVÐVr   c           	      ó  — t          t          t          j        t          ¦  «        | ¦  «        }t	          t          t          j        t          ¦  «        | ¦  «        }t          |t          |t          j        | ¦  «        ¦  «        ¦  «        S r6   rj   rl   s      r   r@   r@     ro   r   c           	      ó  — t          t          t          j        t          ¦  «        | ¦  «        }t	          t          t          j        t          ¦  «        | ¦  «        }t          |t          |t          j        | ¦  «        ¦  «        ¦  «        S r6   )r#   r\   r   rb   r&   r`   r   r   )r"   Úallargs_integerÚanyarg_evens      r   r@   r@     sX   € õ
 �a¥¤­1¡¤¨tÑ4Ô4€OÝ��AœF¥1™IœI tÑ,Ô,€KÝ�?¥J¨{½A¼FÀ4¹L¼LÑ$IÔ$IÑJÔJÐJr   c                 ó  — t          t          t          j        t          ¦  «        | ¦  «        }t          t          t          j        t          ¦  «        | ¦  «        }t          |t          t          j        | ¦  «        |¦  «        ¦  «        S r6   )r#   r\   r   ÚsquareÚ
invertibler   r   )r"   Úallargs_squareÚallargs_invertibles      r   r@   r@     sZ   € å�Q¥¤­¡¤¨TÑ2Ô2€NÝ ¥¥A¤Lµ¡O¤O°TÑ:Ô:ÐÝ�>¥:­a¬l¸4Ñ.@Ô.@ÐBTÑ#UÔ#UÑVÔVÐVr   c           
      óž  — | j         | j        }}t          j        |¦  «        t          j        |¦  «        z  t          j        |¦  «        z  t          j        | ¦  «        z	  t          j        |¦  «        t          j        |¦  «        z  t          j        |¦  «        z  t          j        | ¦  «        z	  t          j        |¦  «        t          j        |¦  «        z  t          j        |¦  «        z  t          j        | ¦  «        z	  t          t          j	        | ¦  «        t          j	        |¦  «        t          j
        |¦  «        z  ¦  «        gS r6   )ÚbaseÚexpr   rf   r`   r^   ra   Únonpositiver   r_   rd   )r"   rƒ   r„   s      r   r@   r@      së   € à”	˜4œ8ˆ#€Då	
Œ�‰Œ�œ˜s™œÑ	#¥a¤m°CÑ&8Ô&8Ñ	8½Q¼]È4Ñ=PÔ=PÑPÝ	
Œ�tÑ	Ô	�qœu S™zœzÑ	)­A¬M¸#Ñ,>Ô,>Ñ	>Å1Ä=ÐQUÑCVÔCVÑVÝ	
Œ�tÑ	Ô	�qœu S™zœzÑ	)­A¬M¸#Ñ,>Ô,>Ñ	>Å1Ä=ÐQUÑCVÔCVÑVÝ•1”6˜$‘<”<¥¤¨¡¤µ´
¸3±´Ñ!?Ñ@Ô@ð	ð r   c                 ó   — | j         S r6   )Úis_positive©Úos    r   ú<lambda>rŠ   .  ó   € ˜!œ-€ r   c                 ó   — | j         S r6   )Úis_zerorˆ   s    r   rŠ   rŠ   /  ó   € �a”i€ r   c                 ó   — | j         S r6   )Úis_negativerˆ   s    r   rŠ   rŠ   0  r‹   r   c                 ó   — | j         S r6   )Úis_rationalrˆ   s    r   rŠ   rŠ   1  r‹   r   c                 ó   — | j         S r6   )Úis_irrationalrˆ   s    r   rŠ   rŠ   2  s   € ˜AœO€ r   c                 ó   — | j         S r6   )Úis_evenrˆ   s    r   rŠ   rŠ   3  rŽ   r   c                 ó   — | j         S r6   )Úis_oddrˆ   s    r   rŠ   rŠ   4  s   € �Q”X€ r   c                 ó   — | j         S r6   )Úis_imaginaryrˆ   s    r   rŠ   rŠ   5  ó   € ˜1œ>€ r   c                 ó   — | j         S r6   )Úis_primerˆ   s    r   rŠ   rŠ   6  s   € �q”z€ r   c                 ó   — | j         S r6   )Úis_compositerˆ   s    r   rŠ   rŠ   7  r›   r   c                 ó¾   — g }t                                ¦   «         D ]@\  }} || ¦  «        } || ¦  «        }|�#|                     t          ||¦  «        ¦  «         ŒA|S r6   )Ú_old_assump_gettersÚitemsÚappendr   )r"   rT   ÚpÚgetterÚpredÚprops         r   r@   r@   :  sh   € à
€CÝ(×.Ò.Ñ0Ô0ð /ð /‰	ˆˆ6Øˆq�‰wŒwˆØˆv�d‰|Œ|ˆØÐØ�JŠJ•z $¨Ñ-Ô-Ñ.Ô.Ð.øØ€Jr   N)*Úcollectionsr   Úsympy.assumptions.askr   Ú
sympy.corer   r   r   r   r	   r
   Úsympy.core.numbersr   Ú$sympy.functions.elementary.complexesr   Úsympy.logic.boolalgr   r   r   r   Úsympy.matrices.expressionsr   r#   r&   r2   r4   Úclass_fact_registryr\   rE   r@   rA   rd   r_   re   rg   rk   r`   ra   rv   rs   Ú	compositer¡   r   r   r   ú<module>r±      s–  ðØ #Ð #Ð #Ð #Ð #Ð #à #Ð #Ð #Ð #Ð #Ð #Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø -Ð -Ð -Ð -Ð -Ð -ð?ð ?ð ?ð8>ð >ð >ð8ð ð ðBVð Vð Vð Vð Vñ Vô Vð Vðp (Ð'Ñ)Ô)Ð ð €Fˆ3�K„K€ð ×"Ò" 3Ñ'Ô'ðð ñ (Ô'ðð ×"Ò" 3Ñ'Ô'ðð ñ (Ô'ðð ×Ò˜cÑ"Ô"ðQð Qñ #Ô"ðQð ×"Ò" 3Ñ'Ô'ðð ñ (Ô'ðð ×Ò˜cÑ"Ô"ð2ð 2ñ #Ô"ð2ð ×Ò˜cÑ"Ô"ðWð Wñ #Ô"ðWð ×Ò˜cÑ"Ô"ðQð Qñ #Ô"ðQð
 ×Ò˜cÑ"Ô"ðKð Kñ #Ô"ðKð ×Ò˜fÑ%Ô%ðWð Wñ &Ô%ðWð ×"Ò" 3Ñ'Ô'ðð ñ (Ô'ðð „JÐ'Ð'Ø„FÐÐØ„JÐ'Ð'Ø„JÐ'Ð'Ø„LÐ+Ð+Ø„FÐÐØ„EÐÐØ„KÐ)Ð)Ø„GÐ!Ð!Ø„KÐ)Ð)ðÐ ð ×"Ò" 6¨<¸ÑGÔGðð ñ HÔGðð ð r   