
    z%i                     T   d Z 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j2                        Zedk(  r ej8                          yy)zTests for Lib/fractions.py.    )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d
 ZeZy)
DummyFloatz8Dummy float class for testing comparisons with Fractionsc                 H    t        |t              st        d      || _        y )Nz-DummyFloat can only be initialized from float)
isinstancefloat	TypeErrorvalueselfr   s     G/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_fractions.py__init__zDummyFloat.__init__   s    %'KLL
    c                     t        |t        j                        r& |t        j	                  | 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   sQ    eW--.all4::.66z*djj%++..!!r   c                 B    | j                  |t        j                        S r   )r   operatoreqr   r   s     r   __eq__zDummyFloat.__eq__#       DMM%$EEr   c                 B    | j                  |t        j                        S r   )r   r    ler"   s     r   __le__zDummyFloat.__le__$   r$   r   c                 B    | j                  |t        j                        S r   )r   r    ltr"   s     r   __lt__zDummyFloat.__lt__%   r$   r   c                 B    | j                  |t        j                        S r   )r   r    ger"   s     r   __ge__zDummyFloat.__ge__&   r$   r   c                 B    | j                  |t        j                        S r   )r   r    gtr"   s     r   __gt__zDummyFloat.__gt__'   r$   r   c                      y r    r   s    r   	__float__zDummyFloat.__float__*       r   c                      y r   r2   r"   s     r   __sub__zDummyFloat.__sub__.   r5   r   N)__name__
__module____qualname____doc__r   r   r#   r'   r*   r-   r0   r4   r7   __rsub__r2   r   r   r
   r
      s2    B
" FEEEEHFHr   r
   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
DummyRationalzATest comparison of Fraction with a naive rational implementation.c                 X    t        j                  ||      }||z  | _        ||z  | _        y r   )mathgcdnumden)r   rB   rC   gs       r   r   zDummyRational.__init__6   s(    HHS#!8!8r   c                     t        |t        j                        r4| j                  |j                  k(  xr | j
                  |j                  k(  S t        S r   )r   	fractionsFractionrB   
_numeratorrC   _denominatorr   r"   s     r   r#   zDummyRational.__eq__;   sH    eY//0HH 0 00 3HH 2 224 "!r   c                 h    | j                   |j                  z  | j                  |j                  z  k  S r   rB   rI   rC   rH   r"   s     r   r*   zDummyRational.__lt__B   +    xx%,,,txx%:J:J/JJKr   c                 h    | j                   |j                  z  | j                  |j                  z  kD  S r   rK   r"   s     r   r0   zDummyRational.__gt__E   rL   r   c                 h    | j                   |j                  z  | j                  |j                  z  k  S r   rK   r"   s     r   r'   zDummyRational.__le__H   +    xx%,,,5;K;K0KKLr   c                 h    | j                   |j                  z  | j                  |j                  z  k\  S r   rK   r"   s     r   r-   zDummyRational.__ge__K   rO   r   c                      y r   r2   r3   s    r   r4   zDummyRational.__float__P   r5   r   N)r8   r9   r:   r;   r   r#   r*   r0   r'   r-   r4   r2   r   r   r>   r>   3   s,    K
"LLMM
8r   r>   c                       e Zd ZdZy)DummyFractionz6Dummy Fraction subclass for copy and deepcopy testing.N)r8   r9   r:   r;   r2   r   r   rS   rS   S   s    @r   rS   c                 2    | j                   | j                  fS r   )	numeratordenominator)rs    r   _componentsrX   W   s    KK''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% Z(d& Z)d' Z*d( Z+d) Z,d* Z-y+),FractionTestc                 p    | j                  t        |      t        |             | j                  ||       y)z4Asserts that both the types and values are the same.N)assertEqualtyper   expectedactuals      r   assertTypedEqualszFractionTest.assertTypedEquals]   s*    hf66*r   c           	          | j                  ||       | j                  t        t        t        |            t        t        t        |                   y)zBAsserts that both the types and values in the tuples are the same.N)assertTupleEqualassertListEquallistmapr]   r^   s      r   assertTypedTupleEqualsz#FractionTest.assertTypedTupleEqualsb   s:    h/T#dH"56Sv=N8OPr   c                     	  ||i | | j                  d|j                  z         y# |$ r%}| j                  |t        |             Y d}~yd}~ww xY w)z@Asserts that callable(*args, **kwargs) raises exc_type(message).z%s not raisedN)failr8   r\   str)r   exc_typemessagecallableargskwargses          r   assertRaisesMessagez FractionTest.assertRaisesMessageg   sV    	;d%f% IIo(9(99:  	.Wc!f--	.s   ) AAAc                 (   | j                  dt        t                            | j                  dt        t        d                   | j                  dt        t        t        dd                         | j                  dt        t        dd                   | j                  dt        t        dd                   | j                  d	t        t        d
d
                   | j                  dt        t        dd                   | j                  dt        t        dd                   | j                  dt        t        d                   | j                  dt        t        t        dd      d                   | j                  dt        t        dt        dd                         | j                  dt        t        t        dd      t        dd                         | j                  t        dt        dd       | j                  t        t        d       | j                  t        t        d d       | j                  t        t        dd!       | j                  t        t        dd"       | j                  t        t        ddd       y )#Nr      )   rt   ru   ru      rw   )rt   rx   rt   )rt   rt   )rt         
   )ru      r}   )      m+?R rt   r~   )rw   M      )r{   rz   	   )i	  i	     c  q   zFraction(12, 0)   r   y      ?      @3/2y                y              ?)r\   rX   r   rq   ZeroDivisionErrorassertRaisesr   r3   s    r   testInitzFractionTest.testInitq   s   QS!12QqT!23QqAwZ!89+aAh"78+a2h"78Qr2Y!78Qq"X!67+a2h"78k!F)&<=+a!Qn"=>+a1S!9o">?{1Qr1Xqc{3K'LM  !24E!"B	+)Q1)Qq1)Q2.)Q2.)Q1a0r   c                    | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  t        t        t        d             | j                  t        t        t        d             | j                  t        t        t        d	             y )
N)r{   rz         @rs          )   L33f l          皙?naninf-inf)r\   rX   r   r   
ValueErrorr   OverflowErrorr3   s    r   testInitFromFloatzFractionTest.testInitFromFloat   s    QsV!45QtW!56>$QsV,	. 	*au6-E%L9-E&M:r   c           
      2   | j                  dt        t        t        d                         | j                  dt        t        t        d                         | j                  dt        t        t        d                         | j	                  t
        t        t        d             | j	                  t
        t        t        d             | j	                  t        t        t        d	             | j	                  t        t        t        d
             y )N)r   r|   z1.1)ru      z3.5e-2rs   z.000e20r   snanr   r   )r\   rX   r   r   r   r   r   r3   s    r   testInitFromDecimalz FractionTest.testInitFromDecimal   s    $Qwu~%67	9$Qwx'8%9:	<$Qwy'9%:;	= 	*a8*a9-GEN;-GFO<r   c                    | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  d	t        t        d
                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  dt        t        d                   | j                  d t        t        d!                   | j                  d"t        t        d#                   | j                  d$t        t        d%                   | j                  d$t        t        d&                   | j                  t        d't        d(       | j                  t
        d)t        d*       | j                  t
        d+t        d,       | j                  t
        d-t        d.       | j                  t
        d/t        d0       | j                  t
        d1t        d2       | j                  t
        d3t        d4       | j                  t
        d5t        d6       | j                  t
        d7t        d8       | j                  t
        d9t        d:       | j                  t
        d;t        d<       | j                  t
        d=t        d>       | j                  t
        d?t        d@       | j                  t
        dAt        dB       | j                  t
        dCt        dD       | j                  t
        dEt        dF       | j                  t
        dGt        dH       | j                  t
        dIt        dJ       | j                  t
        dKt        dL       | j                  t
        dMt        dN       | j                  t
        dOt        dP       | j                  t
        dQt        dR       | j                  t
        dSt        dT       dU}| j                  t
        dV|z   dWz   t        |       | j                  t
        dX|z   dWz   t        dY|z          | j                  t
        dZ|z   dWz   t        d[|z          | j                  t
        d\|z   dWz   t        d]|z          y )^N)r{   rt   5)rw   rz   r   z3 / 2z 
  +3/2)rz   z-3/2  )   rz   z    013/02 
  )   r{   z 3.2 )ir{   z -3.2 )r   rt   z -3. )rw   r{   z .6 )rt   i5  z32.e-5)i@B rt   z1E+06)irt   z-1.23e4rs   z .0e+0	z-0.000e0){   rt   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: '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\   rX   r   rq   r   r   )r   vals     r   testFromStringzFractionTest.testFromString   s$   QsV!45QuX!67QwZ!89Q{^!<=+ak":;+a0A.B"CD+aj"9:;q{#;<+aj"9:QvY!78K($<={1W:'>?k!I,&?@Qz]!;<Qz]!;<;qz#:;K-0@$AB{1Y<'@A);q7H+IJ[6%;<[7%<=  /u	 	  <t	 	  <t	 	  >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      }|j                  dd       | j                  dt        |             | j	                  t
        t        |dd       | j	                  t
        t        |dd	       | j                  dt        |             d
