
    :e3                       	 d 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dlZddl	m
Z
mZmZ ddlmZ ddlmZ g dZg dZg dZd	d
gZeez   ez   ez   dgz   Zg dZi dddddddddddddddddddddd d!d"d#d"d$d%d&d'd(d)d*d+d,d-d.d/Zd0 Zd1 Z	  ee           n# e$ r  ed2           Y nw xY w G d3 d4e          Zd5 Zd6 Zd7Zdid9Z  G d: d;ej!                  Z" e e"ej#        d<            G d= d>ej$                  Z%ej#        Z# G d? d@e&          Z' G dA de          Z( G dB dCe          Z) G dD dEe&          Z* G dF dGe&          Z+ G dH dIe'          Z, G dJ dKe&          Z- G dL dMe&          Z. G dN dOe&          Z/ G dP dQe.e-          Z0e0Z1dR Z2 G dS dTe,          Z3 G dU dVe0          Z4e4Z5djdXZ6dY Z7ed(         Z8	 e8d)k    r e7e8           n+# e9$ r  edZe8           Y ne$ r  ed[e8z             Y nw xY wd\ Z:d] Z;d^ Z<d_Z=d` Z> e>ee3dadbe<            e>ee4dcdde;           e?Z@eAdek    r)df ZBdg ZCdh ZD eC              eD              eE             dS dS )kz-turtle 1.1b- - for Python 3.1   -  4. 5. 2009    N)isfilesplitjoin)deepcopy)simpledialog)	ScrolledCanvasTurtleScreenScreen	RawTurtleTurtleRawPenPenShapeVec2D)addshapebgcolorbgpicbyeclearscreen	colormodedelayexitonclick	getcanvas	getshapeslistenmainloopmodenuminputonkey
onkeypressonkeyreleaseonscreenclickontimerregister_shaperesetscreen
screensizesetupsetworldcoordinates	textinputtitletracerturtlesupdatewindow_heightwindow_width)Obackbackward
begin_fill
begin_polybkcircleclear
clearstampclearstampsclonecolordegreesdistancedotdownend_fillend_polyfd	fillcolorfillingforwardget_polygetpen	getscreenget_shapepoly	getturtlegotoheading
hideturtlehomehtisdown	isvisibleleftltonclickondrag	onreleasepdpenpencolorpendownpensizepenuppospositionpuradiansrightreset
resizemodertseth
setheadingsetpossetpositionsettiltanglesetundobuffersetxsetyshape	shapesizeshapetransformshearfactor
showturtlespeedststamptilt	tiltangletowards
turtlesizeundoundobufferentriesupwidthwritexcorycorwrite_docstringdictdone
Terminator)r   r1   r4   rA   rN   rR   rV   r\   r^   rc   rd   rf   rg   rr   rw   rz   r{   r{         ?heightg      ?	canvwidthi  
canvheighti,  	leftright	topbottomr   standardr         ?r   
   undobuffersizei  rl   classicrX   blackrB   rb   noresizevisibleTlanguageenglishexampleturtleturtlescreenzPython Turtle GraphicsF)examplescreenr*   
using_IDLEc                 P   	 t          | d          5 }|                                }d d d            n# 1 swxY w Y   i }|D ]}|                                }|r|                    d          r.	 |                    d          \  }}n%# t
          $ r t          d| d|           Y iw xY w|                                }|                                }|dv rt          |          }n5	 d|v rt          |          }nt          |          }n# t
          $ r Y nw xY w|||<   |S )Nr#=zBad line in config-file z:
)TrueFalseNonez''z"".)
open	readlinesstrip
startswithr   
ValueErrorprintevalfloatint)filenamefcfglinescfgdictlinekeyvalues          /usr/lib/python3.11/turtle.pyconfig_dictr      s   9	h		 !;;==! ! ! ! ! ! ! ! ! ! ! ! ! ! !G  zz|| 	ts++ 		CJC 	 	 	ExxxEFFFH	 iikk999KKEE%<<!%LLEEJJE   Ns0   3771B

B,+B,,#D
DDc                    	 d}i }i }t          |          rt          |          }d|v rd|d         z  }	 t          t                    \  }}t	          ||          }n# t
          $ r d}Y nw xY wt          |          rt          |          }t                              |           t                              |           d S )Nz
turtle.cfgimportconfigzturtle_%s.cfg )r   r   r   __file__r   	Exception_CFGr-   )r   default_cfgcfgdict1cfgdict2headtail	cfg_file2s          r   
readconfigr      s     KHHk ,{++!!%(@@8__
d{++		   			i *y))KKKKs   'A A-,A-z"No configfile read, reason unknownc                   L    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )r   c                 <    t                               | ||f          S N)tuple__new__)clsxys      r   r   zVec2D.__new__   s    }}S1a&)))    c                 ^    t          | d         |d         z   | d         |d         z             S Nr      r   selfothers     r   __add__zVec2D.__add__   ,    T!WU1X%tAwuQx'7888r   c                     t          |t                    r#| d         |d         z  | d         |d         z  z   S t          | d         |z  | d         |z            S r   )
isinstancer   r   s     r   __mul__zVec2D.__mul__   sY    eU## 	5758#DGE!H$444T!WU]DGEM222r   c                     t          |t                    st          |t                    r"t          | d         |z  | d         |z            S t          S r   )r   r   r   r   NotImplementedr   s     r   __rmul__zVec2D.__rmul__  sK    eS!! 	7Zu%=%= 	7aQ666r   c                 ^    t          | d         |d         z
  | d         |d         z
            S r   r   r   s     r   __sub__zVec2D.__sub__  r   r   c                 >    t          | d          | d                    S r   r   r   s    r   __neg__zVec2D.__neg__	  s    d1gXQx(((r   c                     t          j        |  S r   )mathhypotr   s    r   __abs__zVec2D.__abs__  s    z4  r   c                 *   	 t          | d          | d                   }t          j        |          }t          j        |          t          j        |          }}t          | d         |z  |d         |z  z   | d         |z  |d         |z  z             S )Nr   r   )r   r   r_   cossin)r   angleperpcss        r   rotatezVec2D.rotate  s    	d1gXtAw''U##x1T!WQYtAwqy($q'!)DGAI*=>>>r   c                 "    | d         | d         fS r    r   s    r   __getnewargs__zVec2D.__getnewargs__  s    Qa!!r   c                     d| z  S )Nz(%.2f,%.2f)r   r   s    r   __repr__zVec2D.__repr__  s    t##r   N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s        * * *9 9 93 3 3  9 9 9) ) )! ! !? ? ?" " "$ $ $ $ $r   r   c                    	 t          | j                  }|                                 |D ]}t          ||           | j                                        D ]'\  }}t          |          t          j        k    r|||<   (d S r   )	list	__bases__reverse__methodDict__dict__itemstypetypesFunctionType)r   _dictbaseList_superr   r   s         r   r   r   "  s    -CM""H $ $VU####l((**  
U;;%,,,E#J r   c                 P    	 i }t          | |           |                                S r   )r   keys)r   r   s     r   	__methodsr   ,  s(    -Ee::<<r   zTdef %(method)s(self, *args, **kw): return self.%(attribute)s.%(method)s(*args, **kw)r   c                    i }t          ||           i }t          |           }|                                D ]2}|d d         dk    s|dd          dk    s||v s||v r'||         ||<   3|                                D ]S\  }}	||	d}
t	          |t
                    rt          ||dz  }t          ||
           t          | ||
|                    Td S )Nr   _)methodfunc)r  	attribute)	r   r   r   r   r   str__stringBodyexecsetattr)	fromClasstoClasstoPartexclude_dict_1r   mfcexr  r  d
execStrings               r   __forwardmethodsr  6  s   G'"""E
I

Cllnn $ $bqb6S==BrssGsNNbGmmrSyyE"II . .t,,fc"" 	I6HHH Z	61V9----. .r   c                   T    e Zd Z	 	 	 ddZddZd Zd Zd	 Zd
 Zd Z	d Z
d Zd ZdS )r     ^  X  c           
         t           j                            | |||           |                                 | _        ||c| _        | _        ||c| _        | _        d| _	        t          j
        |||| j	        t           j        d          | _        t          j        || j        j        t           j                  | _        t          j        || j        j                  | _        | j                            | j        j        | j        j                   |                     dd	d
           |                     dd	d
           | j                            d	| d	ddd	d	d           | j                            d	| d	dd	d	d	d           | j                            d	| d	d	dd	d	d           |                                  | j                            d| j                   d S )N)r{   r   white   )r{   r   bgreliefborderwidth)commandorient)r  )xscrollcommandyscrollcommandr   r   )weightminsizenewspadxin_padyrowcolumnrowspan
columnspanstickyz<Configure>)TKFrame__init__winfo_toplevel_rootwindowr{   r   r   r   r  CanvasSUNKEN_canvas	Scrollbarxview
HORIZONTALhscrollyviewvscroll	configuresetrowconfigurecolumnconfiguregridra   bindonResize)r   masterr{   r   r   r   s         r   r/  zScrolledCanvas.__init__Q  s   
$eFCCC..00"'
DK*3Z'yuV$(GBI1N N N|FDL4F+-=: : :|FDL4FGGGdl.>.2l.> 	 	@ 	@ 	@!Aq111Qq!444q1!!& 	 	B 	B 	Bq1!!& 	 	B 	B 	Bq1!!& 	 	B 	B 	B

mT];;;;;r   Nc                    	 |r|| _         |r|| _        |r|| _        | j                            || j          dz  | j         dz  | j         dz  | j        dz  f           | j                            d| j         | j        z
  dz   z  | j         z             | j                            d| j        | j        z
  dz   z  | j        z             | 	                                 d S )Nr  )r  scrollregionr      )
r   r   r  r4  configxview_movetor{   yview_movetor   adjustScrollsr   r   r   r  s       r   ra   zScrolledCanvas.resetj  s   J 	'&DN 	)(DO 	DGr'+~oq&84?:JA:M'+~q'8$/1:L&N 	 	O 	O 	O 	!!#t~
'BR'G"H?C~#N 	O 	O 	O!!#t'Cb'H"I>Bo#N 	O 	O 	Or   c           
      <   	 | j                                         }| j                                         }| j                             d| j        |z
  z  | j        z             | j                             d| j        |z
  z  | j        z             || j        k     s|| j        k     rF| j                            d| dddddd           | j	                            d| dddddd           d S | j        
                                 | j	        
                                 d S )Nr   r   r   r#  r$  )r4  winfo_widthwinfo_heightrG  r   rH  r   r8  r?  r:  grid_forget)r   cwidthcheights      r   rI  zScrolledCanvas.adjustScrolls|  s:   	))++,++--!!#t~f'<"=dn"LMMM!!#tw'>"?"OPPPDN""g&?&?L1Dqa%&a  P P PL1Dqa%&a  P P P P P L$$&&&L$$&&&&&r   c                 0    	 |                                   d S r   )rI  )r   events     r   rA  zScrolledCanvas.onResize  s    r   c                 "    	  | j         j        | S r   )r4  bboxr   argss     r   rT  zScrolledCanvas.bbox  s    	 t| $''r   c                 (    	  | j         j        |i |S r   )r4  cgetr   rV  kwargss      r   rX  zScrolledCanvas.cget  s!    	 t| $1&111r   c                 ,    	  | j         j        |i | d S r   )r4  rF  rY  s      r   rF  zScrolledCanvas.config  '    	T,V,,,,,r   c                 ,    	  | j         j        |i | d S r   )r4  r@  rY  s      r   r@  zScrolledCanvas.bind  s'    	4*6*****r   c                 ,    	  | j         j        |i | d S r   )r4  unbindrY  s      r   r_  zScrolledCanvas.unbind  r\  r   c                 :    	 | j                                          d S r   )r4  focus_forcer   s    r   ra  zScrolledCanvas.focus_force  s!    	  """""r   )r  r  r  r  NNN)r   r   r   r/  ra   rI  rA  rT  rX  rF  r@  r_  ra  r   r   r   r   r   K  s        
 25DG< < < <2   $' ' '   ( ( (
