???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5dd1                 O   @   s2  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m	Z	m
Z
mZ ddlmZ ddlmZ dddd	d
ddddg	Z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-gZd.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|gOZd}d~gZee e e dg Zdd/d2d?dLdPdTdZd\dadbdddedpdudxdygZdddddddddddddddddddddZdd Zdd Zzee W n ek
r   ed Y nX G dd deZdd Zdd ZdZdddZG dd dej Z!ee!ej"d G dd dej#Z$ej"Z"G dd de%Z&G dd deZ'G dd deZ(G dd de%Z)G dd de%Z*G dd de&Z+G dd de%Z,G dd de%Z-G dd de%Z.G dd	 d	e-e,Z/e/Z0dd Z1G dd de+Z2G dd
 d
e/Z3e3Z4ddd}Z5dd Z6ed Z7ze7dkrne6e7 W n@ e8k
r   ede7 Y n" ek
r   ede7  Y nX dd Z9dd Z:ddĄ Z;dZ<ddǄ Z=e=ee2dde; e=ee3dde: e>Z?e@dkr.dd΄ ZAddЄ ZBdd҄ ZCeB  eC  eD  dS )z-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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      ?g      ?i  i,  standard      ?
   i  classicblacknoresizeTZenglishturtlescreenzPython Turtle GraphicsF)rz   height	canvwidth
canvheight	leftright	topbottomr   r   r   undobuffersizerk   rW   rA   ra   visiblelanguageexampleturtleexamplescreenr)   
using_IDLEc              	   C   s   t | d}| }W 5 Q R X i }|D ]}| }|r&|drBq&z|d\}}W n( tk
r|   td| |f  Y q&Y nX | }| }|dkrt|}n4zd|krt|}nt	|}W n tk
r   Y nX |||< q&|S )Nr#=zBad line in config-file %s:
%s)TrueFalseNonez''z"".)
open	readlinesstrip
startswithr   
ValueErrorprintevalfloatint)filenamefZcfglinescfgdictlinekeyvalue r   /usr/lib64/python3.8/turtle.pyconfig_dict   s0    



r   c                 C   s   d}i }i }t |rt|}d|kr0d|d  }ztt\}}t||}W n tk
rb   d}Y nX t |rtt|}t| t| d S )Nz
turtle.cfgZimportconfigzturtle_%s.cfg )r   r   r   __file__r   	Exception_CFGr,   )r   Zdefault_cfgZcfgdict1Zcfgdict2headtailZ	cfg_file2r   r   r   
readconfig   s     

r   z"No configfile read, reason unknownc                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )r   c                 C   s   t | ||fS N)tuple__new__)clsxyr   r   r   r      s    zVec2D.__new__c                 C   s"   t | d |d  | d |d  S Nr      r   selfotherr   r   r   __add__   s    zVec2D.__add__c                 C   sD   t |tr*| d |d  | d |d   S t| d | | d | S r   )
isinstancer   r   r   r   r   __mul__   s    
 zVec2D.__mul__c                 C   s2   t |tst |tr.t| d | | d | S tS r   )r   r   r   r   NotImplementedr   r   r   r   __rmul__  s    zVec2D.__rmul__c                 C   s"   t | d |d  | d |d  S r   r   r   r   r   r   __sub__  s    zVec2D.__sub__c                 C   s   t | d  | d  S r   r   r   r   r   r   __neg__  s    zVec2D.__neg__c                 C   s   | d d | d d  d S )Nr      r   r   r   r   r   r   r   __abs__
  s    zVec2D.__abs__c                 C   sj   t | d  | d }|tj d }t|t| }}t | d | |d |  | d | |d |  S )Nr   r        f@)r   mathpicossin)r   angleZperpcsr   r   r   rotate  s    zVec2D.rotatec                 C   s   | d | d fS r   r   r   r   r   r   __getnewargs__  s    zVec2D.__getnewargs__c                 C   s   d|  S )Nz(%.2f,%.2f)r   r   r   r   r   __repr__  s    zVec2D.__repr__N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s   c                 C   sT   t | j}|  |D ]}t|| q| j D ]\}}t|tjkr0|||< q0d S r   )	list	__bases__reverse__methodDict__dict__itemstypetypesFunctionType)r   _dictZbaseListZ_superr   r   r   r   r   r   !  s    
r   c                 C   s   i }t | | | S r   )r   keys)r   r   r   r   r   	__methods+  s    
r   zTdef %(method)s(self, *args, **kw): return self.%(attribute)s.%(method)s(*args, **kw)r   c                 C   s   i }t || i }t| }| D ]B}|d d dksd|dd  dksd||ksd||krXq"|| ||< q"| D ]D\}}	||	d}
t|trt||d }t||
 t| ||
|  qnd S )Nr   _)methodfunc)r   Z	attribute)	r   r   r   r   r   str__stringBodyexecsetattr)Z	fromClassZtoClassZtoPartZexcludeZ_dict_1r   ZmfcZexr   r   dZ
execStringr   r   r   __forwardmethods5  s    
0


r   c                   @   s`   e Zd ZdddZdddZd	d
 Zdd Zdd Zdd Zdd Z	dd Z
dd Zdd ZdS )r     ^  X  c              
   C   s0  t jj| |||d |  | _|| | _| _|| | _| _d| _	t j
|||| j	t jdd| _t j|| jjt jd| _t j|| jjd| _| jj| jj| jjd | jdd	dd
 | jdd	dd
 | jjd	| d	ddd	d	dd | jjd	| d	dd	d	d	dd | jjd	| d	d	dd	d	dd |   | jd| j d S )N)rz   r   whiter   )rz   r   bgZreliefZborderwidth)commandZorient)r   )ZxscrollcommandZyscrollcommandr   r   )ZweightZminsizenewsZpadxZin_ZpadyrowcolumnZrowspanZ
columnspanZstickyz<Configure>)TKFrame__init__winfo_toplevelZ_rootwindowrz   r   r   r   r   CanvasZSUNKEN_canvasZ	ScrollbarZxviewZ
HORIZONTALhscrollZyviewvscrollZ	configuresetZrowconfigureZcolumnconfiguregridr`   bindonResize)r   masterrz   r   r   r   r   r   r   r   P  sN    

           zScrolledCanvas.__init__Nc                 C   s   |r
