
    gc                        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
 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
int_valued)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       ^/var/www/html/ai-engine/env/lib/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)   _r0   "   s    
-C
{##J    c                 4    | j         rt          | |          S d S r,   )	is_numberr*   r%   r&   s     r)   r0   r0   )   s&    ~ 9%dK8889 9r1   c                     | j         rt          | |          S | j        D ]'}t          t	          j        |          |          s d S (| j        D ]}|j         r
|j        r dS d S NF)r3   r*   argsr   r   integeris_composite)r%   r&   args      r)   r0   r0   .   s    ~ 9%dK888y  19S>>;// 	44	y  = 	S- 	55 r1   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)r3   r*   r   r   r8   expbaser4   s     r)   r0   r0   9   ss    
 ~ 9%dK888
19TX,, 	$)$$k22u   r1   c                      t          |           S r,   r   r4   s     r)   r0   r0   D   s    4==r1   c                     dS r6    r4   s     r)   r0   r0   H       5r1   c                 "    t          | |          S r,   r*   r4   s     r)   r0   r0   L       !$444r1   c                 "    t          | |          S r,   rC   r4   s     r)   r0   r0   P   rD   r1   c                     d S r,   r@   r4   s     r)   r0   r0   T       4r1   c                 &    | j         }|t          |S r,   )r9   r   r.   s      r)   r0   r0   [   s    

C
{##Jr1   c                    t          t          j        |           |          }|rft          t          j        |           |          }|r@t          t          j        |           |          }|d S |                     d          rdS | S |S |S )N   F)r   r   positiver8   primer#   )r%   r&   	_positive_integer_primes        r)   r0   r0   b   s    AJt$$k22I qy44 
	44F~ {{1~~ u:Or1   c                    t          | t          t          f          rt          |           rd S dS 	 t	          |                                           }n# t          $ r Y dS w xY w| |z
                      d          sdS |dz  dk    S )NFr   r   )
isinstancefloatr   r   r!   r"   r$   r#   )r%   r&   r(   s      r)   _EvenPredicate_numberrS   x   s    $'' d 	4u

   uu1HQ uq5A:s   !A 
A! A!c                 &    | j         }|t          |S r,   )is_evenr   r.   s      r)   r0   r0      s    
,C
{##Jr1   c                 4    | j         rt          | |          S d S r,   )r3   rS   r4   s     r)   r0   r0      s&    ~ 8$T;7778 8r1   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   FrJ   TrJ   FN)
r3   rS   r7   r   r   r8   evenodd
irrationallen)r%   r&   rX   rY   rZ   accr:   s          r)   r0   r0      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 ! r1   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)r3   rS   r7   r   r   rX   rY   )r%   r&   _resultr:   s       r)   r0   r0      s     ~ 8$T;777Gy  qvc{{K(( 	s[)) 	!kGGEEr1   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 r6   )r3   rS   r   r   r8   r<   rK   rX   r=   negativerY   r   NegativeOner4   s     r)   r0   r0      s    ~ 8$T;777
19TX,, qz$(##[11 	qvdi((+666!*TX&&&ty)9)99;GG 	5Y!-''5 
 ('r1   c                 2    t          | j        dz             S )NrJ   )boolpr4   s     r)   r0   r0      s    DFQJr1   c                     dS r6   r@   r4   s     r)   r0   r0      rA   r1   c                 "    t          | |          S r,   )rS   r4   s     r)   r0   r0      s     {333r1   c                     t          t          j        | j        d                   |          r-t          t          j        | j        d                   |          S d S Nr   r   r   realr7   rX   r4   s     r)   r0   r0      N    
16$)A,-- 616$)A,''5556 6r1   c                     t          t          j        | j        d                   |          r-t          t          j        | j        d                   |          S d S rh   ri   r4   s     r)   r0   r0      rk   r1   c                 d    t          t          j        | j        d                   |          rdS d S )Nr   T)r   r   rj   r7   r4   s     r)   r0   r0      s3    
16$)A,-- t r1   c                     d S r,   r@   r4   s     r)   r0   r0      rG   r1   c                 &    | j         }|t          |S r,   )is_oddr   r.   s      r)   r0   r0      s    
+C
{##Jr1   c                     t          t          j        |           |          }|r)t          t          j        |           |          }|d S | S |S r,   )r   r   r8   rX   )r%   r&   rN   _evens       r)   r0   r0     sO    19T??K00H AF4LL+..=4yOr1   N)'__doc__sympy.assumptionsr   r   
sympy.corer   r   r   r   r	   r
   r   sympy.core.numbersr   r   r   r   r   r   r   r   sympy.functionsr   r   r   sympy.ntheoryr   sympy.multipledispatchr   predicates.ntheoryr   r   r   r   r*   registerr0   register_manyrS   r@   r1   r)   <module>r}      s}    % $ $ $ $ $ $ $ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;: : : : : : : : : : : : : : : : : : : : ' ' ' ' ' ' ' ' ' ' ! ! ! ! ! ! 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    r1   