2 2 2
- - -
+ + +
- - -
# # # # #r   r   r4  c                   :    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	dS )	_Rootc                 D    t           j                            |            d S r   )r-  Tkr/  r   s    r   r/  z_Root.__init__  s    
tr   c                 n    t          | ||||          | _        | j                            dd           d S )Nr   both)expandfill)r   r4  pack)r   r{   r   rO  rP  s        r   setupcanvasz_Root.setupcanvas  s:    %dE667KK00000r   c                     | j         S r   )r4  r   s    r   
_getcanvasz_Root._getcanvas  s
    |r   c                 >    |                      d||||fz             d S )Nz%dx%d%+d%+d)geometry)r   r{   r   startxstartys        r   set_geometryz_Root.set_geometry  s(    mUFFF$CCDDDDDr   c                 2    |                      d|           d S )NWM_DELETE_WINDOW)wm_protocol)r   destroys     r   	ondestroyz_Root.ondestroy  s    +W55555r   c                 *    |                                  S r   )winfo_screenwidthr   s    r   	win_widthz_Root.win_width  s    %%'''r   c                 *    |                                  S r   )winfo_screenheightr   s    r   
win_heightz_Root.win_height  s    &&(((r   N)
r   r   r   r/  rl  rn  rs  rx  r{  r~  r   r   r   rd  rd    s        1  1 1 1  E E E6 6 6( ( () ) ) ) )r   rd  c                       e Zd Z	 d Zd Zd Zd Z	 	 d%dZd Z	 	 d%d	Z	d
 Z
d Zd Zd Zd&dZd Zd'dZd'dZd'dZd'dZd Zd&dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd(d Zd! Z d" Z!d# Z"d(d$Z#dS ))TurtleScreenBasec                 h    	 t          j        dd| j                  }|                                 |S )Nr   )r{   r   rB  )r-  
PhotoImagecvblank)r   imgs     r   _blankimagezTurtleScreenBase._blankimage  s1    	m!Adg>>>		
r   c                 :    	 t          j        || j                  S )N)filerB  )r-  r  r  )r   r   s     r   _imagezTurtleScreenBase._image  s     	 }(47;;;;r   c                    || _         t          |t                    r| j         j        }| j         j        }n{t          | j                             d                    }t          | j                             d                    }| j                             | dz  | dz  |dz  |dz  f           || _        || _        dx| _        | _	        d S )Nr{   r   r  rD  r   )
r  r   r   r   r   r   rX  rF  xscaleyscale)r   r  whs       r   r/  zTurtleScreenBase.__init__  s    b.)) 	G!A"AADGLL))**ADGLL**++AGNNA2q51"a%Aq!t*ENFFF$''dkkkr   c                 >    	 | j                             ddd          S )N)r   r   r   r   r   r   r   rj  outline)r  create_polygonr   s    r   _createpolyzTurtleScreenBase._createpoly  s%    	w%%&8r2%NNNr   NFc                    	 g }|D ]@\  }}	|                     || j        z             |                     |	 | j        z             A | j        j        |g|R   || j                            ||           || j                            ||           || j                            ||           |r| j                            |           d S d S )Nrj  )r  r{   appendr  r  r  coordsitemconfigure	tag_raise)
r   polyitem	coordlistrj  r  r{   topclr   r   s
             r   	_drawpolyzTurtleScreenBase._drawpoly  s   	  	( 	(DAqIIa$+o&&&IIqb4;&''''x%"%%%%G!!(!666G!!(G!<<<G!!(%!888 	(Gh'''''	( 	(r   c           	      Z    	 | j                             ddddddt          j                  S )Nr   r   r  )rj  r{   capstyle)r  create_liner-  ROUNDr   s    r   _createlinezTurtleScreenBase._createline  s7    	w""1aABa.0h # 8 8 	8r   c                 p   	 |Xg }|D ]@\  }}|                     || j        z             |                     | | j        z             A | j        j        |g|R   || j                            ||           || j                            ||           |r| j                            |           d S d S )Nr  r  r  )	r   lineitemr  rj  r{   r  r  r   r   s	            r   	_drawlinezTurtleScreenBase._drawline  s    	  B! , ,1		!dk/***		1"t{*++++DGN8)b))))G!!(!666G!!(%!888 	(Gh'''''	( 	(r   c                 <    	 | j                             |           d S r   )r  deleter   items     r   _deletezTurtleScreenBase._delete)  s#    	 	tr   c                 :    	 | j                                          d S r   )r  r-   r   s    r   _updatezTurtleScreenBase._update/  s    	r   c                 <    	 | j                             |           d S r   )r  afterr   r   s     r   _delayzTurtleScreenBase._delay4  s    ;er   c                 r    	 	 | j                             |          }d}n# t          j        $ r d}Y nw xY w|S )NTF)r  	winfo_rgbr-  TclError)r   r:   rgboks       r   _iscolorstringzTurtleScreenBase._iscolorstring8  sS    		'##E**CBB{ 	 	 	BBB		s     44c                     	 |1| j                             |           |                                  d S | j                             d          S )N)r  r  )r  rF  r  rX  )r   r:   s     r   _bgcolorzTurtleScreenBase._bgcolorB  sH    	(GNNN&&&LLNNNNN7<<%%%r   c                     	 |\  }}|| j         z  }|| j        z  }dddd}| j                            |dz
  | |||         ||          }	| j                            |	          \  }
}}}|	|dz
  fS )Nswr   se)rQ   centerr`   r   )textanchorrj  font)r  r  r  create_textrT  )r   r\   txtalignr  rX   r   r   r  r  x0y0x1y1s                 r   _writezTurtleScreenBase._writeK  s    	# 1OOT;;w""1Q33/7 # F Fd++BBRTzr   r   c                      	   j                             |d|z             d S  fd} j                             |d|z  ||           d S )N<Button-%s>c                     j                             | j                  j        z  j                             | j                   j        z  }} ||           d S r   r  canvasxr   r  canvasyr   r  rR  r   r   funr   s      r   eventfunz+TurtleScreenBase._onclick.<locals>.eventfune  T    00<111$+= Aq					r   r  
tag_unbindtag_bindr   r  r  numaddr  s   ` `   r   _onclickzTurtleScreenBase._onclick\  sz    	
 ;Gt]S%899999      GT=3#6#FFFFFr   c                      	   j                             |d|z             d S  fd} j                             |d|z  ||           d S )Nz<Button%s-ButtonRelease>c                     j                             | j                  j        z  j                             | j                   j        z  }} ||           d S r   r  r  s      r   r  z-TurtleScreenBase._onrelease.<locals>.eventfunw  r  r   r  r  s   ` `   r   
_onreleasezTurtleScreenBase._onreleasek  s    	 ;Gt%?#%EFFFFF      GT#=#C%s, , , , ,r   c                      	   j                             |d|z             d S  fd} j                             |d|z  ||           d S )Nz<Button%s-Motion>c                     	 j                             | j                  j        z  j                             | j                   j        z  }} ||           d S # t          $ r Y d S w xY wr   )r  r  r   r  r  r   r  r   r  s      r   r  z*TurtleScreenBase._ondrag.<locals>.eventfun  s{     GOOEG44T[@ GOOEG444T[@ AC1IIIII    DDs   AA   
A.-A.r  r  s   ` `   r   _ondragzTurtleScreenBase._ondrag~  s|    	 ;Gt%83%>?????      GT#6#<hLLLLLr   c                      	  j                             d|z             d S  fd} j                             d|z  ||           d S )Nr  c                     j                             | j                  j        z  j                             | j                   j        z  }} ||           d S r   r  r  s      r   r  z1TurtleScreenBase._onscreenclick.<locals>.eventfun  r  r   r  r_  r@  )r   r  r  r  r  s   ``   r   _onscreenclickzTurtleScreenBase._onscreenclick  sr    	 ;GNN=3./////      GLL,h<<<<<r   c                     	  | j                             d|z  d            d S fd}| j                             d|z  |           d S )Nz<KeyRelease-%s>c                                   d S r   r   rR  r  s    r   r  z0TurtleScreenBase._onkeyrelease.<locals>.eventfun      r   r  r   r  r   r  s    `  r   _onkeyreleasezTurtleScreenBase._onkeyrelease  sl    	 ;GNN,s2D99999    GLL*S0(;;;;;r   c                    	 ?|| j                             dd            d S | j                             d|z  d            d S fd}|| j                             d|           d S | j                             d|z  |           d S )Nz
<KeyPress>z<KeyPress-%s>c                                   d S r   r   r  s    r   r  z.TurtleScreenBase._onkeypress.<locals>.eventfun  r  r   r  r  s    `  r   _onkeypresszTurtleScreenBase._onkeypress  s    	 ;{|T222224d;;;;;    {\844444_s2H=====r   c                 :    	 | j                                          d S r   )r  ra  r   s    r   _listenzTurtleScreenBase._listen  s!    	r   c                     	 |dk    r| j                             |           d S | j                             ||           d S Nr   )r  
after_idler  r   r  ts      r   _ontimerzTurtleScreenBase._ontimer  sH    	66Gs#####GMM!S!!!!!r   c                 >    	 | j                             dd|          S )Nr   image)r  create_image)r   r  s     r   _createimagezTurtleScreenBase._createimage  s$    	w##Aq#666r   c                     	 |\  }}| j                             ||| j        z  | | j        z  f           | j                             ||           d S Nr  )r  r  r  r  
itemconfig)r   r  r\   r  r   r   s         r   
_drawimagezTurtleScreenBase._drawimage  s]    	 1ta$+orDK/?@AAA4u-----r   c                 t    	 | j                             ||           | j                             |           d S r  )r  r  	tag_lower)r   r  r  s      r   	_setbgpiczTurtleScreenBase._setbgpic  s@    	 	4u---$r   c                 8    	 | j                             |          S r   )r  r   r  s     r   _typezTurtleScreenBase._type  s    	 w||D!!!r   c                     	 | j                             |          fdt          dt                    d          D             }|S )Nc                 8    g | ]}|         |d z             fS )r   r   ).0ir  s     r   
<listcomp>z/TurtleScreenBase._pointlist.<locals>.<listcomp>  s,    >>>Ar!ur!A#wh>>>r   r   r  )r  r  rangelen)r   r  plr  s      @r   
_pointlistzTurtleScreenBase._pointlist  sM    	 W^^D!!>>>>q#b''1)=)=>>>
r   c                 D    | j                             ||||f           d S )Nr  )r  rF  )r   srx1sry1srx2sry2s        r   _setscrollregionz!TurtleScreenBase._setscrollregion  s'    T4t$<=====r   c                 P   | j                                         }|D ]}t          | j                             |                    }g }|rI|d d         \  }}|                    ||z             |                    ||z             |dd          }|I | j         j        |g|R   d S )Nr  )r  find_allr   r  r  )	r   xscalefactoryscalefactorr   r  coordinatesnewcoordlistr   r   s	            r   _rescalezTurtleScreenBase._rescale  s      "" 	0 	0Dtw~~d3344KL ."2A21##A$4555##A$4555)!""o	  .
 DGN4/,/////	0 	0r   c                    	 t          | j        t                    s| j        | j        fS ||cxu r|cxu rn n| j        j        | j        j        fS ||| _        ||| _        | j                            |||           d S r   )r   r  r   r   r   ra   rJ  s       r   _resizezTurtleScreenBase._resize  s    	 $'>22 	3>4?22
0000b000000007$dg&888 &DN!(DOiR00000r   c                     	 | j                                         }|dk    r| j         d         }| j                                         }|dk    r| j         d         }||fS )Nr   r{   r   )r  rL  rM  )r   r{   r   s      r   _window_sizezTurtleScreenBase._window_size  sa    	##%%A::GG$E%%''Q;;WX&Ff}r   c                 D    	 | j         j                                         d S r   )r  tkr   r   s    r   r   zTurtleScreenBase.mainloop  s%    	 	
r   c                 <    	 t          j        ||| j                  S )N)parent)r   	askstringr  )r   r*   prompts      r   r)   zTurtleScreenBase.textinput.  s#    	 %eVDGDDDDr   c                 B    	 t          j        |||||| j                  S )N)initialvalueminvaluemaxvaluer#  )r   askfloatr  )r   r*   r%  defaultminvalmaxvals         r   r   zTurtleScreenBase.numinput=  s3    	" $UF.4v,0G5 5 5 	5r   )NNNFr   r   Nrb  )$r   r   r   r  r  r/  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r   r)   r   r   r   r   r  r    sX         < < <( ( (O O O
 3705( ( ( (28 8 8 -1-2( ( ( (.    
    & & & &  "G G G G, , , ,&M M M M*= = = =$	< 	< 	<> > > >$  
" " "7 7 7
. . .     " " "
 
 
> > >
0 
0 
01 1 1 1	 	 	  E E E5 5 5 5 5 5r   r  c                       e Zd Z	 dS )r   Nr   r   r   r   r   r   r   r   Y  s        
 	Dr   c                       e Zd ZdS )TurtleGraphicsErrorNr0  r   r   r   r2  r2  b  s         r   r2  c                        e Zd Z	 ddZddZdS )r   Nc                    || _         |dk    r%t          |t                    rt          |          }n|dk    rft          |t                    rP|                                                    d          r)t          |          rt          	                    |          }n|dk    rg }nt          d|z            || _        d S )Npolygonr  .gifcompoundzThere is no shape type %s)r  r   r   r   r  lowerendswithr   r	   r  r2  _data)r   type_datas      r   r/  zShape.__init__n  s    
I$%% #T{{g$$$ 5::<<((00 5VD\\ 5'..t44Dj  DD%&AE&IJJJ


r   c                     	 | j         dk    rt          d| j         z            ||}| j                            |||g           d S )Nr7  z Cannot add component to %s Shape)r  r2  r:  r  )r   polyrj  r  s       r   addcomponentzShape.addcomponent~  sf    	 :##%&HBF*'M N N N?G
4w/00000r   r   )r   r   r   r/  r?  r   r   r   r   r   g  sA            1 1 1 1 1 1r   r   c                   8    e Zd Z	 d	dZd
dZd Zd Zd Zd ZdS )Tbufferr   c                 H    || _         d gg|z  | _        d| _        d| _        d S )Nr  F)bufsizebufferptrcumulate)r   rC  s     r   r/  zTbuffer.__init__  s+    vh(r   Nc                     |#t          | j                  D ]}d g| j        |<   n|| _        d gg|z  | _        d| _        d S )Nr  )r  rC  rD  rE  )r   rC  r	  s      r   ra   zTbuffer.reset  sX    ?4<(( ( ("&A( #DL 6(W,DKr   c                     | j         dk    rV| j        s(| j        dz   | j         z  | _        || j        | j        <   d S | j        | j                                     |           d S d S r   )rC  rF  rE  rD  r  r  s     r   pushzTbuffer.push  sl    <!= 3 HqLDL8(,DH%%%DH%,,T22222 r   c                     | j         dk    r?| j        | j                 }|d S d g| j        | j        <   | j        dz
  | j         z  | _        |S d S r   )rC  rD  rE  r  s     r   popzTbuffer.pop  sX    <!;tx(D|t)-DH% HqLDL8 r   c                 H    | j         | j                            d g          z
  S r   )rC  rD  countr   s    r   nr_of_itemszTbuffer.nr_of_items  s!    |dk//7777r   c                 Z    t          | j                  dz   t          | j                  z   S )N )r  rD  rE  r   s    r   r   zTbuffer.__repr__  s$    4;#%DH55r   )r   r   )	r   r   r   r/  ra   rI  rK  rN  r   r   r   r   rA  rA    s{        ?   
   3 3 3  8 8 86 6 6 6 6r   rA  c                      e Zd Z	 dZed         ed         ed         fdZd Zd"dZd	 Zd"d
Z	d Z
d Zd"dZd Zd Zd Zd#dZd"dZd Zd Zd Zd Zd Zd Zd$dZd Zd"dZd#dZd%dZd"d Zd&d!ZeZeZ eZ!e	Z"eZ#dS )'r	   Tr   r   r   c                 z   t                               | |           t          dd          t          dd          t          dd          t          dd          t          dd          t          dd          t          d|                                           d	| _        d
di| _        || _        || _        t          d         | _	        g | _
        |                                  t          j        dk    rH|                                }|                    ddddd           |                    ddddd           d S d S )Nr5  )r   r   r   r   r   ))r      )   )r  r   )   )	   )   )   )r\  r   ))r`  )r`  rd  )rZ  rb  r   r\  )   rb  )   rd  )r_  r`  )ra  rc  )r[  r   )rg  ra  )r]  r_  )r[  r]  )rf  r[  )r   r   )r  rY  )rU  )Q#@Q@)Gz. @Q@)rk  rj  )ri  rh  rV  )Qrh  )Qrj  )Gz. rk  )Q#ri  rS  )ro  rl  )rn  rm  )rm  rn  )rl  ro  )g       g      $)ri  ro  )rk  rn  )rj  rm  )rh  rl  ))r   rT  )r   r   )rT  r   )rT  rT  ))r   Gz)r   g'@)rT  rp  )r   r   )rb  r^  re  )ra  r^  r  )arrowr   r5   squaretriangler   r  nopicr   r   darwinwm