|_        d|_        | j                  dt        |             | j                  t        d
d      |       y )Nru   rw   rz   r}   rv   rU   r   rV         )r   rz   )
r   r   r\   rX   r   AttributeErrorsetattrrH   rI   assertNotEqualr   rW   s     r   testImmutablezFractionTest.testImmutable  s    aG	

1bQ0.'1k2F.'1mQGQ0 Q0AaGQ'r   c                    | j                  t        t        j                  d       | j	                  dt        t        j                  d                   d}| j	                  |dft        t        j                  |                   | j	                  dt        t        j                  d                   | j	                  dt        t        j                  d                   | j	                  d	t        t        j                  d
                   | j	                  dt        t        j                  d                   | j	                  t        d      t        t        j                  d                   | j	                  dt        t        j                  d                   | j	                  dt        t        j                  d                   d}||z
  }| j                  t        dt        j                  |       | j                  t        dt        j                  |        | j                  t        dt        j                  |       y )N      @      @)r|   rt   r|   l   {C	 rt   rs   r         $@)rz   g      )l      l+?R rt   J-Dr~   )r   l           g	@g      (cannot convert Infinity to integer ratio#cannot convert NaN to integer ratio)
r   r   r   r   r\   rX   r   rq   r   r   )r   bigintr   r   s       r   testFromFloatzFractionTest.testFromFloat#  s   )Q\\48+all2.>"?@$&!k!,,v2F&GHQ\\$-?!@A+all4.@"AB+all4.@"AB5$Q\\$%78	:vall4.@(AB=$Q\\#%67	9eALL$567Ci  ELL#	 	  ELL3$	  	  =LL#	r   c                 V   | j                  t        t        j                  d       | j	                  t        dd      t        j                  d             | j	                  t        d      t        j                  t        d                   | j	                  t        dd      t        j                  t        d                   | j	                  t        dd      t        j                  t        d	                   | j	                  t        d
      t        j                  t        d                   | j	                  dt        dd      z
  t        j                  t        d                   | j                  t        dt        j                  t        d             | j                  t        dt        j                  t        d             | j                  t        dt        j                  t        d             | j                  t        dt        j                  t        d             y )Nr   r|   rt   r   -0r{   z0.5  z5e-3i  5e3l       73Me'z 0.999999999999999999999999999999r   r   r   r   r   r   )	r   r   r   from_decimalr\   r   rq   r   r   r3   s    r   testFromDecimalzFractionTest.testFromDecimal?  sx   )Q^^T:2q1>>"#561q~~gdm<=1b1>>'%.#AB1dQ^^GFO%DE4!.."@AQq&\)(@A	C 	  ENNGEN	, 	  ENNGFO	- 	  =NNGEN	, 	  =NNGFO	-r   c                 8   | j                  t        dd      j                                | j                  t        dd      j                                | j                  t        dd      j                                | j                  t        dd      j                                | j                  t        dd      j                                | j                  t        dd      j                                | j                  t        dd      j                                | j                  t        dd      j                                | j                  t        dd      j                                | j                  t        dd      j                                y )Nrt   rx   rz   ry   )
assertTruer   
is_integerassertFalser3   s    r   test_is_integerzFractionTest.test_is_integerW  s   !Q**,-"a++-.!R++-.!Q**,-"a++-.!R++-.1a++-.2q,,./1b,,./2r--/0r   c                 T   | j                  t        dd      j                         d       | j                  t        dd      j                         d       | j                  t        dd      j                         d       | j                  t        dd      j                         d       y )	Nr   r   )rz   rw   )ry   rw   ir   rs   )r\   r   as_integer_ratior3   s    r   test_as_integer_ratioz"FractionTest.test_as_integer_ratiod  s~    1a113V<2q224g>1b224g>1a113V<r   c                    t        d      }| j                  |j                  d      t        dd             | j                  |j                  d       t        dd             | j                  |j                  d      t        dd             | j                  |j                  d      t        dd             | j                  t        d	d
      j                  d      t        d             | j                  t        d	d
      j                  d      t        dd             | j                  t        d      j                  d      t        d             dD ]-  }| j                  t        dt        d      j                  |       / y )Nz3.1415926535897932i'  r   r   ip   iM  j      r   r   rt   r   f   r   )r   rx   z$max_denominator should be at least 1)r   r\   limit_denominatorrq   r   )r   rpiis      r   testLimitDenominatorz!FractionTest.testLimitDenominatorj  s5   $%..u5qc{C#//66$E..s3QsC[A..s3QsC[A366s;QqTB366s;QsC[I1//6!= 	+A$$B!&&+	+r   c                 *   | j                  dt        j                  t        dd                   | j                  dt        j                  t        dd                   | j                  dt        j                  t        dd                   | j                  dt        j
                  t        dd                   | j                  dt        j
                  t        dd                   | j                  dt        t        dd                   | j                  dt        t        dd                   | j                  dt        t        d	d                   | j                  dt        t        d
