
    gc                     p   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jF                  e      d        Z$ ejF                  e      d        Z$ ejF                  e	      d        Z$ ejF                  e
      d        Z$ ejF                  e      d        Z$ ejJ                  eeee      d        Z$ ejF                  e      d        Z$ ejF                  e      d        Z$ ejF                  e      d        Z$ ejF                  e      d        Z$ ejF                  e      d        Z$d Z& e jF                  e      d        Z$ e jF                  e      d        Z$ e jF                  e	      d        Z$ e jF                  e      d        Z$ e jF                  e
      d        Z$ e jF                  e      d        Z$ e jJ                  eeee      d        Z$ e jF                  e      d        Z$ e jF                  e      d        Z$ e jF                  e      d         Z$ e jF                  e      d!        Z$ e jF                  e      d"        Z$ e!jF                  e      d#        Z$ e!jF                  e      d$        Z$y%)&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                     | j                  t               }	 t        | j                               }| |z
  j	                  d      du rt
        	 |rt        |      S y # t
        $ r Y yw xY w)Nr   F)atomsr   introundequals	TypeErrorr   )exprassumptionsexactis       W/var/www/openai/venv/lib/python3.12/site-packages/sympy/assumptions/handlers/ntheory.py_PrimePredicate_numberr*      sq    

5!!E

1HQ5(O ) qz   s   5A 	A('A(c                 .    | j                   }|t        |S N)is_primer   r%   r&   rets      r)   _r0   "   s    
--C
{##J    c                 4    | j                   rt        | |      S y r,   )	is_numberr*   r%   r&   s     r)   r0   r0   )   s    ~~%dK88 r1   c                     | j                   rt        | |      S | j                  D ]#  }t        t	        j
                  |      |      r# y  | j                  D ]  }|j                   s|j                  s y y NF)r3   r*   argsr   r   integeris_composite)r%   r&   args      r)   r0   r0   .   s[    ~~%dK88yy199S>;/  yy==S-- r1   c                     | j                   rt        | |      S t        t        j                  | j
                        |      r+t        t        j                  | j                        |      ryyy)z(
    Integer**Integer     -> !Prime
    FN)r3   r*   r   r   r8   expbaser4   s     r)   r0   r0   9   sS    
 ~~%dK88
199TXX,		$))$k2 3 -r1   c                     t        |       S r,   r   r4   s     r)   r0   r0   D   s    4=r1   c                      yr6    r4   s     r)   r0   r0   H       r1   c                     t        | |      S r,   r*   r4   s     r)   r0   r0   L       !$44r1   c                     t        | |      S r,   rC   r4   s     r)   r0   r0   P   rD   r1   c                      y r,   r@   r4   s     r)   r0   r0   T       r1   c                 .    | j                   }|t        |S r,   )r9   r   r.   s      r)   r0   r0   [   s    


C
{##Jr1   c                     t        t        j                  |       |      }|rZt        t        j                  |       |      }|r7t        t        j                  |       |      }|y | j                  d      ry| S |S |S )N   F)r   r   positiver8   primer#   )r%   r&   	_positive_integer_primes        r)   r0   r0   b   sp    AJJt$k2Iqyy44F~ {{1~:Or1   c                     t        | t        t        f      rt        |       ry y	 t	        | j                               }| |z
  j                  d      sy|dz  dk(  S # t        $ r Y yw xY w)NFr   r   )
isinstancefloatr   r   r!   r"   r$   r#   )r%   r&   r(   s      r)   _EvenPredicate_numberrS   x   sl    $'d

 1HQ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 y r,   )r3   rS   r4   s     r)   r0   r0      s    ~~$T;77 r1   c                    | j                   rt        | |      S d\  }}}}| j                  D ]  }t        t	        j
                  |      |      rst        t	        j                  |      |      rd}nyt        t	        j                  |      |      r|dz  }nT|sR|dk7  rMt        t	        j                  ||z         |      r+d}n(t        t	        j                  |      |      r|r yd}n y|} |ry|ry|t        | j                        k(  ryy)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      s     ~~$T;77!3D#z3yyqyy~{+166#;,QUU3Z-qcQhquuS3Y'5Dc"K0 J% ( #dii.  !r1   c                     | j                   rt        | |      S d}| j                  D ]F  }t        t	        j
                  |      |      r#t        t	        j                  |      |      r| }F y |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      sc     ~~$T;77Gyyqvvc{K(s[)!kG  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y| j                  t        j                  u ryy y r6   )r3   rS   r   r   r8   r<   rK   rX   r=   negativerY   r   NegativeOner4   s     r)   r0   r0      s    ~~$T;77
199TXX,qzz$((#[1qvvdii(+66!**TXX&&tyy)99;GYY!--' ( -r1   c                 4    t        | j                  dz         S )NrJ   )boolpr4   s     r)   r0   r0      s    DFFQJr1   c                      yr6   r@   r4   s     r)   r0   r0      rA   r1   c                     t        | |      S r,   )rS   r4   s     r)   r0   r0      s     {33r1   c                     t        t        j                  | j                  d         |      r,t        t        j                  | j                  d         |      S y Nr   r   r   realr7   rX   r4   s     r)   r0   r0      @    
166$))A,-166$))A,'55 .r1   c                     t        t        j                  | j                  d         |      r,t        t        j                  | j                  d         |      S y rh   ri   r4   s     r)   r0   r0      rk   r1   c                 ^    t        t        j                  | j                  d         |      ryy )Nr   T)r   r   rj   r7   r4   s     r)   r0   r0      s%    
166$))A,- .r1   c                      y 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                  |       |      }|y | S |S r,   )r   r   r8   rX   )r%   r&   rN   _evens       r)   r0   r0     sB    199T?K0HAFF4L+.=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! !
   9  9     ! " h2BMR S 5  5 &5 '5   T" # U# $*   8 8 & &P  ( 	 	    !  Xx1A=Q R %4 &4 6 6 6 6     t  u r1   