+
    Bi8                     ,   R t ^ RIt^ RIHtHtHt ^ RIHt R tR t	R t
R t ! R R	]4      t ! R
 R]P                  4      t ! R R4      tR t ! R R]4      t ! R R]]R7      t ! R R]4      t ! R R]4      t]P-                  ]4        ! R R]P                  4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R  R!]4      t ! R" R#]4      t ! R$ R%4      t ! R& R']P                  4      t]R(8X  d   ]P@                  ! 4        R# R# ))z9Tests for binary operators on subtypes of built-in types.N)eqlene)ABCMetac                ,    V '       d   W,          T rK  V# )z1Greatest common divisor using Euclid's algorithm. )abs   &&&/usr/lib/python3.14/test/test_binop.pygcdr      s    
sA1H    c                "    \        V \        4      # )z-Test whether an object is an instance of int.)
isinstanceintxs   &r
   isintr          ar   c                ^    \         \        \        3 F  p\        W4      '       g   K   ^# 	  ^ # )zATest whether an object is an instance of a built-in numeric type.)r   floatcomplexr   )r   Ts   & r
   isnumr      s&    % a ! r   c                "    \        V \        4      # )z7Test whether an object is an instance of the Rat class.)r   Ratr   s   &r
   isRatr      r   r   c                      a  ] tR t^t o RtRR.tRR ltR t]! ]R4      t	R t
]! ]
R4      tR tR	 tR
 tR tR t]tR tR tR t]tR tR tR tR tR tR tR tR tR tRtV t R# )r   z9Rational number implemented as a normalized pair of ints.	_Rat__num	_Rat__denc                $   \        V4      '       g   \        RV,          4      h\        V4      '       g   \        RV,          4      hV^ 8X  d   \        R4      h\        W!4      p\	        W,          4      V n        \	        W#,          4      V n        R# )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)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                    V P                   # )z7Accessor function for read-only 'num' attribute of Rat.)r   r"   s   &r
   _get_numRat._get_num1       zzr   Nc                    V P                   # )z7Accessor function for read-only 'den' attribute of Rat.)r   r)   s   &r
   _get_denRat._get_den6   r,   r   c                @    RV P                   V P                  3,          # )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                *    \        \        V 4      4      # )z=Convert a Rat to a string resembling a decimal numeric value.)strr   r)   s   &r
   __str__Rat.__str__?   s    5;r   c                J    V P                   R,          V P                  ,          # )zConvert a Rat to a float.      ?r1   r)   s   &r
   	__float__Rat.__float__C   s    zz#~djj((r   c                    V P                   ^8X  d    \        V P                  4      # \        R\	        V 4      ,          4      h  \         d    \        R\	        T 4      ,          4      hi ; i)z,Convert a Rat to an int; self.den must be 1.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 'A*c                v   \        V4      '       d   \        V4      p\        V4      '       de   \        V P                  VP                  ,          VP                  V P                  ,          ,           V P                  VP                  ,          4      # \        V4      '       d   \        V 4      V,           # \        # )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                v   \        V4      '       d   \        V4      p\        V4      '       de   \        V P                  VP                  ,          VP                  V P                  ,          ,
          V P                  VP                  ,          4      # \        V4      '       d   \        V 4      V,
          # \        # )z)Subtract two Rats, or a Rat and a number.rC   rE   s   &&r
   __sub__Rat.__sub__^   rI   r   c                v   \        V4      '       d   \        V4      p\        V4      '       de   \        VP                  V P                  ,          V P                  VP                  ,          ,
          V P                  VP                  ,          4      # \        V4      '       d   V\        V 4      ,
          # \        # )z9Subtract two Rats, or a Rat and a number (reversed args).rC   rE   s   &&r
   __rsub__Rat.__rsub__i   sy    <<JE<<u{{4::-

5;;0FFzz%++-/ /<<5;&&r   c                j   \        V4      '       dC   \        V P                  VP                  ,          V P                  VP                  ,          4      # \	        V4      '       d(   \        V P                  V,          V P                  4      # \        V4      '       d   \        V 4      V,          # \        # )z)Multiply two Rats, or a Rat and a number.r   r   r   r   r   r   r   rD   rE   s   &&r
   __mul__Rat.__mul__t   ss    <<tzz%++-tzz%++/EFF<<tzz%'44<<;u$$r   c                j   \        V4      '       dC   \        V P                  VP                  ,          V P                  VP                  ,          4      # \	        V4      '       d(   \        V P                  V P                  V,          4      # \        V4      '       d   \        V 4      V,          # \        # )z'Divide two Rats, or a Rat and a number.rQ   rE   s   &&r
   __truediv__Rat.__truediv__   ss    <<tzz%++-tzz%++/EFF<<tzz4::e#344<<;&&r   c                h   \        V4      '       dC   \        VP                  V P                  ,          VP                  V P                  ,          4      # \	        V4      '       d'   \        WP                  ,          V P                  4      # \        V4      '       d   V\        V 4      ,          # \        # )z7Divide two Rats, or a Rat and a number (reversed args).rQ   rE   s   &&r
   __rtruediv__Rat.__rtruediv__   sq    <<u{{4::-u{{4::/EFF<<uZZ'44<<5;&&r   c                    \        V4      '       d   \        V4      pM\        V4      '       g   \        # W,          pVP                  VP
                  ,          # )z.Divide two Rats, returning the floored result.)r   r   r   rD   r   r   r"   rF   r   s   && r
   __floordiv__Rat.__floordiv__   s=    <<JEu!!Jww!''!!r   c                L    W,          pVP                   VP                  ,          # )z>Divide two Rats, returning the floored result (reversed args).r1   r[   s   && r
   __rfloordiv__Rat.__rfloordiv__   s    Jww!''!!r   c                    \        V4      '       d   \        V4      pM\        V4      '       g   \        # W,          pW W,          ,
          3# )z2Divide two Rats, returning quotient and remainder.)r   r   r   rD   r[   s   && r
   
__divmod__Rat.__divmod__   s:    <<JEu!!K%)#$$r   c                    \        V4      '       d   \        V4      pM\        V4      '       g   \        # \	        W4      # )zBDivide two Rats, returning quotient and remainder (reversed args).)r   r   r   rD   divmodrE   s   &&r
   __rdivmod__Rat.__rdivmod__   s.    <<JEu!!e""r   c                &    \        W4      ^,          # )zTake one Rat modulo another.re   rE   s   &&r
   __mod__Rat.__mod__   s    d"1%%r   c                &    \        W4      ^,          # )z,Take one Rat modulo another (reversed args).ri   rE   s   &&r
   __rmod__Rat.__rmod__   s    e"1%%r   c                P   \        V4      '       d'   V P                  ^8H  ;'       d    V P                  V8H  # \        V4      '       d;   V P                  VP                  8H  ;'       d    V P                  VP                  8H  # \	        V4      '       d   \        V 4      V8H  # \        # )zCompare two Rats for equality.)r   r   r   r   r   r   rD   rE   s   &&r
   __eq__
Rat.__eq__   sy    <<::?::tzzU'::<<::,JJu{{1JJ<<;%''r   )__den__num)       )!__name__
__module____qualname____firstlineno____doc__	__slots__r&   r*   propertyr#   r.   r$   r2   r6   r:   r@   rG   __radd__rK   rN   rR   __rmul__rU   rX   r\   r_   rb   rf   rj   rm   rp   __static_attributes____classdictcell____classdict__s   @r
   r   r      s     Ck*I! 8T
"C 8T
"C8 )A	 H		 H""
%#&& r   r   c                   Z   a  ] tR t^t o RtR tR tR tR tR t	R t
R tR	 tR
 tRtV tR# )RatTestCasez3Unit tests for Rat class and its support utilities.c                   V P                  \        ^
^4      ^4       V P                  \        ^
^4      ^4       V P                  \        ^
^4      ^4       V P                  \        ^d^4      ^4       V P                  \        R^4      R4       V P                  \        ^
R4      ^4       V P                  \        RR4      R4       \        ^^4       F  p\        ^^4       F}  pV P                  \        W4      ^ 8  4       V P                  \        V) V4      ^ 8  4       V P                  \        W) 4      ^ 8  4       V P                  \        V) V) 4      ^ 8  4       K  	  K  	  R# )
   N)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           	        \        ^