|| _ |r|| _|r|| _| jj|| j  d | j d | j d | jd fd | jd| j | j d  | j   | jd| j| j d  | j  | 	  d S )Nr   )r   scrollregionr      )
r   r   r   r   configxview_movetorz   yview_movetor   adjustScrollsr   r   r   r   r   r   r   r`   i  s&     zScrolledCanvas.resetc              
   C   s   | j  }| j  }| j d| j|  | j  | j d| j|  | j  || jk s`|| jk r| jjd| ddddddd | j	jd| ddddddd n| j
  | j	
  d S )Nr   r   r   r   r   )r   winfo_widthwinfo_heightr	  r   r
  r   r   r  r   Zgrid_forget)r   cwidthcheightr   r   r   r  {  s&    

      
zScrolledCanvas.adjustScrollsc                 C   s   |    d S r   )r  )r   eventr   r   r   r    s    zScrolledCanvas.onResizec                 G   s   | j j| S r   )r   bboxr   argsr   r   r   r    s    zScrolledCanvas.bboxc                 O   s   | j j||S r   )r   cgetr   r  kwargsr   r   r   r    s    zScrolledCanvas.cgetc                 O   s   | j j|| d S r   )r   r  r  r   r   r   r    s    zScrolledCanvas.configc                 O   s   | j j|| d S r   )r   r  r  r   r   r   r    s    zScrolledCanvas.bindc                 O   s   | j j|| d S r   )r   unbindr  r   r   r   r    s    zScrolledCanvas.unbindc                 C   s   | j   d S r   )r   focus_forcer   r   r   r   r    s    zScrolledCanvas.focus_force)r   r   r   r   )NNN)r   r   r   r   r`   r  r  r  r  r  r  r  r  r   r   r   r   r   J  s       

r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )_Rootc                 C   s   t j|  d S r   )r   Tkr   r   r   r   r   r     s    z_Root.__init__c                 C   s&   t | ||||| _| jjddd d S )Nr   Zboth)expandfill)r   r   Zpack)r   rz   r   r  r  r   r   r   setupcanvas  s    z_Root.setupcanvasc                 C   s   | j S r   )r   r   r   r   r   
_getcanvas  s    z_Root._getcanvasc                 C   s   |  d||||f  d S )Nz%dx%d%+d%+d)Zgeometry)r   rz   r   startxstartyr   r   r   set_geometry  s    z_Root.set_geometryc                 C   s   |  d| d S )NZWM_DELETE_WINDOW)Zwm_protocol)r   destroyr   r   r   	ondestroy  s    z_Root.ondestroyc                 C   s   |   S r   )Zwinfo_screenwidthr   r   r   r   	win_width  s    z_Root.win_widthc                 C   s   |   S r   )Zwinfo_screenheightr   r   r   r   
win_height  s    z_Root.win_heightN)
r   r   r   r   r  r  r"  r$  r%  r&  r   r   r   r   r    s   r  c                   @   s(  e Zd Zdd Zdd Zdd Zdd ZdFddZdd ZdGddZ	dd Z
dd Zdd Zdd ZdHddZdd ZdIddZdJd d!ZdKd"d#ZdLd$d%Zd&d' ZdMd(d)Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; ZdNd<d=Zd>d? Z d@dA Z!dBdC Z"dOdDdEZ#d	S )PTurtleScreenBasec                 C   s   t jdd| jd}|  |S )Nr   )rz   r   r  )r   
PhotoImagecvblank)r   Zimgr   r   r   _blankimage  s    zTurtleScreenBase._blankimagec                 C   s   t j|| jdS )N)filer  )r   r(  r)  )r   r   r   r   r   _image  s    zTurtleScreenBase._imagec                 C   s   || _ t|tr"| j j}| j j}nJt| j d}t| j d}| j j| d | d |d |d fd || _|| _d | _| _	d S )Nrz   r   r   r  r   )
r)  r   r   r   r   r   r  r  xscaleyscale)r   r)  whr   r   r   r     s    

*zTurtleScreenBase.__init__c                 C   s   | j jddddS )N)r   r   r   r   r   r   r   r  outline)r)  Zcreate_polygonr   r   r   r   _createpoly  s    zTurtleScreenBase._createpolyNFc           
      C   s   g }|D ]*\}}	| || j  | |	 | j  q| jj|f|  |d k	r^| jj||d |d k	rv| jj||d |d k	r| jj||d |r| j| d S )Nr  )r4  rz   appendr/  r0  r)  coordsZitemconfigureZ	tag_raise)
r   Zpolyitem	coordlistr  r4  rz   topclr   r   r   r   r   	_drawpoly  s    zTurtleScreenBase._drawpolyc              	   C   s   | j jddddddtjdS )Nr   r   r   )r  rz   Zcapstyle)r)  Zcreate_liner   ZROUNDr   r   r   r   _createline  s    zTurtleScreenBase._createlinec           	      C   s   |d k	rNg }|D ]*\}}| || j  | | | j  q| jj|f|  |d k	rf| jj||d |d k	r~| jj||d |r| j| d S )Nr6  r7  r8  )	r   Zlineitemr;  r  rz   r<  r=  r   r   r   r   r   	_drawline  s    
zTurtleScreenBase._drawlinec                 C   s   | j | d S r   )r)  deleter   itemr   r   r   _delete(  s    zTurtleScreenBase._deletec                 C   s   | j   d S r   )r)  r,   r   r   r   r   _update.  s    zTurtleScreenBase._updatec                 C   s   | j | d S r   )r)  afterr   r   r   r   r   _delay3  s    zTurtleScreenBase._delayc                 C   s4   z| j |}d}W n tjk
r.   d}Y nX |S )NTF)r)  Z	winfo_rgbr   ZTclError)r   r9   Zrgbokr   r   r   _iscolorstring7  s    
zTurtleScreenBase._iscolorstringc                 C   s0   |d k	r | j j|d |   n| j dS d S )N)r   r   )r)  r  rE  r  )r   r9   r   r   r   _bgcolorA  s    
zTurtleScreenBase._bgcolorc                 C   st   |\}}|| j  }|| j }dddd}| jj|d | ||| ||d}	| j|	\}
}}}| j  |	|d fS )Nswr   Zse)rP   centerr_   r   )textanchorr  font)r/  r0  r)  Zcreate_textr  r,   )r   r[   txtalignrP  rW   r   r   rO  rC  Zx0Zy0Zx1Zy1r   r   r   _writeJ  s    

 
zTurtleScreenBase._writer   c                    sD    d krj |d|  n$ fdd}j |d| || d S )N<Button-%s>c                    s:   j | jj j | j j  }} || d S r   r)  canvasxr   r/  canvasyr   r0  r  r   r   funr   r   r   eventfune  s    z+TurtleScreenBase._onclick.<locals>.eventfunr)  Z
tag_unbindZtag_bindr   rC  rZ  numaddr[  r   rY  r   _onclick\  s    zTurtleScreenBase._onclickc                    sD    d krj |d|  n$ fdd}j |d| || d S )Nz<Button%s-ButtonRelease>c                    s:   j | jj j | j j  }} || d S r   rU  rX  rY  r   r   r[  w  s    z-TurtleScreenBase._onrelease.<locals>.eventfunr\  r]  r   rY  r   
_onreleasek  s    	 zTurtleScreenBase._onreleasec                    sD    d krj |d|  n$ fdd}j |d| || d S )Nz<Button%s-Motion>c                    sT   z:j | jj j | j j  }} || W n tk
rN   Y nX d S r   )r)  rV  r   r/  rW  r   r0  r   rX  rY  r   r   r[    s    z*TurtleScreenBase._ondrag.<locals>.eventfunr\  r]  r   rY  r   _ondrag~  s    	zTurtleScreenBase._ondragc                    s@    d krj d|  n" fdd}j d| || d S )NrT  c                    s:   j | jj j | j j  }} || d S r   rU  rX  rY  r   r   r[    s    z1TurtleScreenBase._onscreenclick.<locals>.eventfunr)  r  r  )r   rZ  r^  r_  r[  r   rY  r   _onscreenclick  s    	zTurtleScreenBase._onscreenclickc                    s>    d kr| j d| d  n fdd}| j d| | d S )Nz<KeyRelease-%s>c                    s
      d S r   r   r  rZ  r   r   r[    s    z0TurtleScreenBase._onkeyrelease.<locals>.eventfunrc  r   rZ  r   r[  r   rf  r   _onkeyrelease  s    zTurtleScreenBase._onkeyreleasec                    sn    d kr4|d kr | j dd  qj| j d| d  n6 fdd}|d krX| j d| n| j d| | d S )Nz
<KeyPress>z<KeyPress-%s>c                    s
      d S r   r   re  rf  r   r   r[    s    z.TurtleScreenBase._onkeypress.<locals>.eventfunrc  rg  r   rf  r   _onkeypress  s    zTurtleScreenBase._onkeypressc                 C   s   | j   d S r   )r)  r  r   r   r   r   _listen  s    zTurtleScreenBase._listenc                 C   s(   |dkr| j | n| j || d S Nr   )r)  Z
after_idlerF  r   rZ  tr   r   r   _ontimer  s    zTurtleScreenBase._ontimerc                 C   s   | j jdd|dS )Nr   image)r)  Zcreate_image)r   rp  r   r   r   _createimage  s    zTurtleScreenBase._createimagec                 C   s<   |\}}| j ||| j | | j f | j j||d d S Nro  )r)  r:  r/  r0  
itemconfig)r   rC  r[   rp  r   r   r   r   r   
_drawimage  s     zTurtleScreenBase._drawimagec                 C   s    | j j||d | j | d S rr  )r)  rs  Z	tag_lower)r   rC  rp  r   r   r   	_setbgpic  s    zTurtleScreenBase._setbgpicc                 C   s   | j |S r   )r)  r   rB  r   r   r   _type  s    zTurtleScreenBase._typec                    s.   | j |  fddtdt dD }|S )Nc                    s"   g | ]} |  |d    fqS )r   r   .0ir=  r   r   
<listcomp>  s     z/TurtleScreenBase._pointlist.<locals>.<listcomp>r   r   )r)  r:  rangelen)r   rC  plr   rz  r   
_pointlist  s    zTurtleScreenBase._pointlistc                 C   s   | j j||||fd d S )Nr.  )r)  r  )r   srx1sry1srx2sry2r   r   r   _setscrollregion  s    z!TurtleScreenBase._setscrollregionc           	      C   s|   | j  }|D ]h}t| j |}g }|rd|d d \}}|||  |||  |dd  }q&| j j|f|  qd S Nr   )r)  Zfind_allr   r:  r9  )	r   ZxscalefactorZyscalefactorr   rC  ZcoordinatesZnewcoordlistr   r   r   r   r   _rescale  s    
zTurtleScreenBase._rescalec                 C   sz   t | jts| j| jfS ||  kr6|  kr6d krJn n| jj| jjfS |d k	rX|| _|d k	rf|| _| j||| d S r   )r   r)  r   r   r   r`   r  r   r   r   _resize  s    "zTurtleScreenBase._resizec                 C   s@   | j  }|dkr| j d }| j  }|dkr8| j d }||fS )Nr   rz   r   )r)  r  r  )r   rz   r   r   r   r   _window_size  s    