d                   | j                  dt        t        dd                   | j                  dt        t        dd                   | j                  dt        t        dd                   | j                  dt        t        dd                   | j                  t        t        t        d             | j                  dt        t        t        d      t        d                         | j                  dt        t        dd                   y )Nrx   ir|   rt   r   ry   r   r   r   FTrw   rz   r     22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222227gUUUUUU?  33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333331?        )ra   r@   truncr   floorceilintroundr\   boolr   r   r   assertAlmostEqualcomplexr3   s    r   testConversionszFractionTest.testConversionsx  s   r4::aRj#9:q$**Qr2Y"78r4::aRj#9:r499QsBZ#89r499QsBZ#89r3qbz?3q%"b	"23q%"b	"23r53#45r52r#34Qq!W.tAaG}-sE!Ar(O4 	-K0@Au$Qs;'7[9I%JK	M 	vwq2w'78r   c                     t        dd      }| j                  |t        j                         | j	                  t        |      d       | j	                  t        t        |            t
               y )Nrw   rz   rt   )r   assertIsInstancetypingSupportsIntr\   r   r]   )r   fs     r   testSupportsIntzFractionTest.testSupportsInt  sO    aGa!3!34Q#c!fs+r   c                     G fddt               t         d       d            }| j                  |j                         | j                  |j                         | j                  |t
        j                         | j                  t        |      d       | j                  t        t        |            t                y )Nc                   J    e Zd ZdZed        Ze fd       Z fdZ fdZy):FractionTest.testIntGuaranteesIntReturn.<locals>.CustomIntz
            Subclass of int with just enough machinery to convince the Fraction
            constructor to produce something with CustomInt numerator and
            denominator.
            c                     | S r   r2   r3   s    r   rU   zDFractionTest.testIntGuaranteesIntReturn.<locals>.CustomInt.numerator  s    r   c                      d      S Nrt   r2   )r   	CustomInts    r   rV   zFFractionTest.testIntGuaranteesIntReturn.<locals>.CustomInt.denominator  s     |#r   c                 >     t        |       t        |      z        S r   r   r   r   r   s     r   __mul__zBFractionTest.testIntGuaranteesIntReturn.<locals>.CustomInt.__mul__  s     TSZ!788r   c                 >     t        |       t        |      z        S r   r   r   s     r   __floordiv__zGFractionTest.testIntGuaranteesIntReturn.<locals>.CustomInt.__floordiv__  s     Tc%j!899r   N)	r8   r9   r:   r;   propertyrU   rV   r   r   )r   s   r   r   r     s:       $ $9:r   r   r   r{   rz   )	r   r   r   rU   rV   r   r   r\   r]   )r   r   r   s     @r   testIntGuaranteesIntReturnz'FractionTest.testIntGuaranteesIntReturn  s    
	: 	:* imYq\*akk95ammY7a!3!34Q#c!fs+r   c                 l   t         j                   G d d             }t        j                  j	                  |        |d      }t        |      }| j                  |j                  |       | j                  t        |      d        |d      }t        |      }| j                  t        |      d       y )Nc                   6    e Zd ZdZd Zd Zed        Zd ZeZ	y)=FractionTest.testBoolGuarateesBoolReturn.<locals>.CustomValuert   c                     || _         y 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    DJJ''r   c                     | S r   r2   r3   s    r   rU   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Nr   N)
r8   r9   r:   rV   r   r  r   rU   r#   r*   r2   r   r   CustomValuer     s2    K#(  O Fr   r  rt   Tr   F)		functoolstotal_orderingr   r   registerr   assertIsrU   r   )r   r  rU   rW   s       r   testBoolGuarateesBoolReturnz(FractionTest.testBoolGuarateesBoolReturn  s     
	!	!	 	 