attributesr   z-topmost10)r  r/  r   r  _shapes_bgpics_mode_delayvaluer   
_colormode_keysr6   sysplatformr0  call)r   r  r   r   r   
rootwindows         r   r/  zTurtleScreen.__init__  sR   !!$+++ #9.GHH"9 /& ' '
 #9 /H I I #9 /) * *"9 /+ , ,"9.KLL"7D,<,<,>,>??% *  "~
 {+


<8## **,,JOOD,ZEEEOOD,ZEEEEE $#r   c                    	 t           d         | _        t           d         | _        |                     d           |                     d          | _        d| _        d| _        d| _        g | _	        | 
                    d           d	D ]}|                     d |           |                     d            | j        d d          D ].}|                     d |           |                     d |           /d t          _        d S )
Nr   r   allr   ru  r   r   r  )r   r     )r   r~  r  r  r  _bgpic
_bgpicname_tracing_updatecounter_turtlesr   rS   r    r  r   r   _pen)r   btnr   s      r   r6   zTurtleScreen.clear  s    	  ={+U''++!W 	$ 	$CLLs####:aaa= 	' 	'CJJtS!!!OOD#&&&&r   Nc                 <   	 || j         S |                                }|dvrt          d|z            || _         |dv rH|                     | j         dz  | j         dz  | j        dz  | j        dz             dx| _        | _        |                                  d S )Nr   logoworldzNo turtle-graphics-mode %s)r   r  r  r   )	r}  r8  r2  r  r   r   r  r  ra   r   r   s     r   r   zTurtleScreen.mode  s    	* <:zz||444%&BT&IJJJ
'''!!4>/1"4t6F6I'+~q'8$/1:LN N N(++DK$+

r   c                 ^   	 |                                  dk    r|                      d           t          ||z
            }t          ||z
            }|                                 \  }}|                     |dz
  |dz
             | j        | j        }
}	| j        |z  | _        | j        |z  | _        || j        z  }| | j        z  }| j        |z   }| j        |z   }|                     ||||           | 	                    | j        |	z  | j        |
z             | 
                                 d S )Nr     )r   r   r  r&   r  r  r   r   r  r  r-   )r   llxllyurxuryxspanyspanwxwy	oldxscale	oldyscaler  r  r  r  s                  r   r(   z TurtleScreen.setworldcoordinates-  s)   	* 99;;'!!IIgcCi  cCi  ""$$B2r"u%%%#{DK9	nu,o-T[ tdk!~$%dD$555dk)+T[-BCCCr   c                    	 |Z|                                                     d          r$t          d|                     |                    }n4t	          d          t          |t                    rt          d|          }|| j        |<   d S )Nr6  r  z;Bad arguments for register_shape.
Use  help(register_shape)r5  )r8  r9  r   r  r2  r   r   r{  )r   namerl   s      r   r$   zTurtleScreen.register_shapeT  s    	, =zz||$$V,, Jgt{{4'8'899) +H J J Ju%% 	,)U++E"Tr   c                 <   	 t          |          dk    r|d         }t          |t                    r<|                     |          s|dk    r|S t	          dt          |          z            	 |\  }}}n4# t
          t          f$ r  t	          dt          |          z            w xY w| j        dk    rd |||fD             \  }}}d|cxk    rdk    r"n nd|cxk    rdk    rn nd|cxk    rdk    s!n t	          d	t          |          z            d
|||fz  S )Nr   r   r   zbad color string: %sbad color arguments: %sr   c                 2    g | ]}t          d |z            S g     o@roundr  r   s     r   r
  z*TurtleScreen._colorstr.<locals>.<listcomp>  "    999!uU1W~~999r      bad color sequence: %s#%02x%02x%02x)r  r   r  r  r2  	TypeErrorr   r  )r   r:   r   gbs        r   	_colorstrzTurtleScreen._colorstrw  sa   	 u::??!HEeS!! 	O""5)) OUb[[)*@3u::*MNNN	NGAq!!:& 	N 	N 	N%&?#e**&LMMM	N?c!!991ay999GAq!a3Q!]]]]s]]]]]a3%&>U&KLLL!Q**s   /A6 61B'c                 &                         d          sS t                    dk    rfddD             }n<t                    dk    rfddd          D             }nt          dz            t           fd	|D                       S )
Nr   r[  c                 F    g | ]}t          ||d z            d          S )r  rW  r   )r  r	  cstrs     r   r
  z'TurtleScreen._color.<locals>.<listcomp>  s/    :::1#d1QqS5k2&&:::r   )r   r  ra  rf  c                 B    g | ]}d t          |         d           z  S )rW  r  )r  r  r  s     r   r
  z'TurtleScreen._color.<locals>.<listcomp>  s,    888!"Sa"%%%888r   r   zbad colorstring: %sc              3   2   K   | ]}|j         z  d z  V  dS )r  N)r  )r  r   r   s     r   	<genexpr>z&TurtleScreen._color.<locals>.<genexpr>  s/      99Q(,999999r   )r   r  r2  r   )r   r  r  s   `` r   _colorzTurtleScreen._color  s    s## 	Kt99>>::::	:::BBYY!^^8888tABBx888BB%&;d&BCCC9999b999999r   c                     	 || j         S |dk    rt          |          | _         d S |dk    rt          |          | _         d S d S )Nr   r  )r  r   r   )r   cmodes     r   r   zTurtleScreen.colormode  sQ    	 =?"C<<#EllDOOOc\\!%jjDOOO \r   c                 x    	 | j         D ]0}|                    | j                   |                                 1d S r   )r  _setmoder}  ra   )r   r   s     r   ra   zTurtleScreen.reset  sG    	 m 	 	FOODJ'''LLNNNN	 	r   c                     	 | j         S r   )r  r   s    r   r,   zTurtleScreen.turtles  s    	 }r   c                     	 |r|                      |          }nd }|                     |          }||                     |          }|S r   )r  r  r  r   rV  r:   s      r   r   zTurtleScreen.bgcolor  sV    	  	NN4((EEEe$$KK&&Er   c                     	 || j         S t          |          | _         d| _        |t          |          | _        | j         r|                                  d S d S r  )r  r   r  r~  r-   )r   nr   s      r   r+   zTurtleScreen.tracer  sd    	$ 9= A"5zzD= 	KKMMMMM	 	r   c                 B    	 || j         S t          |          | _         d S r   )r~  r   r  s     r   r   zTurtleScreen.delay  s+    		 =##u::r   c                     	 t           j        sdt           _        t          | j        dk    r'| xj        dz  c_        | xj        | j        z  c_        d S d S )NTr   r   )r	   _RUNNINGr   r  r  r   s    r   _incrementudczTurtleScreen._incrementudc	  sc    '$ 	$(L!=11$4=0 r   c                     	 | j         }d| _         |                                 D ]*}|                                 |                                 +|| _         |                                  d S NT)r  r,   _update_data_drawturtler  )r   tracingr  s      r   r-   zTurtleScreen.update  sc    	- 	 	ANNMMOOOOr   c                 8    	 |                                  d         S r  r  r   s    r   r/   zTurtleScreen.window_width       	   ""1%%r   c                 8    	 |                                  d         S Nr   r  r   s    r   r.   zTurtleScreen.window_height&  r  r   c                     	 | j         S r   )r  r   s    r   r   zTurtleScreen.getcanvas/  s    	 wr   c                 P    	 t          | j                                                  S r   )sortedr{  r   r   s    r   r   zTurtleScreen.getshapes;  s%    	 dl''))***r   r   c                 6    	 |                      |||           d S r   )r  r   r  r  r  s       r   rS   zTurtleScreen.onclickF  s'    	 	Cc*****r   c                     	 |$|| j         v r| j                             |           n#|| j         vr| j                             |           |                     ||           d S r   )r  remover  r  r   r  r   s      r   r   zTurtleScreen.onkeyW  sq    	, ;dj  
