
    ;e                     N   	 d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZmZ d dlZd dlmZmZ ej        Z G d de          Z G d d	e          Z G d
 dej                  Zd Z G d dej                  Zedk    r ej                     dS dS )    )Decimal)requires_IEEE_754N)copydeepcopy)dumpsloadsc                   J    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 ZeZd
S )
DummyFloatc                 \    t          |t                    st          d          || _        d S )Nz-DummyFloat can only be initialized from float)
isinstancefloat	TypeErrorvalueselfr   s     */usr/lib/python3.11/test/test_fractions.py__init__zDummyFloat.__init__   s/    %'' 	MKLLL


    c                     t          |t          j                  r) |t                              | j                  |          S t          |t                    r || j        |j                  S t          S N)r   numbersRationalF
from_floatr   r
   NotImplemented)r   otherops      r   _richcmpzDummyFloat._richcmp   se    eW-.. 	"2all4:..666z** 	"2dj%+...!!r   c                 B    |                      |t          j                  S r   )r   operatoreqr   r   s     r   __eq__zDummyFloat.__eq__#       DMM%$E$EEr   c                 B    |                      |t          j                  S r   )r   r    ler"   s     r   __le__zDummyFloat.__le__$   r$   r   c                 B    |                      |t          j                  S r   )r   r    ltr"   s     r   __lt__zDummyFloat.__lt__%   r$   r   c                 B    |                      |t          j                  S r   )r   r    ger"   s     r   __ge__zDummyFloat.__ge__&   r$   r   c                 B    |                      |t          j                  S r   )r   r    gtr"   s     r   __gt__zDummyFloat.__gt__'   r$   r   c                     d S r    r   s    r   	__float__zDummyFloat.__float__*         r   c                     d S r   r2   r"   s     r   __sub__zDummyFloat.__sub__.   r5   r   N)__name__
__module____qualname__r   r   r#   r'   r*   r-   r0   r4   r7   __rsub__r2   r   r   r
   r
      s        B  
" " " FEEEEEEEEEEEEEEH H HF F FHHHr   r
   c                   :    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	dS )	DummyRationalc                 X    t          j        ||          }||z  | _        ||z  | _        d S r   )mathgcdnumden)r   rA   rB   gs       r   r   zDummyRational.__init__6   s-    HS#!8!8r   c                     t          |t          j                  r | j        |j        k    o| j        |j        k    S t          S r   )r   	fractionsFractionrA   
_numeratorrB   _denominatorr   r"   s     r   r#   zDummyRational.__eq__;   sC    eY/00 	"H 00 3H 224 "!r   c                 B    | j         |j        z  | j        |j        z  k     S r   rA   rH   rB   rG   r"   s     r   r*   zDummyRational.__lt__B   !    x%,,tx%:J/JJKr   c                 B    | j         |j        z  | j        |j        z  k    S r   rJ   r"   s     r   r0   zDummyRational.__gt__E   rK   r   c                 B    | j         |j        z  | j        |j        z  k    S r   rJ   r"   s     r   r'   zDummyRational.__le__H   !    x%,,5;K0KKLr   c                 B    | j         |j        z  | j        |j        z  k    S r   rJ   r"   s     r   r-   zDummyRational.__ge__K   rN   r   c                     d S r   r2   r3   s    r   r4   zDummyRational.__float__P   r5   r   N)
r8   r9   r:   r   r#   r*   r0   r'   r-   r4   r2   r   r   r=   r=   3   s        K  
" " "L L LL L LM M MM M M
8 8 8 8 8r   r=   c                       e Zd ZdS )DummyFractionN)r8   r9   r:   r2   r   r   rR   rR   S   s        @@r   rR   c                     | j         | j        fS r   )	numeratordenominator)rs    r   _componentsrW   W   s    K''r   c                       e Zd Zd Zd Zd Zd Zed             Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd%S )&FractionTestc                     	 |                      t          |          t          |                     |                      ||           d S r   )assertEqualtyper   expectedactuals      r   assertTypedEqualszFractionTest.assertTypedEquals]   sC    Bhf6666*****r   c           	          	 |                      ||           |                     t          t          t          |                    t          t          t          |                               d S r   )assertTupleEqualassertListEquallistmapr\   r]   s      r   assertTypedTupleEqualsz#FractionTest.assertTypedTupleEqualsb   s[    Ph///T#dH"5"566Sv=N=N8O8OPPPPPr   c                     	 	  ||i | |                      d|j        z             d S # |$ r.}|                     |t          |                     Y d }~d S d }~ww xY w)Nz%s not raised)failr8   r[   str)r   exc_typemessagecallableargskwargses          r   assertRaisesMessagez FractionTest.assertRaisesMessageg   s    N	;Hd%f%%% IIo(99:::::  	. 	. 	.Wc!ff---------	.s   * A#AAc                    |                      dt          t                                           |                      dt          t          d                               |                      dt          t          t          dd                                         |                      dt          t          dd                               |                      dt          t          dd                               |                      d	t          t          d
d
                               |                      dt          t          dd                               |                      dt          t          dd                               |                      dt          t          d                               |                      dt          t          t          dd          d                               |                      dt          t          dt          dd                                         |                      dt          t          t          dd          t          dd                                         |                     t          dt          dd           |                     t          t          d           |                     t          t          d d           |                     t          t          dd!           |                     t          t          dd"           |                     t          t          ddd           d S )#Nr      )   rs   rt   rt      rv   )rs   rw   rs   )rs   rs   )rs         
   )rt      r|   )      m+?R rs   r}   )rv   M      )rz   ry   	   )i	  i	     c  q   zFraction(12, 0)   r   y      ?      @3/2y                y              ?)r[   rW   r   rp   ZeroDivisionErrorassertRaisesr   r3   s    r   testInitzFractionTest.testInitq   s   QSS!1!1222QqTT!2!2333QqAwwZZ!8!8999+aAhh"7"7888+a2hh"7"7888Qr2YY!7!7888Qq"XX!6!6777+a2hh"7"7888k!F))&<&<===+a!Qnn"="=>>>+a1S!99oo">">???{1Qr1XXqc{{3K3K'L'LMMM  !24E!"B	+ 	+ 	+)Q111)Qq111)Q2...)Q2...)Q1a00000r   c                 :   |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                     t          t          t          d                     |                     t          t          t          d                     |                     t          t          t          d	                     d S )