zTurtleScreenBase._window_sizec                 C   s   | j j  d S r   )r)  Ztkr   r   r   r   r   r     s    zTurtleScreenBase.mainloopc                 C   s   t j||| jdS )N)parent)r   Z	askstringr)  )r   r)   promptr   r   r   r(   .  s    zTurtleScreenBase.textinputc                 C   s   t j|||||| jdS )N)ZinitialvalueZminvalueZmaxvaluer  )r   Zaskfloatr)  )r   r)   r  defaultZminvalZmaxvalr   r   r   r   =  s
    
 zTurtleScreenBase.numinput)NNNF)NNNF)N)r   N)r   N)r   N)r   N)N)NNN)NNN)$r   r   r   r+  r-  r   r5  r>  r?  r@  rD  rE  rH  rJ  rK  rS  r`  ra  rb  rd  rh  ri  rj  rn  rq  rt  ru  rv  r  r  r  r  r  r   r(   r   r   r   r   r   r'    sR         
      


	





r'  c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   r   r   Y  s   c                   @   s   e Zd ZdS )TurtleGraphicsErrorNr  r   r   r   r   r  b  s   r  c                   @   s    e Zd ZdddZdddZdS )r   Nc                 C   sz   || _ |dkr"t|trpt|}nN|dkrVt|trp| drpt|rpt	|}n|dkrdg }nt
d| || _d S )Npolygonrp  .gifcompoundzThere is no shape type %s)rv  r   r   r   r   lowerendswithr   r   r-  r  _data)r   Ztype_datar   r   r   r   n  s    


zShape.__init__c                 C   s:   | j dkrtd| j  |d kr$|}| j|||g d S )Nr  z Cannot add component to %s Shape)rv  r  r  r9  )r   polyr  r4  r   r   r   addcomponent~  s    
zShape.addcomponent)N)N)r   r   r   r   r  r   r   r   r   r   g  s   
c                   @   s@   e Zd ZdddZdddZdd Zd	d
 Zdd Zdd ZdS )Tbufferr   c                 C   s$   || _ d gg| | _d| _d| _d S )Nr   F)bufsizebufferptrcumulate)r   r  r   r   r   r     s    zTbuffer.__init__Nc                 C   sD   |d kr&t | jD ]}d g| j|< qn|| _d gg| | _d| _d S )Nr   )r|  r  r  r  )r   r  ry  r   r   r   r`     s    zTbuffer.resetc                 C   sF   | j dkrB| js0| jd | j  | _|| j| j< n| j| j | d S r   )r  r  r  r  r9  rB  r   r   r   push  s
    
zTbuffer.pushc                 C   sJ   | j dkrF| j| j }|d kr"d S d g| j| j< | jd | j  | _|S d S r   )r  r  r  rB  r   r   r   pop  s    
zTbuffer.popc                 C   s   | j | jd g S r   )r  r  countr   r   r   r   nr_of_items  s    zTbuffer.nr_of_itemsc                 C   s   t | jd t | j S )N )r   r  r  r   r   r   r   r     s    zTbuffer.__repr__)r   )N)	r   r   r   r   r`   r  r  r  r   r   r   r   r   r    s   

	r  c                   @   s  e Zd ZdZed ed ed fddZdd Zd<d
dZdd Zd=ddZ	dd Z
dd Zd>ddZdd Zdd Zdd Zd?ddZd@ddZd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ ZdAd-d.Zd/d0 ZdBd1d2ZdCd3d4ZdDd6d7ZdEd8d9ZdFd:d;ZeZeZ eZ!e	Z"eZ#d	S )Gr   Tr   r   r   c              
   C   s   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r| }|ddddd |ddddd d S )Nr  )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  )Q#@Q@)Gz. @Q@)r  r  )r  r  r  )Qr  )Qr  )Gz. r  )Q#r  r  )r  r  )r  r  )r  r  )r  r  )g       g      $)r  r  )r  r  )r  r  )r  r  ))r   r  )r   r   )r  r   )r  r  ))r   Gz)r   g'@)r  r  )r   r   )r  r  r  )r  r  rp  )Zarrowr   r4   ZsquareZtriangler   r*  nopicr   r   darwinZwmZ
attributesr   z-topmost10)r'  r   r   r+  _shapes_bgpics_mode_delayvaluer   
_colormode_keysr5   sysplatformr   Zcall)r   r)  r   r   r   Z
rootwindowr   r   r   r     s&    


zTurtleScreen.__init__c                 C   s   t d | _t d | _| d | d| _d| _d| _d| _g | _	| 
d d	D ]}| d | qP| d  | jd d  D ]}| d | | d | qzd t_d S )
Nr   r   allr   r  r   r   r   )r   r      )r   r  r  rD  rq  _bgpic
_bgpicname_tracing_updatecounter_turtlesr   rR   r   r  r   r   _pen)r   btnr   r   r   r   r5     s     




zTurtleScreen.clearNc                 C   s|   |d kr| j S | }|dkr*td| || _ |dkrp| | j d | j d | jd | jd  d | _| _|   d S )Nr   logoworldzNo turtle-graphics-mode %s)r   r  r   r   )	r  r  r  r  r   r   r/  r0  r`   r   r   r   r   r   r     s     zTurtleScreen.modec                 C   s   |   dkr|  d t|| }t|| }|  \}}| |d |d  | j| j }	}
| j| | _| j| | _|| j }| | j }| j| }| j| }| |||| | 	| j|	 | j|
  | 
  d S )Nr     )r   r   r  r%   r/  r0  r   r   r  r  r,   )r   ZllxZllyZurxZuryZxspanZyspanZwxZwyZ	oldxscaleZ	oldyscaler  r  r  r  r   r   r   r'   -  s     



z TurtleScreen.setworldcoordinatesc                 C   sT   |d kr2|  dr(td| |}qFtdnt|trFtd|}|| j|< d S )Nr  rp  z;Bad arguments for register_shape.
Use  help(register_shape)r  )r  r  r   r-  r  r   r   r  )r   namerk   r   r   r   r#   T  s    


