Uname: Linux web3.us.cloudlogin.co 5.10.226-xeon-hst #2 SMP Fri Sep 13 12:28:44 UTC 2024 x86_64
Software: Apache
PHP version: 8.1.31 [ PHP INFO ] PHP os: Linux
Server Ip: 162.210.96.117
Your Ip: 3.16.217.46
User: edustar (269686) | Group: tty (888)
Safe Mode: OFF
Disable Function:
NONE

name : turtle.cpython-310.opt-2.pyc
o

^b�1�@sx	dZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZddlm
Z
ddlmZgd�Zgd�Zgd�Zd	d
gZeeeedgZgd�Zid
d�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd �d!d"�d#d"�d$d%�d&d'�d(d)�d*d+�d,d-d.d/��Zd0d1�Zd2d3�Zzee�Wn
ey�ed4�YnwGd5d6�d6e�Zd7d8�Zd9d:�Zd;Zdwd=d>�ZGd?d@�d@ej �Z!ee!ej"dA�GdBdC�dCej#�Z$ej"Z"GdDdE�dEe%�Z&GdFd�de�Z'GdGdH�dHe�Z(GdIdJ�dJe%�Z)GdKdL�dLe%�Z*GdMdN�dNe&�Z+GdOdP�dPe%�Z,GdQdR�dRe%�Z-GdSdT�dTe%�Z.GdUdV�dVe-e,�Z/e/Z0dWdX�Z1GdYdZ�dZe+�Z2Gd[d\�d\e/�Z3e3Z4dxd^d	�Z5d_d`�Z6ed(Z7ze7d)k�rZe6e7�Wne8�yjedae7�Yne�yyedbe7�Ynwdcdd�Z9dedf�Z:dgdh�Z;diZ<djdk�Z=e=ee2dldme;�e=ee3dndoe:�e>Z?e@dpk�r�dqdr�ZAdsdt�ZBdudv�ZCeB�eC�eD�dSdS)yz-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)rr0r3r@rMrQrUr[r]rbrcrerfrqrvryrzrz��?�heightg�?�	canvwidthi��
canvheighti,�	leftright�	topbottomr�standardr��?r�
�undobuffersizei�rk�classicrW�blackrAra�noresize�visibleT�language�english�
exampleturtle�turtle�screenzPython Turtle GraphicsF)�
examplescreenr)�
using_IDLEc	Cs�	t|d��}|��}Wd�n1swYi}|D]W}|��}|r+|�d�r,qz	|�d�\}}WntyFtd||f�Yqw|��}|��}|dvrXt|�}nzd|vrbt|�}nt	|�}Wn	typYnw|||<q|S)N�r�#�=zBad line in config-file %s:
%s)�True�False�Nonez''z""�.)
�open�	readlines�strip�
startswithr�
ValueError�print�eval�float�int)�filename�fZcfglines�cfgdict�line�key�value�r��//usr/local/python-3.10/lib/python3.10/turtle.py�config_dict�s:
��

��
r�cCs�	d}i}i}t|�rt|�}d|vrd|d}z
tt�\}}t||�}Wnty1d}Ynwt|�r:t|�}t�|�t�|�dS)Nz
turtle.cfgZimportconfigz
turtle_%s.cfg�)rr�r�__file__r�	Exception�_CFGr,)r�Zdefault_cfgZcfgdict1Zcfgdict2�head�tailZ	cfg_file2r�r�r��
readconfig�s$�
r�z"No configfile read, reason unknownc@s^eZdZ	dd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)rcCst�|||f�S�N)�tuple�__new__)�cls�x�yr�r�r�r���z
Vec2D.__new__cCs"t|d|d|d|d�S�Nr��r��self�otherr�r�r��__add__��"z
Vec2D.__add__cCsDt|t�r|d|d|d|dSt|d||d|�Sr�)�
isinstancerr�r�r�r��__mul__�s
 z
Vec2D.__mul__cCs2t|t�s
t|t�rt|d||d|�StSr�)r�r�r�r�NotImplementedr�r�r�r��__rmul__szVec2D.__rmul__cCs"t|d|d|d|d�Sr�r�r�r�r�r��__sub__r�z
Vec2D.__sub__cCst|d|d�Sr�r��r�r�r�r��__neg__sz
Vec2D.__neg__cCs
tj|�Sr�)�math�hypotr�r�r�r��__abs__
�
z
Vec2D.__abs__cCsh	t|d|d�}t�|�}t�|�t�|�}}t|d||d||d||d|�S)Nr�r)rr�r^�cos�sin)r��angleZperp�c�sr�r�r��rotates

2zVec2D.rotatecCs|d|dfSr�r�r�r�r�r��__getnewargs__r�zVec2D.__getnewargs__cCsd|S)Nz(%.2f,%.2f)r�r�r�r�r��__repr__�zVec2D.__repr__N)
�__name__�
__module__�__qualname__r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�s
rcCsV	t|j�}|��|D]}t||�q|j��D]\}}t|�tjkr(|||<qdSr�)	�list�	__bases__�reverse�__methodDict�__dict__�items�type�types�FunctionType)r��_dictZbaseListZ_superr�r�r�r�r�r�!s
��r�cCs	i}t||�|��Sr�)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Cs�i}t||�i}t|�}|��D]!}|dd�dks+|dd�dks+||vs+||vr,q||||<q|��D]"\}}	||	d�}
t|t�rLt||d�}t||
�t|||
|�q7dS)Nr��_���)�method�func)r�Z	attribute)	r�r�r�r�r��str�__stringBody�exec�setattr)Z	fromClassZtoClassZtoPartZexcludeZ_dict_1r�Zmfc�exr�r��dZ
execStringr�r�r��__forwardmethods5s 
0