^4      pV P                  VP                  ^4       V P                  VP                  ^4       \        ^
R4      pV P                  VP                  R	4       V P                  VP                  ^4       \        R
^4      pV P                  VP                  R	4       V P                  VP                  ^4       \        R
R4      pV P                  VP                  ^4       V P                  VP                  ^4       \        ^4      pV P                  VP                  ^4       V P                  VP                  ^4        \        ^^ 4      pV P	                  R4       RRRR. / R\         \        3	 FL  p \        V4      pV P	                  RV,          4        \        ^V4      pV P	                  RV,          4       KN  	  R#   \
         d     Lri ; i  \         d     LIi ; i  \         d     K  i ; i)r   z(Rat(1, 0) didn't raise ZeroDivisionError0g        y                NzRat(%r) didn't raise TypeErrorz!Rat(1, %r) didn't raise TypeErrorir   r   r   )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(-G9G%$G%(G65G69HHc                   V P                  \        ^^4      \        ^^4      ,           ^4       V P                  \        ^^4      ^,           \        ^^4      4       V P                  ^\        ^^4      ,           \        ^^4      4       V P                  R\        ^^4      ,           R4       V P                  \        ^^4      R,           R4       R# )   r9         ?N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                   V P                  \        ^^4      \        ^^4      ,
          \        ^^
4      4       V P                  \        ^^4      ^,
          \        ^^4      4       V P                  ^\        ^^4      ,
          \        ^^4      4       V P                  \        ^^4      R,
          R4       V P                  R\        ^^4      ,
          R4       R# )   r9         ?Nr   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                   V P                  \        ^^4      \        ^^4      ,          \        ^
^4      4       V P                  \        ^
^4      ^,          ^
4       V P                  ^\        ^
^4      ,          ^
4       V P                  \        ^
^4      R,          R4       V P                  R\        ^
^4      ,          R4       R# )r   r   r9   Nr   r)   s   &r
   test_mulRatTestCase.test_mul	  s    QSAY.B<Ra,SQZ,Rc)3/s2qz)3/r   c                   V P                  \        ^
