o
    jgc                     @   s  d 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 ddlmZmZmZmZmZmZmZmZ ddl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 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e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&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e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(S ))zD
Handlers for keys related to number theory: prime, even, odd, etc.
    )Qask)AddBasicExprFloatMulPowS)ImaginaryUnitInfinityIntegerNaNNegativeInfinityNumberSymbolRational
int_valued)Absimreisprime)MDNotImplementedError   )PrimePredicateCompositePredicateEvenPredicateOddPredicatec                 C   sX   |  t }zt|  }| | ddu rtW n
 ty#   Y dS w |r*t|S d S )Nr   F)atomsr   introundequals	TypeErrorr   )exprassumptionsexacti r'   Z/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/assumptions/handlers/ntheory.py_PrimePredicate_number   s   r)   c                 C      | j }|d u r	t|S N)is_primer   r#   r$   retr'   r'   r(   _"      r/   c                 C      | j rt| |S d S r+   )	is_numberr)   r#   r$   r'   r'   r(   r/   )      
c                 C   sT   | j rt| |S | jD ]}tt||s d S q| jD ]}|j r'|jr' dS qd S NF)r2   r)   argsr   r   integeris_composite)r#   r$   argr'   r'   r(   r/   .   s   


c                 C   s@   | j rt| |S tt| j|rtt| j|rdS dS dS )z(
    Integer**Integer     -> !Prime
    FN)r2   r)   r   r   r7   expbaser3   r'   r'   r(   r/   9   s   
c                 C   s   t | S r+   r   r3   r'   r'   r(   r/   D   s   c                 C      dS r5   r'   r3   r'   r'   r(   r/   H      c                 C   
   t | |S r+   r)   r3   r'   r'   r(   r/   L      
c                 C   r>   r+   r?   r3   r'   r'   r(   r/   P   r@   c                 C      d S r+   r'   r3   r'   r'   r(   r/   T   r=   c                 C   r*   r+   )r8   r   r-   r'   r'   r(   r/   [   r0   c                 C   s`   t t| |}|r.t t| |}|r,t t| |}|d u r"d S | dr)dS | S |S |S )N   F)r   r   positiver7   primer!   )r#   r$   	_positive_integer_primer'   r'   r(   r/   b   s   
c                 C   sb   t | ttfrt| rd S dS zt|  }W n
 ty!   Y dS w | | ds+dS |d dkS )NFr   r   )
isinstancefloatr   r   r   r    r"   r!   )r#   r$   r&   r'   r'   r(   _EvenPredicate_numberx   s   rJ   c                 C   r*   r+   )is_evenr   r-   r'   r'   r(   r/      r0   c                 C   r1   r+   )r2   rJ   r3   r'   r'   r(   r/      r4   c                 C   s   | j rt| |S d\}}}}| jD ]J}tt||rFtt||r&d}n3tt||r3|d7 }n&|sE|dkrEtt|| |rEd}ntt||rV|rS dS d}n dS |}q|r`dS |rddS |t	| jkrmdS dS )z
    Even * Integer    -> Even
    Even * Odd        -> Even
    Integer * Odd     -> ?
    Odd * Odd         -> Odd
    Even * Even       -> Even
    Integer * Integer -> Even if Integer + Integer = Odd
    otherwise         -> ?
    )Fr   FrB   TrB   FN)
r2   rJ   r6   r   r   r7   evenodd
irrationallen)r#   r$   rL   rM   rN   accr9   r'   r'   r(   r/      s4   


c                 C   sR   | j rt| |S d}| jD ]}tt||rqtt||r$| }q dS |S )zM
    Even + Odd  -> Odd
    Even + Even -> Even
    Odd  + Odd  -> Even

    TN)r2   rJ   r6   r   r   rL   rM   )r#   r$   _resultr9   r'   r'   r(   r/      s   

c                 C   s   | j rt| |S tt| j|r=tt| j|r#tt| j|S tt	| j t
| j@ |r5dS | jtju r?dS d S d S r5   )r2   rJ   r   r   r7   r:   rC   rL   r;   negativerM   r
   NegativeOner3   r'   r'   r(   r/      s   
 c                 C   s   t | jd@  S )NrB   )boolpr3   r'   r'   r(   r/      s   c                 C   r<   r5   r'   r3   r'   r'   r(   r/      r=   c                 C   r>   r+   )rJ   r3   r'   r'   r(   r/      r@   c                 C   0   t t| jd |rt t| jd |S d S Nr   r   r   realr6   rL   r3   r'   r'   r(   r/         c                 C   rV   rW   rX   r3   r'   r'   r(   r/      rZ   c                 C   s   t t| jd |rdS d S )Nr   T)r   r   rY   r6   r3   r'   r'   r(   r/      s   c                 C   rA   r+   r'   r3   r'   r'   r(   r/      r=   c                 C   r*   r+   )is_oddr   r-   r'   r'   r(   r/      r0   c                 C   s:   t t| |}|rt t| |}|d u rd S | S |S r+   )r   r   r7   rL   )r#   r$   rF   _evenr'   r'   r(   r/     s   N)'__doc__sympy.assumptionsr   r   
sympy.corer   r   r   r   r   r	   r
   sympy.core.numbersr   r   r   r   r   r   r   r   sympy.functionsr   r   r   sympy.ntheoryr   sympy.multipledispatchr   predicates.ntheoryr   r   r   r   r)   registerr/   register_manyrJ   r'   r'   r'   r(   <module>   sx    $(















(