�
�r�c@sfeZdZ			ddd�Zddd�Zd	d
�Zdd�Zd
d�Zdd�Zdd�Z	dd�Z
dd�Zdd�ZdS)r���^�Xc
Cs0tjj||||d�|��|_|||_|_|||_|_d|_	tj
||||j	tjdd�|_tj
||jjtjd�|_tj
||jjd�|_|jj|jj|jjd�|jdd	dd
�|jdd	dd
�|jjd	|d	ddd	d	dd�|jjd	|d	dd	d	d	dd�|jjd	|d	d	dd	d	dd�|��|j�d
|j�dS)N)rzr��white�)rzr��bgZreliefZborderwidth)�commandZorient)r�)ZxscrollcommandZyscrollcommandrr�)ZweightZminsize�news�ZpadxZin_Zpady�row�columnZrowspanZ
columnspanZstickyz<Configure>)�TK�Frame�__init__�winfo_toplevelZ_rootwindowrzr�r�r�r��CanvasZSUNKEN�_canvasZ	ScrollbarZxviewZ
HORIZONTAL�hscrollZyview�vscrollZ	configure�setZrowconfigureZcolumnconfigure�gridr`�bind�onResize)r��masterrzr�r�r�r�r�r�rPs8


������zScrolledCanvas.__init__NcCs�	|r||_|r||_|r||_|jj||jd|jd|jd|jdfd�|j�d|j|jd|j�|j�d|j|jd|j�|�	�dS)Nr�)r��scrollregionr��)
r�r�r�r�config�xview_movetorz�yview_movetor��
adjustScrolls�r�r�r�r�r�r�r�r`is&����zScrolledCanvas.resetc
Cs�	|j��}|j��}|j�d|j||j�|j�d|j||j�||jks1||jkrO|jjd|ddddddd�|j	jd|ddddddd�dS|j�
�|j	�
�dS)Nr�r�rr�r�)r�winfo_width�winfo_heightrr�rr�rrrZgrid_forget)r��cwidth�cheightr�r�r�r{s

�
�
zScrolledCanvas.adjustScrollscC�	|��dSr�)r)r��eventr�r�r�r	��zScrolledCanvas.onResizecGs	|jj|�Sr�)r�bbox�r��argsr�r�r�r��zScrolledCanvas.bboxcOs	|jj|i|��Sr�)r�cget�r�r�kwargsr�r�r�r��zScrolledCanvas.cgetcO�	|jj|i|��dSr�)rr
rr�r�r�r
��zScrolledCanvas.configcOr!r�)rrrr�r�r�r�r"zScrolledCanvas.bindcOr!r�)r�unbindrr�r�r�r#�r"zScrolledCanvas.unbindcC�	|j��dSr�)r�focus_forcer�r�r�r�r%��zScrolledCanvas.focus_force)r�r�r�r��NNN)
r�r�r�rr`rr	rrr
rr#r%r�r�r�r�rJs
�
rrc@sFeZdZ	dd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�_RootcCstj�|�dSr�)r��Tkrr�r�r�r�r�r�z_Root.__init__cCs&t|||||�|_|jjddd�dS)Nr�Zboth)�expand�fill)rr�pack)r�rzr�rrr�r�r��setupcanvas�sz_Root.setupcanvascCs|jSr�)rr�r�r�r��
_getcanvas�sz_Root._getcanvascCs|�d||||f�dS)Nz%dx%d%+d%+d)Zgeometry)r�rzr��startx�startyr�r�r��set_geometry��z_Root.set_geometrycCs|�d|�dS)NZWM_DELETE_WINDOW)Zwm_protocol)r��destroyr�r�r��	ondestroy�r�z_Root.ondestroycC�|��Sr�)Zwinfo_screenwidthr�r�r�r��	win_width�r�z_Root.win_widthcCr5r�)Zwinfo_screenheightr�r�r�r��
win_height�r�z_Root.win_heightN)
r�r�r�rr-r.r1r4r6r7r�r�r�r�r(�sr(c@s2eZdZ	dd�Zdd�Zdd�Zdd�Z			
dFdd�Zd
d�Z			
dFdd�Z	dd�Z
dd�Zdd�Zdd�Z
dGdd�Zdd�ZdHdd�ZdHd d!�ZdHd"d#�ZdHd$d%�Zd&d'�ZdGd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�ZdId<d=�Zd>d?�Z d@dA�Z!dBdC�Z"dIdDdE�Z#d	S)J�TurtleScreenBasecCs 	tjdd|jd�}|��|S)Nr�)rzr�r
)r��
PhotoImage�cv�blank)r�Zimgr�r�r��_blankimage�szTurtleScreenBase._blankimagecCs	tj||jd�S)N)�filer
)r�r9r:)r�r�r�r�r��_image��zTurtleScreenBase._imagecCs�||_t|t�r|jj}|jj}n%t|j�d��}t|j�d��}|jj|d|d|d|dfd�||_||_d|_|_	dS)Nrzr�r��rr�)
r:r�rr�r�r�rr
�xscale�yscale)r�r:�w�hr�r�r�r�s

*zTurtleScreenBase.__init__cCs	|jjdddd�S)N)rrrrrrr��r+�outline)r:Zcreate_polygonr�r�r�r��_createpoly�r zTurtleScreenBase._createpolyNFc
Cs�	g}|D]\}}	|�||j�|�|	|j�q|jj|g|�R�|dur1|jj||d�|dur=|jj||d�|durI|jj||d�|rS|j�|�dSdS)N�r+)rF�rz��appendrArBr:�coordsZ
itemconfigureZ	tag_raise)
r�Zpolyitem�	coordlistr+rFrz�top�clr�r�r�r�r��	_drawpoly�s	�zTurtleScreenBase._drawpolyc	Cs	|jjddddddtjd�S)Nrr�r�)r+rzZcapstyle)r:Zcreate_liner�ZROUNDr�r�r�r��_createlines�zTurtleScreenBase._createlinec	Cs�	|dur)g}|D]\}}|�||j�|�||j�q	|jj|g|�R�|dur5|jj||d�|durA|jj||d�|rK|j�|�dSdS)NrHrIrJ)	r�ZlineitemrMr+rzrNrOr�r�r�r�r��	_drawlines�zTurtleScreenBase._drawlinecC�	|j�|�dSr�)r:�delete�r��itemr�r�r��_delete(r?zTurtleScreenBase._deletecCr$r�)r:r,r�r�r�r��_update.r&zTurtleScreenBase._updatecCrSr�)r:�after�r�rr�r�r��_delay3szTurtleScreenBase._delaycCs4	z|j�|�}d}W|Stjyd}Y|Sw)NTF)r:Z	winfo_rgbr�ZTclError)r�r9Zrgb�okr�r�r��_iscolorstring7s��zTurtleScreenBase._iscolorstringcCs0	|dur|jj|d�|��dS|j�d�S)N)r�r�)r:r
rXr)r�r9r�r�r��_bgcolorAs
zTurtleScreenBase._bgcolorcCsv	|\}}||j}||j}dddd�}|jj|d||||||d�}	|j�|	�\}
}}}
|j��|	|dfS)N�swr�Zse)rP�centerr_r�)�text�anchorr+�font)rArBr:Zcreate_textrr,)r�r[�txt�alignrcrWr�r�rbrVZx0Zy0Zx1Zy1r�r�r��_writeJs

�
zTurtleScreenBase._writer�c�H	�dur�j�|d|�dS��fdd�}�j�|d|||�dS)N�<Button-%s>c�:�j�|j��j�j�|j��j}}�||�dSr��r:�canvasxr�rA�canvasyr�rB�rr�r���funr�r�r��eventfune��z+TurtleScreenBase._onclick.<locals>.eventfun�r:Z
tag_unbindZtag_bind�r�rVro�num�addrpr�rnr��_onclick\s
zTurtleScreenBase._onclickcrg)Nz<Button%s-ButtonRelease>crir�rjrmrnr�r�rpwrqz-TurtleScreenBase._onrelease.<locals>.eventfunrrrsr�rnr��
_onreleaseks�zTurtleScreenBase._onreleasecrg)Nz<Button%s-Motion>csRz�j�|j��j�j�|j��j}}�||�WdSty(YdSwr�)r:rkr�rArlr�rBr�rmrnr�r�rp�s��z*TurtleScreenBase._ondrag.<locals>.eventfunrrrsr�rnr��_ondrag~s
zTurtleScreenBase._ondragcsD	�dur�j�d|�dS��fdd�}�j�d|||�dS)Nrhcrir�rjrmrnr�r�rp�rqz1TurtleScreenBase._onscreenclick.<locals>.eventfun�r:r#r)r�rortrurpr�rnr��_onscreenclick�s
zTurtleScreenBase._onscreenclickcsB	�dur|j�d|d�dS�fdd�}|j�d||�dS)Nz<KeyRelease-%s>c�
��dSr�r��r�ror�r�rp�r�z0TurtleScreenBase._onkeyrelease.<locals>.eventfunry�r�ror�rpr�r}r��
_onkeyrelease�s
zTurtleScreenBase._onkeyreleasecsv	�dur|dur|j�dd�dS|j�d|d�dS�fdd�}|dur0|j�d|�dS|j�d||�dS)Nz
<KeyPress>z
<KeyPress-%s>cr{r�r�r|r}r�r�rp�r�z.TurtleScreenBase._onkeypress.<locals>.eventfunryr~r�r}r��_onkeypress�szTurtleScreenBase._onkeypresscCr$r�)r:r%r�r�r�r��_listen�r&zTurtleScreenBase._listencCs,	|dkr
|j�|�dS|j�||�dS�Nr)r:Z
after_idlerY�r�ro�tr�r�r��_ontimer�szTurtleScreenBase._ontimercCs	|jjdd|d�S)Nr��image)r:Zcreate_image)r�r�r�r�r��_createimage�r zTurtleScreenBase._createimagecCs>	|\}}|j�|||j||jf�|jj||d�dS�Nr�)r:rLrArB�
itemconfig)r�rVr[r�r�r�r�r�r��
_drawimage�s zTurtleScreenBase._drawimagecCs"	|jj||d�|j�|�dSr�)r:r�Z	tag_lower)r�rVr�r�r�r��	_setbgpic�szTurtleScreenBase._setbgpiccC�	|j�|�Sr�)r:r�rUr�r�r��_type�szTurtleScreenBase._typecs0	|j�|���fdd�tdt��d�D�}|S)Ncs"g|]
}�|�|df�qS)r�r���.0�i�rOr�r��
<listcomp>��"z/TurtleScreenBase._pointlist.<locals>.<listcomp>rr�)r:rL�range�len)r�rV�plr�r�r��
_pointlist�szTurtleScreenBase._pointlistcCs|jj||||fd�dS)Nr@)r:r
)r��srx1�sry1�srx2�sry2r�r�r��_setscrollregion�r2z!TurtleScreenBase._setscrollregionc	Cs�|j��}|D]6}t|j�|��}g}|r3|dd�\}}|�||�|�||�|dd�}|s|jj|g|�R�qdS)Nr�)r:Zfind_allr�rLrK)	r�ZxscalefactorZyscalefactorr�rVZcoordinatesZnewcoordlistr�r�r�r�r��_rescale�s
��zTurtleScreenBase._rescalecCs|	t|jt�s
|j|jfS||ur|urdur&nn|jj|jjfS|dur-||_|dur4||_|j�|||�dSr�)r�r:rr�r�r`rr�r�r��_resizes"zTurtleScreenBase._resizecCsB	|j��}|dkr|jd}|j��}|dkr|jd}||fS)Nr�rzr�)r:rr)r�rzr�r�r�r��_window_sizes