^4      \        ^^4      ,          \        ^^4      4       V P                  \        ^
^4      ^,          \        ^
^	4      4       V P                  ^\        ^4      ,          \        ^^4      4       V P                  R\        ^^4      ,          R4       V P                  \        ^^4      R,          R4       R# )r         @r   Nr   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                >   V P                  \        ^
4      \        ^4      ,          ^4       V P                  \        ^
^4      \        ^^4      ,          ^4       V P                  \        ^
4      ^,          ^4       V P                  ^
\        ^4      ,          ^4       R# )r   Nr   r)   s   &r
   test_floordivRatTestCase.test_floordiv  sp    RCF*A.Rs1ay0!4RAq)s1vq)r   c                (   V P                  \        ^
4      \        ^^4      4       V P                  \        ^
4      ^
4       V P                  ^
\        ^
4      4       V P                  \        ^
4      R4       V P                  R\        ^
4      4       R# )r   g      $@Nr   r)   s   &r
   test_eqRatTestCase.test_eq  sl    R#b!*-R"%SW%R$'s2w'r   c                   V P                  \        ^
^4      \        ^^4      ,          \        ^^4      4       V P                  \        ^
^4      ^,          \        ^
^	4      4       V P                  ^\        ^4      ,          \        ^^4      4       V P                  R\        ^^4      ,          R4       V P                  \        ^^4      R,          R4       V P                  \        R4      R4       R# )r   r   r   z1/2r   N)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)rv   rw   rx   ry   rz   r   r   r   r   r   r   r   r   r   r   r   r   s   @r
   r   r      s<     =1"EH//0/*(+ +r   r   c                   0   a  ] tR tRt o RtR tR tRtV tR# )OperationLoggeri/  z.Base class for classes with operation logging.c                    Wn         R # Nlogger)r"   r   s   &&r
   r&   OperationLogger.__init__1  s    r   c                &    V P                   ! V!   R # r   r   )r"   argss   &*r
   log_operationOperationLogger.log_operation3  s    Tr   r   N)	rv   rw   rx   ry   rz   r&   r   r   r   r   s   @r
   r   r   /  s     8 r   r   c                    . p. pV F$  pVP                  V! VP                   4      4       K&  	   V ! V!   V#   \         d     T# i ; i)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   8 AAc                   2   a  ] tR tRt o R tR tR tRtV tR# )AiD  c                0    V P                  R 4       \        # )A.__eq__r   rD   rE   s   &&r
   rp   A.__eq__E      :&r   c                0    V P                  R 4       \        # )A.__le__r   rE   s   &&r
   __le__A.__le__H  r   r   c                0    V P                  R 4       \        # )A.__ge__r   rE   s   &&r
   __ge__A.__ge__K  r   r   r   N	rv   rw   rx   ry   rp   r   r   r   r   r   s   @r
   r   r   D        r   r   c                   2   a  ] tR tRt o R tR tR tRtV tR# )BiO  c                0    V P                  R 4       \        # )B.__eq__r   rE   s   &&r
   rp   B.__eq__P  r   r   c                0    V P                  R 4       \        # )B.__le__r   rE   s   &&r
   r   B.__le__S  r   r   c                0    V P                  R 4       \        # )B.__ge__r   rE   s   &&r
   r   B.__ge__V  r   r   r   Nr   r   s   @r
   r   r   O  r   r   r   )	metaclassc                   2   a  ] tR tRt o R tR tR tRtV tR# )CiZ  c                0    V P                  R 4       \        # )C.__eq__r   rE   s   &&r
   rp   C.__eq__[  r   r   c                0    V P                  R 4       \        # )C.__le__r   rE   s   &&r
   r   C.__le__^  r   r   c                0    V P                  R 4       \        # )C.__ge__r   rE   s   &&r
   r   C.__ge__a  r   r   r   Nr   r   s   @r
   r   r   Z  r   r   r   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )Vie  zVirtual subclass of Bc                0    V P                  R 4       \        # )V.__eq__r   rE   s   &&r
   rp   V.__eq__g  r   r   c                0    V P                  R 4       \        # )zV.__le__r   rE   s   &&r
   r   V.__le__j  r   r   c                0    V P                  R 4       \        # )V.__ge__r   rE   s   &&r
   r   V.__ge__m  r   r   r   N)
