o
    FZh                     @   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)Zatomsr   introundequals	TypeErrorr   )exprassumptionsexacti r&   Q/var/www/auris/lib/python3.10/site-packages/sympy/assumptions/handlers/ntheory.py_PrimePredicate_number   s   r(   c                 C      | j }|d u r	t|S N)Z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)r0   r(   argsr   r   integeris_composite)r"   r#   argr&   r&   r'   r-   .   s   


c                 C   s   | j rt| |S tt| j|rCtt| j|rEtt| j|}|du r)dS tt| jd|}|du r9dS |du rG|du rIdS dS dS dS dS )z(
    Integer**Integer     -> !Prime
    F   TN)	r0   r(   r   r   r5   expbaseprimeeq)r"   r#   Z
prime_baseZ
is_exp_oner&   r&   r'   r-   9   s   
c                 C   s   t | S r*   r   r1   r&   r&   r'   r-   K   s   c                 C      dS r3   r&   r1   r&   r&   r'   r-   O      c                 C   
   t | |S r*   r(   r1   r&   r&   r'   r-   S      
c                 C   r?   r*   r@   r1   r&   r&   r'   r-   W   rA   c                 C      d S r*   r&   r1   r&   r&   r'   r-   [   r>   c                 C   r)   r*   )r6   r   r+   r&   r&   r'   r-   b   r.   c                 C   sx   t t| |}|r:t t| |}|r8t t| |}|d u r"d S t t| d|}|r/dS |d u r5d S | S |S |S )Nr8   F)r   r   positiver5   r;   r<   )r"   r#   Z	_positive_integerZ_primeZ_is_oner&   r&   r'   r-   i   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_number   s   rG   c                 C   r)   r*   )Zis_evenr   r+   r&   r&   r'   r-      r.   c                 C   r/   r*   )r0   rG   r1   r&   r&   r'   r-      r2   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   Fr8   Tr8   FN)
r0   rG   r4   r   r   r5   evenodd
irrationallen)r"   r#   rH   rI   rJ   accr7   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)r0   rG   r4   r   r   rH   rI   )r"   r#   _resultr7   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 r3   )r0   rG   r   r   r5   r9   rC   rH   r:   negativerI   r
   ZNegativeOner1   r&   r&   r'   r-      s   
 c                 C   s   t | jd@  S )Nr8   )boolpr1   r&   r&   r'   r-      s   c                 C   r=   r3   r&   r1   r&   r&   r'   r-      r>   c                 C   r?   r*   )rG   r1   r&   r&   r'   r-      rA   c                 C   0   t t| jd |rt t| jd |S d S Nr   r   r   realr4   rH   r1   r&   r&   r'   r-         c                 C   rQ   rR   rS   r1   r&   r&   r'   r-      rU   c                 C   s   t t| jd |rdS d S )Nr   T)r   r   rT   r4   r1   r&   r&   r'   r-      s   c                 C   rB   r*   r&   r1   r&   r&   r'   r-     r>   c                 C   r)   r*   )Zis_oddr   r+   r&   r&   r'   r-     r.   c                 C   s:   t t| |}|rt t| |}|d u rd S | S |S r*   )r   r   r5   rH   )r"   r#   rD   Z_evenr&   r&   r'   r-     s   N)'__doc__Zsympy.assumptionsr   r   Z
sympy.corer   r   r   r   r   r	   r
   Zsympy.core.numbersr   r   r   r   r   r   r   r   Zsympy.functionsr   r   r   Zsympy.ntheoryr   Zsympy.multipledispatchr   Zpredicates.ntheoryr   r   r   r   r(   registerr-   Zregister_manyrG   r&   r&   r&   r'   <module>   sx    $(














(