zTurtleScreenBase._window_sizecCs	|jj��dSr�)r:Ztkrr�r�r�r�rszTurtleScreenBase.mainloopcCs	tj|||jd�S)N)�parent)rZ	askstringr:)r�r)�promptr�r�r�r(.szTurtleScreenBase.textinputcCs	tj||||||jd�S)N)ZinitialvalueZminvalueZmaxvaluer�)rZaskfloatr:)r�r)r��defaultZminvalZmaxvalr�r�r�r=s

�zTurtleScreenBase.numinput)NNNFr��r�Nr')$r�r�r�r<r>rrGrPrQrRrWrXr[r]r^rfrvrwrxrzrr�r�r�r�r�r�r�r�r�r�r�r�rr(rr�r�r�r�r8�sN

�
�

	





r8c@seZdZ	dS)r�N�r�r�r�r�r�r�r�r�Ysc@seZdZdS)�TurtleGraphicsErrorNr�r�r�r�r�r�bsr�c@s"eZdZ	ddd�Zddd�ZdS)rNcCsz||_|dkrt|t�rt|�}n'|dkr+t|t�r*|���d�r*t|�r*t�	|�}n
|dkr2g}nt
d|��||_dS)N�polygonr��.gif�compoundzThere is no shape type %s)r�r�r�r�r��lower�endswithrrr>r��_data)r�Ztype_�datar�r�r�rns
�

�
zShape.__init__cCs<	|jdkr
td|j��|dur|}|j�|||g�dS)Nr�z Cannot add component to %s Shape)r�r�r�rK)r��polyr+rFr�r�r��addcomponent~s
�zShape.addcomponentr�)r�r�r�rr�r�r�r�r�rgs
rc@sBeZdZ	ddd�Zddd�Zdd�Zd	d
�Zdd�Zd
d�ZdS)�Tbufferr�cCs$||_dgg||_d|_d|_dS)Nr�F)�bufsize�buffer�ptr�cumulate)r�r�r�r�r�r�s
zTbuffer.__init__NcCsD|durt|j�D]}dg|j|<q	n
||_dgg||_d|_dS)Nr�)r�r�r�r�)r�r�r�r�r�r�r`�s�
z
Tbuffer.resetcCsL|jdkr$|js|jd|j|_||j|j<dS|j|j�|�dSdSr�)r�r�r�r�rKrUr�r�r��push�s
�zTbuffer.pushcCsJ|jdkr#|j|j}|durdSdg|j|j<|jd|j|_|SdSr�)r�r�r�rUr�r�r��pop�s
�zTbuffer.popcCs|j|j�dg�Sr�)r�r��countr�r�r�r��nr_of_items�szTbuffer.nr_of_itemscCst|j�dt|j�S)N� )r�r�r�r�r�r�r�r��szTbuffer.__repr__)r�r�)	r�r�r�rr`r�r�r�r�r�r�r�r�r��s

	r�c@s eZdZ	dZedededfdd�Zdd�Zd<d
d�Zdd
�Zd<dd�Z	dd�Z
dd�Zd<dd�Zdd�Z
dd�Zdd�Zd=dd�Zd<dd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd>d-d.�Zd/d0�Zd<d1d2�Zd=d3d4�Zd?d6d7�Zd<d8d9�Zd@d:d;�ZeZe
Z eZ!e	Z"eZ#d	S)ArTrrrc
Cs�t�||�tdd�tdd�tdd�tdd�tdd�tdd�td|���d	�|_d
di|_||_||_td|_	g|_
|��tj
d
kr\|��}|�ddddd�|�ddddd�dSdS)Nr�)����r�r�r�rr�))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�)r�r�)r�r�)r�)��Q�#@���Q�@)�G�z. @��Q��@)r�r�)r�r�r�)���Q��r�)��Q���r�)�G�z. �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���G�z�)rg�����'@)r�r�)�rr)r�r�r�)r�r�r�)Zarrowr�r4ZsquareZtriangler�r;�nopicr�r�darwinZwmZ
attributesr�z-topmost�1�0)r8rrr<�_shapes�_bgpics�_mode�_delayvaluer��
_colormode�_keysr5�sys�platformr�call)r�r:rrrZ
rootwindowr�r�r�r�s(�


�zTurtleScreen.__init__cCs�	td|_td|_|�d�|�d�|_d|_d|_d|_g|_	|�
d�d	D]}|�d|�q)|�d�|j
dd�D]}|�d|�|�d|�q>dt_dS)
Nrr�allr�r�r�rr�)r�r��)r�r�r�rWr��_bgpic�
_bgpicname�_tracing�_updatecounter�_turtlesrrRrr�rr�_pen)r��btnr�r�r�r�r5�s"