"	( 	!!+.N	iLakk9-d1gt$N	iLd1gu%r   c           	         | j                  t        d      t        t        d      d             | j                  t        d      t        t        d      d             | j                  t        d      t        t        d      d             | j                  t        dd      t        t        d	d
      d             | j                  t        dd      t        t        dd
      d             y )Ni8ijry   i      rx   r|   r   r   rt   i)ra   r   r   r3   s    r   	testRoundzFractionTest.testRound  s    qwagr(:;qwagr(:;queAbE2&67qRy%#sQ*?@qRy%#sQ*?@r   c           
      	   | j                  t        dd      t        dd      t        dd      z          | j                  t        dd      t        dd      t        dd      z
         | j                  t        dd      t        dd      t        dd      z         | j                  t        dd      t        dd      t        dd	      z         | j                  t        dd	      t        dd      t        dd      z         | j                  t        d
d      t        dd	      t        dd      z         | j                  t        t        j
                  t        d      t        d             | j                  dt        dd      t        dd      z         | j                  dt        dd      t        d      z         | j                  t        dd      t        dd      t        dd      z         | j                  t        dd      t        dd      t        dd      z         | j                  t        d      t        dd      ft        t        dd      t        dd                   | j                  t        d      t        dd      ft        t        dd      t        dd                   | j                  t        dd      t        dd      t        d      z         | j                  t        dd      t        dd      t        d      z         | j                  dt        d	      t        dd      z         | j                  t        dd      t        dd             t        t        d      t        dd            }| j                  |j                  d       | j                  |j                  d       t        dd      dz  }| j                  |t        dd             | j                  |j                  d       | j                  |j                  d       t        dd      dz  }| j                  |t        dd             | j                  |j                  d       | j                  |j                  d       t        dd      dz  }| j                  |t        d	d             | j                  |j                  d	       | j                  |j                  d       y )Nrt   rz   r|   r{   r      r   rw   r   r      ry   r   r   r~   ru   r             @rx   )r\   r   r   r   r    truedivra   divmodpowr   realimagrU   rV   )r   zps      r   testArithmeticzFractionTest.testArithmetic  s   1a!Ar(Qq!W"452rAaHqAw$671b1Q8a1g#561a!Aq'AaG"341a!Ar(Qq!W"453AaGaAh$67+X-=-=qtQqTJq!Ar(a1g"56vq|qt';<1a!Aq'AaG"341a!B(Qq!W"45!A$!Q&1a!Aq'*BC!B%1a)6!B(AaG+DE1b1Q7ad?32q1Q7ae#34sAaDAaGO41a1Q7(+"qAwqvvq)#b!HMAaG$a(*b!HNAb!H%b)*b!HNAaG$a(*r   c                 p   | j                  t        dd      t        ddz  dz   d      t        dddz  dz
        z         | j                  t        dd      t        d	d
z   d      t        dd	d
z        z         | j                  dt        dd      ft        t        ddz  dz   d      t        dddz  dz
                     | j                  d	dz   dz  t        d	d
z   d      t        dd	d
z        z         | j                  dt        dd	d
z        t        dd	d
z        z         | j                  dt        d	d	d
z        ft        t        dd	d
z        t        dd	d
z                     | j                  d	dz   dz  t        dd      ft        t        d	d
z   d      t        dd	d
z                     y )Nl     b;efOpUmnP|} l   ~Jw5PHyT#/jei4T r|   #   rt   l     P ~cegru   l                rz   r   rw   r{   l   _r   r}   )ra   r   rg   r  r3   s    r   testLargeArithmeticz FractionTest.testLargeArithmetic  s   CKMb"fQh!AhBq$99	

 	a01q#vgqMAaCL(	
 	##DLNO 1RVAXx(!Hb"fQh*?@		
 	#XIOq#vgqMQq!S&\)	
 	aCLAaCL(	
 	!QV1Q3<1af.	
 	##3hY"_q1241afWa=!Aq#v,/	
r   c           
      *   | j                  t        dd      t        dd      dz          | j                  dt        dd      dz          | j                  dt        dd      dz          | j                  t        dd      dt        dd      z          | j                  ddt        dd      z          | j                  ddt        dd      z          | j                  t        dd      t        dd      dz
         | j                  d	t        dd      dz
         | j                  d
t        dd      dz
         | j                  t        dd      dt        dd      z
         | j                  ddt        dd      z
         | j                  ddt        dd      z
         | j                  t        dd      t        dd      dz         | j                  dt        dd      dz         | j                  dt        dd      dz         | j                  t        dd      dt        dd      z         | j                  ddt        dd      z         | j                  ddt        dd      z         | j                  t        dd      t        dd      dz         | j                  dt        dd      dz         | j                  dt        dd      dz         | j                  t        dd      dt        dd      z         | j                  ddt        dd      z         | j                  ddt        dd      z         | j                  dt        dd      dz         | j                  dt        dd      dz         | j                  ddt        dd      z         | j                  ddt        dd      z         | j                  ddt        dd      z         | j                  t        dd      t        dd      dz         | j                  dt        dd      dz         | j                  t        dd      dt        dd      z         | j                  ddt        dd      z         | j                  dt        dd      t        d      z         | j                  t        d      t        dd      t        d      z         | j                  t        d      t        dd      t        d      z         | j                  dt        dd      t        d      z         | j                  dt        dd      ft	        t        dd      d             | j                  t	        dd      t	        t        dd      d             | j                  dt        d      ft	        dt        dd                   | j                  t	        dd      t	        dt        dd                   | j                  t	        dt        d            t	        t        dd      t        d                   | j                  t	        dt        d            t	        t        dd      t        d                   | j                  t	        dt        d            t	        t        dd      t        d                   | j                  t	        dt        d            t	        t        dd      t        d                   | j                  t        dd      t        dd      dz         | j                  t        dd      t        dd      dz         | j                  dt        dd      dz         | j                  dt        dd      dz         | j                  ddt        dd      z         t        dt        dd            }| j                  d|j                         | j                  d|j                         | j                  t        dd      dt        dd      z         | j                  d dt        dd      z         | j                  d!d t        dd      z         | j                  ddt        dd      z         | j                  t        t        j
                  t        dd      d       y )"Nr   r|   rt   g?g      ?y?        y      ?        r   gy        r   g?y?        r   r   r   y      $@        r           r~   l     d&O!g      "@g?r   r   rx   gr   ry   rz   r   r  g      ?)ra   r   r   rg   r  r  r   r  r\   r  r   r   r    )r   r  s     r   testMixedArithmeticz FractionTest.testMixedArithmetic)  s   qRy!Ar(Q,7sAaHsN3x1bX)>?qRy!a2h,7sC!Ar(N3x(a2h)>?qRy!Ar(Q,7tQq"X^4y!Ar(h*?@qBxQq"X6sC!Ar(N3x(a2h)>?qBx1bA6sAaHsN3x1bX)>?qBxQq"X6sC!Ar(N3x(a2h)>?qBx1bA6sAaHsN3x1bX)>?qQxQq"X6tS1Q8^4y8qBx*?@q!Ar(a-0sAaHO4r1!R=1vv1b'9:z3!Ar(?;qBx1bA6sAaHsN3qAwAaH5y#!R.9sAaHuU|$;<uV}a2hv.FGuU|Qr2Yu-EFtQr2Yv%>?##Q!RM6!Ar(A3FG##F3$4fQq"Xs6KL##R1Jq!Ar(0CD##F3$4fS!Ar(6KL##F3e$=va2hPUV[P\?]^##F3f$>qBxQVW]Q^@_`##F4u$>qRyRWX]R^@_`##F4v$?"b	SXY_S`Aab 	qay!Ar(b.9qay!B(a-8sAaHO4x1bh)?@q1!Q<0AaGq!&&)AFF#qAwaAh7sQ!Aq'\2tSAb!H_5x(qBx)?@+X\\Aq'2	'r   c           	          | j                  t        t        j                  t	        dd      t        d             | j                  t        t        j                  t        d      t	        dd             y )Nrw   r   z	3.1415926)r   r   r    addr   r   r3   s    r   testMixingWithDecimalz"FractionTest.testMixingWithDecimaln  sN    )X\\Ab'7;#7	9)X\\!+.!B	9r   c                    | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k(         | j                  t        dd      t        dd      k(         | j                  t        dd      t        dd      k7         | j                  t        dd      t        dd      k7         y )Nrt   rz   rw   )r   r   r   r3   s    r   testComparisonszFractionTest.testComparisonsu  s   !Q!Aq')*1a1Q7*+!Q1Q7*+!Q1Q7*+1aAaG+,!Q1Q7*+1aAaG+,1aAaG+,!Q1Q7*+r   c                    | j                  t        dd      t        dd      k(         | j                  t        dd      t        dd      k(         | j                  t        dd      t        dd      k(         | j                  t        dd      t        dd      k(         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      kD         | j                  t        dd      t        dd      kD         | j                  t        dd      t        dd      kD         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k\         | j                  t        dd      t        dd      k\         | j                  t        dd      t        dd      k\         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      kD         | j                  t        dd      t        dd      kD         | j                  t        dd      t        dd      kD         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k         | j                  t        dd      t        dd      k\         | j                  t        dd      t        dd      k\         | j                  t        dd      t        dd      k\         y )Nrt   rz   rw   r   ru   )r   r   r>   r   r3   s    r   testComparisonsDummyRationalz)FractionTest.testComparisonsDummyRational  sf   !Q=A#667a+qAw671aM!Q$778q!,!Q78!Q-1"5561a=A#6671a=A#6671a=A#6671a=A#667!Q-1"556!Q=A#667!Q=A#6671aM!Q$7781aM!Q$778!Q=A#667!Q=A#667a+a1g56q!,qAw67q!,qAw67q!,qAw67q!,qAw67a+a1g56a+qAw67a+qAw67q!,!Q78q!,!Q78a+qAw67a+qAw67r   c                    t        d      }t        dd      }| j                  ||k7         | j                  ||k  xs ||kD         | j                  ||k(         | j                  ||k  xr ||k\         | j                  ||k7         | j                  ||k  xs ||kD         | j                  ||k(         | j                  ||k  xr ||k\         y )NgUUUUUU?rt   rw   )r
   r   r   r   )r   xys      r   testComparisonsDummyFloatz&FractionTest.testComparisonsDummyFloat  s    uaGQAQ'a a*AF+QAQ'a a*AF+r   c                    | j                  dt        dd      k         | j                  dt        dd      k         | j                  t        dd      dk         | j                  t        dd      dk         | j                  t        dd      dk         | j                  t        dd      dk         | j                  dt        dd      k         | j                  dt        dd      k         | j                  t        d	      t        dd      k         | j                  t        d
      t        dd      k         | j                  t        d      t        dd      k         | j                  t        dd      t        d	      k         | j                  t        dd      t        d
      k         | j                  t        dd      t        d      k         y )Nrz   r{   r   rw   rt   333333?皙?      ?r   r   r   r|   r   r   ru      r      r   r   r   r   r3   s    r   testMixedLesszFractionTest.testMixedLess  sd   AaG$Qq!W%!Q!$1a1%!Q#&1a3'a1g&qAw'u!Q/0f!R01u"a01!Q%,./2rU6]233uU|34r   c                    | j                  dt        dd      k         | j                  dt        dd      k         | j                  t        dd      dk         | j                  t        dd      dk         | j                  dt        dd      k         | j                  dt        dd      k         | j                  t        dd      dk         | j                  t        dd      dk         | j                  t        d	      t        dd      k         | j                  t        d
      t        dd      k         | j                  t        d      t        dd      k         | j                  t        dd      t        d	      k         | j                  t        dd      t        d
      k         | j                  t        dd      t        d      k         y )Nr1  rt   rz   r/  r0  r   rw   r{   r   r   r   r|   r   r   ru   r2  r   r3  r4  r5  r3   s    r   testMixedLessEqualzFractionTest.testMixedLessEqual  sd   qAw'!Q(!Q3'1aC(Qq!W%a1g&!Q1%1aA&u1a01f1b12u2q12!Q5</02reFm343e45r   c           
      `   | j                  t        d      t        d      k(         | j                  dt        t        t        j                  d      dz               k         | j                  dt        t        j                  d      dz         k         | j                  dt        t        j                  d      dz
        k         | j                  dt        t        j                  d      dz
        kD         | j                  dt        t        j                  d      dz         k\         y )Nr~   r   rt   )r   r   r   r@   r   r   r3   s    r   testBigFloatComparisonsz$FractionTest.testBigFloatComparisons  s    6eFm34a

4(81(<&= >>?qD!1A!56674::d#3a#7!889qD!1A!56674::d#3a#7!889r   c                 ^   | j                  t        d      t        d      k(         | j                  t        t
        j                  t        d      t        d             | j                  t        t
        j                  t        d      t        d             t        dd      }t        dd      }t        dd      }| j                  ||k(         | j                  ||k7         | j                  ||k(         | j                  ||k7         t
        j                  t
        j                  t
        j                  t
        j                  fD ]b  }| j                  t        |||       | j                  t        |||       | j                  t        |||       | j                  t        |||       d y )Nr~   rw   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gfo56)X[[!F)WV_M)X[[!F)WV_MaGE3E3Qa a Q++x{{HKKD 	3BiQ2iQ2iQ2iQ2		3r   c                    | j                  dt        dd      k(         | j                  dt        dd      k(         | j                  t        dd      dk(         | j                  t        dd      dk(         | j                  dt        dd      k(         | j                  dt        dd      k(         | j                  t        dd      dk(         | j                  t        dd      dk(         | j                  t        dd      t        d	      k(         | j                  t        d	      t        dd
      k(         | j                  t        dd      t        d      k(         | j                  t        d      t        dd      k(         y )Nr1  rt   rz   r/  r0  r   rw   r{   r   ru   r   r   r5  r3   s    r   testMixedEqualzFractionTest.testMixedEqual  s.   qAw'!Q(!Q3'1aC(Qq!W%a1g&!Q1%1aA&1aE%L01u1a011aE%L01v!Aq'12r   c           	      t   | j                  dt        t        dd                   | j                  dt        t        d                   | j                  dt        t        dd                   | j                  d	t        t        dd                   | j                  d
t        t        dd                   y )NzFraction(7, 3)ru   rw   z Fraction(6283185307, 2000000000)3.1415926535z#Fraction(-1, 100000000000000000000)rt   l   Fx:^V z7/37)r\   reprr   rj   r3   s    r   testStringificationz FractionTest.testStringification  s    )4!Q=9;a/0	2>a7m,	.AaG-c!Aq'l+r   c           	      Z   t         j                  j                  }t         j                  j                  }| j	                  t        d      t        t        dd                   | j	                  t        ddz        t        t        ddz                     | j                  t        t        d            t        t        d                   | j	                  |t        t        d|                   | j	                  t        t        d            t        d      j                                y )	Nr   r{   rz   r|   2   r~   rt   rx   )
sys	hash_infomodulusr   r\   hashr   r   r   __hash__)r   hmodhinfs      r   testHashzFractionTest.testHash  s    }}$$}}  cD1aM2b"ftAb"fI7Dv/aiAtAaJ/0 	aeaenn&67r   c                 0   t        d      }d|dddddf\  }}}}}}}t        ||z
        t        dd      kD  r?|}||z   |dz   }}||z   |dz   }}||z  |z  }||z  }t        ||z
        t        dd      kD  r?| j                  t        j                  |       y )Nrw   r   rt       ʚ;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)nqE{*EbD"Q$rAbD"R%rAQ!AFA !e)nqE{* 	tww*r   c                 V   t        d      }ddt        d      dddf\  }}}}}}t        ||z
        t        dd      kD  rF|}|dz  }|||dz
  z  z  }|||z  z  }|dz  }|||z  |z  z  }t        ||z
        t        dd      kD  rF| j                  t        j                  d      |       y )Nrt   r   rQ  rz   rx   )r   rS  r   r@   cos)r   r+  r   rV  rX  factrB   signs           r   testApproximateCos1z FractionTest.testApproximateCos1  s     aD'(!QqT1a':$5!T3!e)nqE{*EFAA1ID1q5LCBJDtd""A !e)nqE{* 	txx{A.r   c           
         t        dd      }t        dd      }t        dt        j                  dz         D ]'  }| j                  |t        t        ||                   ) | j                  t        |      t        t        |                   | j                  t        |      t        t        |                   | j                  t        |      t        t        |                   | j                  t        |      t        t        |                   | j                  |t        |             | j                  |t        |             y )Nr   ru   r   rt   )r   rS   rangepickleHIGHEST_PROTOCOLr\   r   r   idr   r   r   ra   )r   rW   drprotos       r   test_copy_deepcopy_picklez&FractionTest.test_copy_deepcopy_pickle(  s    b!H2q!1f559: 	8EQeAuo 67	8A47,A8A;0BrFBtBxL1BrFBx|$45r48,r8B<0r   c                 V    t        dd      }| j                  t        t        |dd       y )Nr   ru   ar|   )r   r   r   r   r   s     r   
test_slotszFractionTest.test_slots4  s#    b!H.'1c2>r   c                 j    G d dt               }t        j                   |d       |d            }| j                  |j                  d       | j                  |j
                  d       | j                  t        |j                        |       | j                  t        |j
                        |       y )Nc                   >    e Zd Zd Zd Zd Zed        Zed        Zy)-FractionTest.test_int_subclass.<locals>.myintc                 N     t        |       t        |       t        |      z        S r   r]   r   r"   s     r   r   z5FractionTest.test_int_subclass.<locals>.myint.__mul__;  s     !tDz#d)c%j"899r   c                 N     t        |       t        |       t        |      z        S r   rr  r"   s     r   r   z:FractionTest.test_int_subclass.<locals>.myint.__floordiv__=  s     !tDz#d)s5z"9::r   c                 R     t        |       t        |       t        |      z        }|S r   rr  )r   r   r+  s      r   __mod__z5FractionTest.test_int_subclass.<locals>.myint.__mod__?  s$    DJs4y3u:56r   c                 6     t        |       t        |             S r   rr  r3   s    r   rU   z7FractionTest.test_int_subclass.<locals>.myint.numeratorB  s    !tDz#d),,r   c                 $     t        |       d      S r   )r]   r3   s    r   rV   z9FractionTest.test_int_subclass.<locals>.myint.denominatorE  s    !tDz!}$r   N)	r8   r9   r:   r   r   ru  r   rU   rV   r2   r   r   myintrp  :  s7    :; - -% %r   rx  rw   r   rt   rz   )r   rF   rG   r\   rU   rV   r]   )r   rx  r   s      r   test_int_subclasszFractionTest.test_int_subclass9  s    	%C 	% uU|U5\:a(*akk*E2amm,e4r   c                    t        dd      ddft        dd      ddft        d      ddft        d      dd	fg}|D ]>  \  }}}| j                  ||
      5  | j                  t        ||      |       d d d        @ y # 1 sw Y   KxY w)Nrt   rw    z1/3rx   z-1/33r   -3fractionspecr   subTestr\   formatr   	testcasesr  r  r_   s        r    test_format_no_presentation_typez-FractionTest.test_format_no_presentation_typeO  s     q!Wb% r1Xr6"qT2sOrUB	
	 )2 	C$HdHxd; C  $!7BC C	CC Cs   A==B	c                    g t        dd      ddft        dd      ddft        dd      ddft        dd      dd	ft        dd
      ddft        dd      ddft        dd      ddft        dd      ddft        d
d      ddft        dd      ddft        dd      ddft        d      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        d      ddft        d      ddft        d      ddft        d      dd ft        d!      dd"ft        d#      dd"ft        d$d      dd%ft        d&d      dd'ft        d(      dd)ft        d*      dd+ft        d,      dd-ft        dd      d.d/ft        dd      d0d1ft        d2      d3d4ft        d5d6      d7d8ft        d2      d9d:ft        d5d6      d;d8ft        d5d6      d<d8ft        d5d6      d=d>ft        d?      d@dAft        dB      dCdDft        dEd6dz        dFdGf}|D ]>  \  }}}| j                  ||H      5  | j                  t        ||      |       d d d        @ y # 1 sw Y   KxY w)INrz   rw   z.6ez6.666667e-01z1.500000e+00r   z1.538462e-01   z8.695652e-02!   z6.060606e-02z6.500000e+00   z1.000000e+01z1.150000e+01z1.650000e+01r   z.3ez	0.000e+00rt   r   z	1.000e-03r   z	1.000e-02r|   z	1.000e-01z	1.000e+00z	1.000e+01z	1.000e+02z	1.000e+03z99.999994999999z9.999999e+01z	99.999995z1.000000e+02z99.999995000001ry   z-6.666667e-01r   z-1.500000e+00iz-1.000000e+021e1000z1.000e+1000z1e-1000z1.000e-1000z.6Ez6.666667E-01z.1ez6.7e-01z0.995z.0ez1e+00r   ru   rp   z3.142857e+00z#.0ez1.e+00z11.6ez12.6ez13.6ez 3.142857e+00z1234567.123456z,.5e1.23457e+06z
123.123456z012_.2ez0_001.23e+02rx   zz.6ez-3.091690e-85r~  r  r  s        r   test_format_e_presentation_typez,FractionTest.test_format_e_presentation_type[  s   3
q!We^,3
q!We^,3
 q"Xun-3
 q"Xun-	3

 q"Xun-3
 r1Xun-3
 r1Xun-3
 r1Xun-3
 r1Xun-3
 q!We^,3
 q!We^,3
 qT5+&3
 q$Z,3
  q#Y{+!3
" q"Xuk*#3
$ q!We[)%3
& rUE;''3
( sVUK()3
* tWe[)+3
.  !5.9/3
0 {^UN313
2  !5.933
6 r1Xuo.73
8 r1Xuo.93
: tWe_-;3
> x[%/?3
@ y\5-0A3
D q!We^,E3
H q!WeY'I3
J wZ(K3
N r1XsN+O3
R wZ*S3
V r1Xw/W3
X r1Xw/Y3
Z r1Xw0[3
^  &-8_3
` |_i8a3
d r1c6]FO4e3
	h )2 	C$HdHxd; C  $!7BC C	CC Cs   I66I?	c                    g t        dd      ddft        dd      ddft        dd      ddft        d	d      dd
