a
    <b                     @   s  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 dZG dd deZeedd Zeedd Zeedd Zeedd Zeedd Zeedd Zeedd Zeedd Zeedd Zeedd Zeedd Zeedd Zeedd Zdd Z dS )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                       s    e Zd ZdZ fddZ  ZS )
AskHandlerz.Base class that all Ask Handlers must inherit.c                    s(   t dddd t j| g|R 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)Zdeprecated_since_versionZactive_deprecations_target)r   super__new__)clsargskwargs	__class__ q/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/assumptions/handlers/common.pyr      s    zAskHandler.__new__)__name__
__module____qualname____doc__r   __classcell__r   r   r   r   r      s   r   c                   @   s8   e Zd ZdZedd Zedd Zedd ZeZdS )	CommonHandlerz5Defines some useful methods common to most Handlers. c                 C   s   dS NTr   exprassumptionsr   r   r   
AlwaysTrue#   s    zCommonHandler.AlwaysTruec                 C   s   dS NFr   r'   r   r   r   AlwaysFalse'   s    zCommonHandler.AlwaysFalsec                 C   s   d S Nr   r'   r   r   r   
AlwaysNone+   s    zCommonHandler.AlwaysNoneN)	r    r!   r"   r#   staticmethodr*   r,   r.   r   r   r   r   r   r%      s   


r%   c                 C   sR   t |}| jdur(| jo&t|  |vS t| |v r:dS t|  |v rNdS dS )z>Objects are expected to be commutative unless otherwise statedNTF)r   Zis_commutativer   commutative)r(   r)   Zassumpsr   r   r   _4   s    
r1   c                 C   s&   | j D ]}tt||s dS qdS )NFT)r   r   r   r0   )r(   r)   argr   r   r   r1   @   s    
c                 C   s   dS r&   r   r'   r   r   r   r1   G   s    c                 C   s   dS r&   r   r'   r   r   r   r1   K   s    c                 C   s   | S r-   r   r'   r   r   r   r1   R   s    c                 C   s   dS r&   r   r'   r   r   r   r1   V   s    c                 C   s   dS r+   r   r'   r   r   r   r1   Z   s    c                 C   s
   t | |S r-   r   r'   r   r   r   r1   ^   s    c                 C   s6   | j d }|jrd S t||d}|dv r.| S d S d S )Nr   r)   )TF)r   Z	is_Symbolr   )r(   r)   r2   valuer   r   r   r1   b   s    
c                 C   s:   d}| j D ]*}t||d}|du r( dS |d u r
d }q
|S )NFr4   Tr   r   r(   r)   resultr2   pr   r   r   r1   n   s    
c                 C   s:   d}| j D ]*}t||d}|du r( dS |d u r
d }q
|S )NTr4   Fr6   r7   r   r   r   r1   y   s    
c                 C   s   | j \}}t| |B |dS Nr4   r6   )r(   r)   r9   qr   r   r   r1      s    
c                 C   sB   | j \}}t||d}|d u r"d S t||d}|d u r:d S ||kS r:   r6   )r(   r)   r9   r;   ptZqtr   r   r   r1      s    
c                    s   t  fdd| jD ddS )zS
    Test for membership in a group with respect
    to the current operation.
    c                 3   s   | ]}t | V  qd S r-   r3   ).0ar)   keyr   r   	<genexpr>       z$test_closed_group.<locals>.<genexpr>T)Z
quick_exit)r   r   )r(   r)   r@   r   r?   r   test_closed_group   s    rC   N)!r#   Zsympy.assumptionsr   r   r   Z
sympy.corer   r   Zsympy.core.logicr   Zsympy.core.numbersr   r	   Zsympy.logic.boolalgr
   r   r   r   r   r   r   r   Zsympy.utilities.exceptionsr   Zpredicates.commonr   r   r   r%   registerr1   boolrC   r   r   r   r   <module>   sH   (














