U
    —9%e-  ã                   @   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 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)ÚAbsÚimÚre©Úisprime)ÚMDNotImplementedErroré   )ÚPrimePredicateÚCompositePredicateÚEvenPredicateÚOddPredicatec                 C   sZ   |   t¡ }z&t|  ¡ ƒ}| |  d¡dkr0t‚W n tk
rH   Y dS X |rVt|ƒS d S )Nr   F)Zatomsr   ÚintÚroundÚequalsÚ	TypeErrorr   )ÚexprÚassumptionsÚexactÚi© r%   úa/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/assumptions/handlers/ntheory.pyÚ_PrimePredicate_number   s    r'   c                 C   s   | j }|d krt‚|S ©N)Zis_primer   ©r!   r"   Úretr%   r%   r&   Ú_"   s    r+   c                 C   s   | j rt| |ƒS d S r(   )Ú	is_numberr'   ©r!   r"   r%   r%   r&   r+   )   s    c                 C   sT   | j rt| |ƒS | jD ]}tt |¡|ƒs d S q| jD ]}|j r8|jr8 dS q8d S ©NF)r,   r'   Úargsr   r   ÚintegerÚis_composite)r!   r"   Úargr%   r%   r&   r+   .   s    


c                 C   s<   | j rt| |ƒS tt | j¡|ƒr8tt | j¡|ƒr8dS dS )z(
    Integer**Integer     -> !Prime
    FN)r,   r'   r   r   r0   ÚexpÚbaser-   r%   r%   r&   r+   9   s    
ÿc                 C   s   t | ƒS r(   r   r-   r%   r%   r&   r+   D   s    c                 C   s   dS r.   r%   r-   r%   r%   r&   r+   H   s    c                 C   s
   t | |ƒS r(   ©r'   r-   r%   r%   r&   r+   L   s    c                 C   s
   t | |ƒS r(   r5   r-   r%   r%   r&   r+   P   s    c                 C   s   d S r(   r%   r-   r%   r%   r&   r+   T   s    c                 C   s   | j }|d krt‚|S r(   )r1   r   r)   r%   r%   r&   r+   [   s    c                 C   sf   t t | ¡|ƒ}|r^t t | ¡|ƒ}|rXt t | ¡|ƒ}|d krDd S |  d¡rRdS | S |S n|S d S )Né   F)r   r   Úpositiver0   Úprimer   )r!   r"   Z	_positiveÚ_integerZ_primer%   r%   r&   r+   b   s    
c                 C   sX   z"t |  ¡ ƒ}| |  d¡s t‚W n tk
r8   Y dS X t| ttfƒrLdS |d dkS )Nr   Fr   )r   r   r   r    Ú
isinstanceÚfloatr   )r!   r"   r$   r%   r%   r&   Ú_EvenPredicate_numberx   s    r<   c                 C   s   | j }|d krt‚|S r(   )Zis_evenr   r)   r%   r%   r&   r+   „   s    c                 C   s   | j rt| |ƒS d S r(   )r,   r<   r-   r%   r%   r&   r+   ‹   s    c                 C   sÚ   | j rt| |ƒS d\}}}}| jD ]}tt |¡|ƒrŒtt |¡|ƒrLd}q®tt |¡|ƒrf|d7 }q®|s®|dkr®tt || ¡|ƒr®d}n"tt |¡|ƒrª|r¤ qÖd}n qÖ|}q"|r¼dS |rÄdS |t	| jƒkrÖd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   Fr6   Tr6   FN)
r,   r<   r/   r   r   r0   ÚevenÚoddÚ
irrationalÚlen)r!   r"   r=   r>   r?   Úaccr2   r%   r%   r&   r+      s0    


c                 C   sV   | j rt| |ƒS d}| jD ]2}tt |¡|ƒr0qtt |¡|ƒrH| }q qRq|S dS )zM
    Even + Odd  -> Odd
    Even + Even -> Even
    Odd  + Odd  -> Even

    TN)r,   r<   r/   r   r   r=   r>   )r!   r"   Ú_resultr2   r%   r%   r&   r+   ¹   s    

c                 C   s~   | j rt| |ƒS tt | j¡|ƒrztt | j¡|ƒrFtt | j¡|ƒS tt 	| j¡ t 
| j¡@ |ƒrjdS | jtjkrzdS d S r.   )r,   r<   r   r   r0   r3   r7   r=   r4   Únegativer>   r
   ZNegativeOner-   r%   r%   r&   r+   Î   s    
 c                 C   s   t | jd@ ƒ S )Nr6   )ÚboolÚpr-   r%   r%   r&   r+   Ú   s    c                 C   s   dS r.   r%   r-   r%   r%   r&   r+   Þ   s    c                 C   s
   t | |ƒS r(   )r<   r-   r%   r%   r&   r+   â   s    c                 C   s0   t t | jd ¡|ƒr,t t | jd ¡|ƒS d S ©Nr   ©r   r   Úrealr/   r=   r-   r%   r%   r&   r+   æ   s    c                 C   s0   t t | jd ¡|ƒr,t t | jd ¡|ƒS d S rF   rG   r-   r%   r%   r&   r+   ë   s    c                 C   s   t t | jd ¡|ƒrdS d S )Nr   T)r   r   rH   r/   r-   r%   r%   r&   r+   ð   s    c                 C   s   d S r(   r%   r-   r%   r%   r&   r+   õ   s    c                 C   s   | j }|d krt‚|S r(   )Zis_oddr   r)   r%   r%   r&   r+   ü   s    c                 C   s:   t t | ¡|ƒ}|r6t t | ¡|ƒ}|d kr0d S | S |S r(   )r   r   r0   r=   )r!   r"   r9   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   Zsympy.functionsr   r   r   Zsympy.ntheoryr   Zsympy.multipledispatchr   Zpredicates.ntheoryr   r   r   r   r'   Úregisterr+   Zregister_manyr<   r%   r%   r%   r&   Ú<module>   sv   $$





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