
    Rie-                        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
 Z! ej"        e          d             Z# ej"        e          d             Z# ej"        e	          d             Z# ej"        e
          d             Z# ej"        e          d             Z# ej$        eeee          d             Z# ej"        e          d             Z# ej"        e          d             Z# ej"        e          d             Z# ej"        e          d             Z# ej"        e          d             Z#d Z% ej"        e          d             Z# ej"        e          d             Z# ej"        e	          d             Z# ej"        e          d             Z# ej"        e
          d             Z# ej"        e          d             Z# ej$        eeee          d             Z# ej"        e          d             Z# ej"        e          d             Z# ej"        e          d              Z# ej"        e          d!             Z# ej"        e          d"             Z# e j"        e          d#             Z# e j"        e          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                    |                      t                     }	 t          |                                           }| |z
                      d          du rt
          n# t
          $ r Y dS w xY w|rt          |          S d S )Nr   F)atomsr   introundequals	TypeErrorr   )exprassumptionsexactis       Blib/python3.11/site-packages/sympy/assumptions/handlers/ntheory.py_PrimePredicate_numberr)      s    

5!!!E

1HQ5((O )   uu qzz s   AA   
A.-A.c                 &    | j         }|t          |S N)is_primer   r$   r%   rets      r(   _r/   "   s    
-C
{##J    c                 4    | j         rt          | |          S d S r+   )	is_numberr)   r$   r%   s     r(   r/   r/   )   s&    ~ 9%dK8889 9r0   c                     | j         rt          | |          S | j        D ]'}t          t	          j        |          |          s d S (| j        D ]}|j         r
|j        r dS d S NF)r2   r)   argsr   r   integeris_composite)r$   r%   args      r(   r/   r/   .   s    ~ 9%dK888y  19S>>;// 	44	y  = 	S- 	55 r0   c                     | j         rt          | |          S t          t          j        | j                  |          r)t          t          j        | j                  |          rdS dS dS )z(
    Integer**Integer     -> !Prime
    FN)r2   r)   r   r   r7   expbaser3   s     r(   r/   r/   9   ss    
 ~ 9%dK888
19TX,, 	$)$$k22u   r0   c                      t          |           S r+   r   r3   s     r(   r/   r/   D   s    4==r0   c                     dS r5    r3   s     r(   r/   r/   H       5r0   c                 "    t          | |          S r+   r)   r3   s     r(   r/   r/   L       !$444r0   c                 "    t          | |          S r+   rB   r3   s     r(   r/   r/   P   rC   r0   c                     d S r+   r?   r3   s     r(   r/   r/   T       4r0   c                 &    | j         }|t          |S r+   )r8   r   r-   s      r(   r/   r/   [   s    

C
{##Jr0   c                    t          t          j        |           |          }|rft          t          j        |           |          }|r@t          t          j        |           |          }|d S |                     d          rdS | S |S |S )N   F)r   r   positiver7   primer"   )r$   r%   	_positive_integer_primes        r(   r/   r/   b   s    AJt$$k22I qy44 
	44F~ {{1~~ u:Or0   c                     	 t          |                                           }| |z
                      d          st          n# t          $ r Y dS w xY wt	          | t
          t          f          rdS |dz  dk    S )Nr   Fr   )r    r!   r"   r#   
isinstancefloatr   )r$   r%   r'   s      r(   _EvenPredicate_numberrR   x   s    

q  ## 	O	   uu$'' uq5A:s   A A 
AAc                 &    | j         }|t          |S r+   )is_evenr   r-   s      r(   r/   r/      s    
,C
{##Jr0   c                 4    | j         rt          | |          S d S r+   )r2   rR   r3   s     r(   r/   r/      s&    ~ 8$T;7778 8r0   c                 6   | j         rt          | |          S d\  }}}}| j        D ]}t          t	          j        |          |          r}t          t	          j        |          |          rd}nt          t	          j        |          |          r|dz  }n]|s-|dk    r't          t	          j        ||z             |          rd}n-t          t	          j        |          |          r|r dS d}n dS |}|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   FrI   TrI   FN)
r2   rR   r6   r   r   r7   evenodd
irrationallen)r$   r%   rW   rX   rY   accr9   s          r(   r/   r/      sO    ~ 8$T;777!3D#z3y  qy~~{++ 	16#;;,,  QU3ZZ--  q  cQhhquS3Y''55  Dc""K00 	  JJEE 	5 	4#di..  5 ! r0   c                     | j         rt          | |          S d}| j        D ]M}t          t	          j        |          |          r%t          t	          j        |          |          r| }K dS |S )zM
    Even + Odd  -> Odd
    Even + Even -> Even
    Odd  + Odd  -> Even

    TN)r2   rR   r6   r   r   rW   rX   )r$   r%   _resultr9   s       r(   r/   r/      s     ~ 8$T;777Gy  qvc{{K(( 	s[)) 	!kGGEEr0   c                    | j         rt          | |          S t          t          j        | j                  |          rt          t          j        | j                  |          r't          t          j        | j                  |          S t          t          j	        | j                   t          j
        | j                  z  |          rdS | j        t          j        u rdS d S d S r5   )r2   rR   r   r   r7   r;   rJ   rW   r<   negativerX   r   NegativeOner3   s     r(   r/   r/      s    ~ 8$T;777
19TX,, qz$(##[11 	qvdi((+666!*TX&&&ty)9)99;GG 	5Y!-''5 
 ('r0   c                 2    t          | j        dz             S )NrI   )boolpr3   s     r(   r/   r/      s    DFQJr0   c                     dS r5   r?   r3   s     r(   r/   r/      r@   r0   c                 "    t          | |          S r+   )rR   r3   s     r(   r/   r/      s     {333r0   c                     t          t          j        | j        d                   |          r-t          t          j        | j        d                   |          S d S Nr   r   r   realr6   rW   r3   s     r(   r/   r/      N    
16$)A,-- 616$)A,''5556 6r0   c                     t          t          j        | j        d                   |          r-t          t          j        | j        d                   |          S d S rg   rh   r3   s     r(   r/   r/      rj   r0   c                 d    t          t          j        | j        d                   |          rdS d S )Nr   T)r   r   ri   r6   r3   s     r(   r/   r/      s3    
16$)A,-- t r0   c                     d S r+   r?   r3   s     r(   r/   r/      rF   r0   c                 &    | j         }|t          |S r+   )is_oddr   r-   s      r(   r/   r/      s    
+C
{##Jr0   c                     t          t          j        |           |          }|r)t          t          j        |           |          }|d S | S |S r+   )r   r   r7   rW   )r$   r%   rM   _evens       r(   r/   r/     sO    19T??K00H AF4LL+..=4yOr0   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_manyrR   r?   r0   r(   <module>r|      ss    % $ $ $ $ $ $ $ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;. . . . . . . . . . . . . . . . . . ' ' ' ' ' ' ' ' ' ' ! ! ! ! ! ! 8 8 8 8 8 8! ! ! ! ! ! ! ! ! ! ! !
 
 
    9 9  9       !!  "! h2BMRR  SR 5 5  5 &&5 5 '&5    T""  #" U##  $#*
 
 
    8 8 8 & & &P   ( 	 	 	       !   Xx1A=QQ  RQ %%4 4 &%4 6 6 6 6 6 6       t   u    r0   