
    /hh8                         S r SSKrSSKJrJrJr  SSKJr  S rS r	S r
S r " S	 S
\5      r " S S\R                  5      r " S S5      rS r " S S\5      r " S S\\S9r " S S\5      r " S S\5      r\R-                  \5         " S S\R                  5      r " S S\5      r " S S\5      r " S S \5      r " S! S"\5      r " S# S$\5      r " S% S&5      r " S' S(\R                  5      r\S):X  a  \R@                  " 5         gg)*z9Tests for binary operators on subtypes of built-in types.    N)eqlene)ABCMetac                 0    U (       a  X-  U pU (       a  M  U$ )z1Greatest common divisor using Euclid's algorithm. )abs     8/opt/python-3.13.8/usr/lib/python3.13/test/test_binop.pygcdr      s    
sA1 !H    c                 "    [        U [        5      $ )z-Test whether an object is an instance of int.)
isinstanceintxs    r   isintr          ar   c                 X    [         [        [        4 H  n[        X5      (       d  M    g   g)zATest whether an object is an instance of a built-in numeric type.   r   )r   floatcomplexr   )r   Ts     r   isnumr      s&    % a ! r   c                 "    [        U [        5      $ )z7Test whether an object is an instance of the Rat class.)r   Ratr   s    r   isRatr      r   r   c                       \ rS rSrSrSS/rSS jrS r\" \S5      r	S r
\" \
S5      rS	 rS
 rS rS rS r\rS rS rS r\rS rS rS rS rS rS rS rS rS rSrg)r      z9Rational number implemented as a normalized pair of ints.	_Rat__num	_Rat__denc                     [        U5      (       d  [        SU-  5      e[        U5      (       d  [        SU-  5      eUS:X  a  [        S5      e[        X!5      n[	        X-  5      U l        [	        X#-  5      U l        g)zSConstructor: Rat([num[, den]]).

The arguments must be ints, and default to (0, 1).zRat numerator must be int (%r)z Rat denominator must be int (%r)r   zzero denominatorN)r   	TypeErrorZeroDivisionErrorr   r   r    r!   )selfnumdengs       r   __init__Rat.__init__"   sn     Szz<sBCCSzz>DEE!8#$677M[
[
r   c                     U R                   $ )z7Accessor function for read-only 'num' attribute of Rat.)r    r%   s    r   _get_numRat._get_num1       zzr   Nc                     U R                   $ )z7Accessor function for read-only 'den' attribute of Rat.)r!   r,   s    r   _get_denRat._get_den6   r/   r   c                 8    SU R                   U R                  4-  $ )z<Convert a Rat to a string resembling a Rat constructor call.zRat(%d, %d)r    r!   r,   s    r   __repr__Rat.__repr__;   s    

DJJ777r   c                 *    [        [        U 5      5      $ )z=Convert a Rat to a string resembling a decimal numeric value.)strr   r,   s    r   __str__Rat.__str__?   s    5;r   c                 :    U R                   S-  U R                  -  $ )zConvert a Rat to a float.      ?r4   r,   s    r   	__float__Rat.__float__C   s    zz#~djj((r   c                     U R                   S:X  a   [        U R                  5      $ [        S[	        U 5      -  5      e! [         a    [        S[	        U 5      -  5      ef = f)z,Convert a Rat to an int; self.den must be 1.r   z%s too large to convert to intzcan't convert %s to int)r!   r   r    OverflowErrorrepr
ValueErrorr,   s    r   __int__Rat.__int__G   sd    ::?24::& 2T$Z?@@ ! 2#$D&*4j%1 2 22s	   > "A c                 H   [        U5      (       a  [        U5      n[        U5      (       aT  [        U R                  UR                  -  UR                  U R                  -  -   U R                  UR                  -  5      $ [        U5      (       a  [        U 5      U-   $ [        $ )z$Add two Rats, or a Rat and a number.r   r   r   r    r!   r   r   NotImplementedr%   others     r   __add__Rat.__add__Q   y    <<JE<<tzz%++-DJJ0FFzz%++-/ /<<;&&r   c                 H   [        U5      (       a  [        U5      n[        U5      (       aT  [        U R                  UR                  -  UR                  U R                  -  -
  U R                  UR                  -  5      $ [        U5      (       a  [        U 5      U-
  $ [        $ )z)Subtract two Rats, or a Rat and a number.rF   rH   s     r   __sub__Rat.__sub__^   rL   r   c                 H   [        U5      (       a  [        U5      n[        U5      (       aT  [        UR                  U R                  -  U R                  UR                  -  -
  U R                  UR                  -  5      $ [        U5      (       a  U[        U 5      -
  $ [        $ )z9Subtract two Rats, or a Rat and a number (reversed args).rF   rH   s     r   __rsub__Rat.__rsub__i   sy    <<JE<<u{{4::-

5;;0FFzz%++-/ /<<5;&&r   c                 D   [        U5      (       a:  [        U R                  UR                  -  U R                  UR                  -  5      $ [	        U5      (       a#  [        U R                  U-  U R                  5      $ [        U5      (       a  [        U 5      U-  $ [        $ )z)Multiply two Rats, or a Rat and a number.r   r   r    r!   r   r   r   rG   rH   s     r   __mul__Rat.__mul__t   ss    <<tzz%++-tzz%++/EFF<<tzz%'44<<;u$$r   c                 D   [        U5      (       a:  [        U R                  UR                  -  U R                  UR                  -  5      $ [	        U5      (       a#  [        U R                  U R                  U-  5      $ [        U5      (       a  [        U 5      U-  $ [        $ )z'Divide two Rats, or a Rat and a number.rT   rH   s     r   __truediv__Rat.__truediv__   ss    <<tzz%++-tzz%++/EFF<<tzz4::e#344<<;&&r   c                 B   [        U5      (       a:  [        UR                  U R                  -  UR                  U R                  -  5      $ [	        U5      (       a"  [        XR                  -  U R                  5      $ [        U5      (       a  U[        U 5      -  $ [        $ )z7Divide two Rats, or a Rat and a number (reversed args).rT   rH   s     r   __rtruediv__Rat.__rtruediv__   sq    <<u{{4::-u{{4::/EFF<<uZZ'44<<5;&&r   c                     [        U5      (       a  [        U5      nO[        U5      (       d  [        $ X-  nUR                  UR
                  -  $ )z.Divide two Rats, returning the floored result.)r   r   r   rG   r    r!   r%   rI   r   s      r   __floordiv__Rat.__floordiv__   s=    <<JEu!!Jww!''!!r   c                 <    X-  nUR                   UR                  -  $ )z>Divide two Rats, returning the floored result (reversed args).r4   r^   s      r   __rfloordiv__Rat.__rfloordiv__   s    Jww!''!!r   c                 ~    [        U5      (       a  [        U5      nO[        U5      (       d  [        $ X-  nX X-  -
  4$ )z2Divide two Rats, returning quotient and remainder.)r   r   r   rG   r^   s      r   
__divmod__Rat.__divmod__   s:    <<JEu!!K%)#$$r   c                 |    [        U5      (       a  [        U5      nO[        U5      (       d  [        $ [	        X5      $ )zBDivide two Rats, returning quotient and remainder (reversed args).)r   r   r   rG   divmodrH   s     r   __rdivmod__Rat.__rdivmod__   s.    <<JEu!!e""r   c                     [        X5      S   $ )zTake one Rat modulo another.r   rh   rH   s     r   __mod__Rat.__mod__   s    d"1%%r   c                     [        X5      S   $ )z,Take one Rat modulo another (reversed args).r   rl   rH   s     r   __rmod__Rat.__rmod__   s    e"1%%r   c                 F   [        U5      (       a%  U R                  S:H  =(       a    U R                  U:H  $ [        U5      (       a9  U R                  UR                  :H  =(       a    U R                  UR                  :H  $ [	        U5      (       a  [        U 5      U:H  $ [        $ )zCompare two Rats for equality.r   )r   r!   r    r   r   r   rG   rH   s     r   __eq__
Rat.__eq__   ss    <<::?:tzzU'::<<::,Ju{{1JJ<<;%''r   )__den__num)r   r   ) __name__
__module____qualname____firstlineno____doc__	__slots__r)   r-   propertyr&   r1   r'   r5   r9   r=   rC   rJ   __radd__rN   rQ   rU   __rmul__rX   r[   r_   rb   re   ri   rm   rp   rs   __static_attributes__r   r   r   r   r      s    Ck*I! 8T
"C 8T
"C8 )A	 H		 H""
%#&&r   r   c                   N    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rSrg)RatTestCase   z3Unit tests for Rat class and its support utilities.c                    U R                  [        SS5      S5        U R                  [        SS5      S5        U R                  [        SS5      S5        U R                  [        SS5      S5        U R                  [        S	S5      S
5        U R                  [        SS
5      S5        U R                  [        S	S
5      S
5        [        SS5       H  n[        SS5       H}  nU R                  [        X5      S:  5        U R                  [        U* U5      S:  5        U R                  [        X* 5      S:  5        U R                  [        U* U* 5      S:  5        M     M     g )N
                  r   d      r   )assertEqualr   range
assertTrue)r%   ijs      r   test_gcdRatTestCase.test_gcd   s   Ra(Ra(Ra(S"q)S!b)Ra(S"r*q"A1b\A	A.QB
Q/Ar
Q/QBa0	 " r   c           	         [        SS5      nU R                  UR                  S5        U R                  UR                  S5        [        SS5      nU R                  UR                  S5        U R                  UR                  S5        [        SS5      nU R                  UR                  S5        U R                  UR                  S5        [        SS5      nU R                  UR                  S5        U R                  UR                  S5        [        S5      nU R                  UR                  S5        U R                  UR                  S	5         [        S	S
5      nU R	                  S5        SSSS/ 0 S [         [        4	 HD  n [        U5      nU R	                  SU-  5         [        S	U5      nU R	                  SU-  5        MF     g ! [
         a     Nhf = f! [         a     NBf = f! [         a     Mv  f = f)Nr   r   r      ir   r      r   r   z(Rat(1, 0) didn't raise ZeroDivisionError0g        y                r   zRat(%r) didn't raise TypeErrorz!Rat(1, %r) didn't raise TypeError)r   r   r&   r'   failr$   unittestr#   )r%   r	   bads      r   test_constructorRatTestCase.test_constructor   s   BK""CL#"RL#"SM""F""	BAq	A II@ARRT3@CBH 		:S@AE3K 		=CD A	 ! 		    s6   G 	G)G.
GG
G+*G+.
G<;G<c                 v   U R                  [        SS5      [        SS5      -   S5        U R                  [        SS5      S-   [        SS5      5        U R                  S[        SS5      -   [        SS5      5        U R                  S[        SS5      -   S5        U R                  [        SS5      S-   S5        g )Nr   r   r   r   r<         ?r   r   r,   s    r   test_addRatTestCase.test_add   s    QSAY.2QQAq	2SAYAq	2s1ay#.QS#.r   c                    U R                  [        SS5      [        SS5      -
  [        SS5      5        U R                  [        SS5      S-
  [        SS5      5        U R                  S[        SS5      -
  [        SS5      5        U R                  [        SS5      S-
  S	5        U R                  S[        SS5      -
  S	5        g )
Nr   r   r      r   r   r   r<         ?r   r,   s    r   test_subRatTestCase.test_sub  s    QSAY.B<QQAq	2SAYAq	2QS#.s1ay#.r   c                 b   U R                  [        SS5      [        SS5      -  [        SS5      5        U R                  [        SS5      S-  S5        U R                  S[        SS5      -  S5        U R                  [        SS5      S-  S5        U R                  S[        SS5      -  S5        g )	Nr   r   r   r   r   r   r   r<   r   r,   s    r   test_mulRatTestCase.test_mul	  s    QSAY.B<Ra,SQZ,Rc)3/s2qz)3/r   c                    U R                  [        SS5      [        SS5      -  [        SS5      5        U R                  [        SS5      S-  [        SS5      5        U R                  S[        S5      -  [        SS5      5        U R                  S[        S	S5      -  S
5        U R                  [        S	S5      S-  S
5        g )Nr   r   r   r      	   r         @r   r   r   r,   s    r   test_divRatTestCase.test_div  s    Rc!Qi/R<RaR4SVSAY/s1ay#.QS#.r   c                    U R                  [        S5      [        S5      -  S5        U R                  [        SS5      [        SS5      -  S5        U R                  [        S5      S-  S5        U R                  S[        S5      -  S5        g )Nr      r   r   r   r,   s    r   test_floordivRatTestCase.test_floordiv  sp    RCF*A.Rs1ay0!4RAq)s1vq)r   c                 &   U R                  [        S5      [        SS5      5        U R                  [        S5      S5        U R                  S[        S5      5        U R                  [        S5      S5        U R                  S[        S5      5        g )Nr   r   r   g      $@r   r,   s    r   test_eqRatTestCase.test_eq  sl    R#b!*-R"%SW%R$'s2w'r   c                    U R                  [        SS5      [        SS5      -  [        SS5      5        U R                  [        SS5      S-  [        SS5      5        U R                  S[        S5      -  [        SS5      5        U R                  S[        S	S5      -  S
5        U R                  [        S	S5      S-  S
5        U R                  [        S5      S5        g )Nr   r   r   r   r   r   r   r   r   r   z1/2r   )r   r   evalr,   s    r   test_true_divRatTestCase.test_true_div$  s    Rc!Qi/R<RaR4SVSAY/s1ay#.QS#.ec*r   r   N)rw   rx   ry   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s4    =1"EH//0/*(+r   r   c                   $    \ rS rSrSrS rS rSrg)OperationLoggeri/  z.Base class for classes with operation logging.c                     Xl         g Nlogger)r%   r   s     r   r)   OperationLogger.__init__1  s    r   c                 "    U R                   " U6   g r   r   )r%   argss     r   log_operationOperationLogger.log_operation3  s    Tr   r   N)rw   rx   ry   rz   r{   r)   r   r   r   r   r   r   r   /  s    8r   r   c                     / n/ nU H$  nUR                  U" UR                   5      5        M&      U " U6   U$ ! [         a     U$ f = f)zrReturn the sequence of operations that results from applying
the operation `op` to instances of the given classes.)appendr#   )opclasseslog	instancescs        r   op_sequencer   6  sZ     CI3::' 
I J  Js   7 
AAc                   &    \ rS rSrS rS rS rSrg)AiD  c                 0    U R                  S5        [        $ )NA.__eq__r   rG   rH   s     r   rs   A.__eq__E      :&r   c                 0    U R                  S5        [        $ )NA.__le__r   rH   s     r   __le__A.__le__H  r   r   c                 0    U R                  S5        [        $ )NA.__ge__r   rH   s     r   __ge__A.__ge__K  r   r   r   Nrw   rx   ry   rz   rs   r   r   r   r   r   r   r   r   D      r   r   c                   &    \ rS rSrS rS rS rSrg)BiO  c                 0    U R                  S5        [        $ )NB.__eq__r   rH   s     r   rs   B.__eq__P  r   r   c                 0    U R                  S5        [        $ )NB.__le__r   rH   s     r   r   B.__le__S  r   r   c                 0    U R                  S5        [        $ )NB.__ge__r   rH   s     r   r   B.__ge__V  r   r   r   Nr   r   r   r   r   r   O  r   r   r   )	metaclassc                   &    \ rS rSrS rS rS rSrg)CiZ  c                 0    U R                  S5        [        $ )NC.__eq__r   rH   s     r   rs   C.__eq__[  r   r   c                 0    U R                  S5        [        $ )NC.__le__r   rH   s     r   r   C.__le__^  r   r   c                 0    U R                  S5        [        $ )NC.__ge__r   rH   s     r   r   C.__ge__a  r   r   r   Nr   r   r   r   r   r   Z  r   r   r   c                   *    \ rS rSrSrS rS rS rSrg)Vie  zVirtual subclass of Bc                 0    U R                  S5        [        $ )NV.__eq__r   rH   s     r   rs   V.__eq__g  r   r   c                 0    U R                  S5        [        $ )NzV.__le__r   rH   s     r   r   V.__le__j  r   r   c                 0    U R                  S5        [        $ )NV.__ge__r   rH   s     r   r   V.__ge__m  r   r   r   N)	rw   rx   ry   rz   r{   rs   r   r   r   r   r   r   r   r   e  s    r   r   c                       \ rS rSrS rSrg)OperationOrderTestsis  c                 R   U R                  [        [        [        [        5      SS/5        U R                  [        [        [        [        5      SS/5        U R                  [        [        [        [        5      SS/5        U R                  [        [        [        [
        5      SS/5        U R                  [        [        [
        [        5      SS/5        U R                  [        [        [        [        5      SS/5        U R                  [        [        [        [        5      SS/5        U R                  [        [        [        [        5      SS/5        U R                  [        [        [        [
        5      SS/5        U R                  [        [        [
        [        5      S	S/5        U R                  [        [        [        5      5        U R                  [        [        [        [        5      SS
/5        U R                  [        [        [        [        5      SS/5        g )Nr   r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   
issubclassr   r,   s    r   test_comparison_orders*OperationOrderTests.test_comparison_orderst  s}   RA.Z0HIRA.Z0HIRA.Z0HIRA.Z0HIRA.Z0HIRA.Z0HIRA.Z0HIRA.Z0HIRA.Z0HIRA.Z0HI
1a()RA.Z0HIRA.Z0HIr   r   N)rw   rx   ry   rz   r  r   r   r   r   r  r  s  s    Jr   r  c                       \ rS rSrSrS rSrg)SupEqi  zClass that can test equalityc                     gNTr   rH   s     r   rs   SupEq.__eq__      r   r   Nrw   rx   ry   rz   r{   rs   r   r   r   r   r	  r	    s
    &r   r	  c                       \ rS rSrSrSrSrg)Si  z"Subclass of SupEq that should failNr   r  r   r   r   r  r    
    ,Fr   r  c                       \ rS rSrSrSrg)Fi  z'Independent class that should fall backr   N)rw   rx   ry   rz   r{   r   r   r   r   r  r    s    1r   r  c                       \ rS rSrSrSrSrg)Xi  z"Independent class that should failNr   r  r   r   r   r  r    r  r   r  c                       \ rS rSrSrSrSrg)SNi  z>Subclass of SupEq that can test equality, but not non-equalityNr   )rw   rx   ry   rz   r{   __ne__r   r   r   r   r  r    s
    HFr   r  c                   "    \ rS rSrSrS rSrSrg)XNi  z>Independent class that can test equality, but not non-equalityc                     gr  r   rH   s     r   rs   	XN.__eq__  r  r   Nr   )rw   rx   ry   rz   r{   rs   r  r   r   r   r   r  r    s    HFr   r  c                   $    \ rS rSrSrS rS rSrg)FallbackBlockingTestsi  z#Unit tests for None method blockingc                    [        5       [        5       [        5       [        5       4u  pp4U R	                  X5        U R	                  X5        U R	                  X!5        U R	                  X5        U R                  [        [        XA5        U R                  [        [        X5        U R                  [        [        X15        g r   )r	  r  r  r  r   assertRaisesr#   r   )r%   efsr   s        r   test_fallback_rmethod_blocking4FallbackBlockingTests.test_fallback_rmethod_blocking  s    Wac13+
a)R.)R.)R.r   c                 ,   [        5       [        5       [        5       p2nU R                  X:g  5        U R	                  [
        [        X5        U R	                  [
        [        X!5        U R                  X:g  5        U R	                  [
        [        X15        g r   )r	  r  r  assertFalser   r#   r   )r%   r!  snxns       r   test_fallback_ne_blocking/FallbackBlockingTests.test_fallback_ne_blocking  si    GRT24r )R/)R/!)R/r   r   N)rw   rx   ry   rz   r{   r$  r*  r   r   r   r   r  r    s    -
/0r   r  __main__)!r{   r   operatorr   r   r   abcr   r   r   r   r   objectr   TestCaser   r   r   r   r   r   r   registerr  r	  r  r  r  r  r  r  rw   mainr   r   r   <module>r3     s   ?    g& gRe+(## e+T 	 		7 		 	
 
 

1J(++ J&F 
 2 2   0H-- 0. zMMO r   