
    z%i                        	 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gZej                  j                  Zej                  j                  Z ej                  d      d        Z ej                   dej"                  ej$                  z        ZddZd	 Z ej                   d
ej,                  ej"                  z        j.                  Z G d dej2                        Zy)    DecimalNFractioni @  )maxsizec                     	 t        |dt              }t        t        t        |             |z        }| dk\  r|n| }|dk(  rdS |S # t        $ r	 t
        }Y $w xY w)Nr   )pow_PyHASH_MODULUShashabs
ValueError_PyHASH_INF)	numeratordenominatordinvhash_results        =/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/fractions.py_hash_algorithmr      se    2;O4( T#i.)D011nU5&F22)6)+  s   A AAa  
    \A\s*                                 # optional whitespace at the start,
    (?P<sign>[-+]?)                       # an optional sign, then
    (?=\d|\.\d)                           # lookahead for digit or .digit
    (?P<num>\d*|\d+(_\d+)*)               # numerator (possibly empty)
    (?:                                   # followed by
       (?:\s*/\s*(?P<denom>\d+(_\d+)*))?  # an optional denominator
    |                                     # or
       (?:\.(?P<decimal>d*|\d+(_\d+)*))?  # an optional fractional part
       (?:E(?P<exp>[-+]?\d+(_\d+)*))?     # and optional exponent
    )
    \s*\Z                                 # and optional whitespace to finish
c                     	 |dk\  r	|d|z  z  }n	| d| z  z  } t        | |dz	  z   |      \  }}|dk(  r|dz  dk(  r|dz  }|r|dk  n| dk  }|t        |      fS )Nr   
      r	   )divmodr   )ndexponentno_neg_zeroqrsigns          r   _round_to_exponentr"   J   s     1}	R\	R(] !qAv,"DAqAv!a%1*	R1q5QUDQ<    c                    	 | dk(  rddd|z
  fS t        t        |             t        |      }}t        |      t        |      z
  ||k  z   }||z
  }t        | ||      \  }}t        t        |            |dz   k(  r
|dz  }|dz  }|||fS )Nr   Fr   r   )strr   lenr"   )	r   r   figuresstr_nstr_dmr   r!   significands	            r   _round_to_figuresr,   g   s      	AvaW$$ s1v;A5EE
SZ5E>2A 7{H*1a:D+ 3{!+Ah&&r#   a  
    (?:
        (?P<fill>.)?
        (?P<align>[<>=^])
    )?
    (?P<sign>[-+ ]?)
    (?P<no_neg_zero>z)?
    (?P<alt>\#)?
    # A '0' that's *not* followed by another digit is parsed as a minimum width
    # rather than a zeropad flag.
    (?P<zeropad>0(?=[0-9]))?
    (?P<minimumwidth>0|[1-9][0-9]*)?
    (?P<thousands_sep>[,_])?
    (?:\.(?P<precision>0|[1-9][0-9]*))?
    (?P<presentation_type>[eEfFgG%])
c                       e Zd Z	 dZd+ fd	Zed        Zed        Ze fd       Zd Z	d Z
d,dZed	        Zed
        Zd Zd Zd Zd Zd Z eeej*                        \  ZZd Z eeej2                        \  ZZd Z eeej:                        \  ZZd Z  ee ejB                        \  Z"Z#d Z$ ee$ejJ                        \  Z&Z'd Z( ee(e)      \  Z*Z+d Z, ee,ejZ                        \  Z.Z/d Z0d Z1d Z2d Z3d Z4ejj                  fdZ6d Z7d Z8d Z9d-dZ:d  Z;d! Z<d" Z=d# Z>d$ Z?d% Z@d& ZAd' ZBd( ZCd) ZDd* ZE xZFS ).r   
_numerator_denominatorc                 D   	 t         t        |   |       }|t        |      t        u r||_        d|_        |S t        |t        j                        r$|j                  |_        |j                  |_        |S t        |t        t        f      r|j                         \  |_        |_        |S t        |t              rt         j#                  |      }|t%        d|z        t	        |j'                  d      xs d      }|j'                  d      }|rt	        |      }nd}|j'                  d      }|r6|j)                  dd      }d	t+        |      z  }||z  t	        |      z   }||z  }|j'                  d
      }|r"t	        |      }|dk\  r	|d	|z  z  }n	|d	| z  z  }|j'                  d      dk(  r| }nt-        d      t        |      t        cxu rt        |      u rn nnrt        |t        j                        rMt        |t        j                        r3|j                  |j                  z  |j                  |j                  z  }}nt-        d      |dk(  rt/        d|z        t1        j2                  ||      }	|dk  r|	 }	||	z  }||	z  }||_        ||_        |S )Nr   z Invalid literal for Fraction: %rnum0denomdecimal_ r   expr   r!   -z2argument should be a string or a Rational instancez+both arguments should be Rational instancesFraction(%s, 0))superr   __new__typeintr/   r0   
isinstancenumbersRationalr   r   floatr   as_integer_ratior%   _RATIONAL_FORMATmatchr   groupreplacer&   	TypeErrorZeroDivisionErrormathgcd)clsr   r   selfr*   r4   r5   scaler8   g	__class__s             r   r<   zFraction.__new__   s   	< Xs+C0I#%"+$%!Iw'7'78"+"5"5$-$9$9!Iw'785>5O5O5Q2!2Is+$**959$%G%.&/ 0 0 5#6	("%e*K"#Kggi0G")//#r": "CL 0$-$5G$D	#u,''%.C!#h!8%S0I'2t83K776?c)!*
I   !9 : : )_8tK'88G$4$45{G$4$45##k&=&==%%	(=(== #I
  1 2 2 !#$5	$ABBHHY,?Aa	#'r#   c           	         	 t        |t        j                        r | |      S t        |t              s1t	        | j
                  d|dt        |      j
                  d       | j                  |j                          S )Nz%.from_float() only takes floats, not  ())	r?   r@   IntegralrB   rH   __name__r=   _from_coprime_intsrC   )rL   fs     r   