!!#&&&
""Jc"""3$$$$$r   c                     	 |$|| j         v r| j                             |           n%|#|| j         vr| j                             |           |                     ||           d S r   )r  r  r  r  r  s      r   r    zTurtleScreen.onkeypressu  su    	0 ;dj  
!!#&&&_DJ!6!6Jc"""c"""""r   c                 0    	 |                                   d S r   )r  )r   xdummyydummys      r   r   zTurtleScreen.listen  s    	 	r   r   c                 4    	 |                      ||           d S r   )r  r  s      r   r#   zTurtleScreen.ontimer  s#    	$ 	c1r   c                     	 || j         S || j        vr|                     |          | j        |<   |                     | j        | j        |                    || _         d S r   )r  r|  r  r  r  )r   picnames     r   r   zTurtleScreen.bgpic  sc    	  ??"$,&&$(KK$8$8DL!t{DL$9:::!r   c                 2    	 |                      |||          S r   )r  rJ  s       r   r&   zTurtleScreen.screensize  s    	  ||Iz2666r   r   NNr.  r   rb  )$r   r   r   r  r   r/  r6   r   r(   r$   r  r  r   ra   r,   r   r+   r   r  r-   r/   r.   r   r   rS   r   r    r   r#   r   r&   r"   r%   r   r   r!   r   r   r   r	   r	     s        H $V,DM&F &F &F &FP  <       D% % %N!# !# !# !#F+ + +6	: 	: 	:) ) ) )*
 
 
    .   8& & & &1 1 1	 	 	& & && & &
 
 
	+ 	+ 	++ + + +"% % %<# # # #@
 
 
 
   *" " " "07 7 7 7& MKKHLLLr   r	   c                   F   e Zd Z	  edd           edd           edd          dZdZdZdZefdZd Z	d%d
Z
d Zd&dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd%dZd Zd Zd Zd%dZd%dZd Zd  Zd'd!Z d(d"Z!d'd#Z"d%d$Z#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,d	S ))
TNavigatorr           )r   r  r  r   r   r   c                     | j         | _        | j        | _        || _        d | _        |                                  d | _        |                     |           t          	                    |            d S r   )
DEFAULT_ANGLEOFFSET_angleOffsetDEFAULT_ANGLEORIENT_angleOrientr}  
undobufferr;   r  r  ra   r  s     r   r/  zTNavigator.__init__  sf     4 4

dr   c                 j    	 t          dd          | _        t          j        | j                 | _        d S )Nr  )r   	_positionr  START_ORIENTATIONr}  _orientr   s    r   ra   zTNavigator.reset  s-    	 sC"4TZ@r   Nc                     	 || j         S |dvrd S || _         |dv rd| _        d| _        d S | j        dz  | _        d| _        d S )Nr  )r   r  r   r         @r  )r}  r  r  _fullcircler  s     r   r  zTNavigator._setmode  sl    	<:444F
((( !D !D $ 0 3D "Dr   c                 f    	 || _         d|z  | _        | j        dk    r	d| _        d S |dz  | _        d S )Nih  r   r   r  )r  _degreesPerAUr}  r  r   
fullcircles     r   _setDegreesPerAUzTNavigator._setDegreesPerAU  sF    9% ^:## !D *2Dr        v@c                 2    	 |                      |           d S r   )r  r  s     r   r;   zTNavigator.degrees  s#    	* 	j)))))r   c                 F    	 |                      t          j                   d S r   )r  r   taur   s    r   r_   zTNavigator.radians5  s%    
	 	dh'''''r   c                 V    	 | j         | j        |z  z   }|                     |           d S r   )r  r  _goto)r   r<   endes      r   _gozTNavigator._goC  s0    7~x 77

4r   c                 Z    	 || j         z  }| j                            |          | _        d S r   )r  r  r   r   r   s     r   _rotatezTNavigator._rotateH  s-    K##|**511r   c                     	 || _         d S r   r  )r   ends     r   r  zTNavigator._gotoM  s    *r   c                 2    	 |                      |           d S r   r  r   r<   s     r   rD   zTNavigator.forwardQ  s!    	( 	r   c                 4    	 |                      |            d S r   r  r  s     r   r0   zTNavigator.backh  s#    	" 	(r   c                 4    	 |                      |            d S r   r  r   s     r   r`   zTNavigator.right|  s#    	$ 	eVr   c                 2    	 |                      |           d S r   r
  r   s     r   rQ   zTNavigator.left  s!    	$ 	Ur   c                     	 | j         S r   r  r   s    r   r\   zTNavigator.pos  s    		 ~r   c                     	 | j         d         S r  r  r   s    r   r}   zTNavigator.xcor      
	 ~a  r   c                     	 | j         d         S r  r  r   s    r   r~   zTNavigator.ycor  r  r   c                     	 ||                      t          |            d S |                      t          ||                     d S r   )r  r   )r   r   r   s      r   rJ   zTNavigator.goto  sJ    	: 9JJuay!!!!!JJuQ{{#####r   c                 ^    	 |                      dd           |                     d           d S r  )rJ   re   r   s    r   rM   zTNavigator.home  s2    		 			!Qr   c                 d    	 |                      t          || j        d                              d S r  r  r   r  )r   r   s     r   rj   zTNavigator.setx  s2    	 	

5DN1-../////r   c                 d    	 |                      t          | j        d         |                     d S r  r  )r   r   s     r   rk   zTNavigator.sety  s2    	 	

5*A../////r   c                     	 |t          ||          }t          |t                     r|}n;t          |t                    r
t          | }nt          |t                    r|j        }t          || j        z
            S r   )r   r   r   r  r  abs)r   r   r   r\   s       r   r<   zTNavigator.distance%  s    	* =1++Ca 	CC5!! 	)CC:&& 	+C3'(((r   c                    	 |t          ||          }t          |t                     r|}n;t          |t                    r
t          | }nt          |t                    r|j        }|| j        z
  \  }}t          t          j        t          j        ||                    d          dz  }|| j	        z  }| j
        | j        |z  z   | j        z  S Nr   r  )r   r   r   r  r  r  r   r;   atan2r  r  r  r  )r   r   r   r\   results        r   rv   zTNavigator.towardsE  s    	* =1++Ca 	CC5!! 	)CC:&& 	+CT^#1t|DJq!$4$455r::UB$$$!D$5f$<<@PPPr   c                     	 | j         \  }}t          t          j        t          j        ||                    d          dz  }|| j        z  }| j        | j        |z  z   | j        z  S r  )	r  r  r   r;   r  r  r  r  r  )r   r   r   r  s       r   rK   zTNavigator.headingh  si    	 |1t|DJq!$4$455r::UB$$$!D$5f$<<@PPPr   c                     	 ||                                  z
  | j        z  }| j        }||dz  z   |z  |dz  z
  }|                     |           d S )N       @)rK   r  r  r  )r   to_angler   fulls       r   re   zTNavigator.setheadingw  s^    	, DLLNN*D,==tBw$tBw.Ur   c           	      >   	 | j         r'| j                             dg           d| j         _        |                                 }|| j        }|Mt          |          | j        z  }dt          t          dt          |          dz  z   d          |z            z   }d|z  |z  }d|z  }d	|z  t          j	        t          j
        |          | j        z            z  }|d
k     r	| | | }}}|                                 }	|                                 }
|d
k    r|                     d
d
           n|                     d
           |                     |           t          |          D ]V}|                     |           |                     |           |                     d
           |                     |           W|                     |            |d
k    r|                     |	|
           |                     |           | j         rd| j         _        d S d S )NseqTr      g      @g     M@r   r   r  r   F)r  rI  rF  rq   r  r  r   minr   r   r_   r  _tracerr  r  r  r  )r   radiusextentstepsrq   fracr  w2ltrdlr	  s               r   r5   zTNavigator.circle  s   	: ? 	,O  %)))'+DO$

>%F=v;;t//Dc#bVS0$77<===E&L5 1W&L48DL$4$4T5G$GHHHA::rA2s"qA\\^^[[]]A::LLAJJqMMMRu 	 	AJJuHHQKKKJJqMMMLLOOOObSA::LLR   

5? 	-',DO$$$	- 	-r   c                     d S r   r   )r   r   s     r   rq   zTNavigator.speed      ==r   c                     d S r   r   )r   ar  s      r   r$  zTNavigator._tracer  r.  r   c                     d S r   r   )r   r  s     r   r  zTNavigator._delay  r.  r   r   )r  r  r  )-r   r   r   r   r  DEFAULT_MODEr  r  r/  ra   r  r  r;   r_   r  r  r  rD   r0   r`   rQ   r\   r}   r~   rJ   rM   rj   rk   r<   rv   rK   re   r5   rq   r$  r  rA   r4   r1   rc   rR   r]   rf   rg   rd   r   r   r   r  r    sr        E#sOOE#sOOE#sOO' ' L(    A A A# # # #. . .* * * *0( ( (  
2 2 2
    .  (  *  *  ! ! !! ! !!$ !$ !$ !$F  0 0 0$0 0 0$) ) ) )@!Q !Q !Q !QFQ Q Q  8=- =- =- =-B> > > >> > > >> > > > 
B	BH	B	BHFKDDDr   r  c                       e Zd Z	 ed         fdZed         ed         fdZddZddZd	 Zd
 Z	d Z
ddZd Zd Zd Zd Zd Zd ZddZddZddZd Zd ZeZeZeZe	Ze	ZeZeZdS )TPenrb   c                 V    || _         d | _        t                              |            d S r   )_resizemoder  r4  _reset)r   rb   s     r   r/  zTPen.__init__  s)    %Dr   rX   rB   c                     d| _         d| _        || _        || _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d S )Nr   Tr  )r   r   r  )r   r  r  r   )_pensize_shown	_pencolor
_fillcolor_drawing_speed_stretchfactor_shearfactor_tilt_shapetrafo_outlinewidth)r   rX   rB   s      r   r7  zTPen._reset  sY    !#&
+r   Nc                 z    	 || j         S |                                }|dv r|                     |           d S d S )N)autouserr   rb   )r6  r8  rW   )r   rmodes     r   rb   zTPen.resizemode  sR    	* =##000HHH&&&&& 10r   c                 F    	 || j         S |                     |           d S )N)rZ   )r9  rW   )r   r{   s     r   rZ   zTPen.pensize  s0    	" == r   c                 F    	 | j         sd S |                     d           d S )NFrY   r=  rW   r   s    r   r[   z
TPen.penup0  s2    	 } 	Fr   c                 F    	 | j         rd S |                     d           d S )NTrK  rL  r   s    r   rY   zTPen.pendown>  s2    	 = 	Fr   c                     	 | j         S r   )r=  r   s    r   rO   zTPen.isdownL  s    	 }r   c                     	 dddddd}|| j         S ||v r	||         }n/d|cxk     rdk     r n nt          t          |                    }nd}|                     |	           d S )
Nr   r   rg  r  r   )fastestfastnormalslowslowestr   g      %@)rq   )r>  r   r  rW   )r   rq   speedss      r   rq   z
TPen.speed[  s    	4 b1Q!MM=;F??5MEE54e%%EEEur   c                 b   	 |ryt          |          }|dk    r|d         x}}n|dk    r|\  }}n
|dk    r|x}}|                     |          }|                     |          }|                     ||           d S |                     | j                  |                     | j                  fS )Nr   r   r  r  )rX   rB   )r  r  rW   r  r;  r<  )r   rV  r*  pcolorfcolors        r   r:   z
TPen.color  s    	>  	MD		AAvv"&q')a!%a"&&^^F++F^^F++FHHfH77777;;t~..DO0L0LLLr   c                     	 |r:|                      |          }|| j        k    rd S |                     |           d S |                     | j                  S )N)rX   )r  r;  rW   r  r  s      r   rX   zTPen.pencolor  sb    	8  	/NN4((E&&HHeH$$$$$;;t~...r   c                     	 |r:|                      |          }|| j        k    rd S |                     |           d S |                     | j                  S )N)rB   )r  r<  rW   r  r  s      r   rB   zTPen.fillcolor  sb    	6  	0NN4((E''HHuH%%%%%;;t///r   c                 4    	 |                      d           d S )NTshownrW   r   s    r   rp   zTPen.showturtle  s#    		 	tr   c                 4    	 |                      d           d S )NFr\  r^  r   s    r   rL   zTPen.hideturtle	  s#    	 	ur   c                     	 | j         S r   )r:  r   s    r   rP   zTPen.isvisible	  s    	 {r   c                    	 | j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        d}|s|s|S t          |t                    r|}ni }|                    |           i }|D ]}||         ||<   | j        r| j                            d|f           d}d|v r| j        |d         k    rd}d|v rMt          |d         t                     r|                     |d         f          |d<   | j        |d         k    rd}d|v r| j        |d         k    rd}|r|                                  d|v r|d         | _        d|v r|d         | _        d|v r|d         | _        d|v rGt          |d         t                     r|                     |d         f          |d<   |d         | _        d	|v r|d	         | _        d
|v r|d
         | _        d|v r/|d         }t          |t&          t(          f          r||f}|| _        d|v r|d         | _        d|v r|d         | _	        d|v r|d         | _         d|v r|d         | _
        d|v sd|v sd|v rg| j        \  }	}
| j        }t+          j        | j
                  t+          j        | j
                  }}|	|z  |
||z  |z   z  |	 |z  |
|||z  z
  z  f| _        |                                  d S )N)r]  rY   rX   rB   rZ   rq   rb   stretchfactorro   r  rt   rW   FrY   TrX   rZ   rB   rq   rb   rb  ro   r  r]  rt   )r:  r=  r;  r<  r9  r>  r6  r?  r@  rC  rA  r   dictr-   r  rI  r   r  _newLiner   r   r   r   r   rB  r  )r   rW   pendict_pdp_p_bufr   newLinesfscxscyshfsacas                 r   rW   zTPen.pen!	  sd   -	\ #'+"&-"&."&/"&-"&+"&"2"&"5"&"3"&"4"&*   	w 	Jc4   	AAA	 	# 	#Cc(F3KK? 	2O  %111>>}),,??!J-// A $*/? @ @*~:..>>}),, 	MMOOO>>iLDM??z]DN>>iLDM!!K.%00 C!%;0A!B!B+nDOa<<G*DK1 Da?#B"sEl++ "X"$DA !- 0D>>!"9Da<<G*DKQ;;6DJa6Q;;-12D2D*HC#CXdj))48DJ+?+?B!$Rc"frk):!$Rb3r6k): <Dr   Tc                     d S r   r   r   usePoss     r   rd  zTPen._newLine	  r.  r   Fc                     d S r   r   )r   rM  forceds      r   r  zTPen._update	  r.  r   c                     d S r   r   rU  s     r   r  zTPen._color	  r.  r   c                     d S r   r   rU  s     r   r  zTPen._colorstr	  r.  r   r   T)TF)r   r   r   r   r/  r7  rb   rZ   r[   rY   rO   rq   r:   rX   rB   rp   rL   rP   rW   rd  r  r  r  r{   rz   r^   rV   r>   rr   rN   r   r   r   r4  r4    s        #'|"4    
 #:.#K0   ' ' ' '8       .         $ $ $ $L,M ,M ,M\#/ #/ #/J"0 "0 "0H     
 
 
{ { { {~> > > >> > > >> > >> > > E	B	B	BD	B	BBBr   r4  c                       e Zd Z	 d Zd ZdS )_TurtleImagec                 L    || _         d | _        |                     |           d S r   )r   r  	_setshape)r   r   
shapeIndexs      r   r/  z_TurtleImage.__init__	  s(    
z"""""r   c                    | j         || _        | j        dcxk    rj        |         j        k    rn nd S | j        dcxk    rj        |         j        k    rn nd S | j        dv r                    | j                   n*| j        dk    r| j        D ]}                    |           j        |         j        | _        | j        dk    r                                | _        d S | j        dk    r,                    j        d         j                  | _        d S | j        dk    r%fdj        |         j        D             | _        d S d S )Nr5  r  )r  r5  r7  r  c                 8    g | ]}                                 S r   r  r  r  r   s     r   r
  z*_TurtleImage._setshape.<locals>.<listcomp>	  s7     L L L4&,,.. L L Lr   )	r   r|  r  r{  r  _itemr  r  r:  )r   r|  r  r   s      @r   r{  z_TurtleImage._setshape	  s   $:FFFFfnZ&@&FFFFFFF:DDDDFN:$>$DDDDDDF:---NN4:&&&&Z:%%
 % %t$$$$^J/5
:""++--DJJJZ7"",,V^G-D-JKKDJJJZ:%%L L L L*0.*D*JL L LDJJJ &%r   N)r   r   r   r/  r{  r   r   r   ry  ry  	  s<        # # #
L L L L Lr   ry  c                      e Zd Z	 g Zded         ed         ed         fdZd Zd Zd Zd	 Z	d
 Z
d Zd Zd;dZd Zd Zd Zd Zd<dZd=dZd<dZd Zd<dZd Zd>dZd Zd Zd?dZd Zd Zd Zd  Zd<d!Z d" Z!d# Z"d$ Z#d@d&Z$d' Z%d( Z&d) Z'd<d*Z(d+ Z)dAd.Z*d/ Z+d0 Z,d1 Z-d2 Z.d3 Z/e/Z0d<d4Z1dBd6Z2dBd7Z3dBd8Z4d9 Z5d: Z6eZ7dS )Cr   Nrl   r   r   c                 :   t          |t                    r|| _        nt          |t                    r5|t          j        vrt          j                            |           || _        nt          |t          t          f          r\t          j        D ]}|j	        |k    r	|| _         n9t          |          | _        t          j                            | j                   nt          d|z            | j        }t                              | |                                           t                              |            |j                            |            |                                | _        t%          ||          | _        d | _        d| _        d x| _        | _        || _        d| _        |                                | _        | j        g| _        | j        g| _        g | _        || _        tA          |          | _!        | "                                 d S )Nzbad canvas argument %sF)#r   _Screenr   r	   r   screensr  r   r2  r  r2  r  r/  r   r4  r  r  drawingLineItemry  r   _poly_creatingPoly	_fillitem	_fillpathr:  _hidden_from_screencurrentLineItemr  currentLiner   
stampItems_undobuffersizerA  r  r  )r   canvasrl   r   r   r   s         r   r/  zRawTurtle.__init__	  s    fg&& 	I DKK-- 	IY...!((000 DKK 899 		I#+ 6 69&&"(DKE ' +622!((555%&>&GHHHD&++--000dt$$$%1133"6511
"*..#( %1133 N+*+
-!.11r   c                     	 t                               |            t                              |            |                                  |                                  |                                  d S r   )r  ra   r4  r7  _clearr  r  r   s    r   ra   zRawTurtle.reset 
  s_    	$ 	Dr   c                 R    	 ||dk    r	d | _         d S t          |          | _         d S r  )r  rA  )r   sizes     r   ri   zRawTurtle.setundobuffer
  s2    	 <4199"DOOO%dmmDOOOr   c                 H    	 | j         dS | j                                         S r  )r  rN  r   s    r   ry   zRawTurtle.undobufferentries,
  s*    	 ?"1**,,,r   c                 x   	 d x| _         | _        | j        D ]}| j                            |           | j                                        | _        g | _        | j        r| j        	                    | j
                   | j        g| _        |                                  |                     | j                   d S r   )r  r  r   r   r  r  r  r  r=  r  r  r8   ri   r  r  s     r   r  zRawTurtle._clear9
  s    **..J 	& 	&DK%%%%#{6688= 	4##DN333*+
