;๒
IFc           @   sf   d  Z  d   Z d   Z d k l Z d f  d     YZ h  a e d d j e d  Z e d	  Z	 d
 S(   sฎ   The rationals.

See also:
http://www.inwap.com/pdp10/hbaker/hakmem/cf.html
expounding the virtues of continued fractions.

$Id: ratio.py,v 1.5 2007/03/24 15:51:54 eddy Exp $
c         C   sV   y |  i   SWn t j
 o n Xy t |   SWn t j
 o n Xt |   Sd  S(   N(   s   vals   asints   AttributeErrors   ints   OverflowErrors   long(   s   val(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   _asint
   s        c         C   s`   t  |   } x  |  | d j o d | } q Wx |  | j  o | d } q2 W| |  | f Sd  S(   Ni   (   s   _asints   vals   res(   s   vals   res(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   intsplitfrac   s        (   s   hcfs   Rationalc           B   sิ   t  Z d d  Z d   Z e Z d   Z d   Z d   Z e Z d   Z	 e	 Z
 d   Z e Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e Z d   Z d   Z d   Z RS(   Ni   c         C   sฬ   y t  |  d } Wn n X| | j o
 | } n | d j o t | |   n y t  |  d } Wn n X| | j o
 | } n t | |  } | d j  o | } n | | | | f |  _ d  S(   Ni    (	   s   intsplitfracs   denoms   vals   ZeroDivisionErrors   numers   hcfs   commons   selfs	   _rational(   s   selfs   numers   denoms   vals   common(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __init__   s$       
    
 c         C   sธ   |  i \ } } y | i \ } } Wn% t j
 o | d f \ } } n Xxg d d j oY y! t | | | | | |  SWqM t	 j
 o% t
 |  t
 |  f \ } } qM XqM Wd  S(   Ni   i    (   s   selfs	   _rationals   nums   dens   others   ps   qs   AttributeErrors   Rationals   OverflowErrors   long(   s   selfs   others   nums   qs   ps   den(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __add__,   s        ! c         C   sธ   |  i \ } } y | i \ } } Wn% t j
 o | d f \ } } n Xxg d d j oY y! t | | | | | |  SWqM t	 j
 o% t
 |  t
 |  f \ } } qM XqM Wd  S(   Ni   i    (   s   selfs	   _rationals   nums   dens   others   ps   qs   AttributeErrors   Rationals   OverflowErrors   long(   s   selfs   others   nums   qs   ps   den(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __sub__6   s        ! c         C   sธ   |  i \ } } y | i \ } } Wn% t j
 o | d f \ } } n Xxg d d j oY y! t | | | | | |  SWqM t	 j
 o% t
 |  t
 |  f \ } } qM XqM Wd  S(   Ni   i    (   s   selfs	   _rationals   nums   dens   others   ps   qs   AttributeErrors   Rationals   OverflowErrors   long(   s   selfs   others   nums   qs   ps   den(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __rsub__>   s        ! c         C   sฐ   |  i \ } } y | i \ } } Wn% t j
 o | d f \ } } n Xx_ d d j oQ y t | | | |  SWqM t	 j
 o% t
 |  t
 |  f \ } } qM XqM Wd  S(   Ni   i    (   s   selfs	   _rationals   nums   dens   others   ps   qs   AttributeErrors   Rationals   OverflowErrors   long(   s   selfs   others   nums   qs   ps   den(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __mul__F   s         c         C   sช   |  i \ } } y | i \ } } Wn% t j
 o | d f \ } } n XxY t oQ y t	 | | | |  SWqM t
 j
 o% t |  t |  f \ } } qM XqM Wd  S(   Ni   (   s   selfs	   _rationals   nums   dens   others   ps   qs   AttributeErrors   Trues   Rationals   OverflowErrors   long(   s   selfs   others   nums   qs   ps   den(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __div__P   s         c         C   sฐ   |  i \ } } y | i \ } } Wn% t j
 o | d f \ } } n Xx_ d d j oQ y t | | | |  SWqM t	 j
 o% t
 |  t
 |  f \ } } qM XqM Wd  S(   Ni   i    (   s   selfs	   _rationals   nums   dens   others   ps   qs   AttributeErrors   Rationals   OverflowErrors   long(   s   selfs   others   nums   qs   ps   den(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __rdiv__Y   s         c         C   s%   |  i |  } | |  | | f Sd  S(   N(   s   selfs   __div__s   others   rat(   s   selfs   others   rat(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys
   __divmod__b   s    c         C   s   |  i |  d Sd  S(   Ni   (   s   selfs
   __divmod__s   other(   s   selfs   other(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __mod__f   s    c         C   su   |  i \ } } x_ d d j oQ y t | | | |  SWq t j
 o% t |  t |  f \ } } q Xq Wd  S(   Ni   i    (   s   selfs	   _rationals   nums   dens   Rationals   counts   OverflowErrors   long(   s   selfs   counts   dens   num(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __pow__i   s       c         C   s   |  i d Sd  S(   Ni    (   s   selfs	   _rational(   s   self(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __nonzero__o   s    c         C   sฐ   |  i \ } } y | i \ } } Wn% t j
 o | d f \ } } n Xx_ d d j oQ y t | | | |  SWqM t	 j
 o% t
 |  t
 |  f \ } } qM XqM Wd  S(   Ni   i    (   s   selfs	   _rationals   nums   dens   others   ps   qs   AttributeErrors   cmps   OverflowErrors   long(   s   selfs   others   nums   qs   ps   den(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __cmp__p   s         c         C   s'   |  i \ } } t |  t |  ASd  S(   N(   s   selfs	   _rationals   nums   dens   hash(   s   selfs   nums   den(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __hash__x   s    c         C   s7   |  i \ } } | d j o	 | Sn | d | Sd  S(   Ni   s    / (   s   selfs	   _rationals   nums   den(   s   selfs   nums   den(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __str__|   s     	c         C   s8   t  |   } d | j o d | } n d | d Sd  S(   Ns   .s   1. * s   (s   )(   s   strs   selfs   row(   s   selfs   row(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __repr__   s     c         C   sp   |  i \ } } | | } y t |  } Wn t j
 o t |  } n X| | | j  o | d Sn | Sd  S(   Ni   (   s   selfs	   _rationals   nums   dens   rats   ints   OverflowErrors   long(   s   selfs   rats   nums   den(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   floor   s    
   c         C   sp   |  i \ } } | | } y t |  } Wn t j
 o t |  } n X| | | j o | d Sn | Sd  S(   Ni   (   s   selfs	   _rationals   nums   dens   rats   ints   OverflowErrors   long(   s   selfs   rats   nums   den(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   ceil   s    
   c         C   sM   |  i \ } } y | i   } Wn t j
 o t |  } n X| | Sd  S(   N(   s   selfs	   _rationals   nums   dens   asfloats   tops   AttributeErrors   float(   s   selfs   nums   dens   top(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   asfloat   s      c         C   sN   y% |  i h  d d <d d <| SWn" t j
 o t |  |   n Xd  S(   Ns   denominatori   s	   numeratori    (   s   selfs	   _rationals   keys   KeyErrors   AttributeError(   s   selfs   key(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   __getattr__ข   s     % (   s   __name__s
   __module__s   __init__s   __add__s   __radd__s   __sub__s   __rsub__s   __mul__s   __rmul__s   __div__s   __truediv__s   __rdiv__s   __rtruediv__s
   __divmod__s   __mod__s   __pow__s   __nonzero__s   __cmp__s   __hash__s   __str__s   __repr__s   floors   asints   ceils   asfloats   __getattr__(    (    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   Rational   s0   																			i   i    c         C   s,  d d d f Gd G|  GHt |   \ } } | t j o d t t |   d  } n y t |  \ } } Wn+ t j
 o t |  d f \ } } n Xd }	 xvd d j ogyฺ t |  | i    } | o | |  | |	  } n | |	 } d | | | | f G| GH| | j  o Pn xR d d j oD d | } t | | d	  \ }	 } t | d	  | j  o PqqWt |	 |  | } Wq t j
 o d
 | } q t j
 o^ } | i i d j o | i i }
 n t | i  }
 d G|
 | i GHd G| Gd G| GHPq Xq WH| | f t |  <| Sd  S(   Ns   %9s %9s	s   scores   errors   Approximation tof9.9999999999999998e-13i   i    s   %9.3g %9.2e	f0.5l    s
   exceptionss
   Exception:s   Aborted at denominators   using(   s   vals   intsplitfracs   floors   fracs   tolers   Nones   maxs   abss	   _previouss   bests   denoms   KeyErrors   Rationals   numers   asfloats   errs   assesss   weighs   gaps   OverflowErrors	   Exceptions   whats	   __class__s
   __module__s   __name__s   klazs   strs   args(   s   vals   tolers   loquaxs   assesss   bests   whats   floors   denoms   fracs   numers   klazs   gaps   errs   weigh(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   approximateง   sN          
  
 
 c         C   sพ  t  |   \ } } | t j o> y t |  d }
 Wqc t j
 o t	 |  d f }
 qc Xn | }
 |
 i
 } |
 i }	 |  |
 i   } t  d t |  d  d } xf d d j oX y1 t	 t  | |	 | d  d |	 |  | } Wn t j
 o t |  } qฆ XPqฆ W|  | i   } t |  t |  j  ox y t |  \ }
 }	 Wn t j
 o nH Xt |  |	 |	 t |  | i | i j o | | i f t |  <n | Sn d | G| GHd  S(   Ni    i   f0.5s   Not as good: %g error from(   s   intsplitfracs   vals   floors   fracs   offers   Nones	   _previouss   bests   KeyErrors   Rationals	   numerators   numers   denominators   denoms   asfloats   errs   abss   counts   news   OverflowErrors   longs   gap(   s   vals   offers   counts   fracs   errs   floors   numers   gaps   news   denoms   best(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   refineั   s<      		     /N(
   s   __doc__s   _asints   intsplitfracs   naturals   hcfs   Rationals	   _previouss   Nones   approximates   refine(   s   approximates   hcfs   refines   Rationals   intsplitfracs   _asint(    (    s'   /home/eddy/.sys/py/study/maths/ratio.pys   ?   s   			*