zTurtleScreen.register_shapec              	   C   s  t |dkr|d }t|trD| |s0|dkr4|S tdt| z|\}}}W n( ttfk
rz   tdt| Y nX | jdkrdd |||fD \}}}d|  krd	krn n.d|  krd	krn nd|  krd	ksn td
t| d|||f S )Nr   r   r   zbad color string: %sbad color arguments: %sr   c                 S   s   g | ]}t d | qS g     o@roundrx  r   r   r   r   r{    s     z*TurtleScreen._colorstr.<locals>.<listcomp>   bad color sequence: %s#%02x%02x%02x)r}  r   r   rJ  r  	TypeErrorr   r  )r   r9   r   gbr   r   r   	_colorstrw  s    


FzTurtleScreen._colorstrc                    sx     ds S t dkr. fdddD }n4t dkrV fdd dd  D }ntd	  tfd
d|D S )Nr   r  c                    s"   g | ]}t  ||d   dqS )r   r  r   rw  cstrr   r   r{    s     z'TurtleScreen._color.<locals>.<listcomp>)r   r  r  r  c                    s   g | ]}d t  | d  qS )r  r  )rx  r2  r  r   r   r{    s     r   zbad colorstring: %sc                 3   s   | ]}| j  d  V  qdS )r  N)r  )rx  r   r   r   r   	<genexpr>  s     z&TurtleScreen._color.<locals>.<genexpr>)r   r}  r  r   )r   r  r=  r   )r  r   r   _color  s    
zTurtleScreen._colorc                 C   s8   |d kr| j S |dkr"t|| _ n|dkr4t|| _ d S )Nr   r  )r  r   r   )r   Zcmoder   r   r   r     s    zTurtleScreen.colormodec                 C   s$   | j D ]}|| j |  qd S r   )r  _setmoder  r`   )r   r   r   r   r   r`     s    
zTurtleScreen.resetc                 C   s   | j S r   )r  r   r   r   r   r+     s    zTurtleScreen.turtlesc                 G   s4   |r|  |}nd }| |}|d k	r0| |}|S r   )r  rK  r  r   r  r9   r   r   r   r     s    

zTurtleScreen.bgcolorc                 C   sB   |d kr| j S t|| _ d| _|d k	r0t|| _| j r>|   d S rk  )r  r   r  r  r,   )r   nr   r   r   r   r*     s    

zTurtleScreen.tracerc                 C   s   |d kr| j S t|| _ d S r   )r  r   rG  r   r   r   r     s    zTurtleScreen.delayc                 C   s<   t jsdt _t| jdkr8|  jd7  _|  j| j;  _d S )NTr   r   )r   _RUNNINGr   r  r  r   r   r   r   _incrementudc	  s    
zTurtleScreen._incrementudcc                 C   s<   | j }d| _ |  D ]}|  |  q|| _ |   d S NT)r  r+   _update_data_drawturtlerE  )r   tracingrm  r   r   r   r,     s    
zTurtleScreen.updatec                 C   s   |   d S rk  r  r   r   r   r   r.     s    zTurtleScreen.window_widthc                 C   s   |   d S Nr   r  r   r   r   r   r-   &  s    zTurtleScreen.window_heightc                 C   s   | j S r   )r)  r   r   r   r   r   /  s    
zTurtleScreen.getcanvasc                 C   s   t | j S r   )sortedr  r   r   r   r   r   r   ;  s    	zTurtleScreen.getshapesr   c                 C   s   |  ||| d S r   )rd  r   rZ  r  r_  r   r   r   rR   F  s    zTurtleScreen.onclickc                 C   sF   |d kr || j kr6| j | n|| j kr6| j | | || d S r   )r  remover9  rh  r   rZ  r   r   r   r   r   W  s    

zTurtleScreen.onkeyc                 C   sN   |d kr || j kr>| j | n|d k	r>|| j kr>| j | | || d S r   )r  r  r9  ri  r  r   r   r   r   u  s    
zTurtleScreen.onkeypressc                 C   s   |    d S r   )rj  )r   xdummyydummyr   r   r   r     s    
zTurtleScreen.listenr   c                 C   s   |  || d S r   )rn  rl  r   r   r   r"     s    zTurtleScreen.ontimerc                 C   sF   |d kr| j S || jkr(| || j|< | | j| j|  || _ d S r   )r  r  r-  ru  r  )r   Zpicnamer   r   r   r     s    
zTurtleScreen.bgpicc                 C   s   |  |||S r   )r  r  r   r   r   r%     s    zTurtleScreen.screensize)N)N)N)NN)N)r   N)N)NN)r   )N)NNN)$r   r   r   r  r   r   r5   r   r'   r#   r  r  r   r`   r+   r   r*   r   r  r,   r.   r-   r   r   rR   r   r   r   r"   r   r%   r!   r$   r   r   r    r   r   r   r   r     sF    
(
"'
#
	

			

 



c                   @   sP  e Zd ZeddeddedddZdZdZdZefddZd	d
 Z	dAddZ
dd ZdBddZdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( ZdCd)d*Zd+d, Zd-d. Zd/d0 ZdDd1d2ZdEd3d4Zd5d6 Zd7d8 ZdFd9d:Z dGd;d<Z!dHd=d>Z"dId?d@Z#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,dS )J
TNavigatorr           )r   r  r  r   r   r   c                 C   sB   | j | _| j| _|| _d | _|   d | _| | t	|  d S r   )
DEFAULT_ANGLEOFFSET_angleOffsetDEFAULT_ANGLEORIENT_angleOrientr  
undobufferr:   r  r  r`   r  r   r   r   r     s    
zTNavigator.__init__c                 C   s   t dd| _tj| j | _d S )Nr  )r   	_positionr  START_ORIENTATIONr  _orientr   r   r   r   r`     s    zTNavigator.resetNc                 C   sL   |d kr| j S |dkrd S || _ |dkr6d| _d| _n| jd | _d| _d S )Nr  )r   r  r   r         @r   )r  r   r  _fullcircler  r   r   r   r    s    zTNavigator._setmodec                 C   s0   || _ d| | _| jdkr"d| _n
|d | _d S )Nih  r   r   r  )r  _degreesPerAUr  r   r   Z
fullcircler   r   r   _setDegreesPerAU  s
    

zTNavigator._setDegreesPerAU     v@c                 C   s   |  | d S r   )r  r
  r   r   r   r:     s    zTNavigator.degreesc                 C   s   |  dtj  d S r  )r  r   r   r   r   r   r   r^   5  s    zTNavigator.radiansc                 C   s   | j | j|  }| | d S r   )r  r  _goto)r   r;   Zender   r   r   _goC  s    zTNavigator._goc                 C   s   || j 9 }| j|| _d S r   )r	  r  r   r   r   r   r   r   _rotateH  s    
zTNavigator._rotatec                 C   s
   || _ d S r   r  )r   endr   r   r   r  M  s    zTNavigator._gotoc                 C   s   |  | d S r   r  r   r;   r   r   r   rC   Q  s    zTNavigator.forwardc                 C   s   |  |  d S r   r  r  r   r   r   r/   h  s    zTNavigator.backc                 C   s   |  |  d S r   r  r  r   r   r   r_   |  s    zTNavigator.rightc                 C   s   |  | d S r   r  r  r   r   r   rP     s    zTNavigator.leftc                 C   s   | j S r   r  r   r   r   r   r[     s    zTNavigator.posc                 C   s
   | j d S rk  r  r   r   r   r   r|     s    zTNavigator.xcorc                 C   s
   | j d S r  r  r   r   r   r   r}     s    zTNavigator.ycorc                 C   s,   |d kr|  t|  n|  t|| d S r   )r  r   )r   r   r   r   r   r   rI     s    zTNavigator.gotoc                 C   s   |  dd | d d S rk  )rI   rd   r   r   r   r   rL     s    zTNavigator.homec                 C   s   |  t|| jd  d S r  r  r   r  )r   r   r   r   r   ri     s    zTNavigator.setxc                 C   s   |  t| jd | d S rk  r  )r   r   r   r   r   rj     s    zTNavigator.setyc                 C   sT   |d k	rt ||}t|t r"|}n$t|tr6t | }nt|trF|j}t|| j S r   )r   r   r   r  r  abs)r   r   r   r[   r   r   r   r;   %  s    




zTNavigator.distancec                 C   s   |d k	rt ||}t|t r"|}n$t|tr6t | }nt|trF|j}|| j \}}tt||d tj dd }|| j	 }| j
| j|  | j S Nr   r   r  )r   r   r   r  r  r  r   atan2r   r	  r   r  r  )r   r   r   r[   resultr   r   r   ru   E  s    




 
zTNavigator.towardsc                 C   sJ   | j \}}tt||d tj dd }|| j }| j| j|  | j S r  )	r  r  r   r  r   r	  r   r  r  )r   r   r   r  r   r   r   rJ   h  s    

 
zTNavigator.headingc                 C   s>   ||    | j }| j}||d  | |d  }| | d S )N       @)rJ   r  r  r  )r   Zto_angler   Zfullr   r   r   rd   w  s    zTNavigator.setheadingc                 C   sp  | j r| j dg d| j _|  }|d kr2| j}|d krjt|| j }dttdt|d  d|  }d| | }d| }d	| t	|tj
 d
 | j  }|dk r| | |   }}}|  }	|  }