4/00000r   c                 X    	 |                                   |                                  d S r   )r  r  r   s    r   r6   zRawTurtle.clearG
  s'    
	 	r   c                     | j                                          | j         j        dk    rd S t          | j                  dk    r3| j                             | j        | j        | j        | j                   d S d S r   )	r   r  r  r  r  r  r  r;  r9  r   s    r   r  zRawTurtle._update_dataV
  s    !!###;%**Ft  ""K!!$"68H"&.$-A A A A A #"r   c                    	 | j         }|j        dk    rd S |j        dk    rX|                                  |                                  |                                 |                    |j                   d S |                                  |j        dk    rA|                                D ]}|                                 |                                 d S d S r   )	r   r  r  r  r  r  r~  r  r,   )r   r   r  s      r   r  zRawTurtle._update^
  s    	?aF_!!NNMM&,-----$)))) $ $AMMOOOO      *)r   c                 :    	 | j                             ||          S r   )r   r+   )r   flagr   s      r   r$  zRawTurtle._tracerp
  s!    	$ {!!$...r   c                 6    | j                             |          S r   )r   r  rU  s     r   r  zRawTurtle._color
  s    {!!$'''r   c                 6    | j                             |          S r   )r   r  rU  s     r   r  zRawTurtle._colorstr
  s    {$$T***r   c                    	 t          |t                    r|S 	 |\  }}}n4# t          t          f$ r  t	          dt          |          z            w xY w| j        j        dk    rd |||fD             \  }}}d|cxk    rdk    r"n nd|cxk    rdk    rn nd|cxk    rdk    s!n t	          dt          |          z            d|||fz  S )Nr  r   c                 2    g | ]}t          d |z            S r  r  r  s     r   r
  z!RawTurtle._cc.<locals>.<listcomp>
  r  r   r   r  r  r  )r   r  r  r   r2  r   r  )r   rV  r   r  r  s        r   _cczRawTurtle._cc
  s   	dC   	K	MGAq!!:& 	M 	M 	M%&?#d))&KLLL	M;!S((991ay999GAq!a3Q!]]]]s]]]]]a3%&>T&JKKK!Q**s	   ! 1Ac                    	 | j         |                     | j                   | j        }d | _         d | _        t	          |           }| _         || _        |_         t          | j        j                  |_        j                            |           j	        | j        j                 j
        }|dk    r                                |j        _        nn|dk    r0                    j	        d         j                  |j        _        n8|dk    r2fdj	        | j        j                 j        D             |j        _                                        |_        |                                 |S )Nr5  r  r  r7  c                 8    g | ]}                                 S r   r  r  s     r   r
  z#RawTurtle.clone.<locals>.<listcomp>
  s7     L L Ltf0022 L L Lr   )r   rd  r=  r   r   ry  r|  r  r  r{  r  r  r  r  r:  r  r  r  )r   r   qttyper   s       @r   r9   zRawTurtle.clone
  s]   
	 dm$$$TNN(>??q!!!t{56<I#//11AHNNg#001H1NOOAHNNj  L L L L$nT[-CDJL L LAHN"..00			r   c                     	 || j         j        S || j                                        vrt	          d|z            | j                             |           |                                  d S )NzThere is no shape named %s)r   r|  r   r   r2  r{  r  )r   r  s     r   rl   zRawTurtle.shape
  sm    	& <;))t{,,....%&BT&IJJJd###r   c                    	 ||cxu r|cxu rn n| j         \  }}||| j        fS |dk    s|dk    rt          d          ||||f}n||f}n|| j         d         |f}n| j         }|| j        }|                     d||           d S )Nr   z(stretch_wid/stretch_len must not be zerorF  )rb   rb  r  )r?  rC  r2  rW   )r   stretch_widstretch_lenr  rb  s        r   rm   zRawTurtle.shapesize
  s    	( +888888888888'+':$KT-???!{a//%&PQQQ"" +[ 8 +[ 8$ /2K?MM /M?(GF,g 	 	? 	? 	? 	? 	?r   c                 H    	 || j         S |                     d|           d S )NrF  )rb   ro   )r@  rW   )r   shears     r   ro   zRawTurtle.shearfactor  s3    	$ =$$F66666r   c                 `    	 t          j        ddd           |                     |           d S )Nzturtle.RawTurtle.settiltangle()zn{name!r} is deprecated since Python 3.1 and scheduled for removal in Python {remove}. Use tiltangle() instead.)r     )r  )warnings_deprecatedru   r   s     r   rh   zRawTurtle.settiltangle  sI    	( 	>X$+	- 	- 	- 	- 	ur   c                 
   	 |4t          j        | j                   | j        z  }|| j        z  | j        z  S | | j        z  | j        z  }t          j        |          t           j        z  }|                     d|           d S )NrF  )rb   rt   )	r   r;   rA  r  r  r  r_   r  rW   )r   r   rt   s      r   ru   zRawTurtle.tiltangle7  s    	< =L,,,t/@@D4--1AAA6D..1BBD<%%0DHHTH22222r   c                 \    	 |                      ||                                  z              d S r   )ru   r   s     r   rt   zRawTurtle.tilt^  s0    	  	ut~~///00000r   c                    	 ||cxu r|cxu r|cxu r
n n| j         S | j         \  }}}}||}||}||}||}||z  ||z  z
  dk    rt          d          ||||f| _         t          j        | |          t          j        z  }	t          j        |	          t          j        |	          }}
||z  |
|z  z
  ||z  |
|z  z
  |
|z  ||z  z   |
|z  ||z  z   f\  }}}}||f| _        ||z  | _        |	| _	        | 
                    d           d S )Nr   z0Bad shape transform matrix: must not be singularrF  rG  )rB  r2  r   r  r  r   r   r?  r@  rA  rW   )r   t11t12t21t22m11m12m21m22alfarn  ro  a11a12a21a22s                   r   rn   zRawTurtle.shapetransformq  so   	& #++++++++++++++++##!-S#s?#C?#C?#C?#C9sSy A%%%&XYYYc3/z3$$$tx/$$B fr#vor#v3 fr#vor#v3@S#s!3hG
F#####r   c                     	 | j         | j        \  | j        \  t          j        z  j        z            }dt          |          z  |z  \  fd|D             S )Nr   c                 p    g | ]2\  }}|z  |z  z   j         z  z    |z  |z  z   j        z  z   f3S r   )r  r  )r  r   r   e0e1p0p1r   s      r   r
  z(RawTurtle._polytrafo.<locals>.<listcomp>  sj     O O O?E1 RT"Q$Y--rB3q5A:v}2L/LM O O Or   )r   r  r  r   r  r  r  )r   r>  er  r  r  r  r   s      @@@@@r   
_polytrafozRawTurtle._polytrafo  s    	 BB"b6=(6=899A,!#BO O O O O O O OIMO O O 	Or   c                     	 | j         j        | j        j                 }|j        dk    r$|                     |j        |j        dk              S d S )Nr5  r7  )r   r{  r   r|  r  _getshapepolyr:  )r   rl   s     r   rH   zRawTurtle.get_shapepoly  sQ    
	 #DK$:;;)##%%ek5;*3LMMM $#r   Fc                     	 | j         dk    s|r| j        \  n<| j         dk    r$t          d| j        dz            }|dd|f\  n| j         dk    r|S t	          fd|D                       S )NrF  rE  r   g      @r   r   c              3   J   K   | ]\  }}|z  |z  z   |z  |z  z   fV  d S r   r   )r  r   r   r  r  r  r  s      r   r  z*RawTurtle._getshapepoly.<locals>.<genexpr>  sD      JJAc!ec!emSUSU]3JJJJJJr   )r6  rB  maxr9  r   )r   r5  r7  r*  r  r  r  r  s       @@@@r   r  zRawTurtle._getshapepoly  s    	 v%%%!%!1Cc33''At}S())A!"Aq!Cc33++NJJJJJJJ'JJJJJJr   c           	      @   	 | j         }|j        | j        j                 }|j        }| j        j        }| j        r^|j        dk    rR|j        dk    rFd| _	        |j
        }|dk    r{| j        dk    rd}n| j        dk    r| j        }n| j        }|                     |                     |                    }| j        | j        }}|                    |||||d           d S |d	k    r|                    || j        |           d S |d
k    rt+          ||          D ]z\  }	\  }
}}|                     |                     |
d                    }
|                    |	|
|                     |          |                     |          | j        d           yd S d S | j	        rd S |dk    r|                    |ddd           nV|d	k    r-|                    || j        |j        d         j
                   n#|d
k    r|D ]}	|                    |	ddd           d| _	        d S )Nr   Fr5  r   r   rE  Trj  r  r{   r  r  r7  rq  rq  rq  r   r  )r   r{  r   r|  r  r  r:  r  r  r  r:  r6  r9  rC  r  r  r<  r;  r  r   r  zipr  )r   r   rl   r  titemtshaper  fcocr  r>  s              r   r  zRawTurtle._drawturtle  s   	8t{56!; 	,60A55&/A:M:M',D$[F	!!#z11q11%//T]+a(:(:6(B(BCC$.B  B<=4 ! I I I I I'!!!!%@@@@@*$$,/v,>,> _ _(D.4R??4+=+=dD+I+IJJD$$T4dhhrll-1XXb\\ASY] % _ _ _ _ %$_ _
 ' 	!!  (@"bIIII'!!!!%*0.*A*GI I I I*$$! M MD$$T+CRLLLL'+D$$$r   c           	         	 | j         }|j        | j        j                 }|j        }|j        }|dk    r|                                }| j        dk    rd}n| j        dk    r| j        }n| j	        }| 
                    |                     |                    }| j        | j        }}|                    |||||d           n|dk    r2|                    d          }|                    || j        |           n|d	k    rg }|D ]+}	|                                }
|                    |
           ,t'          |          }t)          ||          D ]x\  }
\  }}}| 
                    |                     |d                    }|                    |
||                     |          |                     |          | j	        d           y| j                            |           | j                            d
|f           |S )Nr5  r   r   rE  Tr  r  r   r7  rs   )r   r{  r   r|  r  r:  r  r6  r9  rC  r  r  r<  r;  r  r  r   r  r  r   r  r  r  r  rI  )r   r   rl   r  r  stitemr  r  r  elementr  r>  s               r   rs   zRawTurtle.stamp  s/   	 t{56I''))F:--1qq!V++QQ'!OOD$6$6v$>$>??E_dnBVUR89t  E E E Eg((,,Ffdnf====j  F! $ $))++d####6]]F(+FF(;(; [ [$ntRt'9'9$'E'EFF  t$((2,,)-"T=OUY ! [ [ [ [v&&&gv.///r   c                    	 || j         v rit          |t                    r |D ]}| j                            |           n| j                            |           | j                             |           d|f}| j        }||j        vrd S |j                            |          }|j                            |           ||j	        k    r|j	        dz
  |j
        z  |_	        |j                            |j	        dz   |j
        z  d g           d S )Nrs   r   )r  r   r   r   r  r  r  rD  indexrE  rC  insert)r   stampidsubitemr  bufr  s         r   _clearstampzRawTurtle._clearstamp  s   	do%%'5)) -& 1 1GK''00001 ##G,,,O""7+++ !osz!!F
  &&
$CGw{ck1CG
3719ck1D6:::::r   c                 Z    	 |                      |           |                                  d S r   )r  r  )r   r  s     r   r7   zRawTurtle.clearstamp.  s.    
	 	!!!r   c                     	 || j         d d          }n%|dk    r| j         d |         }n| j         |d          }|D ]}|                     |           |                                  d S r  )r  r  r  )r   r  toDeleter  s       r   r8   zRawTurtle.clearstamps=  s    	" 9qqq)HH!VVrr*HHqrr*H 	# 	#DT""""r   c           
         	 | j         | j        | j        t          | j        t
                    f}| j        }d| j        ||| j        | j	        d d          |
                    | j                  | j        d d          ff}| j        r| j                            |           | j        }| j        r	|j        dk    r||z
  }|d         |j        z  dz  |d         |j        z  dz  z   }dt%          |dz  dd| j        z  z  | j        z  z            z   }|d|z  z  }	t'          d|          D ]d}
|
dk    rd	}nd
}||	|
z  z   | _        | j         r/|                    | j        || j        f| j        | j        |           |                                  e| j         r#|                    | j        dd| j                   | j         r| j	                            |           t          | j        t
                    r| j                            |           || _        | j        r| j                            |           t5          | j	                  dk    r|                                  |                                  d S )Ngor   r   r  r   r  皙?r   TFrq  rq  r   rj  r{   *   )r=  r;  r9  r   r  r   r   r  r  r  r  r   r  rI  r>  r  r  r  r   r  r  r  r  r  r  r  r  rd  )r   r  go_modesr   
undo_entrystartdiffdiffsqnhopsdeltar  r  s               r   r  zRawTurtle._gotoY  s   	
 ]^]557 DNC+&qqq)''(<==jm%
 ? 	-O  ,,,; 	M6?a//ID1gfm+a/476=3H12LLFc63;C,<)=dk)IJKKKECI&E1e__ 
 
66CCC!&!2= I$$T%9&+T^%<%)^T]CI I I } M  !57G46dm ! M M M = 	)##C(((dnd++ 	'N!!#&&& 	#Jc"""t  2%%MMOOOr   c                    	 |\  }}}}|\  }}}}	|\  }
}}| j         t          | j        |z
            dk    rt          d           |
| _        || _        |ddgk    rd}n|}                    |
|||           fd| j        D             }|D ]1}                    |           | j        	                    |           2|}| j
        rj        dk    r||z
  }|d         j        z  d	z  |d         j        z  d	z  z   }dt          |dz  d
d| j
        z  z  | j
        z  z            z   }|d|z  z  }t          d|          D ]U}|dk    rd}nd}|||z  z   | _        |r%                    | j        || j        f|||           |                                  V|r                    | j        dd|           || _        | j        rJt'          | j                  dk    r| j                                         | j        g k    rd| _        d | _        |	rB| j        g k    rd | _        t          d           n | j        | j                                         |                                  d S )Nr   z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!rq  r   r  c                 N    g | ]!}|vr                     |          d k    |"S )r   )r  )r  r	  r   r   s     r   r
  z'RawTurtle._undogoto.<locals>.<listcomp>  sB     D D D!aunn(.Q6(A(A (A(A(Ar   r   r   r  r  r  r   TFr  zUnwahrscheinlich in _undogoto!)r   r  r  r   r  r  r  r   r  r  r>  r  r  r  r   r  r  r  r  r  r  rK  r  )r   entryoldnewr  coodatadrawingpcpsrC   cLIcLr  usepctodeleter	  r  r  r  r  r  r  r  r   r   s                          @@r   	_undogotozRawTurtle._undogoto  s   	&+#S(G#+ R$RUt~#$$s**9:::"&&!!!EEEbuB777D D D D Dtz D D D 	! 	!ANN1Ja    ; 	B6?a//9D1gfm+a/476=3H12LLFc63;C,<)=dk)IJKKKECI&E1e__ 
 
66CCC!$uqy 2$$T%9&+T^%<%'S2 2 2  B  !57G46b ! B B B 
  	"4:""
   zR%*"!
 	%~##!%67777+""$$$r   c                    	 | j         r"| j                             d|| j        f           || j        z  }| j                            |          }| j        j        }|dk    r| j        dk    ryd| j        z  }dt          t          |          |z            z   }d|z  |z  }t          |          D ]5}| j                            |          | _        |                                  6|| _        |                                  d S )Nrotr   r   g      @r   )r  rI  r  r  r   r   r  r>  r   r  r  r  )r   r   	neworientr  anglevelr'  r  r   s           r   r  zRawTurtle._rotate  s    	? 	EO  %0B!CDDD##L''..	+&a<<DK!OOT[(HCJJx/000EIeOE5\\  #|22599 r   Tc                    	 t          | j                  dk    ro| j                            | j        | j        | j        | j                   | j                                        | _        | j        	                    | j                   n!| j                            | j        d           g | _        |r| j
        g| _        d S d S )Nr   T)r  )r  r  r   r  r  r;  r9  r  r   r  r  rq  s     r   rd  zRawTurtle._newLine  s    	 t  1$$K!!$"68H&*ndmE E E#';#:#:#<#<D Jd23333K!!$"6D!AAA 	0 $/D	0 	0r   c                 8    	 t          | j        t                    S r   )r   r  r   r   s    r   rC   zRawTurtle.filling  s    
	 $.$///r   c                 d   	 |                                  s=| j                                        | _        | j                            | j                   | j        g| _        |                                  | j	        r!| j	        
                    d| j        f           |                                  d S )N	beginfill)rC   r   r  r  r   r  r  r  rd  r  rI  r  r   s    r   r2   zRawTurtle.begin_fill  s    		 ||~~ 	.![4466DNJdn---.)? 	@O  +t~!>???r   c                 P   	 |                                  rt          | j                  dk    rT| j                            | j        | j        | j                   | j        r!| j                            d| j        f           d x| _        | _        | 	                                 d S d S )Nr  r  dofill)
rC   r  r  r   r  r  r<  r  rI  r  r   s    r   r?   zRawTurtle.end_fill  s    		 <<>> 	4>""Q&&%%dndn+/? & < < <? EO(((DN)CDDD.22DNT^LLNNNNN	 	r   c                 \   	 |svt          |t          t          f          r3|                     |          }| j        t          | j        d          z   }n[| j        }|s| j        t          | j        d          z   }n4|| j        t          | j        d          z   }|                     |          }t          | j        d          rb| j        	                    | j
        ||          }| j                            |           | j        r| j                            d|f           d S d S |                                 }| j        r'| j                            dg           d| j        _        	 |                                 dk    r|                                  |                                  |                     |           |                     |           |                     d           |                     |           n# |                     |           w xY w| j        rd| j        _        d S d S )	Nrf  _dotr=   r!  TrE  r   F)r   r  r   r  r9  r  r;  hasattrr   r  r  r   r  r  rI  rW   rF  rb   rN   rY   rZ   rX   rD   )r   r  r:   r  rW   s        r   r=   zRawTurtle.dot(  s   	  	*$e-- At,,}s4=!'<'<< A=3t}a+@+@@D|}s4=!'<'<<NN5))E4;'' 	1;##DND%@@DJd### 4$$eT]333334 4 ((**C 0$$eW---+/(??$$..GGIIIT"""e$$$Q 1+0(((1 1s   (A?G= =Hc                     	 | j                             | j        |||| j                  \  }}|                                  | j                            |           | j        r| j                            d|f           |S )Nwri)	r   r  r  r;  r  r   r  r  rI  )r   r  r  r  r  r  s         r   r  zRawTurtle._writeX  s    	K&&t~sE4:>.J J	c
$? 	0O  %///
r   rQ   Arialr_  rR  c                 X   	 | j         r'| j                             dg           d| j         _        |                     t	          |          |                                |          }|r-|                                 \  }}|                     ||           | j         rd| j         _        d S d S )Nr!  TF)r  rI  rF  r  r  r8  r\   rf   )r   argmover  r  r  r   r   s           r   r|   zRawTurtle.writec  s    	$ ? 	,O  %)))'+DO$kk#c((EKKMM488 	 88::DAqKKQ? 	-',DO$$$	- 	-r   c                 0    	 | j         g| _        d| _        d S r  )r  r  r  r   s    r   r3   zRawTurtle.begin_poly  s#    		 n%
!r   c                     	 d| _         d S NF)r  r   s    r   r@   zRawTurtle.end_poly  s    		 #r   c                 >    	 | j         t          | j                   S d S r   )r  r   r   s    r   rE   zRawTurtle.get_poly  s)    	 :!$$$ "!r   c                     	 | j         S r   )r   r   s    r   rG   zRawTurtle.getscreen  s    	 {r   c                     	 | S r   r   r   s    r   rI   zRawTurtle.getturtle  s    	 r   c                 8    	 | j                             |          S r   )r   r   r  s     r   r  zRawTurtle._delay  s    	{  '''r   r   c                 ~    	 | j                             | j        j        |||           |                                  d S r   )r   r  r   r  r  r  s       r   rS   zRawTurtle.onclick  s;    	" 	T[.S#>>>r   c                 ~    	 | j                             | j        j        |||           |                                  d S r   )r   r  r   r  r  r  s       r   rU   zRawTurtle.onrelease  s;    	* 	t{0#sC@@@r   c                 V    	 | j                             | j        j        |||           d S r   )r   r  r   r  r  s       r   rT   zRawTurtle.ondrag  s0    	" 	DK-sC=====r   c                 J   	 | j         d S |dk    rA|\  }}|                     | |z  | j        z             | j                                         }d S |dk    r|d         }|                     |           d S |dk    r|                     |           d S |dv r>|d         }| j                            |           | j        	                    |           d S |dk    r(|d         }| j        
                    |ddd	           d S |d
