U
    L?hc  ã                   @   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   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&   úT/var/www/html/venv/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   r1   Ú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)   r6   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)   )r2   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   Úpositiver1   Úprimer    )r"   r#   Z	_positiveÚ_integerZ_primer&   r&   r'   r,   b   s    
c                 C   sd   t | ttfƒrt| ƒrd S dS zt|  ¡ ƒ}W n tk
rD   Y dS X | |  d¡sXdS |d dkS )NFr   r   )Ú
isinstanceÚfloatr   r   r   r   r!   r    )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   Fr7   Tr7   FN)
r-   r=   r0   r   r   r1   ÚevenÚoddÚ
irrationalÚlen)r"   r#   r>   r?   r@   Úaccr3   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=   r0   r   r   r>   r?   )r"   r#   Ú_resultr3   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   r1   r4   r8   r>   r5   Únegativer?   r
   ZNegativeOner.   r&   r&   r'   r,   Ð   s    
 c                 C   s   t | jd@ ƒ S )Nr7   )Ú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   Úrealr0   r>   r.   r&   r&   r'   r,   è   s    c                 C   s0   t t | jd ¡|ƒr,t t | jd ¡|ƒS d S rG   rH   r.   r&   r&   r'   r,   í   s    c                 C   s   t t | jd ¡|ƒrdS d S )Nr   T)r   r   rI   r0   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   r1   r>   )r"   r#   r:   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_manyr=   r&   r&   r&   r'   Ú<module>   sv   $(





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