|dkr| dd n
| d | | t|D ].}| | | | | d | | q | |  |dkrR| |	|
 | | | j rld| j _d S )NseqTr      g      @g     M@r   r   r  r   r   F)r  r  r  rp   r  r  r   minr   r   r   r	  _tracerrH  r  r|  r  )r   radiusZextentstepsrp   Zfracr1  Zw2lZtrZdlry  r   r   r   r4     s>    ""






zTNavigator.circlec                 C   s   d S r   r   )r   r   r   r   r   rp     s    zTNavigator.speedc                 C   s   d S r   r   )r   ar  r   r   r   r    s    zTNavigator._tracerc                 C   s   d S r   r   )r   r  r   r   r   rH    s    zTNavigator._delay)N)r  )N)N)N)NN)r   )NN)N)-r   r   r   r   r  ZDEFAULT_MODEr  r  r   r`   r  r  r:   r^   r  r  r  rC   r/   r_   rP   r[   r|   r}   rI   rL   ri   rj   r;   ru   rJ   rd   r4   rp   r  rH  r@   r3   r0   rb   rQ   r\   re   rf   rc   r   r   r   r   r    sX   

	

#
 
#
A


r  c                   @   s   e Zd Zed fddZed ed fddZd-d	d
Zd.ddZdd Zdd Z	dd Z
d/ddZdd Zdd Zdd Zdd Zdd Zdd  Zd0d!d"Zd1d$d%Zd2d'd(Zd)d* Zd+d, ZeZeZeZe	Ze	ZeZeZdS )3TPenra   c                 C   s   || _ d | _t|  d S r   )_resizemoder  r$  _reset)r   ra   r   r   r   r     s    zTPen.__init__rW   rA   c                 C   sF   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   rW   rA   r   r   r   r&    s    zTPen._resetNc                 C   s.   |d kr| j S | }|dkr*| j|d d S )N)autouserr   ra   )r%  r  rV   )r   Zrmoder   r   r   ra     s
    zTPen.resizemodec                 C   s   |d kr| j S | j|d d S )N)rY   )r'  rV   )r   rz   r   r   r   rY     s    zTPen.pensizec                 C   s   | j s
d S | jdd d S )NFrX   r+  rV   r   r   r   r   rZ   0  s    
z
TPen.penupc                 C   s   | j r
d S | jdd d S )NTr5  r6  r   r   r   r   rX   >  s    
zTPen.pendownc                 C   s   | j S r   )r+  r   r   r   r   rN   L  s    zTPen.isdownc                 C   sj   dddddd}|d kr| j S ||kr0|| }n*d|  k rDdk rVn ntt|}nd}| j|d	 d S )
Nr   r   r  r  r   )ZfastestZfastnormalZslowZslowestr   g      %@)rp   )r,  r   r  rV   )r   rp   Zspeedsr   r   r   rp   [  s    
z
TPen.speedc                 G   s   |rht |}|dkr"|d  }}n"|dkr4|\}}n|dkrD| }}| |}| |}| j||d n| | j| | jfS d S )Nr   r   r   r  )rW   rA   )r}  r  rV   r  r)  r*  )r   r  r"  ZpcolorZfcolorr   r   r   r9     s     


z
TPen.colorc                 G   s:   |r*|  |}|| jkrd S | j|d n| | jS d S )N)rW   )r  r)  rV   r  r  r   r   r   rW     s    

zTPen.pencolorc                 G   s:   |r*|  |}|| jkrd S | j|d n| | jS d S )N)rA   )r  r*  rV   r  r  r   r   r   rA     s    

zTPen.fillcolorc                 C   s   | j dd d S )NTshownrV   r   r   r   r   ro     s    zTPen.showturtlec                 C   s   | j dd d S )NFr8  r:  r   r   r   r   rK   	  s    zTPen.hideturtlec                 C   s   | j S r   )r(  r   r   r   r   rO   	  s    
zTPen.isvisiblec                 K   s  | j | j| j| j| j| j| j| j| j| j	| j
d}|s>|s>|S t|trN|}ni }|| i }|D ]}|| ||< qd| jr| jd|f d}d|kr| j|d krd}d|krt|d tr| |d f|d< | j|d krd}d|kr| j|d krd}|r|   d|kr&|d | _d|kr:|d | _d|krN|d | _d|krt|d tr|| |d f|d< |d | _d	|kr|d	 | _d
|kr|d
 | _d|kr|d }t|ttfr||f}|| _d|kr|d | _d|kr|d | _	d|kr|d | _ d|kr.|d | _
d|ksLd|ksLd|kr| j\}	}
| j}t| j
t| j
 }}|	| |
|| |  |	 | |
|||   f| _|   d S )N)r9  rX   rW   rA   rY   rp   ra   stretchfactorrn   r4  rs   rV   FrX   TrW   rY   rA   rp   ra   r;  rn   r4  r9  rs   )r(  r+  r)  r*  r'  r,  r%  r-  r.  r1  r/  r   dictr,   r  r  r   r  _newLiner   r   r   r   r   r0  rE  )r   rV   ZpendictZ_pdpZ_p_bufr   ZnewLineZsfZscxZscyZshfsacar   r   r   rV   !	  s    /
























 zTPen.penTc                 C   s   d S r   r   r   ZusePosr   r   r   r=  	  s    zTPen._newLineFc                 C   s   d S r   r   )r   r  Zforcedr   r   r   rE  	  s    zTPen._updatec                 C   s   d S r   r   r  r   r   r   r  	  s    zTPen._colorc                 C   s   d S r   r   r  r   r   r   r  	  s    zTPen._colorstr)N)N)N)N)T)TF)r   r   r   r   r   r&  ra   rY   rZ   rX   rN   rp   r9   rW   rA   ro   rK   rO   rV   r=  rE  r  r  rz   ry   r]   rU   r=   rq   rM   r   r   r   r   r$    s8   



&.%$


r$  c                   @   s   e Zd Zdd Zdd ZdS )_TurtleImagec                 C   s   || _ d | _| | d S r   )r   rv  	_setshape)r   r   
shapeIndexr   r   r   r   	  s    z_TurtleImage.__init__c                    s   | j  || _| jd  kr* j| jkr2n nd S | jd  krP j| jkrXn nd S | jdkrp | j n | jdkr| jD ]} | q j| j| _| jdkr  | _nF| jdkrԈ  jd j| _n&| jdkr fdd j| jD | _d S )Nr  rp  )rp  r  r  r*  c                    s   g | ]}   qS r   r5  rx  rC  r   r   r   r{  	  s     z*_TurtleImage._setshape.<locals>.<listcomp>)	r   rD  rv  r  rD  _itemr5  rq  r  )r   rD  rC  r   rG  r   rC  	  s(    ""







z_TurtleImage._setshapeN)r   r   r   r   rC  r   r   r   r   rB  	  s   rB  c                   @   s  e Zd Zg Zded ed ed fddZdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdlddZdd Zdd Zdd Zdd Zdmdd Zdnd!d"Zdod#d$Zd%d& Zdpd'd(Zd)d* Zdqd+d,Zd-d. Zd/d0 Zdrd2d3Zd4d5 Zd6d7 Zd8d9 Zd:d; Zdsd<d=Z d>d? Z!d@dA Z"dBdC Z#dtdEdFZ$dGdH Z%dIdJ Z&dKdL Z'dudMdNZ(dOdP Z)dvdSdTZ*dUdV Z+dWdX Z,dYdZ Z-d[d\ Z.d]d^ Z/e/Z0dwd_d`Z1dxdbdcZ2dydddeZ3dzdfdgZ4dhdi Z5djdk Z6eZ7dS ){r
   Nrk   r   r   c                 C   s4  t |tr|| _n|t |tr:|tjkr2tj| || _nTt |ttfrtjD ]}|j	|krN|| _ qqNt|| _tj| j nt