N)rz   ry         @rr          )   L33f l          皙?naninf-inf)r[   rW   r   r   
ValueErrorr   OverflowErrorr3   s    r   testInitFromFloatzFractionTest.testInitFromFloat   s    QsVV!4!4555QtWW!5!5666>$QsVV,,	. 	. 	. 	*au666-E%LL999-E&MM:::::r   c           
         |                      dt          t          t          d                                         |                      dt          t          t          d                                         |                      dt          t          t          d                                         |                     t
          t          t          d                     |                     t
          t          t          d                     |                     t          t          t          d	                     |                     t          t          t          d
                     d S )N)r   r{   z1.1)rt      z3.5e-2rr   z.000e20r   snanr   r   )r[   rW   r   r   r   r   r   r3   s    r   testInitFromDecimalz FractionTest.testInitFromDecimal   s   $Qwu~~%6%677	9 	9 	9$Qwx'8'8%9%9::	< 	< 	<$Qwy'9'9%:%:;;	= 	= 	= 	*a888*a999-GENN;;;-GFOO<<<<<r   c                 <   |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d	                               |                      d
t          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                               |                      dt          t          d                                |                      d!t          t          d"                               |                      d#t          t          d$                               |                      d#t          t          d%                               |                     t          d&t          d'           |                     t
          d(t          d)           |                     t
          d*t          d+           |                     t
          d,t          d-           |                     t
          d.t          d/           |                     t
          d0t          d1           |                     t
          d2t          d3           |                     t
          d4t          d5           |                     t
          d6t          d7           |                     t
          d8t          d9           |                     t
          d:t          d;           |                     t
          d<t          d=           |                     t
          d>t          d?           |                     t
          d@t          dA           |                     t
          dBt          dC           |                     t
          dDt          dE           |                     t
          dFt          dG           |                     t
          dHt          dI           |                     t
          dJt          dK           |                     t
          dLt          dM           |                     t
          dNt          dO           |                     t
          dPt          dQ           |                     t
          dRt          dS           |                     t
          dTt          dU           dV}|                     t
          dW|z   dXz   t          |           |                     t
          dY|z   dXz   t          dZ|z              |                     t
          d[|z   dXz   t          d\|z              |                     t
          d]|z   dXz   t          d^|z              d S )_N)rz   rs   5)rv   ry   r   z 
  +3/2)ry   z-3/2  )   ry   z    013/02 
  )   rz   z 3.2 )irz   z -3.2 )r   rs   z -3. )rv   rz   z .6 )rs   i5  z32.e-5)i@B rs   z1E+06)irs   z-1.23e4rr   z .0e+0	z-0.000e0){   rs   1_2_3))   k   z1_2_3/3_2_1)  i  z3.14_15)r   l    @9Hz3.14_15e-1_0)e   d   z1.01z1.0_1zFraction(3, 0)z3/0z"Invalid literal for Fraction: '3/'z3/z"Invalid literal for Fraction: '/2'z/2z$Invalid literal for Fraction: '3 /2'z3 /2z$Invalid literal for Fraction: '3/+2'z3/+2z%Invalid literal for Fraction: '+ 3/2'z+ 3/2z#Invalid literal for Fraction: '3a2'3a2z%Invalid literal for Fraction: '3/7.2'z3/7.2z%Invalid literal for Fraction: '3.2/7'z3.2/7z!Invalid literal for Fraction: '.'.z!Invalid literal for Fraction: '_'_z"Invalid literal for Fraction: '_1'_1z$Invalid literal for Fraction: '1__2'1__2z"Invalid literal for Fraction: '/_'z/_z#Invalid literal for Fraction: '1_/'z1_/z#Invalid literal for Fraction: '_1/'z_1/z%Invalid literal for Fraction: '1__2/'z1__2/z#Invalid literal for Fraction: '1/_'z1/_z$Invalid literal for Fraction: '1/_1'z1/_1z&Invalid literal for Fraction: '1/1__2'z1/1__2z&Invalid literal for Fraction: '1._111'z1._111z&Invalid literal for Fraction: '1.1__1'z1.1__1z'Invalid literal for Fraction: '1.1e+_1'z1.1e+_1z)Invalid literal for Fraction: '1.1e+1__1'z	1.1e+1__1399999999999999999999999999999999999999999999999999_zInvalid literal for Fraction: ''z!Invalid literal for Fraction: '1/z1/z!Invalid literal for Fraction: '1.z1.z$Invalid literal for Fraction: '1.1+ez1.1+e)r[   rW   r   rp   r   r   )r   vals     r   testFromStringzFractionTest.testFromString   s'   QsVV!4!4555QuXX!6!6777Q{^^!<!<===+akk":":;;;+a0A.B.B"C"CDDD+ajj"9"9:::;q{{#;#;<<<+ajj"9"9:::QvYY!7!7888K($<$<==={1W::'>'>???k!I,,&?&?@@@Qz]]!;!;<<<Qz]]!;!;<<<;qzz#:#:;;;K-0@0@$A$ABBB{1Y<<'@'@AAA);q7H7H+I+IJJJ[6%;%;<<<[7%<%<===  /u	 	 	 	  <t	 	 	 	  <t	 	 	 	  >v	 	 	 	  >v	 	 	 	  ?w	 	 	 	  =u	 	 	 	  ?w	 	 	 	  ?w	 	 	 	  ;s	 	 	 	  ;s	 	 	 	  <t	 	 	 	  >v	 	 	 	  <t	 	 	 	  =u	 	 	 	  =u	 	 	 	  ?w	 	 	 	  =u	 	 	 	  >v	 	 	 	  @x	 	 	 	  @x	 	 	 	  @x	 	 	 	  Ay	 	 	 	  C{	 	 	   9C?#Es	 	 	 	  ;cACGtcz	 	 	 	  ;cACGtcz	 	 	 	  >DsJw}	 	 	 	 	r   c                    t          dd          }|                    dd           |                     dt          |                     |                     t
          t          |dd           |                     t
          t          |dd	           |                     dt          |                     d
