o
    *ήc-                     @   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 rtW n
 ty#   Y dS w |r*t|S d S )Nr   F)atomsr   introundequals	TypeErrorr   )exprassumptionsexacti r&   I/tmp/pip-target-vg8gfxp4/lib/python/sympy/assumptions/handlers/ntheory.py_PrimePredicate_number   s   r(   c                 C      | j }|d u r	t|S N)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)r1   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dS dS dS )z(
    Integer**Integer     -> !Prime
    FN)r1   r(   r   r   r6   expbaser2   r&   r&   r'   r.   9   s   
c                 C   s   t | S r*   r   r2   r&   r&   r'   r.   D   s   c                 C      dS r4   r&   r2   r&   r&   r'   r.   H      c                 C   
   t | |S r*   r(   r2   r&   r&   r'   r.   L      
c                 C   r=   r*   r>   r2   r&   r&   r'   r.   P   r?   c                 C      d S r*   r&   r2   r&   r&   r'   r.   T   r<   c                 C   r)   r*   )r7   r   r,   r&   r&   r'   r.   [   r/   c                 C   s`   t t| |}|r.t t| |}|r,t t| |}|d u r"d S | dr)dS | S |S |S )N   F)r   r   positiver6   primer    )r"   r#   	_positive_integer_primer&   r&   r'   r.   b   s   
c                 C   sV   zt |  }| | dstW n
 ty   Y dS w t| ttfr%dS |d dkS )Nr   Fr   )r   r   r    r!   
isinstancefloatr   )r"   r#   r%   r&   r&   r'   _EvenPredicate_numberx   s   rI   c                 C   r)   r*   )is_evenr   r,   r&   r&   r'   r.      r/   c                 C   r0   r*   )r1   rI   r2   r&   r&   r'   r.      r3   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   FrA   TrA   FN)
r1   rI   r5   r   r   r6   evenodd
irrationallen)r"   r#   rK   rL   rM   accr8   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)r1   rI   r5   r   r   rK   rL   )r"   r#   _resultr8   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 r4   )r1   rI   r   r   r6   r9   rB   rK   r:   negativerL   r
   NegativeOner2   r&   r&   r'   r.      s   
 c                 C   s   t | jd@  S )NrA   )boolpr2   r&   r&   r'   r.      s   c                 C   r;   r4   r&   r2   r&   r&   r'   r.      r<   c                 C   r=   r*   )rI   r2   r&   r&   r'   r.      r?   c                 C   0   t t| jd |rt t| jd |S d S Nr   r   r   realr5   rK   r2   r&   r&   r'   r.         c                 C   rU   rV   rW   r2   r&   r&   r'   r.      rY   c                 C   s   t t| jd |rdS d S )Nr   T)r   r   rX   r5   r2   r&   r&   r'   r.      s   c                 C   r@   r*   r&   r2   r&   r&   r'   r.      r<   c                 C   r)   r*   )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   r6   rK   )r"   r#   rE   _evenr&   r&   r'   r.     s   N)&__doc__sympy.assumptionsr   r   
sympy.corer   r   r   r   r   r	   r
   sympy.core.numbersr   r   r   r   r   r   r   sympy.functionsr   r   r   sympy.ntheoryr   sympy.multipledispatchr   predicates.ntheoryr   r   r   r   r(   registerr.   register_manyrI   r&   r&   r&   r'   <module>   sx    $$






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