
    g                     ,   d Z ddlmZmZmZ ddlmZmZ ddlm	Z	 ddl
mZmZ ddlmZmZmZmZmZmZmZmZ ddlmZ dd	lmZmZ  G d
 d      Z G d de      Z ej:                  e      d        Z ej:                  e      d        Z ej:                  e      d        Z ej:                  e      d        Z ej:                  e      d        Z ej:                  e      d        Z ej:                  e      d        Z ej:                  e      d        Z ej:                  e      d        Z ej:                  e      d        Z ej:                  e      d        Z ej:                  e      d        Z ej:                  e      d        Zd Z y)zj
This module defines base class for handlers and some core handlers:
``Q.commutative`` and ``Q.is_true``.
    )QaskAppliedPredicate)BasicSymbol)_fuzzy_group)NaNNumber)AndBooleanTrueBooleanFalse	conjuncts
EquivalentImpliesNotOr)sympy_deprecation_warning   )CommutativePredicateIsTruePredicatec                   "     e Zd ZdZ fdZ xZS )
AskHandlerz.Base class that all Ask Handlers must inherit.c                 F    t        ddd       t        |   | g|i |S )Nz
            The AskHandler system is deprecated. The AskHandler class should
            be replaced with the multipledispatch handler of Predicate
            z1.8zdeprecated-askhandler)deprecated_since_versionactive_deprecations_target)r   super__new__)clsargskwargs	__class__s      V/var/www/openai/venv/lib/python3.12/site-packages/sympy/assumptions/handlers/common.pyr   zAskHandler.__new__   s3    ! &+'>	
 ws4T4V44    )__name__
__module____qualname____doc__r   __classcell__)r!   s   @r"   r   r      s    8	5 	5r#   r   c                   D    e Zd ZdZed        Zed        Zed        ZeZy)CommonHandlerz5Defines some useful methods common to most Handlers. c                      yNT exprassumptionss     r"   
AlwaysTruezCommonHandler.AlwaysTrue#       r#   c                      yNFr-   r.   s     r"   AlwaysFalsezCommonHandler.AlwaysFalse'   s    r#   c                      y Nr-   r.   s     r"   
AlwaysNonezCommonHandler.AlwaysNone+   r2   r#   N)	r$   r%   r&   r'   staticmethodr1   r5   r8   r	   r-   r#   r"   r*   r*      sF    ?      Cr#   r*   c                     t        |      }| j                  &| j                  xr t        j                  |        |vS t        j                  |       |v ryt        j                  |        |v ryy)z>Objects are expected to be commutative unless otherwise statedTF)r   is_commutativer   commutative)r/   r0   assumpss      r"   _r>   4   sj     $G&""JAMM$,?+?7+JJ}}Tg%
--
		(r#   c                 h    | j                   D ]#  }t        t        j                  |      |      r# y y)NFT)r   r   r   r<   )r/   r0   args      r"   r>   r>   @   s+    yy1==%{3  r#   c                      yr,   r-   r.   s     r"   r>   r>   G       r#   c                      yr,   r-   r.   s     r"   r>   r>   K   rB   r#   c                     | S r7   r-   r.   s     r"   r>   r>   R   s    Kr#   c                      yr,   r-   r.   s     r"   r>   r>   V   rB   r#   c                      yr4   r-   r.   s     r"   r>   r>   Z   s    r#   c                     t        | |      S r7   r   r.   s     r"   r>   r>   ^   s    t[!!r#   c                 d    | j                   d   }|j                  ry t        ||      }|dv r| S y )Nr   r0   )TF)r   	is_Symbolr   )r/   r0   r@   values       r"   r>   r>   b   s8    
))A,C
}}-Eyr#   c                 \    d}| j                   D ]  }t        ||      }|du r y|d } |S )NFrJ   Tr   r   r/   r0   resultr@   ps        r"   r>   r>   n   s<    Fyy-99F  Mr#   c                 \    d}| j                   D ]  }t        ||      }|du r y|d } |S )NTrJ   FrN   rO   s        r"   r>   r>   y   s<    Fyy-:9F  Mr#   c                 B    | j                   \  }}t        | |z  |      S NrJ   rN   )r/   r0   rQ   qs       r"   r>   r>      s"    99DAqrAv;//r#   c                 j    | j                   \  }}t        ||      }|y t        ||      }|y ||k(  S rT   rN   )r/   r0   rQ   rU   ptqts         r"   r>   r>      s@    99DAq	QK	(B	z	QK	(B	z8Or#   c                 H    t        fd| j                  D        d      S )zS
    Test for membership in a group with respect
    to the current operation.
    c              3   B   K   | ]  }t         |              y wr7   rH   ).0ar0   keys     r"   	<genexpr>z$test_closed_group.<locals>.<genexpr>   s     59aSV[	!9s   T)
quick_exit)r   r   )r/   r0   r]   s    ``r"   test_closed_groupr`      s"    
 54995$H Hr#   N)!r'   sympy.assumptionsr   r   r   
sympy.corer   r   sympy.core.logicr   sympy.core.numbersr	   r
   sympy.logic.boolalgr   r   r   r   r   r   r   r   sympy.utilities.exceptionsr   predicates.commonr   r   r   r*   registerr>   boolr`   r-   r#   r"   <module>rj      s  
 7 6 $ ) *" " " @ E5 5J * v&	 '	 u% & v& ' s# $ $   +& ' ,' ( *+" ," #	 	 "  #  '"0 #0 *% &Hr#   