zTurtleScreen.clearNcCs~	|dur|jS|��}|dvrtd|��||_|dvr9|�|jd|jd|jd|jd�d|_|_|��dS)N�r��logo�worldzNo turtle-graphics-mode %s)r�r�r�r�)	r�r�r�r�r�r�rArBr`�r�rr�r�r�rs�zTurtleScreen.modecCs�	|��dkr|�d�t||�}t||�}|��\}}|�|d|d�|j|j}	}
|j||_|j||_||j}||j}|j|}
|j|}|�|||
|�|�	|j|	|j|
�|�
�dS)Nr��)rr�r�r%rArBr�r�r�r�r,)r�ZllxZllyZurxZuryZxspanZyspanZwxZwyZ	oldxscaleZ	oldyscaler�r�r�r�r�r�r�r'-s"



z TurtleScreen.setworldcoordinatescCsT	|dur|���d�rtd|�|��}q#td��t|t�r#td|�}||j|<dS)Nr�r�z;Bad arguments for register_shape.
Use  help(register_shape)r�)r�r�rr>r�r�r�r�)r��namerkr�r�r�r#Ts

zTurtleScreen.register_shapec	Cs	t|�dkr|d}t|t�r#|�|�s|dkr|Stdt|���z|\}}}Wnttfy;tdt|���w|jdkrNdd�|||fD�\}}}d|krXd	krqnnd|krdd	krqnnd|krpd	ksyntd
t|���d|||fS)Nr�rr�zbad color string: %s�bad color arguments: %sr�cS�g|]}td|��qS�g�o@��round�r�r�r�r�r�r���z*TurtleScreen._colorstr.<locals>.<listcomp>��bad color sequence: %s�
#%02x%02x%02x)r�r�r�r]r��	TypeErrorr�r�)r�r9r��g�br�r�r��	_colorstrws"	
�
FzTurtleScreen._colorstrcsx��d�s�St��dkr�fdd�dD�}nt��dkr+�fdd��dd�D�}ntd	���t�fd
d�|D��S)Nr�r�cs"g|]
}t�||d�d��qS)r�r��r�r���cstrr�r�r��r�z'TurtleScreen._color.<locals>.<listcomp>)r�r�r�r�csg|]}dt�|d��qS)r�r)r�rDrr�r�r��sr�zbad colorstring: %sc3s�|]
}|�jdVqdS)r�N)r�)r�r�r�r�r��	<genexpr>�s�z&TurtleScreen._color.<locals>.<genexpr>)r�r�r�r�)r�rrOr�)rr�r��_color�s
zTurtleScreen._colorcCs@	|dur|jS|dkrt|�|_dS|dkrt|�|_dSdS)Nr�r�)r�r�r�)r�Zcmoder�r�r�r�s
�zTurtleScreen.colormodecCs&	|jD]}|�|j�|��qdSr�)r��_setmoder�r`)r�r�r�r�r�r`�s


�zTurtleScreen.resetcC�	|jSr�)r�r�r�r�r�r+�szTurtleScreen.turtlescGs6	|r	|�|�}nd}|�|�}|dur|�|�}|Sr�)rr^r�r�rr9r�r�r�r�s


zTurtleScreen.bgcolorcCsH	|dur|jSt|�|_d|_|durt|�|_|jr"|��dSdSr�)r�r�r�r�r,)r��nrr�r�r�r*�s

�zTurtleScreen.tracercCs	|dur|jSt|�|_dSr�)r�r�rZr�r�r�r�s
zTurtleScreen.delaycCsB	tjs	dt_t�|jdkr|jd7_|j|j;_dSdS)NTrr�)r�_RUNNINGr�r�r�r�r�r�r��
_incrementudc	s
�zTurtleScreen._incrementudccCs>	|j}d|_|��D]
}|��|��q||_|��dS�NT)r�r+�_update_data�_drawturtlerX)r��tracingr�r�r�r�r,s
zTurtleScreen.updatecC�	|��dSr��r�r�r�r�r�r.�zTurtleScreen.window_widthcCr�Nr�rr�r�r�r�r-&rzTurtleScreen.window_heightcCr	r�)r:r�r�r�r�r/�	zTurtleScreen.getcanvascCs	t|j���Sr�)�sortedr�r�r�r�r�r�r;szTurtleScreen.getshapesr�cCs	|�|||�dSr�)rz�r�ror�rur�r�r�rRFszTurtleScreen.onclickcCsH	|dur||jvr|j�|�n||jvr|j�|�|�||�dSr�)r��removerKr�r�ror�r�r�r�rWs
�
zTurtleScreen.onkeycCsP	|dur||jvr|j�|�n|dur ||jvr |j�|�|�||�dSr�)r�rrKr�rr�r�r�rus
�zTurtleScreen.onkeypresscCrr�)r�)r��xdummy�ydummyr�r�r�r�s	zTurtleScreen.listenrcCs	|�||�dSr�)r�r�r�r�r�r"��zTurtleScreen.ontimercCsH	|dur|jS||jvr|�|�|j|<|�|j|j|�||_dSr�)r�r�r>r�r�)r�Zpicnamer�r�r�r�s

zTurtleScreen.bgpiccCs	|�|||�Sr�)r�rr�r�r�r%�szTurtleScreen.screensizer��NNr��rr')$r�r�r�rr�rr5rr'r#rrrr`r+rr*rr
r,r.r-rrrRrrrr"rr%r!r$rrr r�r�r�r�r�sH
�(
"
'#
	

			


 


rc@sReZdZ	edd�edd�edd�d�ZdZdZdZefdd�Zd	d
�Z	dAdd
�Z
dd�ZdBdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�ZdAd)d*�Zd+d,�Zd-d.�Zd/d0�ZdAd1d2�ZdAd3d4�Zd5d6�Zd7d8�ZdCd9d:�Z dDd;d<�Z!dCd=d>�Z"dAd?d@�Z#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,dS)E�
TNavigatorr��)r�r�r�r�rr�cCsB|j|_|j|_||_d|_|��d|_|�|�t�	|�dSr�)
�DEFAULT_ANGLEOFFSET�_angleOffset�DEFAULT_ANGLEORIENT�_angleOrientr��
undobufferr:rr r`r�r�r�r�r�s
zTNavigator.__init__cCs 	tdd�|_tj|j|_dS)Nr!)r�	_positionr �START_ORIENTATIONr��_orientr�r�r�r�r`�szTNavigator.resetNcCsP	|dur|jS|dvrdS||_|dvrd|_d|_dS|jd|_d|_dS)Nr�)r�r�rr��@r�)r�r#r%�_fullcircler�r�r�r�rs

zTNavigator._setmodecCs4	||_d||_|jdkrd|_dS|d|_dS)Nihr�rr*)r+�
_degreesPerAUr�r#�r�Z
fullcircler�r�r��_setDegreesPerAUs


zTNavigator._setDegreesPerAU��v@cC�	|�|�dSr�)r.r-r�r�r�r:szTNavigator.degreescCs	|�tj�dSr�)r.r��taur�r�r�r�r^5szTNavigator.radianscCs 	|j|j|}|�|�dSr�)r'r)�_goto)r�r;Zender�r�r��_goCszTNavigator._gocCs	||j9}|j�|�|_dSr�)r,r)r��r�r�r�r�r��_rotateHs
zTNavigator._rotatecCs	||_dSr��r')r��endr�r�r�r2Ms
zTNavigator._gotocCr0r��r3�r�r;r�r�r�rCQszTNavigator.forwardcC�	|�|�dSr�r8r9r�r�r�r/hszTNavigator.backcCr:r��r5r4r�r�r�r_|rzTNavigator.rightcCr0r�r;r4r�r�r�rP��zTNavigator.leftcCr	r�r6r�r�r�r�r[�s
zTNavigator.poscC�	|jdSr�r6r�r�r�r�r|��
zTNavigator.xcorcCr=rr6r�r�r�r�r}�r>zTNavigator.ycorcCs0	|dur|�t|��dS|�t||��dSr�)r2r)r�r�r�r�r�r�rI�szTNavigator.gotocCs	|�dd�|�d�dSr�)rIrdr�r�r�r�rL�s
zTNavigator.homecCs	|�t||jd��dSr�r2rr')r�r�r�r�r�ri�zTNavigator.setxcCs	|�t|jd|��dSr�r?)r�r�r�r�r�rjr@zTNavigator.setycCsV	|dur
t||�}t|t�r|}nt|t�rt|�}nt|t�r$|j}t||j�Sr�)rr�r�r r'�abs)r�r�r�r[r�r�r�r;%s




zTNavigator.distancecCs�	|dur
t||�}t|t�r|}nt|t�rt|�}nt|t�r$|j}||j\}}tt�t�||��d�d}||j	}|j
|j||jS�Nr�r/)
rr�r�r r'r�r�r:�atan2r,r#r%r+)r�r�r�r[�resultr�r�r�ruEs





