PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  lY$`@sddlmZddlZddlZddlZddlZddlZddgZddZddZ ej j Z ej j ZejdejejBZGd ddejZdS) )DecimalNFractiongcdcCsddl}|jdtdt|tkoBt|knrz|pP|dkrjtj|| Stj||St||S)Nrz6fractions.gcd() is deprecated. Use math.gcd() instead.)warningswarnDeprecationWarningtypeintmathr_gcd)abrr(/opt/python35/lib/python3.5/fractions.pyrs   (cCs"x|r|||}}qW|S)Nr)r rrrrr s r aC \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_eZdZdQZdddfddZedd Zed d Zd d dZe ddZ e ddZ ddZ ddZ ddZddZeeej\ZZddZeeej\ZZddZeeej\ZZdd Zeeej\ZZd!d"Z d#d$Z!d%d&Z"d'd(Z#d)d*Z$d+d,Z%d-d.Z&d/d0Z'd1d2Z(d3d4Z)d5d6Z*d7d8Z+dd9d:Z,d;d<Z-d=d>Z.d?d@Z/dAdBZ0dCdDZ1dEdFZ2dGdHZ3dIdJZ4dKdLZ5dMdNZ6dOdPZ7S)Rr _numerator _denominatorrNTc sUtt|j|}|dkr+t|tkrL||_d|_|St|tj rz|j |_|j |_|St|t rtj |}|j|_|j|_|St|trtj|}|j|_|j|_|St|trtj|}|dkr(td|t|jdp=d}|jd}|rgt|}nd}|jd}|rdt|} || t|}|| 9}|jd} | rt| } | d kr|d| 9}n|d| 9}|jd d kr(| }qtd nt|tkoNt|knrVnTt|tj rt|tj r|j |j |j |j }}n td |d krtd||r?t|tkot|knrtj||} |d kr+| } nt||} || }|| }||_||_|S)Nz Invalid literal for Fraction: %rnum0denomdecimal exprsign-z2argument should be a string or a Rational instancez+both arguments should be Rational instanceszFraction(%s, 0))superr__new__r r rr isinstancenumbersRational numerator denominatorfloat from_floatr from_decimalstr_RATIONAL_FORMATmatch ValueErrorgrouplen TypeErrorZeroDivisionErrorr rr ) clsr!r" _normalizeselfvaluemrrZscalerg) __class__rrrTs               (   (      zFraction.__new__cCst|tjr||St|tsPtd|j|t|jftj|rxt d||jftj |rt d||jf||j S)Nz.%s.from_float() only takes floats, not %r (%s)zCannot convert %r to %s.) rrIntegralr#r,__name__r r isnanr)isinf OverflowErroras_integer_ratio)r.frrrr$s zFraction.from_floatcCs)ddlm}t|tjr7|t|}n4t||sktd|j|t|jf|j rt d||jf|j rt d||jf|j \}}}tdjtt|}|r| }|dkr||d|S||d| SdS)Nr)rz2%s.from_decimal() only takes Decimals, not %r (%s)zCannot convert %s to %s.r)rrrrr5r r,r6r Z is_infiniter9Zis_nanr)Zas_tuplejoinmapr&)r.Zdecrrdigitsrrrrr%s&   zFraction.from_decimali@Bc Cs%|dkrtd|j|kr1t|Sd\}}}}|j|j}}xd||}|||} | |kr~P|||||| f\}}}}||||}}qYW|||} t|| ||| |} t||} t| |t| |kr| S| SdS)Nrz$max_denominator should be at least 1r)rrrr)r)rrrabs) r0Zmax_denominatorZp0Zq0Zp1Zq1ndr Zq2kZbound1Zbound2rrrlimit_denominators&     & zFraction.limit_denominatorcCs|jS)N)r)r rrrr!*szFraction.numeratorcCs|jS)N)r)r rrrr".szFraction.denominatorcCsd|jj|j|jfS)Nz %s(%s, %s))r4r6rr)r0rrr__repr__2s zFraction.__repr__cCs4|jdkrt|jSd|j|jfSdS)Nrz%s/%s)rr&r)r0rrr__str__7s zFraction.__str__cstfdd}djd|_j|_fdd}djd|_j|_||fS)Ncsnt|ttfr"||St|trDt||St|trft||StSdS)N)rr rr#complexNotImplemented)r r)fallback_operatormonomorphic_operatorrrforwards z-Fraction._operator_fallbacks..forward__cs}t|tjr||St|tjrJt|t|St|tjrut|t|StSdS)N)rrr ZRealr#ComplexrGrH)rr )rIrJrrreverses z-Fraction._operator_fallbacks..reverseZ__r)r6__doc__)rJrIrKrNr)rIrJr_operator_fallbacks>sP    zFraction._operator_fallbackscCs6|j|j}}t|j||j|||S)N)r"rr!)r rdadbrrr_addsz Fraction._addcCs6|j|j}}t|j||j|||S)N)r"rr!)r rrQrRrrr_subsz Fraction._subcCs!t|j|j|j|jS)N)rr!r")r rrrr_mulsz Fraction._mulcCs!t|j|j|j|jS)N)rr!r")r rrrr_divsz Fraction._divcCstj||S)N)r floor)r rrrr __floordiv__szFraction.__floordiv__cCstj||S)N)r rW)rr rrr __rfloordiv__szFraction.__rfloordiv__cCs||}|||S)Nr)r rdivrrr__mod__s zFraction.__mod__cCs||}|||S)Nr)rr rZrrr__rmod__s zFraction.__rmod__cCst|tjr|jdkr|j}|dkrWt|j||j|ddS|jdkrt|j| |j| ddSt|j | |j | ddSqt|t|Snt||SdS)Nrrr/F) rrr r"r!rrrr#)r rZpowerrrr__pow__s      zFraction.__pow__cCsz|jdkr)|jdkr)||jSt|tjrRt|j|j|S|jdkrl||jS|t|S)Nrr) rrrrr rr!r"r#)rr rrr__rpow__s  zFraction.__rpow__cCst|j|jddS)Nr/F)rrr)r rrr__pos__szFraction.__pos__cCst|j |jddS)Nr/F)rrr)r rrr__neg__szFraction.__neg__cCstt|j|jddS)Nr/F)rr@rr)r rrr__abs__ szFraction.__abs__cCs1|jdkr|j |j S|j|jSdS)Nr)rr)r rrr __trunc__szFraction.__trunc__cCs|j|jS)N)r!r")r rrr __floor__szFraction.__floor__cCs|j |j S)N)r!r")r rrr__ceil__szFraction.__ceil__cCs|dkrut|j|j\}}|d|jkr>|S|d|jkrY|dS|ddkrm|S|dSdt|}|dkrtt|||Stt|||SdS)Nrrrr)divmodr!r"r@rround)r0ZndigitsrWZ remainderZshiftrrr __round__ s  zFraction.__round__cCslt|jtdt}|s(t}nt|j|t}|dkrQ|n| }|dkrhdS|S)Nrrr)powr_PyHASH_MODULUS _PyHASH_INFr@r)r0ZdinvZhash_resultrrr__hash__9s  zFraction.__hash__cCst|tkr.|j|ko-|jdkSt|tjrb|j|jkoa|j|jkSt|tj r|j dkr|j }t|t rt j|st j|rd|kS||j|kSntSdS)Nrrg)r r rrrrr r!r"rMimagrealr#r r7r8r$rH)r rrrr__eq__Os!  zFraction.__eq__cCst|tjr3||j|j|j|jSt|trtj |s`tj |rm|d|S|||j |Snt SdS)Ng) rrr rr"rr!r#r r7r8r$rH)r0otheroprrr_richcmpds  zFraction._richcmpcCs|j|tjS)N)rtoperatorlt)r rrrr__lt__zszFraction.__lt__cCs|j|tjS)N)rtrugt)r rrrr__gt__~szFraction.__gt__cCs|j|tjS)N)rtrule)r rrrr__le__szFraction.__le__cCs|j|tjS)N)rtruge)r rrrr__ge__szFraction.__ge__cCs |jdkS)Nr)r)r rrr__bool__szFraction.__bool__cCs|jt|ffS)N)r4r&)r0rrr __reduce__szFraction.__reduce__cCs,t|tkr|S|j|j|jS)N)r rr4rr)r0rrr__copy__szFraction.__copy__cCs,t|tkr|S|j|j|jS)N)r rr4rr)r0memorrr __deepcopy__szFraction.__deepcopy__)rr)8r6 __module__ __qualname__ __slots__r classmethodr$r%rDpropertyr!r"rErFrPrSruadd__add____radd__rTsub__sub____rsub__rUmul__mul____rmul__rVtruediv __truediv__ __rtruediv__rXrYr[r\r]r^r_r`rarbrcrdrgrnrqrtrwryr{r}r~rrrrr)r4rr<sT u7   k                          )rrr rruresys__all__rr hash_infomodulusrkinfrlcompileVERBOSE IGNORECASEr'r rrrrrs