ft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        d      ddft        dd      ddft        dd      ddft        d      ddft        d d      dd!ft        d"      dd#ft        d$      dd%ft        d&      dd%ft        d'      dd(ft        d)      dd(ft        d*      dd+ft        d,      dd+ft        d-      dd.ft        d/      dd0ft        d1      dd2ft        d3      dd2ft        d4      dd5ft        d6      dd5ft        d7      dd8ft        d9      dd8ft        d:      dd;ft        dd      ddft        dd      d<dft        dd      d=d>ft        dd      d?d@ft        dAd      ddBft        dAd      d<dBft        dAd      d=dBft        dAd      d?dBft        dd      dCdDft        dEd      dCdFft        dd      dCdGft        d d      dCdHft        dd      dIdJft        dEd      dIdKft        dd      dIdLft        d d      dIdMft        dN      dOdft        dN      dPdft        dN      dQdRft        dN      dSdTft        dU      dOdft        dU      dPdft        dU      dQdRft        dU      dSdTft        dd      dVdWft        dX      dVdYft        dX      dZd[ft        dd      d\dWft        dd      d]d^ft        dd      d_dft        dd      d`dft        dd      dadbft        dd      dcddft        dd      dedfft        dd      dgdhft        dAd      didjft        dd      didkft        dAd      dldBft        dAd      dmdnft        dAd      dodpft        dAd      dqdrft        dAd      dsdtft        dAd      dudvft        dAd      dwdxft        dAd      dydzft        dAd      d{d|ft        dAd      d}d~ft        dAd      ddft        dAd      ddft        dAd      ddft        dAd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        d      ddft        d      ddft        d      ddft        d      ddft        dd      ddft        dd      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        dī      ddft        dī      ddft        dd      ddft        dd      ddft        dd      ddft        ddʫ      ddft        dd̫      ddft        ddΫ      ddft        ddЫ      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd      ddft        dd߫      ddft        dd߫      ddft        dd߫      ddft        dd֫      ddft        dd߫      ddft        dd߫      ddft        dd߫      ddft        dd߫      ddf}|D ]>  \  }}}| j                  ||      5  | j                  t        ||      |       d d d        @ y # 1 sw Y   KxY w)Nr   rt   z.2fz0.00rw   z0.33rz   z0.67r   z1.33r  0.12z0.38r   z0.08   z0.01r   r   ru   z.5fz3.14286	399024789z399024789.00i i  z.50fz43.14159265392142104470871594159265392142104470871594r   z3.142857z0.000000iz	-3.142857z1.225z1.22z1.2250000001z1.23z1.2349999999z1.235z1.24z1.245z1.2450000001z1.25z1.2549999999z1.255z1.26z-1.225z-1.22z-1.2250000001z-1.23z-1.2349999999z-1.235z-1.24z-1.245z-1.2450000001z-1.25z-1.2549999999z-1.255z-1.26z-.2fz+.2fz+0.67z .2fz 0.67ry   z-0.67z.0f0rx   r   r|  r}  z#.0fz0.z-0.3.z-3.z-0.001zz.2fz-z.2fz+z.2fz+0.00z z.2fz 0.00z0.001z6.2fz  0.67i90  z12345.0012fz12345.000000z>6.2fz<6.2fz0.67  z^3.2fz^4.2fz^5.2fz0.67 z^6.2fz 0.67 z^7.2fz 0.67  z^8.2fz  0.67  z=+8.2fz-   0.67z+   0.67zX>3.2fzX>7.2fzXX-0.67zX<7.2fz-0.67XXzX^7.2fzX-0.67XzX=7.2fz-XX0.67z >7.2fz  -0.67z >7.2fz  -0.67z
>7.2fz