rv   rw   rx   ry   rz   rp   r   r   r   r   r   s   @r
   r   r   e  s      r   r   c                   &   a  ] tR tRt o R tRtV tR# )OperationOrderTestsis  c                B   V P                  \        \        \        \        4      R R .4       V P                  \        \        \        \        4      R R.4       V P                  \        \        \        \        4      RR .4       V P                  \        \        \        \
        4      RR.4       V P                  \        \        \
        \        4      RR.4       V P                  \        \        \        \        4      RR.4       V P                  \        \        \        \        4      RR.4       V P                  \        \        \        \        4      RR.4       V P                  \        \        \        \
        4      RR.4       V P                  \        \        \
        \        4      RR.4       V P                  \        \        4       V P                  \        \        \        \        4      RR	.4       V P                  \        \        \        \        4      RR
.4       R# )r   r   r   r   r   r   r   r   r   r   r   N)	r   r   r   r   r   r   r   assertIsSubclassr   r)   s   &r
   test_comparison_orders*OperationOrderTests.test_comparison_orderst  sz   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a#RA.Z0HIRA.Z0HIr   r   N)rv   rw   rx   ry   r   r   r   r   s   @r
   r   r   s  s     J Jr   r   c                   *   a  ] tR tRt o RtR tRtV tR# )SupEqi  zClass that can test equalityc                    R # Tr   rE   s   &&r
   rp   SupEq.__eq__      r   r   N)rv   rw   rx   ry   rz   rp   r   r   r   s   @r
   r   r     s     & r   r   c                       ] tR tRtRtRtRtR# )Si  z"Subclass of SupEq that should failNr   rv   rw   rx   ry   rz   rp   r   r   r   r
   r  r    
    ,Fr   r  c                       ] tR tRtRtRtR# )Fi  z'Independent class that should fall backr   N)rv   rw   rx   ry   rz   r   r   r   r
   r	  r	    s    1r   r	  c                       ] tR tRtRtRtRtR# )Xi  z"Independent class that should failNr   r  r   r   r
   r  r    r  r   r  c                       ] tR tRtRtRtRtR# )SNi  z>Subclass of SupEq that can test equality, but not non-equalityNr   )rv   rw   rx   ry   rz   __ne__r   r   r   r
   r  r    s
    HFr   r  c                   .   a  ] tR tRt o RtR tRtRtV tR# )XNi  z>Independent class that can test equality, but not non-equalityc                    R # r  r   rE   s   &&r
   rp   	XN.__eq__  r  r   Nr   )	rv   rw   rx   ry   rz   rp   r  r   r   r   s   @r
   r  r    s     HFr   r  c                   0   a  ] tR tRt o RtR tR tRtV tR# )FallbackBlockingTestsi  z#Unit tests for None method blockingc                   \        4       \        4       \        4       \        4       3w  rr4V P	                  W4       V P	                  W4       V P	                  W!4       V P	                  W4       V P                  \        \        WA4       V P                  \        \        W4       V P                  \        \        W14       R # 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                .   \        4       \        4       \        4       r2pV P                  W8g  4       V P	                  \
        \        W4       V P	                  \
        \        W!4       V P                  W8g  4       V P	                  \
        \        W14       R # 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)	rv   rw   rx   ry   rz   r  r   r   r   r   s   @r
   r  r    s     -
/0 0r   r  __main__)!rz   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  rv   mainr   r   r
   <module>r)     s   ?    g& gRe+(## e+T 	 		7 		 	
 
 

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