a
    t@8b-  ã                   @   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   sX   |   t¡ }z&t|  ¡ ƒ}| |  d¡du r0t‚W n tyF   Y dS 0 |rTt|ƒS d S )Nr   F)Zatomsr   ÚintÚroundÚequalsÚ	TypeErrorr   )ÚexprÚassumptionsÚexactÚi© r%   úAlib/python3.9/site-packages/sympy/assumptions/handlers/ntheory.pyÚ_PrimePredicate_number   s    r'   c                 C   s   | j }|d u rt‚|S ©N)Zis_primer   ©r!   r"   Z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   r/   Ú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(   r4   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 u rt‚|S r(   )r0   r   r)   r%   r%   r&   r*   [   s    c                 C   sf   t t | ¡|ƒ}|r^t t | ¡|ƒ}|rXt t | ¡|ƒ}|d u rDd S |  d¡rRdS | S |S n|S d S )Né   F)r   r   Úpositiver/   Zprimer   )r!   r"   Z	_positiveÚ_integerZ_primer%   r%   r&   r*   b   s    
c                 C   sV   z"t |  ¡ ƒ}| |  d¡s t‚W n ty6   Y dS 0 t| ttfƒrJd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 u 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   Fr5   Tr5   FN)
r+   r:   r.   r   r   r/   ÚevenÚoddÚ
irrationalÚlen)r!   r"   r;   r<   r=   Zaccr1   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"   Z_resultr1   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u rzdS d S r-   )r+   r:   r   r   r/   r2   r6   r;   r3   Únegativer<   r
   ZNegativeOner,   r%   r%   r&   r*   Î   s    
 c                 C   s   t | jd@ ƒ S )Nr5   )Ú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 rB   rC   r,   r%   r%   r&   r*   ë   s    c                 C   s   t t | jd ¡|ƒrdS d S )Nr   T)r   r   rD   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 u rt‚|S r(   )Zis_oddr   r)   r%   r%   r&   r*   ü   s    c                 C   s:   t t | ¡|ƒ}|r6t t | ¡|ƒ}|d u r0d S | S |S r(   )r   r   r/   r;   )r!   r"   r7   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   $$





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