a
    kº”hì  ã                   @   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 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&   úP/var/www/auris/lib/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#   Ú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¡|ƒr†tt | j¡|ƒr†tt | j¡|ƒ}|du rRdS tt | jd¡|ƒ}|du rrdS |du r†|du r†dS dS )z(
    Integer**Integer     -> !Prime
    Fé   TN)	r-   r(   r   r   r1   ÚexpÚbaseÚprimeÚeq)r"   r#   Z
prime_baseZ
is_exp_oner&   r&   r'   r,   9   s    
ÿc                 C   s   t | ƒS r)   r   r.   r&   r&   r'   r,   K   s    c                 C   s   dS r/   r&   r.   r&   r&   r'   r,   O   s    c                 C   s
   t | |ƒS r)   ©r(   r.   r&   r&   r'   r,   S   s    c                 C   s
   t | |ƒS r)   r9   r.   r&   r&   r'   r,   W   s    c                 C   s   d S r)   r&   r.   r&   r&   r'   r,   [   s    c                 C   s   | j }|d u rt‚|S r)   )r2   r   r*   r&   r&   r'   r,   b   s    c                 C   s~   t t | ¡|ƒ}|rvt t | ¡|ƒ}|rpt t | ¡|ƒ}|d u rDd S t t | d¡|ƒ}|r^dS |d u rjd S | S |S n|S d S )Nr4   F)r   r   Úpositiver1   r7   r8   )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yB   Y dS 0 | |  d¡sVdS |d dkS )NFr   r   )Ú
isinstanceÚfloatr   r   r   r   r!   r    )r"   r#   r%   r&   r&   r'   Ú_EvenPredicate_number‚   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   Fr4   Tr4   FN)
r-   r>   r0   r   r   r1   ÚevenÚoddÚ
irrationalÚlen)r"   r#   r?   r@   rA   Ú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u rzdS d S r/   )r-   r>   r   r   r1   r5   r:   r?   r6   Únegativer@   r
   ZNegativeOner.   r&   r&   r'   r,   Ú   s    
 c                 C   s   t | jd@ ƒ S )Nr4   )Ú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 rH   rI   r.   r&   r&   r'   r,   ÷   s    c                 C   s   t t | jd ¡|ƒrdS d S )Nr   T)r   r   rJ   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 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   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   $(



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