d| | j}t| |  t|  |j|  | | _t||| _d | _d| _d  | _| _|| _d| _| | _| jg| _| jg| _g | _|| _t || _!| "  d S )Nzbad canvas argument %sF)#r   _Screenr   r   r
   screensr9  r   r   r)  r  r  r   r   r$  r  r?  drawingLineItemrB  r   _poly_creatingPoly	_fillitem	_fillpathr(  _hidden_from_screencurrentLineItemr  currentLiner   
stampItems_undobuffersizer  r  rE  )r   Zcanvasrk   r   r   r   r   r   r   r   	  s@    











zRawTurtle.__init__c                 C   s0   t |  t|  |   |   |   d S r   )r  r`   r$  r&  _clearr  rE  r   r   r   r   r`    
  s
    

zRawTurtle.resetc                 C   s&   |d ks|dkrd | _ n
t|| _ d S rk  )r  r  )r   sizer   r   r   rh   
  s    zRawTurtle.setundobufferc                 C   s   | j d krdS | j  S rk  )r  r  r   r   r   r   rx   ,
  s    	
zRawTurtle.undobufferentriesc                 C   sl   d  | _ | _| jD ]}| j| q| j | _g | _| jrJ| j	| j
 | jg| _|   | | j d S r   )rN  rO  r   r   rD  r?  rQ  rR  r+  r9  r  r7   rh   rT  rB  r   r   r   rU  9
  s    

zRawTurtle._clearc                 C   s   |    |   d S r   )rU  rE  r   r   r   r   r5   G
  s    zRawTurtle.clearc                 C   sF   | j   | j jdkrd S t| jdkrB| j | j| j| j| j d S r   )	r   r  r  r}  rR  r@  rQ  r)  r'  r   r   r   r   r  V
  s    
 zRawTurtle._update_datac                 C   sx   | j }|jdkrd S |jdkrD|   |   |  ||j n0|   |jdkrt| D ]}|  q^|  d S r   )	r   r  r  r  rE  rH  r  r  r+   )r   r   rm  r   r   r   rE  ^
  s    



zRawTurtle._updatec                 C   s   | j ||S r   )r   r*   )r   flagr   r   r   r   r  p
  s    zRawTurtle._tracerc                 C   s   | j |S r   )r   r  r  r   r   r   r  
  s    zRawTurtle._colorc                 C   s   | j |S r   )r   r  r  r   r   r   r  
  s    zRawTurtle._colorstrc              	   C   s   t |tr|S z|\}}}W n( ttfk
rD   tdt| Y nX | jjdkrldd |||fD \}}}d|  krdkrn n.d|  krdkrn nd|  krdksn tdt| d|||f S )	Nr  r   c                 S   s   g | ]}t d | qS r  r  r  r   r   r   r{  
  s     z!RawTurtle._cc.<locals>.<listcomp>r   r  r  r  )r   r   r  r   r  r   r  )r   r  r   r  r  r   r   r   _cc
  s    
FzRawTurtle._ccc                    s   | j  | | j | j}d | _ d | _t| } | _ || _ |_ t | jj|_ j|  j	| jj j
}|dkr  |j_nJ|dkr  j	d j|j_n*|dkrʇ fdd j	| jj jD |j_  |_|  |S )Nr  rp  r*  r  c                    s   g | ]}   qS r   rE  rF  rG  r   r   r{  
  s     z#RawTurtle.clone.<locals>.<listcomp>)r   r=  r+  r   r   rB  rD  r  r9  r  rv  r5  rH  rq  r  r?  rQ  rE  )r   r   qttyper   rG  r   r8   
  s.    


zRawTurtle.clonec                 C   sB   |d kr| j jS || j kr*td| | j | |   d S )NzThere is no shape named %s)r   rD  r   r   r  rC  rE  )r   r  r   r   r   rk   
  s    zRawTurtle.shapec                 C   s   ||  kr|  krd kr8n n| j \}}||| jfS |dksH|dkrPtd|d k	rt|d krj||f}q||f}n|d k	r| j d |f}n| j }|d kr| j}| jd||d d S )Nr   z(stretch_wid/stretch_len must not be zeror3  )ra   r;  r4  )r-  r1  r  rV   )r   Zstretch_widZstretch_lenr4  r;  r   r   r   rl   
  s$    "


 zRawTurtle.shapesizec                 C   s    |d kr| j S | jd|d d S )Nr3  )ra   rn   )r.  rV   )r   Zshearr   r   r   rn     s    zRawTurtle.shearfactorc                 C   s<   | | j  | j }|tj d dtj  }| jd|d d S )Nr   r   r3  )ra   rs   )r	  r  r   r   rV   r   r   rs   r   r   r   rg     s    zRawTurtle.settiltanglec                 C   s>   |d kr0| j  dtj  | j }|| j | j S | | d S )Nr   )r/  r   r   r  r	  r  rg   r[  r   r   r   rt   4  s    zRawTurtle.tiltanglec                 C   s   |  ||    d S r   )rg   rt   r  r   r   r   rs   N  s    zRawTurtle.tiltc                 C   s6  ||  kr(|  kr(|  kr(d kr2n n| j S | j \}}}}|d k	rL|}|d k	rX|}|d k	rd|}|d k	rp|}|| ||  dkrtd||||f| _ t| |dtj  }	t|	t|	 }
}|| |
|  || |
|  |
| ||  |
| ||  f\}}}}||f| _|| | _|	| _	| j
dd d S )Nr   z0Bad shape transform matrix: must not be singularr   r3  r4  )r0  r  r   r  r   r   r   r-  r.  r/  rV   )r   t11t12t21t22Zm11Zm12Zm21Zm22Zalfar?  r@  Za11Za12Za21Za22r   r   r   rm   a  s0    ,     

zRawTurtle.shapetransformc                    s^   | j | j\| j\ t j j }dt| | \  fdd|D S )Nr   c                    sF   g | ]>\}}|  |  j     | |  j  fqS r   )r/  r0  rx  r   r   Ze0Ze1Zp0Zp1r   r   r   r{    s   z(RawTurtle._polytrafo.<locals>.<listcomp>)r   r  r  r   r0  r/  r  )r   r  er   ra  r   
_polytrafo  s    

zRawTurtle._polytrafoc                 C   s2   | j j| jj }|jdkr.| |j|jdkS d S )Nr  r  )r   r  r   rD  rv  _getshapepolyr  )r   rk   r   r   r   rG     s    
zRawTurtle.get_shapepolyFc                    sx   | j dks|r| j\ n>| j dkrNtd| jd }|dd|f\ n| j dkr\|S t fdd|D S )	Nr3  r2  r   g      @r   r   c                 3   s2   | ]*\}} | |  | |  fV  qd S r   r   r`  r\  r]  r^  r_  r   r   r    s     z*RawTurtle._getshapepoly.<locals>.<genexpr>)r%  r0  maxr'  r   )r   r  r  r"  r   re  r   rd    s    

zRawTurtle._getshapepolyc              	   C   s  | j }|j| jj }|j}| jj}| jr*|jdkr*|jdkr*d| _	|j
}|dkr| jdkrfd}n| jdkrx| j}n| j}| | |}| j| j }}|j|||||dd nt|d	kr||| j| nZ|d
krt||D ]D\}	\}
}}| | |
d}
|j|	|
| || || jdd qnx| j	r6d S |dkrR||ddd nJ|d	krv||| j|jd j
 n&|d
kr|D ]}	||	ddd qd| _	d S )Nr   Fr  r   r   r2  Tr  r4  rz   r<  rp  r  r  r  r  r   r*  )r   r  r   rD  rv  rH  r(  r  r  rP  r  r%  r'  r1  rc  rd  r*  r)  r>  rt  r  ziprX  )r   r   rk   rZ  Ztitemtshaper1  fcocrC  r  r   r   r   r    sR     
 
  
  





zRawTurtle._drawturtlec              	   C   sT  | j }|j| jj }|j}|j}|dkr| }| jdkr@d}n| jdkrR| j}n| j	}| 
| |}| j| j }}|j|||||dd n|dkr|d}||| j| n|d	kr4g }|D ]}	| }
||
 qt|}t||D ]D\}
\}}}| 
| |d}|j|
|| || || j	dd q| j| | jd
|f |S )Nr  r   r   r2  Trg  rp  r   r  rr   )r   r  r   rD  rv  r  r5  r%  r'  r1  rc  rd  r*  r)  r>  rq  rt  r  r9  r   ri  rX  rS  r  r  )r   r   rk   rZ  rj  stitemr1  rk  rl  ZelementrC  r  r   r   r   rr     sH    
 
  

  zRawTurtle.stampc                 C   s   || j krDt|tr,|D ]}| j| qn| j| | j | d|f}| j}||jkr`d S |j|}|j| ||j	kr|j	d |j
 |_	|j|j	d |j
 d g d S )Nrr   r   )rS  r   r   r   rD  r  r  r  indexr  r  insert)r   stampidZsubitemrC  Zbufrn  r   r   r   _clearstamp  s    