zTNavigator.towardscCsH	|j\}}tt�t�||��d�d}||j}|j|j||jSrB)	r)r�r�r:rCr,r#r%r+)r�r�r�rDr�r�r�rJhs

	
zTNavigator.headingcCs@	||��|j}|j}||d||d}|�|�dS)N�@)rJr%r+r5)r�Zto_angler��fullr�r�r�rdws
zTNavigator.setheadingcCsl	|jr|j�dg�d|j_|��}|dur|j}|dur6t|�|j}dttdt|�dd�|�}d||}d|}d	|t�	t�
|�|j�}|d
kr^|||}}}|��}	|�
�}
|d
krq|�d
d
�n|�d
�|�|�t|�D]}|�|�|�|�|�d
�|�|�q|�|�|d
kr�|�|	|
�|�|�|jr�d|j_dSdS)N�seqTr��g@g�M@r�r�rErF)r&r�r�rpr+rAr��minr�r�r^r,�_tracerr[r5r�r3)r��radiusZextent�stepsrpZfracrCZw2�l�trZdlr�r�r�r�r4�sB"





�zTNavigator.circlecC�dSr�r�)r�r�r�r�r�rp��zTNavigator.speedcCrOr�r�)r��arr�r�r�rJ�rPzTNavigator._tracercCrOr�r�)r�rr�r�r�r[�rPzTNavigator._delayr�)r/rr)-r�r�r�rr(ZDEFAULT_MODEr"r$rr`rr.r:r^r3r5r2rCr/r_rPr[r|r}rIrLrirjr;rurJrdr4rprJr[r@r3r0rbrQr\rerfrcr�r�r�r�r �s\�


	

#

 #

A

r c@s�eZdZ	edfdd�Zededfdd�Zd-d	d
�Zd-dd�Zd
d�Zdd�Z	dd�Z
d-dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd �Zd-d!d"�Zd.d$d%�Zd/d'd(�Zd)d*�Zd+d,�ZeZeZeZe	Ze	ZeZeZdS)0�TPenracCs||_d|_t�|�dSr�)�_resizemoder&rR�_reset)r�rar�r�r�r��z
TPen.__init__rWrAcCsFd|_d|_||_||_d|_d|_d|_d|_d|_d|_	d|_
dS)Nr�Tr�)r�r�r!)r�r!r!r�)�_pensize�_shown�	_pencolor�
_fillcolor�_drawing�_speed�_stretchfactor�_shearfactor�_tilt�_shapetrafo�
_outlinewidth)r�rWrAr�r�r�rT�s
zTPen._resetNcCs4	|dur|jS|��}|dvr|j|d�dSdS)N)�auto�userr��ra)rSr�rV)r�Zrmoder�r�r�ra�s�zTPen.resizemodecCs 	|dur|jS|j|d�dS)N)rY)rVrV)r�rzr�r�r�rYszTPen.pensizecCs	|jsdS|jdd�dS)NF�rX�rZrVr�r�r�r�rZ0�	z
TPen.penupcCs	|jrdS|jdd�dS)NTrdrer�r�r�r�rX>rfzTPen.pendowncCr	r�)rZr�r�r�r�rNLszTPen.isdowncCsl	dddddd�}|dur|jS||vr||}nd|kr#dkr,nntt|��}nd}|j|d	�dS)
Nrr�r�r�r�)Zfastest�fast�normalZslowZslowestr�g%@)rp)r[r�r�rV)r�rpZspeedsr�r�r�rp[s
z
TPen.speedcGs�	|r6t|�}|dkr|d}}n|dkr|\}}n|dkr#|}}|�|�}|�|�}|j||d�dS|�|j�|�|j�fS)Nr�rr�r�)rWrA)r�rrVrrXrY)r�rrMZpcolorZfcolorr�r�r�r9�s


z
TPen.colorcG�:	|r|�|�}||jkrdS|j|d�dS|�|j�S)N)rW)rrXrVrr
r�r�r�rW�s

z
TPen.pencolorcGri)N)rA)rrYrVrr
r�r�r�rA�s

zTPen.fillcolorcC�	|jdd�dS)NT��shown�rVr�r�r�r�ro�s
zTPen.showturtlecCrj)NFrkrmr�r�r�r�rK	s
zTPen.hideturtlecCr	r�)rWr�r�r�r�rO	rzTPen.isvisiblecKs�	|j|j|j|j|j|j|j|j|j|j	|j
d�}|s |s |St|t�r(|}ni}|�
|�i}|D]}||||<q3|jrG|j�d|f�d}d|vrV|j|dkrVd}d|vrtt|dt�rk|�|df�|d<|j|dkrtd}d|vr�|j|dkr�d}|r�|��d|vr�|d|_d|vr�|d|_d|vr�|d|_d|vr�t|dt�r�|�|df�|d<|d|_d	|vr�|d	|_d
|vr�|d
|_d|vr�|d}t|ttf�r�||f}||_d|vr�|d|_d
|vr�|d
|_	d|vr�|d|_d|v�r	|d|_
d|v�sd|v�sd|v�rE|j\}	}
|j}t�|j
�t�|j
�}}
|	|
|
||
||	||
|
||f|_|��dS)N)rlrXrWrArYrpra�
stretchfactorrnrFrsrVFrXTrWrYrArprarnrnrFrlrs)rWrZrXrYrVr[rSr\r]r`r^r��dictr,r&r�r�r�_newLiner�r�r�r�r�r_rX)r�rVZpendictZ_pd�pZ_p_bufr�ZnewLineZsfZscxZscyZshf�sa�car�r�r�rV!	s�.�














�zTPen.penTcCrOr�r��r�ZusePosr�r�r�rp�	rPz
TPen._newLineFcCrOr�r�)r�r�Zforcedr�r�r�rX�	rPzTPen._updatecCrOr�r�rr�r�r�r�	rPzTPen._colorcCrOr�r�rr�r�r�r�	rPzTPen._colorstrr��T)TF)r�r�r�r�rrTrarYrZrXrNrpr9rWrArorKrOrVrprXrrrzryr]rUr=rqrMr�r�r�r�rR�s<
�


&.%$



rRc@seZdZ	dd�Zdd�ZdS)�_TurtleImagecCs||_d|_|�|�dSr�)r�r��	_setshape)r�r��
shapeIndexr�r�r�r�	rUz_TurtleImage.__init__cs�|j�||_|jdkr�j|jkrdS|jdkr'�j|jkr(dS|jdvr4��|j�n|jdkrD|jD]}��|�q<�j|j|_|jdkrW���|_dS|jdkrh���jdj�|_dS|jdkr}�fdd��j|jD�|_dSdS)Nr�r�)r�r�r�r;c�g|]}����qSr��rG�r�rV�r�r�r�r��	�z*_TurtleImage._setshape.<locals>.<listcomp>)	r�rxr�r�rW�_itemrGr�r�)r�rxrVr�r|r�rw�	s.��







��z_TurtleImage._setshapeN)r�r�r�rrwr�r�r�r�rv�	srvc@s�eZdZ	gZdedededfdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdldd�Z
dd�Zdd�Zdd�Zdd�Zdmdd �Zdnd!d"�Zdmd#d$�Zd%d&�Zdmd'd(�Zd)d*�Zdod+d,�Zd-d.�Zd/d0�Zdpd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zdmd<d=�Z d>d?�Z!d@dA�Z"dBdC�Z#dqdEdF�Z$dGdH�Z%dIdJ�Z&dKdL�Z'dmdMdN�Z(dOdP�Z)drdSdT�Z*dUdV�Z+dWdX�Z,dYdZ�Z-d[d\�Z.d]d^�Z/e/Z0dmd_d`�Z1dsdbdc�Z2dsddde�Z3dsdfdg�Z4dhdi�Z5djdk�Z6eZ7dS)tr
Nrkr�r�cCs4t|t�r	||_n>t|t�r|tjvrtj�|�||_n*t|ttf�rAtjD]}|j	|kr3||_q@q't|�|_tj�|j�nt
d|��|j}t�||�
��t�|�|j�|�|��|_t||�|_d|_d|_d|_|_||_d|_|��|_|jg|_|jg|_g|_||_t |�|_!|�"�dS)Nzbad canvas argument %sF)#r��_Screenr�rr
�screensrKrrr:r�r rrrRr�rQ�drawingLineItemrvr��_poly�
_creatingPoly�	_fillitem�	_fillpathrW�_hidden_from_screen�currentLineItemr'�currentLiner��
stampItems�_undobuffersizer�r&rX)r�Zcanvasrkr�r�r�r�r�r�r�	sD