|_        d|_        |                     dt          |                     | 	                    t          d
d          |           d S )Nrt   rv   ry   r|   ru   rT   r   rU         )r   ry   )
r   r   r[   rW   r   AttributeErrorsetattrrG   rH   assertNotEqualr   rV   s     r   testImmutablezFractionTest.testImmutable  s    aGG	

1bQ000.'1k2FFF.'1mQGGGQ000 Q000AaGGQ'''''r   c                    |                      t          t          j        d           |                     dt          t                              d                               d}|                     |dft          t                              |                               |                     dt          t                              d                               |                     dt          t                              d                               |                     d	t          t                              d
                               |                     dt          t                              d                               |                     t          d          t          t                              d                               |                     dt          t                              d                               |                     dt          t                              d                               d}||z
  }|                     t          dt          j        |           |                     t          dt          j        |            |                     t          dt          j        |           d S )N      @      @)r{   rs   r{   l   {C	 rs   rr   r         $@)ry   g      )l      l+?R rs   J-Dr}   )r   l           g	@g      (cannot convert Infinity to integer ratio#cannot convert NaN to integer ratio)
r   r   r   r   r[   rW   r   rp   r   r   )r   bigintr   r   s       r   testFromFloatzFractionTest.testFromFloat%  sB   )Q\4888+all2.>.>"?"?@@@$&!k!,,v2F2F&G&GHHHQ\\$-?-?!@!@AAA+all4.@.@"A"ABBB+all4.@.@"A"ABBB5$Q\\$%7%788	: 	: 	:vall4.@.@(A(ABBB=$Q\\#%6%677	9 	9 	9eALL$5$566777Ci  EL#	 	 	 	  EL3$	  	  	  	  =L#	 	 	 	 	r   c                 F   |                      t          t          j        d           |                     t          dd          t                              d                     |                     t          d          t                              t          d                               |                     t          dd          t                              t          d                               |                     t          dd          t                              t          d	                               |                     t          d
          t                              t          d                               |                     dt          dd          z
  t                              t          d                               |                     t          dt          j        t          d                     |                     t          dt          j        t          d                     |                     t          dt          j        t          d                     |                     t          dt          j        t          d                     d S )Nr   r{   rs   r   z-0rz   z0.5i  z5e-3i  5e3l       73Me'z 0.999999999999999999999999999999r   r   r   r   r   r   )	r   r   r   from_decimalr[   r   rp   r   r   r3   s    r   testFromDecimalzFractionTest.testFromDecimalA  s   )Q^T:::2q1>>"#5#56661q~~gdmm<<===1b1>>'%..#A#ABBB1dQ^^GFOO%D%DEEE4!.."@"@AAAQq&\\)(@(@AA	C 	C 	C 	  ENGENN	, 	, 	, 	  ENGFOO	- 	- 	- 	  =NGENN	, 	, 	, 	  =NGFOO	- 	- 	- 	- 	-r   c                    |                      t          dd                                          d           |                      t          dd                                          d           |                      t          dd                                          d           |                      t          dd                                          d           d S )	Nr   r   )ry   rv   )rx   rv   ir   rr   )r[   r   as_integer_ratior3   s    r   test_as_integer_ratioz"FractionTest.test_as_integer_ratioY  s    1a1133V<<<2q2244g>>>1b2244g>>>1a1133V<<<<<r   c                    t          d          }|                     |                    d          t          dd                     |                     |                    d           t          dd                     |                     |                    d          t          dd                     |                     |                    d          t          dd                     |                     t          d	d
                              d          t          d                     |                     t          d	d
                              d          t          dd                     |                     t          d                              d          t          d                     dD ]1}|                     t          dt          d          j        |           2d S )Nz3.1415926535897932i'  r   r   ip   iM  j      r   r   rs   r   f   r   )r   rw   z$max_denominator should be at least 1)r   r[   limit_denominatorrp   r   )r   rpiis      r   testLimitDenominatorz!FractionTest.testLimitDenominator_  s   $%%..u55qc{{CCC#//666$EEE..s33QsC[[AAA..s33QsC[[AAA366s;;QqTTBBB366s;;QsC[[III1//66!=== 	+ 	+A$$B!&+ + + +	+ 	+r   c                    |                      dt          j        t          dd                               |                      dt          j        t          dd                               |                      dt          j        t          dd                               |                      dt          j        t          dd                               |                      dt          j        t          dd                               |                      dt          t          dd                               |                      dt          t          dd                               |                      dt          t          d	d                               |                      dt          t          d
d                               |                      dt          t          dd                               |                     dt          t          dd                               |                     dt          t          dd                               |                      dt          t          dd                               |                     t          t          t          d                     |                     dt          t          t          d          t          d                                         |                      dt          t          dd                               d S )Nrw   ir{   rs   r   rx   r   r   r   FTrv   ry   r     22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222227gUUUUUU?  33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333331?        )r`   r?   truncr   floorceilintroundr[   boolr   r   r   assertAlmostEqualcomplexr3   s    r   testConversionszFractionTest.testConversionsm  s   r4:aRjj#9#9:::q$*Qr2YY"7"7888r4:aRjj#9#9:::r49QsBZZ#8#8999r49QsBZZ#8#8999r3qbzz??333q%"b		"2"2333q%"b		"2"2333r53#4#4555r52r#3#3444Qq!WW...tAaGG}}---sE!Ar((OO444 	-K0@0@AAAu$Qs;'7'7[9I9I%J%JKK	M 	M 	M 	vwq2ww'7'788888r   c                    t          dd          }|                     |t          j                   |                     t          |          d           |                     t          t          |                    t
                     d S )Nrv   ry   rs   )r   assertIsInstancetypingSupportsIntr[   r   r\   )r   fs     r   testSupportsIntzFractionTest.testSupportsInt  sl    aGGa!3444Q###c!ffs+++++r   c                     G fddt                     t           d           d                    }|                     |j                   |                     |j                   |                     |t
          j                   |                     t          |          d           |                     t          t          |                    t                      d S )Nc                   V    e Zd Z	 ed             Ze fd            Z fdZ fdZdS ):FractionTest.testIntGuaranteesIntReturn.<locals>.CustomIntc                     | S r   r2   r3   s    r   rT   zDFractionTest.testIntGuaranteesIntReturn.<locals>.CustomInt.numerator  s    r   c                      d          S Nrs   r2   )r   	CustomInts    r   rU   zFFractionTest.testIntGuaranteesIntReturn.<locals>.CustomInt.denominator  s     y||#r   c                 T     t          |           t          |          z            S r   r   r   r   r   s     r   __mul__zBFractionTest.testIntGuaranteesIntReturn.<locals>.CustomInt.__mul__  s$     yTSZZ!7888r   c                 T     t          |           t          |          z            S r   r   r   s     r   __floordiv__zGFractionTest.testIntGuaranteesIntReturn.<locals>.CustomInt.__floordiv__  s$     yTc%jj!8999r   N)r8   r9   r:   propertyrT   rU   r   r   )r   s   r   r   r     s           X $ $ $ $ X$9 9 9 9 9: : : : : : :r   r   r   rz   ry   )	r   r   r   rT   rU   r   r   r[   r\   )r   r   r   s     @r   testIntGuaranteesIntReturnz'FractionTest.testIntGuaranteesIntReturn  s    
	: 	: 	: 	: 	: 	: 	: 	: 	: 	:* iimmYYq\\**ak9555amY777a!3444Q###c!ffs+++++r   c                    t           j         G d d                      }t          j                            |            |d          }t          |          }|                     |j        |           |                     t          |          d            |d          }t          |          }|                     t          |          d           d S )Nc                   >    e Zd ZdZd Zd Zed             Zd ZeZ	dS )=FractionTest.testBoolGuarateesBoolReturn.<locals>.CustomValuers   c                     || _         d S r   )r   r   s     r   r   zFFractionTest.testBoolGuarateesBoolReturn.<locals>.CustomValue.__init__  s    "


r   c                 *    t          | j                  S r   )r   r   r3   s    r   __bool__zFFractionTest.testBoolGuarateesBoolReturn.<locals>.CustomValue.__bool__  s    DJ'''r   c                     | S r   r2   r3   s    r   rT   zGFractionTest.testBoolGuarateesBoolReturn.<locals>.CustomValue.numerator  s	     r   c                      t          d          )Nz&Avoid comparisons in Fraction.__bool__)AssertionErrorr"   s     r   r#   zDFractionTest.testBoolGuarateesBoolReturn.<locals>.CustomValue.__eq__  s    $%MNNNr   N)
r8   r9   r:   rU   r   r   r   rT   r#   r*   r2   r   r   CustomValuer     se        K# # #( ( (   XO O O FFFr   r   rs   Tr   F)		functoolstotal_orderingr   r   registerr   assertIsrT   r   )r   r   rT   rV   s       r   testBoolGuarateesBoolReturnz(FractionTest.testBoolGuarateesBoolReturn  s     
	!	 	 	 	 	 	 	 
