
ܑRMc        
   @   sg  d  d k  Z  d  d k l Z l Z d d d d d d d	 d
 g Z d a d d  Z d d d     YZ d e	 f d     YZ
 e d j o d  d k Z d  d k l Z e
   Z x e d  D] Z e e i   d  e i   d o7 e i   d j  o$ e i   d d GHe i d  n d o8 e i   d j  o% d d Z e i e e   e Gq q Wn d S(   iN(   t
   ansi_printt   get_terminal_widthi'   i"   i#   i$   i   i!   i    i%   i   c            s~   d d d d d d g }    f d   } | o | d  } n | | |  } t  | t   } t | | d t d	 t d  S(
   Nt   .t   +t   *t   %t   #c            s     d  t  |   d   S(   i   (   t   len(   t   chars(   t   colourt   value_range(    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyt   <lambda>   s    c         S   s   t  |   d  | |   S(   i   (   R   (   R   t   idx(    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyR      s    t   newlinet   flush(   t   paletteR    t   Falset   True(   R	   R
   t   invertR   R   t   chart   ansi_colour(    (   R
   R	   s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyt   print_pixel   s    t
   Mandelbrotc           B   s;   e  Z d  d d d d d  Z d   Z d   Z d   Z RS(	   id   i   g      i    g      @c         C   ss   | |  _  | |  _ d d } t |  | } | | |  _ | |  _ d |  _ | |  _ | |  _ t d d  |  _	 d  S(   Ni   g      @i   i    (
   t   xpost   ypost   floatt   xscalet   yscalet
   iterationst   xt   yt   complext   z0(   t   selft   widtht   heightt   x_post   y_post   distancet   aspect_ratiot   factor(    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyt   __init__'   s    		
				c         C   s   t  |  _ |  i |  i |  i d } |  i |  i |  i d } g  } t |  i  D] } | | |  i | qS ~ |  _	 g  } t |  i  D] } | | |  i | q ~ |  _
 d  S(   Ni   (   R   t   reset_linesR   R   R   R   R   R   t   ranget   x_ranget   y_range(   R!   t   xmint   ymint   _[1]t   ixt   _[2]t   iy(    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyt   init3   s
    	8c         C   s   | |  _  d  S(   N(   R*   (   R!   t   cnt(    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyt   reset=   s    c   
      c   sZ  t  |  _ d } xD| |  i j  o3d } x| |  i j  ot |  i | |  i |  } |  i } d } d } xo t |  i	  D]^ } | | | } t
 |  } | d j o" t t | d  d  d } Pq} t | |  } q} W| | | f V|  i t  j	 o; | |  i 7} t |  i  }	 t  |  _ |	 o Pn d } q+ | d 7} q+ W| d 7} q Wd  S(   Ni    i   gy&1|?i   i   (   R   R*   R   R   R   R,   R-   R    R+   R   t   abst   mint   intt   bool(
   R!   R3   R1   t   ct   zR	   t   mindt   it   dt   do_break(    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyt   generate@   s:    	  	 	
(   t   __name__t
   __module__R)   R4   R6   RA   (    (    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyR   &   s   	
	t   Driverc           B   sS   e  Z d d d d g Z d   Z d   Z d d  Z d   Z d   Z d   Z RS(   g\;?gTmt$Pj?g{Gz?io   gffffffgQѿg?i^   g333333?i:   g?i   c         K   s2   | |  _  d |  _ d |  _ t |  _ |  i   d  S(   Nii   (   t   kwargst   zoom_locationt   colour_rangeR   R   R4   (   R!   RE   (    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyR)   i   s
    				c         C   sX   t    p d |  _ t d |  i p d |  i  |  _ |  i i   |  i i   |  _ d  S(   NiP   R"   i   (   R   R"   R   RE   t
   mandelbrotR4   RA   t   gen(   R!   (    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyR4   p   s    "i    c         C   s   |  i  i |  d S(   sE    Resets to the beginning of the line and drops cnt lines internally. N(   RH   R6   (   R!   R5   (    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyR6   v   s    c         C   s[   d } xG | |  i  d j o2 |  i i   \ } } } t | |  i |  i  q	 Wt i Jd S(   s    Fills the current line. i    i   N(   R"   RI   t   nextR   RG   R   t   syst   stderr(   R!   R   R   R;   (    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyt   catchupz   s     c         C   s   t  i J|  i   d S(   s!    Restarts the current generator. N(   RK   RL   R4   (   R!   (    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyt   restart   s    c         C   s8  d } } yT |  i  i   \ } } } | d j o+ t   } | |  i j o |  i   q] n Wn t j
 o |  i } |  i d 7_ |  i t |  i	  ;_ |  i	 |  i } | i
 h  | d d <| d d <| d d < | d |  _ |  i   Sn Xt | |  i |  i  | |  i d j o t i Jn d S(	   s    Emits a colourful character. i    i   R$   R%   i   R&   i   N(   RI   RJ   R   R"   R4   t   StopIterationRE   RF   R   t   zoom_locationst   updateRG   RN   R   R   RK   RL   (   R!   R   R;   R   R"   RE   t   loc(    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyt   dot   s$    
		4(   g\;?gTmt$Pj?g{Gz?io   (   gffffffgQѿg?i^   (   gffffffgQѿg333333?i:   (   gffffffgQѿg?i   (	   RB   RC   RP   R)   R4   R6   RM   RN   RS   (    (    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pyRD   a   s   					t   __main__(   t   sleepi:  i,  i    g{Gz?s	   WARNING! i   (    (   RK   t   py.ioR    R   R   t   NoneRG   R   R   t   objectRD   RB   t   randomt   timeRU   R?   t   xrangeR   RS   RM   R6   t   stringt   jumpR   (    (    (    s-   /64/home/arigo/u/pypy/tool/ansi_mandelbrot.pys   <module>   s,   ;?	 

	