k    rW|d         }d x| _        | _        || j        v r6| j                            |           | j        	                    |           d S d S |dk    r<t                              | |d                    | j                                          d S d S )Nr  rs   r   r  )r
  r=   r  r  r   r  r  rW   )r  r  r  rK  r7   r  r   r  r   r  r  r  r  r4  rW   )r   actionr<  r   degPAUdummyr  r  s           r   _undozRawTurtle._undo  s   	?"FU?? ME6LL%t'99:::O''))EEEw!WFOOF#####t^^NN4     ~%%7DK%%%Jd#####x7DK!!$(>')2 " 7 7 7 7 7{""7D.22DNT^tz!!##D)))
!!$''''' "! u__HHT47###O!!!!! _r   c                 (   	 | j         d S | j                                         }|d         }|dd          }|dk    r@|r<|                                }|                     |d         |dd                     |:d S d S |                     ||           d S )Nr   r   r!  )r  rK  r  )r   r  r  r<  s       r   rx   zRawTurtle.undo8  s    	  ?"F""$$aABBxU?? .xxzz

47DH---  . . . . . JJvt$$$$$r   r  r   rb  )NNNN)Frw  )FrQ   r  r.  )8r   r   r   r  r   r/  ra   ri   ry   r  r6   r  r  r$  r  r  r  r9   rl   rm   ro   rh   ru   rt   rn   r  rH   r  r  rs   r  r7   r8   r  r  r  rd  rC   r2   r?   r=   r  r|   r3   r@   rE   rG   rI   rF   r  rS   rU   rT   r  rx   rw   r   r   r   r   r   	  s        G"G} $%5 6i& & & &P  2, , ,&- - -1 1 1  A A A! ! !$/ / / /*( ( (+ + ++ + +& & &P   6&? &? &? &?P7 7 7 7.  6%3 %3 %3 %3N1 1 1&%$ %$ %$ %$P
O 
O 
ON N N"K K K K$, $, $,P+ + +Z; ; ;,     83 3 3j? ? ?B  $0 0 0 0 0 0 0  *  (.1 .1 .1 .1`	 	 	- - - -:" " "# # #% % %     " F( ( ( (
   *   2> > > >*" " "@% % %: JJJr   r   c                  d    	 t           j        t                      t           _        t           j        S r   )r   _screenr  r   r   r   r
   r
   [  s$    % ~ >r   c                       e Zd ZdZdZed         Zd Zed         ed         ed         ed         fdZd	 Z	d
 Z
d Zd ZdS )r  Nr*   c                    t           j        bt                      xt           _        | _        | j                            t           j                   | j                            | j                   t           j        t          d         }t          d         }t          d         }t          d         }t          d         }t          d         }| j        	                    ||||           | j        
                                t           _        t                              | t           j                   |                     ||||           d S d S )Nr{   r   r   r   r   r   )r  _rootrd  r*   _titlerx  _destroyr4  r   rl  rn  r	   r/  r'   )r   r{   r   r   r   r   r   s          r   r/  z_Screen.__init__i  s     = ).0GMDJJW^,,,J  ///?"ME(^F[)Il+J[)I[)IJ""5&)ZHHH"j3355GO!!$888JJufi;;;;; #"r   r{   r   r   r   c                    	 t          | j        d          sd S | j                                        }| j                                        }t	          |t
                    rd|cxk    rdk    rn n||z  }|||z
  dz  }t	          |t
                    rd|cxk    rdk    rn n||z  }|||z
  dz  }| j                            ||||           |                                  d S )Nrs  r   r   r  )r  r$  r{  r~  r   r   rs  r-   )r   r{   r   rq  rr  r  shs          r   r'   z_Screen.setup  s
   	. tz>22 	FZ!!##Z""$$eU## 	UauHE>5jA%Ffe$$ 	f)9)9)9)9)9)9)9)9)9YF>6kQ&F
vvv>>>r   c                 v    	 t           j        t           j                            |           |t           _        d S r   )r  r$  r*   r%  )r   titlestrings     r   r*   z_Screen.title  s2    	 =$M,,,$r   c                     | j         }|t          j         u r0d t          _        d t          _        d t          _         d t          _        dt          _        |                                 d S r  )	r$  r  r   r  r!  r4  r	   r  rw  )r   roots     r   r&  z_Screen._destroy  sK    z7=  FK!FN GM"GO %r   c                 0    	 |                                   d S r   )r&  r   s    r   r   z_Screen.bye  s    	
 	r   c                      	  fd}                      |           t          d         rd S 	 t                       d S # t          $ r t	          d           Y d S w xY w)Nc                 2    	                                   d S r   )r   )r   r   r   s     r   exitGracefullyz+_Screen.exitonclick.<locals>.exitGracefully  s    8HHJJJJJr   r   r   )rS   r   r   AttributeErrorexit)r   r0  s   ` r   r   z_Screen.exitonclick  s    	$	 	 	 	 	 	^$$$ 	F	JJJJJ 	 	 	GGGGGG	s   = AA)r   r   r   r$  r4  r   r%  r/  r'   r*   r&  r   r   r   r   r   r  r  c  s        EG']F< < <, w-X+&tK/@& & & &P% % %"        r   r  c                   J    e Zd Z	 dZdZed         ed         ed         fdZdS )r   Nrl   r   r   c                     t           j        t                      t           _        t                              | t           j        |||           d S )N)rl   r   r   )r   r!  r
   r   r/  )r   rl   r   r   s       r   r/  zTurtle.__init__  sM     >!#XXFN4!&*8#* 	 	, 	, 	, 	, 	,r   )r   r   r   r  r!  r   r/  r   r   r   r   r     sR        
 DG G} $%5 6i	, 	, 	, 	, 	, 	,r   r   turtle_docstringdictc                    	 i }t           D ]}d|z   }t          |          j        ||<   t          D ]}d|z   }t          |          j        ||<   t	          d| z  d          5 }t          d |D                       }|                    d           |d d         D ]E}|                    dt          |          z             |                    d	||         z             F|d         }|                    dt          |          z             |                    d
||         z             |                    d           |                                 d d d            d S # 1 swxY w Y   d S )Nz_Screen.zTurtle.z%s.pyr  c              3   ^   K   | ](}|                     d           d         t          v$|V  )dS )r   r   N)r   _alias_listr  s     r   r  z&write_docstringdict.<locals>.<genexpr>  sF       = =Aa;; ;;;;= =r   zdocsdict = {

r  z%s :
z        """%s
""",

z        """%s
"""

z}
)	_tg_screen_functionsr   __doc___tg_turtle_functionsr   r  r|   reprclose)r   docsdict
methodnamer   r   r   s         r   r   r     s   
 H* * *
#S		)* * *

"S		)	g 	%	%  = = = = = = =	"###9 	? 	?CGGHtCyy()))GG-=>>>>2h	499$%%%	(8C=8999					                 s   #C3E##E'*E'c                     	 dd|                                  iz  }t          |          }|j        }|D ]?}	 ||         t          |          _        # t
          $ r t          d|z             Y <w xY wd S )Nz!turtle_docstringdict_%(language)sr   zBad docstring-entry: %s)r8  
__import__r>  r   r:  r   r   )langmodnamemoduler>  r   s        r   read_docstringsrE     s     2Z

4MMG  FH 3 3	3 (DII 	3 	3 	3+c122222	3	3 3s   AA0/A0zCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc                 P   	 dx}}t          j        | j                  \  }}}|dd          }|dd          }| j        pg }d |D             }dgt	          |          t	          |          z
  z  |z   }d t          ||          D             }	|0|	                    d|z              |                    d|z              |0|	                    d|z              |                    d|z              d                    |	          }d|z  }d                    |          }d|z  }||fS )	Nr   r   c                     g | ]}d |S )r   r   )r  r   s     r   r
  z"getmethparlist.<locals>.<listcomp>M  s    777UU 777r   c                     g | ]
\  }}||z   S r   r   )r  r  dflts      r   r
  z"getmethparlist.<locals>.<listcomp>O  s     BBBYS$cDjBBBr   *z**z, z(%s))inspectgetargs__code____defaults__r  r  r  r   )
obdefTextcallTextrV  varargsvarkwitems2realArgsdefaultsitems1s
             r   getmethparlistrX  =  sJ    Gh #?2;77D'5!""XFABBxH$"H77h777Hts8}}S]]23h>HBB#h*A*ABBBFcGm$$$cGm$$$dUl###dUl###iiGwGyy  H HHr   c                     	 dd l }| d S t          d         }|                     d|z  d          }|                    d|z            }|                    d|          }|S )Nr   r   %s.r    \(.+ %s\)::rer   replacecompilesub)docstrr^  
turtlename	newdocstrparexps        r   _turtle_docreviserf  \  k    III~to&Juz1"55IZZ344F

3	**Ir   c                     	 dd l }| d S t          d         }|                     d|z  d          }|                    d|z            }|                    d|          }|S )Nr   r   rZ  r   r[  r\  r]  )rb  r^  
screennamerd  re  s        r   _screen_docreviserj  h  rg  r   ar  def {name}{paramslist}:
    if {obj} is None:
        if not TurtleScreen._RUNNING:
            TurtleScreen._RUNNING = True
            raise Terminator
        {obj} = {init}
    try:
        return {obj}.{name}{argslist}
    except TK.TclError:
        if not TurtleScreen._RUNNING:
            TurtleScreen._RUNNING = True
            raise Terminator
        raise
c                 H   | D ]}t          ||          }t          |          \  }}|dk    rt          d||           <t                              |||||          }	t          |	t                                  ||j                  t                      |         _        d S )Nr   z>>>>>>)objinitr  
paramslistargslist)getattrrX  r   __func_bodyformatr  globalsr:  )
	functionsr   rl  rm  	docreviser?  r  pl1pl2defstrs
             r   _make_global_funcsry    s     	B 	B
j))!&))S"99(C%%%##$Z/2S $ B BVWYY(1	&.(A(A		*%%	B 	Br   zTurtle._screenzScreen()zTurtle._penzTurtle()__main__c                  ^    t                      rt                       d S t                       d S r   )rO   r^   rV   r   r   r   	switchpenr|    s(    88 	DDDDDDDDDDr   c                     	 t                       t          d           t                       t          d           t	                       t          d           t          d          D ]} | dk    rt                       t          d          D ] }t          d           t          d           !| dk    rt          d           t                       t                       t          d	           t	                       t          d
           t          d           t          d           t                       t          d           t          d           t          d           t          d           t          d           t	                       t          dd
           t          dd
           t          d           t          d          D ]>} t          d           t          d           t          d           t          d           ?t          d           t                       t          d          D ]>} t          d           t          d           t          d           t          d           ?t                       d S )NTd   r  r  rf  r  Z   maroonrE  r   r   F   
startstartr  redra  )ra   r+   rz   r1   r>   r{   r  r2   rD   rQ   r:   r?   r`   r|   )r	  r   s     r   demo1r    s   ,t
aq 	 	AAvv1XX  RAvvh


DDDBKKKFFFFagu
b			b			c


lAgqeq 	 	ABKKKHHHBKKK"IIIItq 	 	ABKKKHHHBKKK"IIII




r   c                  <   	 t          d           t                       t          d           t          t	          dd                     t          dd          dz  } t          d           t          d          D ] }t                       t          | d           !t          d           t                      rt                       t                      t                       t          d           t          d	           d}t!          d
           t          d           t          d           t          dd          D ]}|dk    r(t#                       t%          d	d|z  z
  dd|z             t          d          D ] }t'          |           t          d           !t)                       |dz  }t          d           t          t                      dz   dz             t          d           t+                       t'          d           t          d           t-                       t/          dd           t          d           t#                       t          d          D ]?}t          dd           t          d           t'          d           t          d           @t)                       t          d           t+                       t'          d           t-                       t1          d           t3                      }|                    d           t7                      }|                    d           |                    d           |                                 |                    d           |                     d           |                                 |                    dd           |                    d           |                                 |                     d           |                    dd           |                    d           |                     d           t          t	          |                     d}|                    |          dk    r|                    d           |                    d            |                    |                    |                     |                    d           |d!z  dk    r6|                                  |                                  t                       |dz  }|                    |          dk    |
                    d"d#d$%           |                    d&           |                    d           d' }tC          j"        d           t                      r6|                                 |                                 t                      6|                    d           |
                    d(d)*           |#                    |d           d S )+Nr   r  r   r  r     r   zwait a moment...r  greenr  rX  rW     x      F   rE  r  yellowrf  2   r   rE  i  (   rg  blueoranger  g      @g333333?r  zCAUGHT! )r  rW  boldr`   )r  r  r   c                 >    t                       t                       d S r   )r   r   )r  r  s     r   babazdemo2.<locals>.baba.  s    MMMEEEEEr   z  Click me!)Courierr  r  )r  )$rq   rr   rZ   re   rv   r<   rc   r  r|  r5   r|   ry   rx   ra   rR   r   rX   r2   rB   rA   r?   r^   rV   r:   rl   rI   rb   r   rQ   rz   rJ   r>   rs   timesleeprS   )r%  r   laenger	  trir   rM  r  s           r   demo2r    s(   (a



71a==!!!!Q#
2r 	 	AKKK62 !!!!! 	FFF  !! 	
2#



3r2 
	" 
	"A1uu#bd(Ar!t,,,1XX  6


3JJJbLFrFFF57719b.!!!! 	3

2
2
eHaq 	 	A2rNNNrFFFrFFFrFFFF



2

2
hkkv&!!!XBQ		C		"QVH%%%q		!76??###ll6""Q&&IIcNNNIIcNNNNN3;;v..///FF1IIIrzQ		QJE ll6""Q&& 			*#8	HHHWU	 	 	 	
1!! 	HHJJJKKMMM  !! 	 	r


		-(?	AAAD!r   )r   )r5  )F_vertkinterr-  r   r   r  rK  r  r  os.pathr   r   r   copyr   r   _tg_classesr9  r;  _tg_utilities__all__r8  r   r   r   r   r   r   r   r   r   r  r  r.  r   r2  rf  rd  objectr  r   r2  r   rA  r	   r  r4  ry  r   r   r
   r  r   r   r   rE  	_LANGUAGEImportErrorrX  rf  rj  rq  ry  r   r   r   r|  r  r  r   r   r   r   <module>r     sr  2L\ 7         



  ' ' ' ' ' ' ' ' ' '                  I I I) ) ) ! ! !  '/--0DD(>*, , ,	# 	4	c	 	c	 	T		
 	T	 	
	 	S	 		 	$	 		 	W	 	g	 	z	 	D	 	I	  	!	" ")'	 	 	,  :  <1Jt 1 1 1	E/000001*$ *$ *$ *$ *$E *$ *$ *$j    1 . . . .*a# a# a# a# a#RX a# a# a#F  I 6 6 6) ) ) ) )BE ) ) )0 
E5 E5 E5 E5 E5v E5 E5 E5Z	 	 	 	 	) 	 	 	    )   
,1 ,1 ,1 ,1 ,1F ,1 ,1 ,1^"6 "6 "6 "6 "6f "6 "6 "6Li i i i i# i i iV| | | | | | | |~I I I I I6 I I IXL L L L L6 L L L>D D D D Dj D D DL$ 
  C C C C Cl C C CJ, , , , ,Y , , ,(        D3 3 3" 	MI	""" 1 1 1	E
$i00000 M M M	EHBKL M M M M MM
  >
 
 

 
 
  
B 
B 
B  '#Z1BD D D  ' *.?A A A z  2 2 2ja a aF 
EGGG	EGGGKMMMMMC s*   B' 'B:9B:G( (H;HH