zRawTurtle._clearstampc                 C   s   |  | |   d S r   )rq  rE  )r   rp  r   r   r   r6     s    
zRawTurtle.clearstampc                 C   s^   |d kr| j d d  }n&|dkr0| j d | }n| j |d  }|D ]}| | qB|   d S rk  )rS  rq  rE  )r   r  ZtoDeleterC  r   r   r   r7   -  s    zRawTurtle.clearstampsc              
   C   s  | j | j| jt| jtf}| j}d| j||| j| j	d d  |
| j| jd d  ff}| jrh| j| | j}| jrZ|jdkrZ|| }|d |j d |d |j d  }dt|d dd| j  | j   }|d|  }	td|D ]R}
|
dkrd	}nd
}||	|
  | _| j r2|| j|| jf| j| j| |   q| j rZ|j| jdd| jd | j rn| j	| t| jtr| j| || _| jr| j| t| j	dkr|   |   d S )Ngor   r   r   r   r  皙?r   TFr  r  r   r  rz   *   )r+  r)  r'  r   rO  r   r   r  rQ  rR  r  r   r  r  r,  r  r/  r0  r   r|  r@  rK  rE  r9  rM  rL  r}  r=  )r   r  go_modesr   Z
undo_entrystartdiffdiffsqnhopsdeltar  r<  r   r   r   r  I  sb    


$$  

 zRawTurtle._gotoc                    s  |\}}}}|\}}}}	|\}
}} | j t| j| dkrDtd |
| _|| _|ddgkrbd}n|}j|
|||d  fdd| jD }|D ]}| | j	| q|}| j
rjdkr|| }|d	 j d
 |d j d
  }dt|d dd| j
  | j
   }|d|  }td|D ]P}|dkr@d}nd}|||  | _|rr| j|| jf||| |   q,|rj| jdd|d || _| jrt| jd	kr| j  | jg krd| _d | _|	r| jg krd | _td n| jd k	r| j  |   d S )Nr   z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!r  r   ru  c                    s&   g | ]}| kr |d kr|qS )r   )rv  rw  r   r   r   r   r{    s     z'RawTurtle._undogoto.<locals>.<listcomp>r   r   r   r  rs  r   TFrt  zUnwahrscheinlich in _undogoto!)r   r  r  r   rQ  rR  r@  r   rD  r  r,  r  r/  r0  r   r|  rK  rE  rM  r}  rL  r  rO  )r   entryoldnewrw  ZcoodataZdrawingZpcZpsrB   ZcLIZcLr~  ZusepcZtodeletery  rx  ry  rz  r{  r|  r  r<  r   r}  r   	_undogoto~  sl    
$$
  
 


zRawTurtle._undogotoc                 C   s   | j r| j d|| jf || j9 }| j|}| jj}|dkr| jdkrd| j }dtt	||  }d| | }t
|D ]}| j|| _|   q||| _|   d S )Nrotr   r   g      @r   )r  r  r	  r  r   r   r  r,  r   r  r|  rE  )r   r   Z	neworientr  Zanglevelr!  r|  r   r   r   r   r    s    


zRawTurtle._rotateTc                 C   sn   t | jdkrD| j| j| j| j| j | j | _| j	| j n| jj| jdd g | _|rj| j
g| _d S )Nr   T)r<  )r}  rR  r   r@  rQ  r)  r'  r?  r   r9  r  rA  r   r   r   r=    s     zRawTurtle._newLinec                 C   s   t | jtS r   )r   rO  r   r   r   r   r   rB     s    zRawTurtle.fillingc                 C   sX   |   s"| j | _| j| j | jg| _|   | j	rL| j	
d| jf |   d S )N	beginfill)rB   r   r5  rN  r   r9  r  rO  r=  r  r  rE  r   r   r   r   r1     s    
zRawTurtle.begin_fillc                 C   s^   |   rZt| jdkrF| jj| j| j| jd | jrF| jd| jf d  | _| _| 	  d S )Nr   r6  dofill)
rB   r}  rO  r   r>  rN  r*  r  r  rE  r   r   r   r   r>     s    zRawTurtle.end_fillc              	   G   s8  |sNt |ttfr0| |}| jt| jd }qr| j}|sr| jt| jd }n$|d krh| jt| jd }| |}t| jdr| j	| j
||}| j| | jr| jd|f n|  }| jr| jdg d| j_z>|  dkr|   |   | | | | | d W 5 | | X | jr4d| j_d S )	Nr  _dotr<   r  Tr2  r   F)r   r   r   r  r'  rf  r)  hasattrr   r  r  r   r9  r  r  rV   r  ra   rM   rX   rY   rW   rC   )r   rV  r9   rC  rV   r   r   r   r<     s:    



zRawTurtle.dotc                 C   sB   | j | j|||| j\}}| j| | jr>| jd|f |S )Nwri)r   rS  r  r)  r   r9  r  r  )r   rQ  rR  rP  rC  r  r   r   r   rS  H  s    zRawTurtle._writerP   Arialr  r7  c                 C   s`   | j r| j dg d| j _| t|| |}|rN|  \}}| || | j r\d| j _d S )Nr  TF)r  r  r  rS  r   r  r[   re   )r   argZmoverR  rP  r  r   r   r   r   r   r{   R  s    zRawTurtle.writec                 C   s   | j g| _d| _d S r  )r  rL  rM  r   r   r   r   r2   o  s    
zRawTurtle.begin_polyc                 C   s
   d| _ d S NF)rM  r   r   r   r   r?   }  s    zRawTurtle.end_polyc                 C   s   | j d k	rt| j S d S r   )rL  r   r   r   r   r   rD     s    

zRawTurtle.get_polyc                 C   s   | j S r   rG  r   r   r   r   rF     s    zRawTurtle.getscreenc                 C   s   | S r   r   r   r   r   r   rH     s    zRawTurtle.getturtlec                 C   s   | j |S r   )r   r   rG  r   r   r   rH    s    zRawTurtle._delayr   c                 C   s"   | j | jj||| |   d S r   )r   r`  r   rH  rE  r  r   r   r   rR     s    zRawTurtle.onclickc                 C   s"   | j | jj||| |   d S r   )r   ra  r   rH  rE  r  r   r   r   rT     s    zRawTurtle.onreleasec                 C   s   | j | jj||| d S r   )r   rb  r   rH  r  r   r   r   rS     s    zRawTurtle.ondragc                 C   s,  | j d krd S |dkr@|\}}| | | | j  | j  }n|dkr\|d }| | n|dkrp| | n|dkr|d }| j| | j	| n|dkr|d }| jj
|dddd	 nh|d
kr|d }d  | _| _|| jkr(| j| | j	| n$|dkr(t| |d  | j   d S )Nr  rr   r   rr  )r  r<   r  rh  r   r3  r  rV   )r  r  r	  r  r6   r  r   rD  r   r  r>  rN  rO  r$  rV   )r   actionr  r   ZdegPAUZdummyrm  rC  r   r   r   _undo  s<    

 

zRawTurtle._undoc                 C   sl   | j d krd S | j  }|d }|dd  }|dkr\|rh| }| |d |dd   q4n| || d S )Nr   r   r  )r  r  r  )r   rC  r  r  r   r   r   rw   '  s    