from_floatzFraction.from_float#  sr    	
 a))*q6MAu% \\1d1g.>.>@ A A%s%%q'9'9';<<r#   c           	         	 ddl m} t        |t        j                        r |t        |            }n=t        ||      s1t        | j                  d|dt        |      j                  d       | j                  |j                          S )Nr   r   z).from_decimal() only takes Decimals, not rR   rS   )r5   r   r?   r@   rT   r>   rH   rU   r=   rV   rC   )rL   decr   s      r   from_decimalzFraction.from_decimal1  su    O#c7++,#c(#CC)sDI$6$689 9 &s%%s';';'=>>r#   c                L    	 t         t        |   |       }||_        ||_        |S N)r;   r   r<   r/   r0   )rL   r   r   objrP   s       r   rV   zFraction._from_coprime_ints=  s/    	
 Hc*3/"&
r#   c                 "    	 | j                   dk(  S Nr   r0   rM   s    r   
is_integerzFraction.is_integerI  s    8  A%%r#   c                 4    	 | j                   | j                  fS r]   r.   rb   s    r   rC   zFraction.as_integer_ratioM  s    	 !2!233r#   c                    	 |dk  rt        d      | j                  |k  rt        |       S d\  }}}}| j                  | j                  }}	 ||z  }|||z  z   }	|	|kD  rn|||||z  z   |	f\  }}}}||||z  z
  }}/||z
  |z  }
d|z  ||
|z  z   z  | j                  k  rt        j	                  ||      S t        j	                  ||
|z  z   ||
|z  z         S )Nr   z$max_denominator should be at least 1)r   r   r   r      )r   r0   r   r/   rV   )rM   max_denominatorp0q0p1q1r   r   aq2ks              r   limit_denominatorzFraction.limit_denominatorT  s   		> QCDD/D>!#BB 1 111AAbDBO#R"Wb0NBBa!eqA  R"$ Q31R4=D---..r266..r!B$w1R4@@r#   c                     | j                   S r]   )r/   rl   s    r   r   zFraction.numerator  s    ||r#   c                     | j                   S r]   ra   rq   s    r   r   zFraction.denominator  s    ~~r#   c                 j    	 | j                   j                  d| j                  d| j                  dS )N(z, rS   )rP   rU   r/   r0   rb   s    r   __repr__zFraction.__repr__  s-    #~~66#0A0AC 	Cr#   c                     	 | j                   dk(  rt        | j                        S | j                  d| j                   S )Nr   /)r0   r%   r/   rb   s    r   __str__zFraction.__str__  s7    !t''"oot/@/@AAr#   c          
         ! 	 |st        |       S t        |      }|$t        d|dt        |       j                        |d   *|d   %t        d|dt        |       j                  d      |d   xs d}|d   xs d}|d	   d
