0  ˆÅÄ „iÿÃÀÁ*a a ´i_ã@stddlmZddlZddlZddlZddlZddlZdgZejj Z ejj Z e  dejejB¡ZGdd„dejƒZdS)é©ÚDecimalNÚFractionaC \A\s* # optional whitespace at the start, then (?P[-+]?) # an optional sign, then (?=\d|\.\d) # lookahead for digit or .digit (?P\d*) # numerator (possibly empty) (?: # followed by (?:/(?P\d+))? # an optional denominator | # or (?:\.(?P\d*))? # an optional fractional part (?:E(?P[-+]?\d+))? # and optional exponent ) \s*\Z # and optional whitespace to finish csÊeZdZdZdQddœ‡fdd„ Zedd „ƒZed d „ƒZd d „ZdRdd„Z e dd„ƒZ e dd„ƒZ dd„Z dd„Zdd„Zdd„Zeeejƒ\ZZdd„Zeeejƒ\ZZdd „Zeeejƒ\ZZd!d"„Zeeejƒ\ZZ d#d$„Z!ee!ej"ƒ\Z#Z$d%d&„Z%ee%e&ƒ\Z'Z(d'd(„Z)ee)ej*ƒ\Z+Z,d)d*„Z-d+d,„Z.d-d.„Z/d/d0„Z0d1d2„Z1d3d4„Z2d5d6„Z3d7d8„Z4dSd9d:„Z5d;d<„Z6d=d>„Z7d?d@„Z8dAdB„Z9dCdD„Z:dEdF„Z;dGdH„ZdMdN„Z?dOdP„Z@‡ZAS)Tr©Ú _numeratorÚ _denominatorrNT©Ú _normalizec s"tt|ƒ |¡}|du�rdt|ƒtur6||_d|_|St|tj ƒrV|j |_|j |_|St|t t fƒrx| ¡\|_|_|St|tƒ�rZt |¡}|dur¢td|ƒ‚t| d¡p°dƒ}| d¡}|rÌt|ƒ}nvd}| d¡}|�rdt|ƒ}||t|ƒ}||9}| d¡} | �rBt| ƒ} | d k�r4|d| 9}n|d| 9}| d ¡d k�rb| }ntd ƒ‚nft|ƒtu�r„t|ƒu�rŠnnn@t|tj ƒ�rÂt|tj ƒ�rÂ|j |j |j |j }}ntd ƒ‚|d k�ràtd|ƒ‚|�rt ||¡} |d k�r| } || }|| }||_||_|S)Néz Invalid literal for Fraction: %rÚnumÚ0ÚdenomÚdecimalé ÚexprÚsignú-z2argument should be a string or a Rational instancez+both arguments should be Rational instanceszFraction(%s, 0))ÚsuperrÚ__new__ÚtypeÚintrrÚ isinstanceÚnumbersÚRationalÚ numeratorÚ denominatorÚfloatrÚas_integer_ratioÚstrÚ_RATIONAL_FORMATÚmatchÚ ValueErrorÚgroupÚlenÚ TypeErrorÚZeroDivisionErrorÚmathÚgcd) Úclsrrr ÚselfÚmr rZscalerÚg©Ú __class__©ú!/usr/lib64/python3.9/fractions.pyr>st     ÿ       $ ÿ  þ    zFraction.__new__cCsDt|tjƒr||ƒSt|tƒs8td|j|t|ƒjfƒ‚|| ¡ŽS)Nz.%s.from_float() only takes floats, not %r (%s))rrÚIntegralrr$Ú__name__rr)r(Úfr.r.r/Ú from_float§s  ÿzFraction.from_floatcCsVddlm}t|tjƒr&|t|ƒƒ}n$t||ƒsJtd|j|t|ƒjfƒ‚||  ¡ŽS)Nrrz2%s.from_decimal() only takes Decimals, not %r (%s)) rrrrr0rr$r1rr)r(Zdecrr.r.r/Ú from_decimalµs   ÿÿzFraction.from_decimalcCs |j|jfS©Nr©r)r.r.r/rÁszFraction.as_integer_ratioé@Bc CsÞ|dkrtdƒ‚|j|kr"t|ƒSd\}}}}|j|j}}||}|||} | |krZqŠ|||||| f\}}}}||||}}q<|||} t|| ||| |ƒ} t||ƒ} t| |ƒt| |ƒkrÖ| S| SdS)Nr z$max_denominator should be at least 1)rr r r)r!rrrÚabs) r)Zmax_denominatorZp0Zq0Zp1Zq1ÚnÚdÚaZq2ÚkZbound1Zbound2r.r.r/Úlimit_denominatorÉs$      zFraction.limit_denominatorcCs|jSr5)r©r;r.r.r/rszFraction.numeratorcCs|jSr5)rr>r.r.r/rszFraction.denominatorc