zRawTurtle.undo)NN)N)NNN)N)N)NNNN)F)N)T)N)FrP   r  )N)r   N)r   N)r   N)8r   r   r   rJ  r   r   r`   rh   rx   rU  r5   r  rE  r  r  r  rX  r8   rk   rl   rn   rg   rt   rs   rm   rc  rG   rd  r  rr   rq  r6   r7   r  r  r  r=  rB   r1   r>   r<   rS  r{   r2   r?   rD   rF   rH   rE   rH  rR   rT   rS   r  rw   rv   r   r   r   r   r
   	  sp   
(
(

(


(
(-
5A

0





 c                   C   s   t jd krt t _t jS r   )r   _screenrI  r   r   r   r   r	   J  s    
c                   @   sf   e Zd ZdZdZed Zdd Zed ed ed ed fd	d
Zdd Z	dd Z
dd Zdd ZdS )rI  Nr)   c                 C   s   t jd kr4t  t _| _| jt j | j| j t jd krtd }td }td }td }td }td }| j	|||| | j
 t _t| t j | |||| d S )Nrz   r   r   r   r   r   )rI  _rootr  r)   _titler$  _destroyr   r   r  r  r   r   r&   )r   rz   r   r   r   r   r   r   r   r   r   X  s    

z_Screen.__init__rz   r   r   r   c                 C   s   t | jdsd S | j }| j }t|trNd|  krBdkrNn n|| }|d krb|| d }t|trd|  krdkrn n|| }|d kr|| d }| j|||| |   d S )Nr"  r   r   r   )r  r  r%  r&  r   r   r"  r,   )r   rz   r   r   r!  rL  Zshr   r   r   r&   n  s    

""z_Screen.setupc                 C   s    t jd k	rt j| |t _d S r   )rI  r  r)   r  )r   Ztitlestringr   r   r   r)     s    
z_Screen.titlec                 C   s:   | j }|tj kr(d t_d t_d t_ d t_dt_|  d S r  )	r  rI  r   r  r  r   r   r  r#  )r   rootr   r   r   r    s    
z_Screen._destroyc                 C   s   |    d S r   )r  r   r   r   r   r     s    z_Screen.byec                    sN    fdd}  | td r"d S z
t  W n tk
rH   td Y nX d S )Nc                    s       d S r   )r   )r   r   r   r   r   exitGracefully  s    z+_Screen.exitonclick.<locals>.exitGracefullyr   r   )rR   r   r   AttributeErrorexit)r   r  r   r   r   r     s    

z_Screen.exitonclick)r   r   r   r  r   r   r  r   r&   r)   r  r   r   r   r   r   r   rI  R  s    
(
rI  c                   @   s0   e Zd ZdZdZed ed ed fddZdS )r   Nrk   r   r   c                 C   s,   t jd krt t _tj| t j|||d d S )N)rk   r   r   )r   r  r	   r
   r   )r   rk   r   r   r   r   r   r     s    

zTurtle.__init__)r   r   r   r  r  r   r   r   r   r   r   r     s   turtle_docstringdictc              	   C   s   i }t D ]}d| }t|j||< qtD ]}d| }t|j||< q(td|  d}tdd |D }|d |d d D ](}|d	t|  |d
||   q||d }|d	t|  |d||   |d |  W 5 Q R X d S )Nz_Screen.zTurtle.z%s.pyr1  c                 s   s$   | ]}| d d tkr|V  qdS )r   r   N)r   _alias_listr  r   r   r   r    s    z&write_docstringdict.<locals>.<genexpr>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   r   r   r   r~     s$    

c              	   C   s`   dd|   i }t|}|j}|D ]8}z|| t|_W q" tk
rX   td|  Y q"X q"d S )Nz!turtle_docstringdict_%(language)sr   zBad docstring-entry: %s)r  
__import__r  r   r  r   r   )Zlangmodnamemoduler  r   r   r   r   read_docstrings  s    r  r   zCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc           
      C   s   d }}t | j\}}}|dd  }|dd  }| jp:g }dd |D }dgt|t|  | }dd t||D }	|d k	r|	d|  |d|  |d k	r|	d|  |d|  d|	}d	| }d|}d	| }||fS )
Nr   r   c                 S   s   g | ]}d |f qS )z=%rr   )rx  r   r   r   r   r{  <  s     z"getmethparlist.<locals>.<listcomp>c                 S   s   g | ]\}}|| qS r   r   )rx  r  Zdfltr   r   r   r{  >  s     *z**z, z(%s))inspectZgetargs__code____defaults__r}  ri  r9  r   )
ZobZdefTextZcallTextr  ZvarargsZvarkwZitems2ZrealArgsdefaultsZitems1r   r   r   getmethparlist,  s&    


r  c                 C   sJ   dd l }| d krd S td }| d| d}|d| }|d|}|S )Nr   r   %s.r    \(.+ %s\)::rer   replacecompilesub)docstrr  Z
turtlename	newdocstrparexpr   r   r   _turtle_docreviseK  s    r  c                 C   sJ   dd l }| d krd S td }| d| d}|d| }|d|}|S )Nr   r   r  r   r  r  r  )r  r  Z
screennamer  r  r   r   r   _screen_docreviseW  s    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           
      C   sl   | D ]b}t ||}t|\}}|dkr4td|| qtj|||||d}	t|	t  ||jt | _qd S )Nr   z>>>>>>)objinitr  Z
paramslistZargslist)getattrr  r   __func_bodyformatr   globalsr  )
Z	functionsr   r  r  Z	docreviser  r   Zpl1Zpl2Zdefstrr   r   r   _make_global_funcsw  s    

 r  zTurtle._screenzScreen()zTurtle._penzTurtle()__main__c                   C   s   t  rt  nt  d S r   )rN   r]   rU   r   r   r   r   	switchpen  s    r  c                  C   sl  t   td t  td t  td tdD ]Z} | dkrDt  tdD ]}td t	d qL| dkrxt
d t  t  td	 t  q2t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 qtd t  tdD ]&} td t	d td td q:t  d S )NTd   r  r   r  r  Z   Zmaroonr  r   r   F   Z
startstartrx  redr  )r`   r*   ry   r0   r=   rz   r|  r1   rC   rP   r9   r>   r_   r{   )ry  r   r   r   r   demo1  sX    



r  c                  C   sB  t d t  td ttdd tddd } td tdD ]}t  t	| d qBt
d t rnt  q`t  td td	 d}td
 td td tddD ]p}|dkrt  td	d|  dd|  tdD ]}t| td qt  |d7 }td t t  d d  qt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 q`t  td t  td t  td t }|d t }|d |d |  |d | d |  |dd |d |  | d |dd |d | d tt| d}||dkr|d |d  ||| |d |d! dkr|   |   t  |d7 }qZ|j
d"d#d$d% |d& |d d'd( }t!"d t r|  |  q|d |j
d)d*d+ |#|d d S ),Nr   r  r   r  r     r   zwait a moment...r  Zgreenr  r  r     x      F   r  r  Zyellowr  2   r   r2  i  (   r  ZblueZoranger   g      @g333333?r  zCAUGHT! )r  r  boldr_   )rP  rR  r   c                 S   s   t   t  d S r   )r   r   )r  r  r   r   r   baba  s    zdemo2.<locals>.babaz  Click me!)ZCourierr  r  )rP  )$rp   rq   rY   rd   ru   r;   rb   r|  r  r4   r{   rx   rw   r`   rQ   r   rW   r1   rA   r@   r>   r]   rU   r9   rk   rH   ra   r   rP   ry   rI   r=   rr   timesleeprR   )r   r   Zlaengery  Ztrir   r  r  r   r   r   demo2  s    


















r  )r   )r  )EZ_verZtkinterr   r   r   r  r  r  Zos.pathr   r   r   copyr   r   Z_tg_classesr  r  Z_tg_utilities__all__r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  objectr'  r   r  r   r  r   r  r$  rB  r
   r   r	   rI  r   r   r~   r  Z	_LANGUAGEImportErrorr  r  r  r  r  r   r   r   r  r  r  r   r   r   r   r   <module>g   s                            
                                                              
       5

c   	/&    /       O        } 
"
    
5c