�
�





zRawTurtle.__init__cCs2	t�|�t�|�|��|��|��dSr�)r r`rRrT�_clearrrXr�r�r�r�r`
s

zRawTurtle.resetcCs*	|dus	|dkrd|_dSt|�|_dSr�)r&r�)r��sizer�r�r�rh
s
zRawTurtle.setundobuffercCs	|jdurdS|j��Sr�)r&r�r�r�r�r�rx,
s

zRawTurtle.undobufferentriescCsn	d|_|_|jD]}|j�|�q
|j��|_g|_|jr&|j�	|j
�|jg|_|��|�|j
�dSr�)r�r�r�r�rWrQr�r�rZrKr'r7rhr�rUr�r�r�r�9
s

zRawTurtle._clearcCs	|��|��dSr�)r�rXr�r�r�r�r5G
szRawTurtle.clearcCsJ|j��|jjdkr
dSt|j�dkr#|j�|j|j|j|j�dSdSr�)	r�r
r�r�r�rRr�rXrVr�r�r�r�rV
s
��zRawTurtle._update_datacCs�	|j}|jdkrdS|jdkr$|��|��|��|�|j�dS|��|jdkr>|��D]}|��q1|��dSdSr�)	r�r�rrrXr[r�r�r+)r�r�r�r�r�r�rX^
s



�zRawTurtle._updatecCs	|j�||�Sr�)r�r*)r��flagrr�r�r�rJp
r<zRawTurtle._tracercC�|j�|�Sr�)r�rrr�r�r�r�
�zRawTurtle._colorcCr�r�)r�rrr�r�r�r�
r�zRawTurtle._colorstrc	Cs�	t|t�r|Sz|\}}}Wnttfy tdt|���w|jjdkr4dd�|||fD�\}}}d|kr>dkrWnnd|krJdkrWnnd|krVdks_ntdt|���d|||fS)	Nr�r�cSr�r�r�r�r�r�r�r��
r�z!RawTurtle._cc.<locals>.<listcomp>rr�r�r�)r�r�r�r�r�r�r�)r�rr�rrr�r�r��_cc�
s
�Fz
RawTurtle._cccs�	|j�|�|j�|j}d|_d|_t|�}�|_||_�|_t�|jj�|_�j�|��j	|jjj
}|dkrA���|j_n%|dkrQ��
�j	dj�|j_n|dkrf�fdd��j	|jjjD�|j_���|_|��|S)Nr�r�r;r�cryr�rzr{r|r�r�r��
r}z#RawTurtle.clone.<locals>.<listcomp>)r�rprZr�rrvrxr�rKr�r�rGr~r�r�rQr�rX)r�r��q�ttyper�r|r�r8�
s0

�
zRawTurtle.clonecCsD	|dur	|jjS||j��vrtd|��|j�|�|��dS)NzThere is no shape named %s)r�rxr�rr�rwrX)r�r�r�r�r�rk�
szRawTurtle.shapecCs�	||ur|urdurnn|j\}}|||jfS|dks%|dkr)td��|dur;|dur6||f}qJ||f}n|durG|jd|f}n|j}|durQ|j}|jd||d�dS)Nrz(stretch_wid/stretch_len must not be zerorb)rarnrF)r\r`r�rV)r�Zstretch_widZstretch_lenrFrnr�r�r�rl�
s$"



�zRawTurtle.shapesizecCs"	|dur|jS|jd|d�dS)Nrb)rarn)r]rV)r�Zshearr�r�r�rnszRawTurtle.shearfactorcCs6	||j|j}t�|�tj}|jd|d�dS)Nrb)rars)r,r%r�r^r1rV�r�r�rsr�r�r�rgszRawTurtle.settiltanglecCs<	|durt�|j�|j}||j|jS|�|�dSr�)r�r:r^r%r,r+rgr�r�r�r�rt4s
zRawTurtle.tiltanglecCs	|�||���dSr�)rgrtr4r�r�r�rsOszRawTurtle.tiltcCs0	||ur|ur|urdur|jS|j\}}}}|dur%|}|dur+|}|dur1|}|dur7|}||||dkrEtd��||||f|_t�||�tj}	t�|	�t�|	�}
}|||
||||
||
||||
|||f\}}
}}||f|_|
||_|	|_	|j
dd�dS)Nrz0Bad shape transform matrix: must not be singularrbrc)r_r�r�rCr1r�r�r\r]r^rV)r��t11�t12�t21�t22Zm11Zm12Zm21Zm22ZalfarrrsZa11Za12Za21Za22r�r�r�rmbs*&��

zRawTurtle.shapetransformcs`	|j�|j\��|j\��t���j�j�}dt|�|\�������fdd�|D�S)Nr�csFg|]\}}��|�|�j��|�|�jf�qSr�)rArB�r�r�r��Ze0�e1Zp0Zp1r�r�r�r��s:�z(RawTurtle._polytrafo.<locals>.<listcomp>)r�r'r)rrBrArA)r�r��er�r�r��
_polytrafo�s

�zRawTurtle._polytrafocCs4	|jj|jj}|jdkr|�|j|jdk�SdS)Nr�r�)r�r�r�rxr��
_getshapepolyr�)r�rkr�r�r�rG�s

�zRawTurtle.get_shapepolyFcsz	|jdks|r|j\����n|jdkr(td|jd�}|dd|f\����n|jdkr/|St����fdd�|D��S)	Nrbrar�g@rr�c3s4�|]\}}�|�|�|�|fVqdSr�r�r��r�r�r�r�r�r�r�s�2z*RawTurtle._getshapepoly.<locals>.<genexpr>)rSr_�maxrVr�)r�r�r�rMr�r�r�r��s

zRawTurtle._getshapepolyc	Cs�	|j}|j|jj}|j}|jj}|jr�|jdkr�|jdkr�d|_	|j
}|dkrY|jdkr1d}n|jdkr:|j}n|j
}|�|�|��}|j|j}}|j|||||dd�dS|d	krg|�||j|�dS|d
kr�t||�D]$\}	\}
}}|�|�|
d��}
|j|	|
|�|�|�|�|j
dd�qpdSdS|j	r�dS|dkr�|�|ddd�n"|d	kr�|�||j|jd
j
�n|d
kr�|D]
}	|�|	ddd�q�d|_	dS)NrFr�r�r�raT�r+rFrzrNr�r��r�r�r�r�r;)r�r�r�rxr�r~rWr�r�r�r�rSrVr`r�r�rYrXrPr�r'�zipr�)r�r�rkr�Ztitem�tshaperC�fc�ocrVr�r�r�r�r�sN
���

�
zRawTurtle._drawturtlec	CsT	|j}|j|jj}|j}|j}|dkrH|��}|jdkr!d}n|jdkr*|j}n|j	}|�
|�|��}|j|j
}}|j|||||dd�nR|dkrZ|�d�}|�||j|�n@|d	kr�g}|D]}	|��}
|�|
�qbt|�}t||�D]"\}
\}}}|�
|�|d��}|j|
||�|�|�|�|j	dd�qw|j�|�|j�d
|f�|S)Nr�r�r�raTr�r�r�r�rr)r�r�r�rxr�r�rGrSrVr`r�r�rYrXrPr�r�r'rKr�r�r�r�r&r�)r�r�rkr�r��stitemrCr�r��elementrVr�r�r�r�rr�s@�
�zRawTurtle.stampcCs�	||jvr#t|t�r|D]}|j�|�q
n|j�|�|j�|�d|f}|j}||jvr1dS|j�|�}|j�|�||j	krK|j	d|j
|_	|j�|j	d|j
dg�dS)Nrrr�)r�r�r�r�rWrr&r��indexr�r��insert)r��stampidZsubitemrV�bufr�r�r�r��_clearstamp	s"