k(  rdn|d	   }t        |d         }t        |d         }t        |d         }t        |d   xs d      }	|d   !t        |d   xs d      }
|d   }|dv xr | }| }|dv rdnd}|dv r7|
 }|dk(  r|dz  }t        | j                  | j                  ||      \  }}d}|
}nY|dv rt        |
d      n|
dz   }t        | j                  | j                  |      \  }}}|dv xs |dkD  xs ||z   dk  }|r|dz
  n| }|dk(  rd}n|r| ||z   d }nd}|d|dz    d!}|rd
n|}|d t        |      |z
    |t        |      |z
  d  }|r|j                  d      }|r|sdnd"}||z   |z   }|r8|	t        |      z
  t        |      z
  } j                  !rd#|z  d$z  dz   n|       !rIdt               dz
  d#z  z   } d | dj                   !fd%t!        |t               d#      D              z     |z   }||	t        |      z
  t        |      z
  z  }|dk(  r||z   |z   S |d&k(  r||z   |z   S |d'k(  rt        |      dz  }|d | |z   |z   ||d  z   S ||z   |z   S )(NzInvalid format specifier z for object of type alignzeropadz0; can't use explicit alignment when zero-paddingfill >r!   r9   r7   r   altminimumwidthr3   thousands_sep	precision6presentation_typegGEFGEezfF%%rf   Fr   eEr   z+03dr   .      c              3   4   K   | ]  }||d z    z     yw)r   N ).0posleadingr   s     r   	<genexpr>z&Fraction.__format__.<locals>.<genexpr>  s)      4 cAg 664s   <^)r%   #_FLOAT_FORMAT_SPECIFICATION_MATCHERr   r=   rU   boolr>   r"   r/   r0   maxr,   r&   rstripzfilljoinrange)"rM   format_specrE   r|   rz   pos_signr   alternate_formr{   r   r   r   
trim_zeros
trim_pointexponent_indicatorr   negativer+   
scientific	point_posr'   suffixdigitsr!   	frac_part	separatortrailingmin_leading	first_posbodypaddinghalfr   r   s"                                   @@r   
__format__zFraction.__format__  s   O t9 4K@=+K? ;&&*4j&9&9%<>  7^'E),<,H+K? ;&&*4j&9&9%< =AA 
 V}#g%#v#-25=5/0eEl+uY'(507C8o.k*1c2	!"56&$.E~3E