"	!	( 	!!+...KNN	iLLak9---d1ggt$$$KNN	iLLd1ggu%%%%%r   c           	      z   |                      t          d          t          t          d          d                     |                      t          d          t          t          d          d                     |                      t          d          t          t          d          d                     |                      t          dd          t          t          d	d
          d                     |                      t          dd          t          t          dd
          d                     d S )Ni8ijrx   i      rw   r{   r   r   rs   i)r`   r   r   r3   s    r   	testRoundzFractionTest.testRound  s    qwwaggr(:(:;;;qwwaggr(:(:;;;quueAbEE2&6&6777qRyy%#sQ*?*?@@@qRyy%#sQ*?*?@@@@@r   c           
         |                      t          dd          t          dd          t          dd          z              |                      t          dd          t          dd          t          dd          z
             |                      t          dd          t          dd          t          dd          z             |                      t          dd          t          dd          t          dd	          z             |                      t          dd	          t          dd          t          dd          z             |                      t          d
d          t          dd	          t          dd          z             |                     dt          dd          t          dd          z             |                     dt          dd          t          d          z             |                      t          dd          t          dd          t          dd          z             |                      t          dd          t          dd          t          dd          z             |                      t          d          t          dd          ft          t          dd          t          dd                               |                      t          d          t          dd          ft          t          dd          t          dd                               |                      t          dd          t          dd          t          d          z             |                      t          dd          t          dd          t          d          z             |                     dt          d	          t          dd          z             |                      t          dd          t          dd          
            t	          t          d          t          dd                    }|                     |j        d           |                      |j        d           t          dd          dz  }|                      |t          dd                     |                      |j        d           |                      |j	        d           t          dd          dz  }|                      |t          dd                     |                      |j        d           |                      |j	        d           t          dd          dz  }|                      |t          d	d                     |                      |j        d	           |                      |j	        d           d S )Nrs   ry   r{   rz   r      r   rv   r   r      rx   r   r}   rt   r             @rw   r   )
r[   r   r`   divmodpowr   realimagrT   rU   )r   zps      r   testArithmeticzFractionTest.testArithmetic  s   1a!Ar((Qq!WW"45552rAaHHqAww$67771b1Q88a1gg#56661a!Aq''AaGG"34441a!Ar((Qq!WW"45553AaGGaAhh$6777q!Ar((a1gg"5666vq||qtt';<<<1a!Aq''AaGG"34441a!B((Qq!WW"4555!A$$!Q&1a!Aq''*B*BCCC!B%%1a)6!B((AaGG+D+DEEE1b1Q77add?3332q1Q77aee#3444sAaDDAaGGO4441a1Q77(+++"qAwwqvq)))###b!HHMAaGG$$$a(((***b!HHNAb!HH%%%b)))***b!HHNAaGG$$$a(((*****r   c                 Z   |                      t          dd          t          ddz  dz   d          t          dddz  dz
            z             |                      t          dd          t          d	d
z   d          t          dd	d
z            z             |                     dt          dd          ft          t          ddz  dz   d          t          dddz  dz
                                 |                      d	dz   dz  t          d	d
z   d          t          dd	d
z            z             |                      dt          dd	d
z            t          dd	d
z            z             |                      dt          d	d	d
z            ft          t          dd	d
z            t          dd	d
z                                 |                     d	dz   dz  t          dd          ft          t          d	d
z   d          t          dd	d
z                                 d S )Nl     b;efOpUmnP|} l   ~Jw5PHyT#/jei4T r{   #   rs   l     P ~cegrt   l                ry   r   rv   rz   l   _r   r|   )r`   r   rf   r  r3   s    r   testLargeArithmeticz FractionTest.testLargeArithmetic  sT   CKM Mb"fQh!!AhBq$9$99	
 	
 	

 	a011q#vgqMMAaCLL(	
 	
 	
 	##DLN NO 1RVAXx((!Hb"fQh*?*?@@		
 	
 	
 	#XIOq#vgqMMQq!S&\\)	
 	
 	
 	aCLLAaCLL(	
 	
 	
 	!QV1Q3<<1af..	
 	
 	
 	##3hY"_q12241afWa==!Aq#v,,//	
 	
 	
 	
 	
r   c           
         |                      t          dd          t          dd          dz              |                      dt          dd          dz              |                      dt          dd          dz              |                      t          dd          dt          dd          z              |                      ddt          dd          z              |                      ddt          dd          z              |                      t          dd          t          dd          dz
             |                      d	t          dd          dz
             |                      d
t          dd          dz
             |                      t          dd          dt          dd          z
             |                      ddt          dd          z
             |                      ddt          dd          z
             |                      t          dd          t          dd          dz             |                      dt          dd          dz             |                      dt          dd          dz             |                      t          dd          dt          dd          z             |                      ddt          dd          z             |                      ddt          dd          z             |                      t          dd          t          dd          dz             |                      dt          dd          dz             |                      dt          dd          dz             |                      t          dd          dt          dd          z             |                      ddt          dd          z             |                      ddt          dd          z             |                      dt          dd          dz             |                      dt          dd          dz             |                      ddt          dd          z             |                      ddt          dd          z             |                      ddt          dd          z             |                      t          dd          t          dd          dz             |                      dt          dd          dz             |                      t          dd          dt          dd          z             |                      ddt          dd          z             |                      dt          dd          t          d          z             |                      t          d          t          dd          t          d          z             |                      t          d          t          dd          t          d          z             |                      dt          dd          t          d          z             |                     dt          dd          ft	          t          dd          d                     |                     t	          dd          t	          t          dd          d                     |                     dt          d          ft	          dt          dd                               |                     t	          dd          t	          dt          dd                               |                     t	          dt          d                    t	          t          dd          t          d                               |                     t	          dt          d                    t	          t          dd          t          d                               |                     t	          dt          d                    t	          t          dd          t          d                               |                     t	          dt          d                    t	          t          dd          t          d                               |                      t          dd          t          dd          dz             |                      t          dd          t          dd          dz             |                      dt          dd          dz             |                      dt          dd          dz             |                      ddt          dd          z             t          dt          dd                    }|                     d|j                   |                     d|j	                   |                      t          dd          dt          dd          z             |                      d dt          dd          z             |                      d!d t          dd          z             |                      ddt          dd          z             | 
                    t          t          j        t          dd          d           d S )"Nr   r{   rs   g?g      ?y?        y      ?        r   gy        r   g?y?        r   r   r   y      $@        r           r}   l     d&O!g      "@g?r   r   rw   gr   rx   ry   r   r  g      ?)r`   r   r   rf   r  r  r   r  r[   r  r   r   r    )r   r  s     r   testMixedArithmeticz FractionTest.testMixedArithmetic  s
	   qRyy!Ar((Q,777sAaHHsN333x1bX)>???qRyy!a2hh,777sC!Ar((N333x(a2hh)>???qRyy!Ar((Q,777tQq"XX^444y!Ar((h*?@@@qBxxQq"XX666sC!Ar((N333x(a2hh)>???qBxx1bA666sAaHHsN333x1bX)>???qBxxQq"XX666sC!Ar((N333x(a2hh)>???qBxx1bA666sAaHHsN333x1bX)>???qQxxQq"XX666tS1Q88^444y8qBxx*?@@@q!Ar((a-000sAaHHO444r1!R=111vv1b'9:::z3!Ar((?;;;qBxx1bA666sAaHHsN333qAwwAaHH555y#!R.999sAaHHuU||$;<<<uV}}a2hhv.FGGGuU||Qr2YYu-EFFFtQr2YYv%>???##Q!RM6!Ar((A3F3FGGG##F3$4$4fQq"XXs6K6KLLL##R1Jq!Ar((0C0CDDD##F3$4$4fS!Ar((6K6KLLL##F3e$=$=va2hhPUV[P\P\?]?]^^^##F3f$>$>qBxxQVW]Q^Q^@_@_```##F4u$>$>qRyyRWX]R^R^@_@_```##F4v$?$?"b		SXY_S`S`AaAabbb 	qayy!Ar((b.999qayy!B((a-888sAaHHO444x1bh)?@@@q1!Q<000AaGGq!&)))AF###qAwwaAhh777sQ!Aq''\222tSAb!HH_555x(qBxx)?@@@+X\Aq''2	' 	' 	' 	' 	'r   c           	         |                      t          t          j        t	          dd          t          d                     |                      t          t          j        t          d          t	          dd                     d S )Nrv   r   z	3.1415926)r   r   r    addr   r   r3   s    r   testMixingWithDecimalz"FractionTest.testMixingWithDecimalb  sr    )X\Ab''7;#7#7	9 	9 	9)X\!+..!B	9 	9 	9 	9 	9r   c                    |                      t          dd          t          dd          k                |                     t          dd          t          dd          k                |                      t          dd          t          dd          k               |                      t          dd          t          dd          k               |                     t          dd          t          dd          k               |                      t          dd          t          dd          k               |                     t          dd          t          dd          k               |                     t          dd          t          dd          k               |                      t          dd          t          dd          k               d S )Nrs   ry   rv   )