�

 zRawTurtle._clearstampcCs	|�|�|��dSr�)r�rX)r�r�r�r�r�r6s
zRawTurtle.clearstampcCs`	|dur
|jdd�}n|dkr|jd|�}n|j|d�}|D]}|�|�q"|��dSr�)r�r�rX)r�rZtoDeleterVr�r�r�r7.szRawTurtle.clearstampsc
Cs�	|j|j|jt|jt�f}|j}d|j|||j|j	dd�|�
|j�|jdd�ff}|jr5|j�
|�|j}|jr�|jdkr�||}|d|jd|d|jd}dt|ddd|j|j�}|d|}	td|�D](}
|
dkr|d	}nd
}||	|
|_|jr�|�|j||jf|j|j|�|��qs|jr�|j|jdd|jd
�|jr�|j	�|�t|jt�r�|j�|�||_|jr�|j�|�t|j	�dkr�|��|��dS)N�gor�rr�r�r�皙�����?r�TF�r�r�r��r+rz�*)rZrXrVr�r�r�r�r'r�r�r�r�r&r�r[r�rArBr�r�rRr�rXrKr�r�r�rp)r�r7�go_modesr�Z
undo_entry�start�diff�diffsq�nhops�deltarrNr�r�r�r2Js^
�

��$$
�

�zRawTurtle._gotocs	|\}}}}|\}}}}	|\}
}}�|j�t|j|�dkr#td�|
|_||_|ddgkr2d}
n|}
�j|
||
|d���fdd�|jD�}|D]
}��|�|j�	|�qJ|}|j
rLjjdkr�||}|d	�jd
|d�j
d
}dt|ddd|j
|j
�}|d
|}td|�D]%}|dkr�d}nd}||||_|r���|j||jf|||�|��q�|rLjj|jdd|d�||_|jr�t|j�d	kr�|j��|jgkr�d|_d|_|	r�|jgkr�d|_td�n
|jdur�|j��|��dS)Nr�z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!r�r�r�cs&g|]}|�vr��|�dkr|�qS)r�)r�r��r�r�r�r�r��s
�z'RawTurtle._undogoto.<locals>.<listcomp>r�rr�r�r�r�TFr�zUnwahrscheinlich in _undogoto!)r�rAr'r�r�r�rRr�rWrr[r�rArBr�r�r�rXr�r�r�r�r�)r��entry�old�newr�ZcoodataZdrawingZpcZpsrBZcLIZcLr�ZusepcZtodeleter�r�r�r�r�r�rrNr�r�r��	_undogotosh
$$�

�





zRawTurtle._undogotocCs�	|jr|j�d||jf�||j9}|j�|�}|jj}|dkrM|jdkrMd|j}dtt	|�|�}d||}t
|�D]
}|j�|�|_|��q?||_|��dS)N�rotr�rg@r�)r&r�r,r)r�r�r�r[r�rAr�rX)r�r�Z	neworientrZanglevelrLr�r�r�r�r�r5�s


zRawTurtle._rotateTcCst	t|j�dkr#|j�|j|j|j|j�|j��|_|j�	|j�n	|jj|jdd�g|_|r8|j
g|_dSdS)Nr�T)rN)r�r�r�rRr�rXrVrQr�rKr'rtr�r�r�rp�s��zRawTurtle._newLinecCs	t|jt�Sr�)r�r�r�r�r�r�r�rB�szRawTurtle.fillingcCsZ	|��s|j��|_|j�|j�|jg|_|��|j	r'|j	�
d|jf�|��dS)N�	beginfill)rBr�rGr�r�rKr'r�rpr&r�rXr�r�r�r�r1�s

zRawTurtle.begin_fillcCsd	|��r0t|j�dkr$|jj|j|j|jd�|jr$|j�d|jf�d|_|_|�	�dSdS)Nr�rH�dofill)
rBr�r�r�rPr�rYr&r�rXr�r�r�r�r>
s
��zRawTurtle.end_fillc	GsL	|s(t|ttf�r|�|�}|jt|jd�}q:|j}|s'|jt|jd�}n|dur5|jt|jd�}|�|�}t|jd�r^|j�	|j
||�}|j�|�|j
r\|j
�d|f�dSdS|��}|j
rp|j
�dg�d|j
_z$|��dkr{|��|��|�|�|�|�|�d�W|�|�n|�|�w|j
r�d|j
_dSdS)	Nr��_dotr<rGTrarF)r�r�r�rrVr�rX�hasattrr�r�r'r�rKr&r�rVr�rarMrXrYrWrC)r�r�r9rVrVr�r�r�r<
sB

�
�

�z
RawTurtle.dotcCsD	|j�|j||||j�\}}|j�|�|jr |j�d|f�|S)N�wri)r�rfr'rXr�rKr&r�)r�rdrercrVr7r�r�r�rfI
s�zRawTurtle._writerP��Arialr�rhcCsf	|jr|j�dg�d|j_|�t|�|��|�}|r(|��\}}|�||�|jr1d|j_dSdS)NrGTF)r&r�r�rfr�r�r[re)r��arg�moverercr7r�r�r�r�r�r{S
s�zRawTurtle.writecCs	|jg|_d|_dSr)r'r�r�r�r�r�r�r2p
s


zRawTurtle.begin_polycCs	d|_dS�NF)r�r�r�r�r�r?~
s

zRawTurtle.end_polycCs	|jdurt|j�SdSr�)r�r�r�r�r�r�rD�
s
	
�zRawTurtle.get_polycCr	r�r|r�r�r�r�rF�
s
zRawTurtle.getscreencCs	|Sr�r�r�r�r�r�rH�
szRawTurtle.getturtlecCr�r�)r�rrZr�r�r�r[�
rzRawTurtle._delayr�cC�$	|j�|jj|||�|��dSr�)r�rvr�r~rXrr�r�r�rR�
szRawTurtle.onclickcCr�r�)r�rwr�r~rXrr�r�r�rT�
szRawTurtle.onreleasecCs	|j�|jj|||�dSr�)r�rxr�r~rr�r�r�rS�
szRawTurtle.ondragcCs<	|jdurdS|dkr"|\}}|�|||j�|j��}dS|dkr1|d}|�|�dS|dkr<|�|�dS|dvrR|d}|j�|�|j�	|�dS|dkrf|d}|jj
|dddd	�dS|d
kr�|d}d|_|_||jvr�|j�|�|j�	|�dSdS|dkr�t
�||d�|j��dSdS)Nr�rrrr�)r�r<r�r�r�rEr�rV)r&r5r,r�r6r�r�rWr�rrPr�r�rRrV)r��actionr�r�ZdegPAUZdummyr�rVr�r�r��_undos@


�
��zRawTurtle._undocCsv	|jdurdS|j��}|d}|dd�}|dkr3|r1|��}|�|d|dd��|sdSdS|�||�dS)Nrr�rG)r&r�r�)r�rVr�r�r�r�r�rw(s

�zRawTurtle.undorr�r')NNNN)Fru)FrPr�r�)8r�r�r�r�r�rr`rhrxr�r5rrXrJrrr�r8rkrlrnrgrtrsrmr�rGr�rrrr�r6r7r2r�r5rprBr1r>r<rfr{r2r?rDrFrHrEr[rRrTrSr�rwrvr�r�r�r�r
�	st
�(


(

(

(

(-
5A

0







 r
cCs	tjdur
t�t_tjSr�)r�_screenrr�r�r�r�r	Ks
r	c@sfeZdZdZdZedZdd�Zededededfd	d
�Zdd�Z	d
d�Z
dd�Zdd�ZdS)rNr)cCs�tjdurt�t_|_|j�tj�|j�|j�tjdurWtd}td}td}td}td}td}|j�	||||�|j�
�t_t�|tj�|�
||||�dSdS)Nrzr�r�r�r�r�)r�_rootr(r)�_titler4�_destroyrr�r-r.rrr&)r�rzr�r�r�r�r�r�r�r�rYs 