-0.67z	>7.2fz		-0.67z>>7.2fz>>-0.67z<>7.2fz<<-0.67u   →>7.2fu   →→-0.67z07.2fz-000.67z-07.2fz+07.2fz+000.67z 07.2fz 000.67z0.2fz>0.2fz<0.2fz^0.2fz=0.2fz00.2fz,.2fz,.7fz	0.6666667z
123456.789z
123,456.791234567z1,234,567.0012345678z12,345,678.00z,fz12,345,678.000000z_.2fz_.7fz
123_456.79z1_234_567.00z12_345_678.00	1234.5678z07,.2fz1,234.57z08,.2fz09,.2fz	01,234.57z010,.2fz
001,234.57z011,.2fz0,001,234.57z012,.2fz013,.2fz00,001,234.57z014,.2fz000,001,234.57z015,.2fz0,000,001,234.57z016,.2fz
-1234.5678z	-1,234.57z
-01,234.57z-001,234.57z-0,001,234.57z-00,001,234.57z-000,001,234.57z-0,000,001,234.57z06,.0fz-1,235z07,.0fz-01,235z08,.0fz-001,235z09,.0fz
-0,001,235z0=12,.2fz00001,234.57z12.34zX>0.2fz.5Fz.2%z314.29%z14.29%F   z1.43%i  z0.14%iX  z0.01%ip z0.00%z.0%z14%z#.0%z14.%r   z,.2%z	1,428.57%z7.2%z8.2%z 314.29%z08.2%z0314.29%i	  r   z2.54i	  z2.55iK
  z2.64z.1fz0.01   3   z0.1      z0.2r~  r  r  s        r   test_format_f_presentation_typez,FractionTest.test_format_f_presentation_type  s=   {
q!WeV${
 q!WeV${
 q!WeV$	{

 q!WeV${
 q!WeV${
 q!WeV${
 q"Xuf%{
 q#Yv&{
 q#Yv&{
 r1Xui({
 {^UN3{
 vuvCE{
" r1XsJ'#{
$ qT3
#%{
& sAY[)'{
* wZ'+{
, ~v.-{
. ~v./{
0 wZ'1{
2 wZ'3{
4 ~v.5{
6 ~v.7{
8 wZ'9{
: x[%);{
< 0={
> 0?{
@ x[%)A{
B x[%)C{
D 0E{
F 0G{
H x[%)I{
L q!WeV$M{
N q!Wff%O{
P q!Wfg&Q{
R q!Wfg&S{
T r1Xug&U{
V r1Xvw'W{
X r1Xvw'Y{
Z r1Xvw'[{
^ q!WeS!_{
` r1Xud#a{
b r1Xuc"c{
d sAYt$e{
h q!Wfd#i{
j r1Xvu%k{
l r1Xvt$m{
n sAY&o{
r x[&&)s{
t x['6*u{
v x['7+w{
x x['7+y{
z wZ({{
| wZ&)}{
~ wZ'*{
@ wZ'*A{
D q!Wfh'E{
F uXvz*G{
H uXun-I{
L q!Wgx(M{
N q!Wgx(O{
P q!Wgv&Q{
R q!Wgv&S{
T q!Wgw'U{
V q!Wgx(W{
X q!Wgy)Y{
Z q!Wgz*[{
^ r1Xx,_{
` q!Wh
+a{
d r1Xx)e{
f r1Xx+g{
h r1Xx+i{
j r1Xx+k{
l r1Xx+m{
n r1Xx+o{
r r1X{O4s{
t r1Xy+.u{
v r1Xy+.w{
x r1Xx+y{
z r1Xx+{{
| r1Xz=1}{
@ r1Xw	*A{
B r1Xx+C{
D q!Wh	*E{
F q!Wh	*G{
L q!Wff%M{
N q!Wgv&O{
P q!Wgv&Q{
R q!Wgv&S{
T q!Wgv&U{
X q!Wgv&Y{
\ q!Wff%]{
^ q!Wfk*_{
` |_fl3a{
b y\6>2c{
d z]FO4e{
f z]D"56g{
j q!Wff%k{
l q!Wfk*m{
n |_fl3o{
p y\6>2q{
r z]FO4s{
v {^Xz2w{
x {^Xz2y{
z {^X{3{{
| {^Y5}{
~ {^Y7{
@ {^Y7A{
B {^Y8C{
D {^Y(89E{
F {^Y(:;G{
H {^Y(:;I{
J |_h4K{
L |_h4M{
N |_h4O{
P |_i6Q{
R |_i7S{
T |_i9U{
V |_i9W{
X |_i)9:Y{
Z |_i):;[{
\ |_i)<=]{
` |_h1a{
b |_h	2c{
d |_h
3e{
f |_h5g{
r {^Z8s{
| wZ)}{
~ wZ7+{
B r1Xui(C{
F r1Xui(G{
H q!WeX&I{
J q"Xug&K{
L q#Yw'M{
N q$Z(O{
P q%[%)Q{
R q!WeU#S{
T q!Wff%U{
V sAY,W{
X r1Xvy)Y{
Z r1Xvz*[{
\ r1Xw
+]{
` q!WeV$a{
b q!WeV$c{
d q!WeV$e{
f tT]E6*g{
h tT]E6*i{
j tT]E6*k{
l q#Yu%m{
n r4[%'o{
p r4[%'q{
r sD\5%(s{
t sD\5%(u{
	x )2 	C$HdHxd; C  $!7BC C	CC Cs   	c11c:	c                 B   g t        d      ddft        d      ddft        d      ddft        d      dd	ft        d
      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      ddft        d      dd ft        d!      d"d#ft        d$      d"d#ft        d%      d"d&ft        d'      d"d&ft        d(      d"d)ft        d*      d"d)ft        d+      d"d,ft        d-      d"d,ft        d.      dd/ft        d0      dd1ft        d2      dd3ft        d4      dd5ft        d6      dd7ft        d.      d8d9ft        d0      d8d0ft        d2      d8d2ft        d4      d8d4ft        d6      d8d:ft        d      d;dft        d      d;d<ft        d=      d>d?ft        d@      dAdBft        dC      dAdDft        dE      dAdFft        dG      dAdHft        dG      dIdJft        dK      dAdLft        dK      dIdMft        d@      dNdBft        dC      dNdDft        dE      dNdFft        dG      dNdHft        dG      dOdJft        dK      dNdLft        dP      dQdRft        dSdTdUz        dVdWf}|D ]>  \  }}}| j                  ||X      5  | j                  t        ||      |       d d d        @ y # 1 sw Y   KxY w)YNz0.000012345678z.6gz1.23457e-05z0.00012345678z0.000123457z0.0012345678z
0.00123457z0.012345678z	0.0123457z
0.12345678z0.123457z	1.2345678z1.23457z	12.345678z12.3457z	123.45678z123.457r  z1234.57z	12345.678z12345.7z	123456.78123457z	1234567.8r  z
9.99999e+2z.4g1000z
9.99999e-8z1e-07z
9.99999e+8z1e+09z-0.115z.2gz-0.12z-0.125z-0.135z-0.14z-0.145z0.115r  z0.125z0.135z0.14z0.145r   r  z123.400z123.4z123.000123z120.00012012000000z1.2e+07z#.6gz0.00000z1.20000e+07z.6Gz1.23457E+06rA  rD   z3.14159z0.000031415z.0gz3e-05z
0.00031415z0.0003z0.31415z0.3z3.1415r|  z#.0gr  z31.415z3e+01z3.e+01z.1gz#.1gl            z_.25g18_446_744_073_709_551_616rx   ru   r   zgz-3.09169e-85r~  r  r  s        r   test_format_g_presentation_typez,FractionTest.test_format_g_presentation_typeW  s   =
 %7=
6=
 ~|4=
 }uk2	=

 |_eZ0=
 {^UI.=
 {^UI.=
 {^UI.=
 {^UI.=
 {^UI.=
 {^UH-=
 {^UM2=
 |_eV,=
 |_eW-=
  |_eW-!=
$ x[%)%=
& x[%)'=
( x[%))=
* x[%)+=
, wZ'-=
. wZ'/=
0 wZ'1=
2 wZ'3=
6 qT5#7=
8 y\5'*9=
: y\5%(;=
< y\5%(==
> z]E9-?=
B qT69%C=
D y\69-E=
F y\69-G=
H y\69-I=
J z]FM2K=
N {^UI.O=
P {^UM2Q=
T ~Y/U=
X }ug.Y=
Z |_eX.[=
\ y\5%(]=
^ x[%%_=
` x[&$'a=
b x[%)c=
d x[&(+e=
f }ug.g=
h |_eX.i=
j y\5%(k=
l x[%%m=
n x[&$'o=
p x[%)q=
t uXw <=u=
x r1c6]D.1y=
	| )2 	C$HdHxd; C  $!7BC C	CC Cs   -LL	c                 X   t        dd      }| j                  t              5  t        |d        d d d        g d}|D ]G  }| j	                  |      5  | j                  t
              5  t        ||       d d d        d d d        I y # 1 sw Y   ZxY w# 1 sw Y    xY w# 1 sw Y   lxY w)Nrz   rw   )Q6fzX>010fzX<010fzX^010fzX=010fz0>010fz0<010fz0^010fz0=010fz>010fz<010fz^010fz=010ez=010fz=010gz=010%z>00.2fz>00f006fz.010fz.02fz.000fz.ez.fz.gz.%zZ.2f)r  )r   r   r   r  r  r   )r   r  invalid_specsr  s       r   test_invalid_formatsz!FractionTest.test_invalid_formats  s    Q7y) 	#8T"	#!
D " 	+D4( +&&z2 +8T*++ +	+K	# 	#N+ ++ +s/   BB (B5B BBB  B)	N).r8   r9   r:   ra   rg   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r"  r%  r'  r)  r-  r6  r8  r:  r=  r?  rD  rN  r]  rb  rj  rm  ry  r  r  r  r  r  r2   r   r   rZ   rZ   [   s    +
Q
;12 ; ;=ob( 8-01=+90, ,D"&HA!+F 
DC'J9	,8@
,5$6":3$3,	8+/
1?
5,
C8Ct@CDBCH*+r   rZ   __main__)r;   decimalr   test.supportr   r@   r   r    rF   r  rG  r   unittestr   r   re  r   r   rG   r   objectr
   r>   rS   rX   TestCaserZ   r8   mainr2   r   r   <module>r     s    !  *      
      @8F 8@AI&& A(j+8$$ j+Z# zHMMO r   