''
$5$>SC %!zH C'A$6!2!2Hk%K!HkJ!I %, Iq!] 
 /@!2!2G/=+Hk8 "T) ,a<,g%+ 
 (2!yI #F*+Hy,@+FGFF  )a-12
 sH23v;233v;245	!((-I$YBC	y(61 &T2S]BK mm,9K1$q({G
 S\A-22Ijy)BGG 4 CL!<4 - G !,T2SY>?C<T>D((c\$;((c\w<1$D5D>D(4/'$%.@@'>D((r#   c                      	  fd}dj                   z   dz   |_          j                  |_         fd}dj                   z   dz   |_          j                  |_        ||fS )Nc                    t        |t              r	 | |      S t        |t              r | t        |            S t        |t              r t        |       |      S t        |t              r t	        |       |      S t
        S r]   )r?   r   r>   rB   complexNotImplemented)rl   bfallback_operatormonomorphic_operators     r   forwardz-Fraction._operator_fallbacks.<locals>.forwarde  sq    !X&+Aq11As#+Ax{;;Au%(q155Aw'(Q77%%r#   __c                 <   t        |t        j                        r t        |      |       S t        |t        j                        r t        |      t        |             S t        |t        j                        r t        |      t        |             S t        S r]   )	r?   r@   rA   r   RealrB   Complexr   r   )r   rl   r   r   s     r   reversez-Fraction._operator_fallbacks.<locals>.reverses  sp    !W--.+HQK;;Aw||,(q58<<Aw/(WQZ@@%%r#   __r)rU   __doc__)r   r   r   r   s   ``  r   _operator_fallbackszFraction._operator_fallbacks  so    N	^
	&  "3"<"<<tC.66		& !#4#=#==D.66r#   c                    	 | j                   | j                  }}|j                   |j                  }}t        j                  ||      }|dk(  r"t        j                  ||z  ||z  z   ||z        S ||z  }|||z  z  ||z  z   }t        j                  ||      }	|	dk(  rt        j                  |||z        S t        j                  ||	z  |||	z  z        S r`   r/   r0   rJ   rK   r   rV   
rl   r   nadanbdbrO   stg2s
             r   _addzFraction._add      q~~Bq~~BHHR6..rBwb/@"r'JJ!G"'NR!V#XXa^7..q!b&99**17ArNCCr#   c                    	 | j                   | j                  }}|j                   |j                  }}t        j                  ||      }|dk(  r"t        j                  ||z  ||z  z
  ||z        S ||z  }|||z  z  ||z  z
  }t        j                  ||      }	|	dk(  rt        j                  |||z        S t        j                  ||	z  |||	z  z        S r`   r   r   s
             r   _subzFraction._sub  r   r#   c                 0   	 | j                   | j                  }}|j                   |j                  }}t        j                  ||      }|dkD  r
||z  }||z  }t        j                  ||      }|dkD  r
||z  }||z  }t        j                  ||z  ||z        S r`   r   )rl   r   r   r   r   r   g1r   s           r   _mulzFraction._mul  s    q~~Bq~~BXXb"62IB2IBXXb"62IB2IB**27BG<<r#   c                 t   	 |j                   |j                  }}|dk(  rt        d|z        | j                   | j                  }}t        j                  ||      }|dkD  r
||z  }||z  }t        j                  ||      }|dkD  r
||z  }||z  }||z  ||z  }	}|	dk  r| |	 }	}t
        j                  ||	      S )Nr   r:   r   )r/   r0   rI   rJ   rK   r   rV   )
rl   r   r   r   r   r   r   r   r   r   s
             r   _divzFraction._div  s    q~~B7#$5$:;;q~~BXXb"62IB2IBXXb"62IB2IBBwR1q52rqA**1a00r#   c                 j    	 | j                   |j                  z  | j                  |j                   z  z  S r]   )r   r   rl   r   s     r   	_floordivzFraction._floordiv  s*    amm+1LMMr#   c                     	 | j                   |j                   }}t        | j                  |z  ||j                  z        \  }}|t        |||z        fS r]   )r   r   r   r   )rl   r   r   r   divn_mods         r   _divmodzFraction._divmod  sN    BAKK",b1;;.>?
UHUBG,,,r#   c                     	 | j                   |j                   }}t        | j                  |z  |j                  |z  z  ||z        S r]   )r   r   r   )rl   r   r   r   s       r   _modzFraction._mod  s>    Br)akkB.>?bIIr#   c                 d   	 t        |t        j                        r|j                  dk(  r|j                  }|dk\  r0t
        j                  | j                  |z  | j                  |z        S | j                  dkD  r2t
        j                  | j                  | z  | j                  | z        S | j                  dk(  rt        d| j                  | z  z        t
        j                  | j                   | z  | j                   | z        S t        |       t        |      z  S t        |       |z  S )Nr   r   r:   )r?   r@   rA   r   r   r   rV   r/   r0   rI   rB   )rl   r   powers      r   __pow__zFraction.__pow__!  s(   	 a))*}}!A:#66q||u7L78~~7NP P\\A%#66q~~%7O78||v7MO O\\Q&+,=,-NNuf,D-E F F $66UF7R9:5&7PR R
 Qx58++8q= r#   c                 0   	 | j                   dk(  r| j                  dk\  r|| j                  z  S t        |t        j                        r#t        |j                  |j                        | z  S | j                   dk(  r|| j                  z  S |t        |       z  S )Nr   r   )	r0   r/   r?   r@   rA   r   r   r   rB   )r   rl   s     r   __rpow__zFraction.__rpow__?  s~    >>Q1<<1#4$$a))*AKK71<<>>Q$$E!H}r#   c                 X    	 t         j                  | j                  | j                        S r]   r   rV   r/   r0   rq   s    r   __pos__zFraction.__pos__M  s     9**1<<HHr#   c                 Z    	 t         j                  | j                   | j                        S r]   r   rq   s    r   __neg__zFraction.__neg__Q  s"    **ALL=!..IIr#   c                 j    	 t         j                  t        | j                        | j                        S r]   )r   rV   r   r/   r0   rq   s    r   __abs__zFraction.__abs__U  s%    **3q||+<annMMr#   c                     	 | j                   dk  r! || j                    | j                  z         S  || j                   | j                  z        S Nr   r.   )rl   _indexs     r   __int__zFraction.__int__Y  sF    <<!Q\\MQ^^;<==!,,!..899r#   c                     	 | j                   dk  r| j                    | j                  z   S | j                   | j                  z  S r   r.   rq   s    r   	__trunc__zFraction.__trunc__`  s<    <<!ll]ann455<<1>>11r#   c                 6    	 | j                   | j                  z  S r]   r.   rq   s    r   	__floor__zFraction.__floor__g  s    ||q~~--r#   c                 :    	 | j                    | j                  z   S r]   r.   rq   s    r   __ceil__zFraction.__ceil__k  s    ,,!..011r#   c                 (   	 |K| j                   }t        | j                  |      \  }}|dz  |k  r|S |dz  |kD  r|dz   S |dz  dk(  r|S |dz   S dt        |      z  }|dkD  rt	        t        | |z        |      S t	        t        | |z        |z        S )Nrf   r   r   r   )r0   r   r/   r   r   round)rM   ndigitsr   floor	remaindershifts         r   	__round__zFraction.__round__p  s    	 ?!!A%dooq9E91}q Q"qy aqy CL  Q;E$,/77E$,/%788r#   c                 D    	 t        | j                  | j                        S r]   )r   r/   r0   rb   s    r   __hash__zFraction.__hash__  s    t0A0ABBr#   c                    	 t        |      t        u r | j                  |k(  xr | j                  dk(  S t	        |t
        j                        r4| j                  |j                  k(  xr | j                  |j                  k(  S t	        |t
        j                        r|j                  dk(  r|j                  }t	        |t              rCt        j                  |      st        j                  |      rd|k(  S | | j!                  |      k(  S t"        S )Nr   r           )r=   r>   r/   r0   r?   r@   rA   r   r   r   imagrealrB   rJ   isnanisinfrX   r   r   s     r   __eq__zFraction.__eq__  s    7c><<1$<1)<<a))*LLAKK/ 4NNamm35a)affkAazz!}

1 axALLO++ "!r#   c                 h   	 t        |t        j                        r7 || j                  |j                  z  | j
                  |j                  z        S t        |t              rKt        j                  |      st        j                  |      r	 |d|      S  || | j                  |            S t        S )Nr   )r?   r@   rA   r/   r   r0   r   rB   rJ   r  r  rX   r   )rM   otherops      r   _richcmpzFraction._richcmp  s    	 eW--.doo(9(99''%//9; ;eU#zz% DJJu$5#u~%$ 677!!r#   c                 D    	 | j                  |t        j                        S r]   )r  operatorltr   s     r   __lt__zFraction.__lt__      zz!X[[))r#   c                 D    	 | j                  |t        j                        S r]   )r  r	  gtr   s     r   __gt__zFraction.__gt__  r  r#   c                 D    	 | j                  |t        j                        S r]   )r  r	  ler   s     r   __le__zFraction.__le__      zz!X[[))r#   c                 D    	 | j                  |t        j                        S r]   )r  r	  ger   s     r   __ge__zFraction.__ge__  r  r#   c                 .    	 t        | j                        S r]   )r   r/   rq   s    r   __bool__zFraction.__bool__  s     ALL!!r#   c                 J    | j                   | j                  | j                  ffS r]   )rP   r/   r0   rb   s    r   
__reduce__zFraction.__reduce__  s     $2C2C DEEr#   c                 v    t        |       t        k(  r| S | j                  | j                  | j                        S r]   r=   r   rP   r/   r0   rb   s    r   __copy__zFraction.__copy__  .    :!K~~doot/@/@AAr#   c                 v    t        |       t        k(  r| S | j                  | j                  | j                        S r]   r  )rM   memos     r   __deepcopy__zFraction.__deepcopy__  r  r#   )r   N)i@B r]   )GrU   
__module____qualname__	__slots__r<   classmethodrX   r[   rV   rc   rC   ro   propertyr   r   ru   rx   r   r   r   r	  add__add____radd__r   sub__sub____rsub__r   mul__mul____rmul__r   truediv__truediv____rtruediv__r   floordiv__floordiv____rfloordiv__r   r   
__divmod____rdivmod__r   mod__mod____rmod__r   r   r   r   r   indexr   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r!  __classcell__)rP   s   @r   r   r      s   ( /IgR = = 	? 	? 	 	&47Ar    C
Br)hk bD ,D(,,?GXD ,D(,,?GX= ,D(,,?GX1( !4D(:J:J KKN #6iARAR"SL-- 2'6BJJ
 ,D(,,?GX!<IJN #.. :2.2
94C"*",****"FB
Br#   )F)r5   r   	functoolsrJ   r@   r	  resys__all__	hash_infomodulusr   infr   	lru_cacher   compileVERBOSE
IGNORECASErD   r"   r,   DOTALL	fullmatchr   rA   r   r   r#   r   <module>rJ     s    6      	 
,
 --'' mmw'* (*@ 2::  ZZ"--! ":$'R '1bjj 2 YY' 'Y $$zBw zBr#   