�z_Screen.__init__rzr�r�r�cCs�	t|jd�s	dS|j��}|j��}t|t�r(d|kr"dkr(nn||}|dur2||d}t|t�rGd|krAdkrGnn||}|durQ||d}|j�||||�|��dS)Nr1rr�r�)r�r�r6r7r�r�r1r,)r�rzr�r/r0r_�shr�r�r�r&os

""z
_Screen.setupcCs"	tjdurtj�|�|t_dSr�)rr�r)r�)r�Ztitlestringr�r�r�r)�s

z
_Screen.titlecCs:|j}|tjurdt_dt_dt_dt_dt_|��dSr�)	r�rrr�r�rrrr3)r��rootr�r�r�r��s
z_Screen._destroycCrr�)r�r�r�r�r�r�sz_Screen.byecsN	�fdd�}��|�tdrdSzt�WdSty&td�YdSw)Ncs	���dSr�)r)r�r�r�r�r��exitGracefully�rz+_Screen.exitonclick.<locals>.exitGracefullyr�r)rRr�r�AttributeError�exit)r�r�r�r�r�r�s
�z_Screen.exitonclick)
r�r�r�r�rr�r�rr&r)r�rrr�r�r�r�rSs
�(
rc@s2eZdZ	dZdZedededfdd�ZdS)rNrkr�r�cCs,tjdur	t�t_tj|tj|||d�dS)N)rkr�r�)rr�r	r
r)r�rkr�r�r�r�r�r�s


�zTurtle.__init__)r�r�r�r�r�r�rr�r�r�r�r�s�r�turtle_docstringdictcCs
	i}tD]
}d|}t|�j||<qtD]
}d|}t|�j||<qtd|d��Q}tdd�|D��}|�d�|dd�D]}|�d	t|��|�d
||�q?|d}|�d	t|��|�d||�|�d�|��Wd�dS1s~wYdS)
Nz_Screen.zTurtle.z%s.pyrCcss&�|]}|�d�dtvr|VqdS)r�r�N)r�_alias_listr�r�r�r�rs��z&write_docstringdict.<locals>.<genexpr>zdocsdict = {

r�z%s :
z        """%s
""",

z        """%s
"""

z}
)	�_tg_screen_functionsr��__doc__�_tg_turtle_functionsr�rr{�repr�close)r��docsdict�
methodnamer�r�r�r�r�r�r~�s(


"�c	Cs^	dd|��i}t|�}|j}|D]}z	||t|�_Wqty,td|�YqwdS)Nz!turtle_docstringdict_%(language)sr�zBad docstring-entry: %s)r��
__import__r�r�r�r�r�)�lang�modname�moduler�r�r�r�r��read_docstringss��r�zCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc
Cs�	d}}t�|j�\}}}|dd�}|dd�}|jpg}dd�|D�}dgt|�t|�|}dd�t||�D�}	|durO|	�d|�|�d|�|dura|	�d|�|�d|�d�|	�}d	|}d�|�}d	|}||fS)
Nr�r�cSsg|]}d|f�qS)z=%rr�)r�r�r�r�r�r�=sz"getmethparlist.<locals>.<listcomp>cSsg|]\}}||�qSr�r�)r�r�Zdfltr�r�r�r�?r��*z**z, z(%s))�inspectZgetargs�__code__�__defaults__r�r�rKr)
�obZdefTextZcallTextrZvarargsZvarkwZitems2ZrealArgs�defaultsZitems1r�r�r��getmethparlist-s(


r�cC�L	ddl}|durdStd}|�d|d�}|�d|�}|�d|�}|S)Nrr��%s.r�� \(.+ %s\):�:��rer��replace�compile�sub)�docstrr�Z
turtlename�	newdocstr�parexpr�r�r��_turtle_docreviseL�r�cCr�)Nrr�r�r�r�r�r�)r�r�Z
screennamer�r�r�r�r��_screen_docreviseXr�r�ardef {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
Csl|D]1}t||�}t|�\}}|dkrtd||�qtj|||||d�}	t|	t��||j�t�|_qdS)Nr�z>>>>>>)�obj�initr�Z
paramslistZargslist)�getattrr�r��__func_body�formatr��globalsr�)
Z	functionsr�r�r�Z	docreviser�r�Zpl1Zpl2Zdefstrr�r�r��_make_global_funcsxs

��r�zTurtle._screenzScreen()zTurtle._penzTurtle()�__main__cCst�rt�dSt�dSr�)rNr]rUr�r�r�r��	switchpen�s

rcCsl	t�td�t�td�t�td�td�D]-}|dkr#t�td�D]
}td�t	d�q'|dkr=t
d�t�t�td	�t�qtd
�t
d�td�t�td�td�td�td�td
�t�t
dd
�t
dd
�t
d�td�D]}td�t	d�td�td�q�td�t�td�D]}td�t	d�td�td�q�t�dS)NT�dr�r�r�r��ZZmaroonrr�r�F�Z
startstartr��redr�)r`r*ryr0r=rzr�r1rCrPr9r>r_r{)r�r�r�r�r��demo1�sZ





rcCsV	td�t�td�ttdd��tdd�d}td�td�D]
}t�t	|d�q"t
d�t�r:t�t�s4t
�td�td	�d}td
�td�td�tdd
�D]8}|dkrmt�td	d|dd|�td�D]
}t|�td�qqt�|d7}td�tt�dd�qXtd�t�td�td�t�tdd�td�t�td�D]}t	dd�td�td�td�q�t�td�t�td�t�td�t�}|�d�t�}|�d�|�d�|�
�|�d�|�d�|��|�dd�|�d�|��|�d�|�dd�|�d�|�d�tt|��d}|�|�dk�rl|�d�|�d �|�|�|��|�d�|d!dk�r`|� �|� �t�|d7}|�|�dk�s7|j
d"d#d$d%�|�d&�|�d�d'd(�}t!�"d�t��r�|��|��t��s�|�d�|j
d)d*d+�|�#|d�dS),Nr�r�rrEr�r�zwait a moment...r�Zgreenrr�r���x��FrrZyellowr��2r�rai�(r�ZblueZoranger�g@g333333�?r�zCAUGHT! )r�r��boldr_)rcrer�cSst�t�dSr�)rr)rrr�r�r��babas
zdemo2.<locals>.babaz  Click me!)ZCourierr	r
)rc)$rprqrYrdrur;rbr�rr4r{rxrwr`rQrrWr1rAr@r>r]rUr9rkrHrarrPryrIr=rr�time�sleeprR)rKr�Zlaenger�Ztrir�r�rr�r�r��demo2�s��















�



�
r)r�)r�)EZ_ver�tkinterr�r�r�rr�r�Zos.pathrrr�copyrrZ_tg_classesr�r�Z
_tg_utilities�__all__r�r�r�r�r�r�r�rr�r�r�r�r�rrr)r(�objectr8r�r�rr�rr rRrvr
rr	rrr
r~r�Z	_LANGUAGE�ImportErrorr�r�r�r�r�rrr�rrrrr�r�r�r��<module>s(N
����������	�
���
������5
�
c	/&/O~
"
�
����
5c
��
© 2025 GrazzMean