assertTruer   assertFalser3   s    r   testComparisonszFractionTest.testComparisonsi  so   !Q!Aq'')***1a1Q77*+++!Q1Q77*+++!Q1Q77*+++1aAaGG+,,,!Q1Q77*+++1aAaGG+,,,1aAaGG+,,,!Q1Q77*+++++r   c                    |                      t          dd          t          dd          k               |                      t          dd          t          dd          k               |                     t          dd          t          dd          k               |                     t          dd          t          dd          k               |                      t          dd          t          dd          k                |                     t          dd          t          dd          k                |                     t          dd          t          dd          k                |                     t          dd          t          dd          k               |                     t          dd          t          dd          k               |                      t          dd          t          dd          k               |                      t          dd          t          dd          k               |                      t          dd          t          dd          k               |                     t          dd          t          dd          k               |                     t          dd          t          dd          k               |                      t          dd          t          dd          k               |                      t          dd          t          dd          k               |                      t          dd          t          dd          k                |                     t          dd          t          dd          k                |                     t          dd          t          dd          k                |                     t          dd          t          dd          k               |                     t          dd          t          dd          k               |                      t          dd          t          dd          k               |                      t          dd          t          dd          k               |                      t          dd          t          dd          k               |                     t          dd          t          dd          k               |                     t          dd          t          dd          k               |                      t          dd          t          dd          k               |                      t          dd          t          dd          k               d S )Nrs   ry   rv   r   rt   )r  r   r=   r  r3   s    r   testComparisonsDummyRationalz)FractionTest.testComparisonsDummyRationalt  s   !Q=A#6#66777a++qAww67771aM!Q$7$77888q!,,!Q7888!Q-1"5"556661a=A#6#667771a=A#6#667771a=A#6#667771a=A#6#66777!Q-1"5"55666!Q=A#6#66777!Q=A#6#667771aM!Q$7$778881aM!Q$7$77888!Q=A#6#66777!Q=A#6#66777a++a1gg5666q!,,qAww6777q!,,qAww6777q!,,qAww6777q!,,qAww6777a++a1gg5666a++qAww6777a++qAww6777q!,,!Q7888q!,,!Q7888a++qAww6777a++qAww677777r   c                    t          d          }t          dd          }|                     ||k               |                     ||k     p||k               |                     ||k               |                     ||k    o||k               |                     ||k               |                     ||k     p||k               |                     ||k               |                     ||k    o||k               d S )NgUUUUUU?rs   rv   )r
   r   r  r  )r   xys      r   testComparisonsDummyFloatz&FractionTest.testComparisonsDummyFloat  s    uaGGQAQ'''a   a*AF+++QAQ'''a   a*AF+++++r   c                    |                      dt          dd          k                |                     dt          dd          k                |                      t          dd          dk                |                     t          dd          dk                |                      t          dd          dk                |                     t          dd          dk                |                      dt          dd          k                |                     dt          dd          k                |                     t          d	          t          dd          k                |                      t          d
          t          dd          k                |                     t          d          t          dd          k                |                      t          dd          t          d	          k                |                     t          dd          t          d
          k                |                     t          dd          t          d          k                d S )Nry   rz   r   rv   rs   333333?皙?      ?r   r   r   r{   r   r   rt      r      r  r   r  r   r3   s    r   testMixedLesszFractionTest.testMixedLess  s   AaGG$$$Qq!WW%%%!Q!$$$1a1%%%!Q#&&&1a3'''a1gg&&&qAww'''u!Q/000f!R0111u"a0111!Q%,,.///2rU6]]23333uU||344444r   c                    |                      dt          dd          k               |                     dt          dd          k               |                      t          dd          dk               |                     t          dd          dk               |                      dt          dd          k               |                     dt          dd          k               |                      t          dd          dk               |                     t          dd          dk               |                     t          d	          t          dd          k               |                      t          d
          t          dd          k               |                     t          d          t          dd          k               |                      t          dd          t          d	          k               |                     t          dd          t          d
          k               |                     t          dd          t          d          k               d S )Nr*  rs   ry   r(  r)  r   rv   rz   r   r   r   r{   r   r   rt   r+  r   r,  r-  r.  r3   s    r   testMixedLessEqualzFractionTest.testMixedLessEqual  s   qAww'''!Q(((!Q3'''1aC(((Qq!WW%%%a1gg&&&!Q1%%%1aA&&&u1a0111f1b1222u2q1222!Q5<</0002reFmm34443e455555r   c           
         |                      t          d          t          d          k               |                      dt          t          t          j        d          dz                       k                |                     dt          t          j        d          dz             k                |                      dt          t          j        d          dz
            k               |                     dt          t          j        d          dz
            k               |                      dt          t          j        d          dz             k               d S )Nr}   r   rs   )r  r   r   r?   r   r  r3   s    r   testBigFloatComparisonsz$FractionTest.testBigFloatComparisons  s!   6eFmm3444a
4(8(81(<&=&= > >>???qD!1!1A!56667774:d#3#3a#7!8!88999qD!1!1A!56667774:d#3#3a#7!8!8899999r   c                    |                      t          d          t          d          k               |                     t          t
          j        t          d          t          d                     |                     t          t
          j        t          d          t          d                     t          dd          }t          dd          }t          dd          }|                     ||k               |                      ||k               |                      ||k               |                     ||k               t
          j	        t
          j        t
          j        t
          j
        fD ]v}|                     t          |||           |                     t          |||           |                     t          |||           |                     t          |||           wd S )Nr}   rv   r
  g      ?r  g?)r  r   r   r   r   r    r/   r&   r  r)   r,   )r   r$  r  wr   s        r   testBigComplexComparisonsz&FractionTest.testBigComplexComparisons  s   6gfoo5666)X[!F))WV__MMM)X[!F))WV__MMMaGGE3E3Qa   a   Q+x{HKD 	3 	3BiQ222iQ222iQ222iQ2222		3 	3r   c                    |                      dt          dd          k               |                     dt          dd          k               |                      t          dd          dk               |                     t          dd          dk               |                      dt          dd          k               |                     dt          dd          k               |                      t          dd          dk               |                     t          dd          dk               |                     t          dd          t          d	          k               |                     t          d	          t          dd
          k               |                     t          dd          t          d          k               |                     t          d          t          dd          k               d S )Nr*  rs   ry   r(  r)  r   rv   rz   r   rt   r   r   r.  r3   s    r   testMixedEqualzFractionTest.testMixedEqual  s   qAww'''!Q(((!Q3'''1aC(((Qq!WW%%%a1gg&&&!Q1%%%1aA&&&1aE%LL0111u1a01111aE%LL0111v!Aq''122222r   c           	         |                      dt          t          dd                               |                      dt          t          d                               |                      dt          t          dd                               |                      d	t          t          dd                               |                      d
t          t          dd                               d S )NzFraction(7, 3)rt   rv   z Fraction(6283185307, 2000000000)z3.1415926535z#Fraction(-1, 100000000000000000000)rs   l   Fx:^V z7/37)r[   reprr   ri   r3   s    r   testStringificationz FractionTest.testStringification  s    )4!Q==999;a//00	2 	2 	2>a7mm,,	. 	. 	.AaGG---c!Aq''ll+++++r   c           	         t           j        j        }t           j        j        }|                     t          d          t          t          dd                               |                     t          ddz            t          t          ddz                                 |                     t          t          d                    t          t          d                               |                     |t          t          d|                               |                     t          t          d                    t          d          	                                           d S )	Nr   rz   ry   r{   2   r}   rs   rw   )
sys	hash_infomodulusr   r[   hashr   r   r   __hash__)r   hmodhinfs      r   testHashzFractionTest.testHash  s    }$} cD1aMM222b"ftAb"fII777Dv//aiiAAAtAaJJ//000 	aeeaeenn&6&677777r   c                 \   t          d          }d|dddddf\  }}}}}}}t          ||z
            t          dd          k    rG|}||z   |dz   }}||z   |dz   }}||z  |z  }||z  }t          ||z
            t          dd          k    G|                     t          j        |           d S )Nrv   r   rs       ʚ;r
      )r   absr   r?   pi)	r   threelaststsnnaddas	            r   testApproximatePizFractionTest.testApproximatePi  s     !$%uaAq"$<!q!QAr!e)nnqE{{**EbD"Q$rAbD"R%rAQ!AFA !e)nnqE{{** 	tw*****r   c                    t          d          }ddt          d          dddf\  }}}}}}t          ||z
            t          dd          k    rN|}|dz  }|||dz
  z  z  }|||z  z  }|dz  }|||z  |z  z  }t          ||z
            t          dd          k    N|                     t          j        d          |           d S )Nrs   r   rI  ry   rw   )r   rK  r   r?   cos)r   r$  r   rN  rP  factrA   signs           r   testApproximateCos1z FractionTest.testApproximateCos1  s     aDD'(!QqTT1a':$5!T3!e)nnqE{{**EFAA1ID1q5LCBJDtd""A !e)nnqE{{** 	tx{{A.....r   c           
      \   t          dd          }t          dd          }t          dt          j        dz             D ]3}|                     |t          t          ||                               4|                     t          |          t          t          |                               |                     t          |          t          t          |                               |                     t          |          t          t          |                               |                     t          |          t          t          |                               |                     |t          |                     |                     |t          |                     d S )Nr   rt   r   rs   )r   rR   rangepickleHIGHEST_PROTOCOLr[   r   r   idr   r   r   r`   )r   rV   drprotos       r   test_copy_deepcopy_picklez&FractionTest.test_copy_deepcopy_pickle  sH   b!HH2q!!1f59:: 	8 	8EQeAuoo 6 67777A477,,,A8A;;000BrFFBtBxxLL111BrFFBx||$4$4555r488,,,r8B<<00000r   c                 l    t          dd          }|                     t          t          |dd           d S )Nr   rt   ar{   )r   r   r   r   r   s     r   
test_slotszFractionTest.test_slots(  s1    b!HH.'1c2>>>>>r   c                     G d dt                     }t          j         |d           |d                    }|                     |j        d           |                     |j        d           |                     t          |j                  |           |                     t          |j                  |           d S )Nc                   L    e Zd Zd Zd Zd Zed             Zed             ZdS )-FractionTest.test_int_subclass.<locals>.myintc                 l     t          |           t          |           t          |          z            S r   r\   r   r"   s     r   r   z5FractionTest.test_int_subclass.<locals>.myint.__mul__/  s)    !tDzz#d))c%jj"8999r   c                 l     t          |           t          |           t          |          z            S r   rj  r"   s     r   r   z:FractionTest.test_int_subclass.<locals>.myint.__floordiv__1  s)    !tDzz#d))s5zz"9:::r   c                 p     t          |           t          |           t          |          z            }|S r   rj  )r   r   r$  s      r   __mod__z5FractionTest.test_int_subclass.<locals>.myint.__mod__3  s-    DJJs4yy3u::566r   c                 L     t          |           t          |                     S r   rj  r3   s    r   rT   z7FractionTest.test_int_subclass.<locals>.myint.numerator6  s    !tDzz#d)),,,r   c                 2     t          |           d          S r   )r\   r3   s    r   rU   z9FractionTest.test_int_subclass.<locals>.myint.denominator9  s    !tDzz!}}$r   N)	r8   r9   r:   r   r   rm  r   rT   rU   r2   r   r   myintrh  .  su        : : :; ; ;   - - X-% % X% % %r   rp  rv   r   rs   ry   )r   rE   rF   r[   rT   rU   r\   )r   rp  r   s      r   test_int_subclasszFractionTest.test_int_subclass-  s    	% 	% 	% 	% 	%C 	% 	% 	% uuU||UU5\\::a(((***ak**E222am,,e44444r   N)(r8   r9   r:   r`   rf   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r"  r&  r/  r1  r3  r6  r8  r<  rF  rU  rZ  rb  re  rq  r2   r   r   rY   rY   [   sP       + + +
Q Q Q
; ; ;1 1 12 ; ; ;= = =q q qf( ( (   8- - -0= = =+ + +9 9 90, , , ,  ,  ,D"& "& "&HA A A +  +  +D 
  
  
DC' C' C'J9 9 9	, 	, 	,8 8 8@
, 
, 
,5 5 5$6 6 6": : :3 3 3$3 3 3, , ,	8 	8 	8+ + +/ / /
1 
1 
1? ? ?
5 5 5 5 5r   rY   __main__)decimalr   test.supportr   r?   r   r    rE   r   r?  r   unittestr   r   r]  r   r   rF   r   objectr
   r=   rR   rW   TestCaserY   r8   mainr2   r   r   <module>ry     s   !       * * * * * *            



                          @8 8 8 8 8F 8 8 8@A A A A AI& A A A( ( (f5 f5 f5 f5 f58$ f5 f5 f5R zHMOOOOO r   