
    -hh?7                    `   S SK rS SKrS SKrS SKrS SKrS SKrS SKJrJ	r	J
r
  S SKJr  S SK Jr  / SQr/ SQr/ SQrSS	/r\\-   \-   \-   S
/-   r/ SQr0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S!_S#S$_S%S&_S'S(_S)S*_S+S,S-S..ErS/ rS0 r \" \5         " S2 S3\5      rS4 rS5 rS6rSfS7 jr " S8 S9\R>                  5      r \" \ \RB                  S:5         " S; S<\RD                  5      r#\RB                  r! " S= S>\$5      r% " S? S
\5      r& " S@ SA\5      r' " SB SC\$5      r( " SD SE\$5      r) " SF SG\%5      r* " SH SI\$5      r+ " SJ SK\$5      r, " SL SM\$5      r- " SN SO\,\+5      r.\.r/SP r0 " SQ SR\*5      r1 " SS ST\.5      r2\2r3SgSU jr4SV r5\S'   r6 \6S(:w  a  \5" \65        SY r8SZ r9S[ r:S\r;S] r<\<" \\1S^S_\:5        \<" \\2S`Sa\95        \=r>\?Sb:X  a  Sc r@Sd rASe rB\A" 5         \B" 5         \C" 5         gg! \ a    \" S15         GNif = f! \7 a    \" SW\65         Nt\ a    \" SX\6-  5         Nf = f)h    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setundobuffersetxsetyshape	shapesizeshapetransformshearfactor
showturtlespeedststampteleporttilt	tiltangletowards
turtlesizeundoundobufferentriesupwidthwritexcorycorwrite_docstringdictdone
Terminator)r   r1   r4   rA   rN   rR   rV   r\   r^   rc   rd   rf   rg   rq   rw   rz   r{   r{         ?heightg      ?	canvwidthi  
canvheighti,  	leftright	topbottomr   standardr         ?r   
   undobuffersizei  rk   classicrX   blackrB   rb   noresizevisibleTlanguageenglishexampleturtleturtlescreenzPython Turtle GraphicsF)examplescreenr*   
using_IDLEc                     [        U S5       nUR                  5       nS S S 5        0 nW H  nUR                  5       nU(       a  UR                  S5      (       a  M2   UR	                  S5      u  pVUR                  5       nUR                  5       nUS;   a  [        U5      nO SU;   a  [        U5      nO[        U5      n XcU'   M     U$ ! , (       d  f       N= f! [
         a    [        SU < SU< 35         M  f = f! [
         a     NKf = f)Nr#=zBad line in config-file z:
)TrueFalseNonez''z"".)
open	readlinesstrip
startswithr   
ValueErrorprintevalfloatint)filenamefcfglinescfgdictlinekeyvalues          //opt/python-3.13.8/usr/lib/python3.13/turtle.pyconfig_dictr      s    	h	;;= 
Gzz|ts++	CJC iik99KE%<!%LEJE + , N3 
	  	xEF	  s5   CC#D 5D 
CC=<C= 
DDc                 J   Sn0 n0 n[        U5      (       a  [        U5      nSU;   a  SUS   -  n [        [        5      u  pE[	        XA5      n[        U5      (       a  [        U5      n[        R                  U5        [        R                  U5        g ! [
         a    Sn NTf = f)Nz
turtle.cfgimportconfigzturtle_%s.cfg )r   r   r   __file__r   	Exception_CFGr-   )r   default_cfgcfgdict1cfgdict2headtail	cfg_file2s          r   
readconfigr      s     KHHk{+!%(@@8_
+	 iy)KKKK  	s   B B"!B"z"No configfile read, reason unknownc                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)r      c                 0    [         R                  XU45      $ N)tuple__new__)clsxys      r   r   Vec2D.__new__   s    }}Sa&))    c                 >    [        U S   US   -   U S   US   -   5      $ Nr      r   selfothers     r   __add__Vec2D.__add__   )    T!WU1X%tAwuQx'788r   c                     [        U[        5      (       a  U S   US   -  U S   US   -  -   $ [        U S   U-  U S   U-  5      $ r   )
isinstancer   r   s     r   __mul__Vec2D.__mul__   sQ    eU##758#DGE!H$444T!WU]DGEM22r   c                     [        U[        5      (       d  [        U[        5      (       a  [        U S   U-  U S   U-  5      $ [        $ r   )r   r   r   r   NotImplementedr   s     r   __rmul__Vec2D.__rmul__   s>    eS!!Zu%=%=aQ66r   c                 >    [        U S   US   -
  U S   US   -
  5      $ r   r   r   s     r   __sub__Vec2D.__sub__   r   r   c                 *    [        U S   * U S   * 5      $ r   r   r   s    r   __neg__Vec2D.__neg__  s    d1gXQx((r   c                 (    [         R                  " U 6 $ r   )mathhypotr   s    r   __abs__Vec2D.__abs__  s    zz4  r   c                     [        U S   * U S   5      n[        R                  " U5      n[        R                  " U5      [        R                  " U5      pC[        U S   U-  US   U-  -   U S   U-  US   U-  -   5      $ )Nr   r   )r   r   r_   cossin)r   angleperpcss        r   rotateVec2D.rotate  sv     d1gXtAw'U#xx1T!WQYtAwqy($q'!)DGAI*=>>r   c                     U S   U S   4$ r    r   s    r   __getnewargs__Vec2D.__getnewargs__  s    Qa!!r   c                     SU -  $ )Nz(%.2f,%.2f)r   r   s    r   __repr__Vec2D.__repr__  s    t##r   r   N)__name__
__module____qualname____firstlineno__r   r   r   r   r   r   r   r   r   r   __static_attributes__r   r   r   r   r      s4    *939)!?"$r   r   c                    [        U R                  5      nUR                  5         U H  n[        X15        M     U R                  R                  5        H(  u  pE[        U5      [        R                  :X  d  M$  XQU'   M*     g r   )	list	__bases__reverse__methodDict__dict__itemstypetypesFunctionType)r   _dictbaseList_superr   r   s         r   r   r     s`    CMM"HV# ll((*
;%,,,#J +r   c                 <    0 n[        X5        UR                  5       $ r   )r   keys)r   r  s     r   	__methodsr  %  s    E::<r   zTdef %(method)s(self, *args, **kw): return self.%(attribute)s.%(method)s(*args, **kw)c                 \   0 n[        X5        0 n[        U 5      nUR                  5        H'  nUS S S:X  d  USS  S:X  d
  Xs;   d  Xv;   a  M!  XG   XW'   M)     UR                  5        HC  u  pXS.n
[	        U[
        5      (       a  [        XS.-  n[        WU
5        [        XX   5        ME     g )Nr   _)methodfunc)r  	attribute)	r   r  r
  r  r   str__stringBodyexecsetattr)	fromClasstoClasstoPartexclude_dict_1r  mfcexr  r  d
execStrings               r   __forwardmethodsr  /  s    G"E
I
Cllnbq6S=BrsGsNbmryEI	  ,fc""6HH Z	19- &r   c                   \    \ rS rSr  SS jrSS jrS rS rS rS r	S	 r
S
 rS rS rSrg)r   iD  c                    [         R                  R                  XX#S9  U R                  5       U l        X#sU l        U l        XEsU l        U l        SU l	        [         R                  " XUU R                  [         R                  SS9U l        [         R                  " XR                  R                  [         R                  S9U l        [         R                  " XR                  R"                  S9U l        U R                  R'                  U R                   R(                  U R$                  R(                  S9  U R+                  SS	SS
9  U R-                  SS	SS
9  U R                  R/                  S	U S	SSS	S	SS9  U R$                  R/                  S	U S	SS	S	S	SS9  U R                   R/                  S	U S	S	SS	S	SS9  U R1                  5         U R                  R3                  SU R4                  5        g )N)r{   r   white   )r{   r   bgreliefborderwidth)commandorient)r'  )xscrollcommandyscrollcommandr   r   )weightminsizenewspadxin_padyrowcolumnrowspan
columnspanstickyz<Configure>)TKFrame__init__winfo_toplevel_rootwindowr{   r   r   r   r$  CanvasSUNKEN_canvas	Scrollbarxview
HORIZONTALhscrollyviewvscroll	configuresetrowconfigurecolumnconfiguregridra   bindonResize)r   masterr{   r   r   r   s         r   r9  ScrolledCanvas.__init__J  s   
$eC..0"'
DK*3'yyV$(GGBII1N||FLL4F4F+-==:||FLL4F4FGdll.>.>.2ll.>.> 	 	@!Aq1Qq!4q1!!& 	 	Bq1!!& 	 	Bq1!!& 	 	B

mT]];r   Nc                 .   U(       a  Xl         U(       a  X l        U(       a  X0l        U R                  R	                  UU R                   * S-  U R                  * S-  U R                   S-  U R                  S-  4S9  U R                  R                  SU R                   U R                  -
  S-   -  U R                   -  5        U R                  R                  SU R                  U R                  -
  S-   -  U R                  -  5        U R                  5         g )Nr#  )r$  scrollregionr      )
r   r   r$  r>  configxview_movetor{   yview_movetor   adjustScrollsr   r   r   r$  s       r   ra   ScrolledCanvas.resetc  s    &N(OGr'+~~oq&84??:JA:M'+~~q'8$//1:L&N 	 	O 	!!#t~~

'BR'G"H?C~~#N 	O!!#t'Cb'H"I>Boo#N 	Or   c                 r   U R                   R                  5       nU R                   R                  5       nU R                   R                  SU R                  U-
  -  U R                  -  5        U R                   R                  SU R                  U-
  -  U R                  -  5        XR                  :  d  X R                  :  aA  U R                  R                  SU SSSSSSS9  U R                  R                  SU SSSSSSS9  g U R                  R                  5         U R                  R                  5         g )Nr   r   r   r-  r.  )r>  winfo_widthwinfo_heightrR  r   rS  r   rB  rI  rD  grid_forget)r   cwidthcheights      r   rT  ScrolledCanvas.adjustScrollsu  s    ))+,,++-!!#t~~f'<"=dnn"LM!!#tw'>"?"OPNN"g&?LL1Dqa%&a  PLL1Dqa%&a  P LL$$&LL$$&r   c                 $    U R                  5         g r   )rT  )r   events     r   rK  ScrolledCanvas.onResize  s    r   c                 4    U R                   R                  " U6 $ r   )r>  bboxr   argss     r   rb  ScrolledCanvas.bbox  s     ||  $''r   c                 :    U R                   R                  " U0 UD6$ r   )r>  cgetr   rd  kwargss      r   rg  ScrolledCanvas.cget  s     ||  $1&11r   c                 <    U R                   R                  " U0 UD6  g r   )r>  rQ  rh  s      r   rQ  ScrolledCanvas.config       	T,V,r   c                 <    U R                   R                  " U0 UD6  g r   )r>  rJ  rh  s      r   rJ  ScrolledCanvas.bind  s     	4*6*r   c                 <    U R                   R                  " U0 UD6  g r   )r>  unbindrh  s      r   rq  ScrolledCanvas.unbind  rm  r   c                 8    U R                   R                  5         g r   )r>  focus_forcer   s    r   rt  ScrolledCanvas.focus_force  s     	  "r   )	r>  r;  r$  r   r   r   rB  rD  r{   )  i^  iX  rv  NNN)r   r   r   r   r9  ra   rT  rK  rb  rg  rQ  rJ  rq  rt  r   r   r   r   r   r   D  s<     25DG<2$' (
2
-
+
-
#r   r   r>  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)_Rooti  c                 B    [         R                  R                  U 5        g r   )r7  Tkr9  r   s    r   r9  _Root.__init__  s    
tr   c                 \    [        XX#U5      U l        U R                  R                  SSS9  g )Nr   both)expandfill)r   r>  pack)r   r{   r   r[  r\  s        r   setupcanvas_Root.setupcanvas  s)    %d67K0r   c                     U R                   $ r   r>  r   s    r   
_getcanvas_Root._getcanvas  s    ||r   c                 0    U R                  SXX44-  5        g )Nz%dx%d%+d%+d)geometry)r   r{   r   startxstartys        r   set_geometry_Root.set_geometry  s    mUF$CCDr   c                 (    U R                  SU5        g )NWM_DELETE_WINDOW)wm_protocol)r   destroys     r   	ondestroy_Root.ondestroy  s    +W5r   c                 "    U R                  5       $ r   )winfo_screenwidthr   s    r   	win_width_Root.win_width  s    %%''r   c                 "    U R                  5       $ r   )winfo_screenheightr   s    r   
win_height_Root.win_height  s    &&((r   r  N)r   r   r   r   r9  r  r  r  r  r  r  r   r   r   r   ry  ry    s&    1E6()r   ry  c                   
   \ rS rSrS rS rS rS r  S%S jrS r	  S%S	 jr
S
 rS rS rS rS&S jrS rS'S jrS'S jrS'S jrS'S jrS rS&S jrS rS rS rS rS rS rS rS rS rS(S jr S  r!S! r"S" r#S(S# jr$S$r%g))TurtleScreenBasei  c                 f    [         R                  " SSU R                  S9nUR                  5         U$ )Nr   )r{   r   rL  )r7  
PhotoImagecvblank)r   imgs     r   _blankimageTurtleScreenBase._blankimage  s(     mm!Adgg>		
r   c                 >    [         R                  " XR                  S9$ )N)filerL  )r7  r  r  )r   r   s     r   _imageTurtleScreenBase._image  s     }}(77;;r   c                    Xl         [        U[        5      (       a-  U R                   R                  nU R                   R                  nOs[        U R                   R                  S5      5      n[        U R                   R                  S5      5      nU R                   R                  U* S-  U* S-  US-  US-  4S9  X l        X0l        S=U l        U l	        g )Nr{   r   r#  rO  r   )
r  r   r   r   r   r   rg  rQ  xscaleyscale)r   r  whs       r   r9  TurtleScreenBase.__init__  s    b.))!!A""ADGGLL)*ADGGLL*+AGGNNA2q51"a%Aq!t*ENF$''dkr   c                 8    U R                   R                  SSSS9$ )N)r   r   r   r   r   r   r   r  outline)r  create_polygonr   s    r   _createpolyTurtleScreenBase._createpoly  s!     ww%%&8r2%NNr   Nc                    / nU HA  u  pUR                  XR                  -  5        UR                  U	* U R                  -  5        MC     U R                  R                  " U/UQ76   Ub  U R                  R                  XS9  Ub  U R                  R                  XS9  Ub  U R                  R                  XS9  U(       a  U R                  R                  U5        g g )Nr  )r  r{   appendr  r  r  coordsitemconfigure	tag_raise)
r   polyitem	coordlistr  r  r{   topclr   r   s
             r   	_drawpolyTurtleScreenBase._drawpoly  s     DAIIa++o&IIqb4;;&'  	x%"%GG!!(!6GG!!(!<GG!!(!8GGh' r   c           
      \    U R                   R                  SSSSSS[        R                  S9$ )Nr   r   r#  )r  r{   capstyle)r  create_liner7  ROUNDr   s    r   _createlineTurtleScreenBase._createline  s3     ww""1aABa.0hh # 8 	8r   c                    Ubf  / nU HA  u  pxUR                  XpR                  -  5        UR                  U* U R                  -  5        MC     U R                  R                  " U/UQ76   Ub  U R                  R                  XS9  Ub  U R                  R                  XS9  U(       a  U R                  R                  U5        g g )Nr  r  r  )	r   lineitemr  r  r{   r  r  r   r   s	            r   	_drawlineTurtleScreenBase._drawline  s      B!		!kk/*		1"t{{*+ " GGNN8)b)GG!!(!6GG!!(!8GGh' r   c                 :    U R                   R                  U5        g r   )r  deleter   items     r   _deleteTurtleScreenBase._delete"  s     	tr   c                 8    U R                   R                  5         g r   )r  r-   r   s    r   _updateTurtleScreenBase._update(  s     	r   c                 :    U R                   R                  U5        g r   )r  afterr   r   s     r   _delayTurtleScreenBase._delay-  s    er   c                 |     U R                   R                  U5      nSnU$ ! [        R                   a    Sn U$ f = f)NTF)r  	winfo_rgbr7  TclError)r   r:   rgboks       r   _iscolorstringTurtleScreenBase._iscolorstring1  sF    	''##E*CB 	 {{ 	B		s   ! ;;c                     Ub*  U R                   R                  US9  U R                  5         g U R                   R                  S5      $ )N)r$  r$  )r  rQ  r  rg  )r   r:   s     r   _bgcolorTurtleScreenBase._bgcolor;  s8     GGNNN&LLN77<<%%r   c           	          Uu  pgX`R                   -  nXpR                  -  nSSSS.nU R                  R                  US-
  U* X(U   XTS9n	U R                  R	                  U	5      u  ppXS-
  4$ )Nswr   se)rQ   centerr`   r   )textanchorr  font)r  r  r  create_textrb  )r   r\   txtalignr  rX   r   r   r  r  x0y0x1y1s                 r   _writeTurtleScreenBase._writeD  s|    
 OOT;ww""1Q33/7 # Fd+Tzr   c                    ^ ^ Tc   T R                   R                  USU-  5        g UU 4S jnT R                   R                  USU-  XT5        g )N<Button-%s>c                    > TR                   R                  U R                  5      TR                  -  TR                   R	                  U R
                  5      * TR                  -  p!T" X5        g r   r  canvasxr   r  canvasyr   r  r_  r   r   funr   s      r   eventfun+TurtleScreenBase._onclick.<locals>.eventfun[  L    0<11$++= A	r   r  
tag_unbindtag_bindr   r  r  numaddr  s   ` `   r   _onclickTurtleScreenBase._onclickR  sE     ;GGt]S%89 GGT=3#6Fr   c                    ^ ^ Tc   T R                   R                  USU-  5        g UU 4S jnT R                   R                  USU-  XT5        g )Nz<Button%s-ButtonRelease>c                    > TR                   R                  U R                  5      TR                  -  TR                   R	                  U R
                  5      * TR                  -  p!T" X5        g r   r  r  s      r   r  -TurtleScreenBase._onrelease.<locals>.eventfunm  r   r   r  r  s   ` `   r   
_onreleaseTurtleScreenBase._onreleasea  sJ     ;GGt%?#%EF GGT#=#C%,r   c                    ^ ^ Tc   T R                   R                  USU-  5        g UU 4S jnT R                   R                  USU-  XT5        g )Nz<Button%s-Motion>c                    >  TR                   R                  U R                  5      TR                  -  TR                   R	                  U R
                  5      * TR                  -  p!T" X5        g ! [         a     g f = fr   )r  r  r   r  r  r   r  r   r  s      r   r  *TurtleScreenBase._ondrag.<locals>.eventfun  sc     GGOOEGG4T[[@ GGOOEGG44T[[@ I  s   A,A0 0
A=<A=r  r  s   ` `   r   _ondragTurtleScreenBase._ondragt  sG     ;GGt%83%>? GGT#6#<hLr   c                    ^ ^ Tc  T R                   R                  SU-  5        g UU 4S jnT R                   R                  SU-  XC5        g )Nr  c                    > TR                   R                  U R                  5      TR                  -  TR                   R	                  U R
                  5      * TR                  -  p!T" X5        g r   r  r  s      r   r  1TurtleScreenBase._onscreenclick.<locals>.eventfun  r   r   r  rq  rJ  )r   r  r  r  r  s   ``   r   _onscreenclickTurtleScreenBase._onscreenclick  s=     ;GGNN=3./ GGLL,h<r   c                    ^ Tc   U R                   R                  SU-  S 5        g U4S jnU R                   R                  SU-  U5        g )Nz<KeyRelease-%s>c                    > T" 5         g r   r   r_  r  s    r   r  0TurtleScreenBase._onkeyrelease.<locals>.eventfun      r   r  r   r  r   r  s    `  r   _onkeyreleaseTurtleScreenBase._onkeyrelease  s?     ;GGNN,s2D9GGLL*S0(;r   c                   ^ Tc@  Uc  U R                   R                  SS 5        g U R                   R                  SU-  S 5        g U4S jnUc  U R                   R                  SU5        g U R                   R                  SU-  U5        g )Nz
<KeyPress>z<KeyPress-%s>c                    > T" 5         g r   r   r  s    r   r  .TurtleScreenBase._onkeypress.<locals>.eventfun  r  r   r  r  s    `  r   _onkeypressTurtleScreenBase._onkeypress  sk    
 ;{|T24d;{\84_s2H=r   c                 8    U R                   R                  5         g r   )r  rt  r   s    r   _listenTurtleScreenBase._listen  s     	r   c                 ~    US:X  a  U R                   R                  U5        g U R                   R                  X!5        g Nr   )r  
after_idler  r   r  ts      r   _ontimerTurtleScreenBase._ontimer  s-     6GGs#GGMM!!r   c                 8    U R                   R                  SSUS9$ )Nr   image)r  create_image)r   r2  s     r   _createimageTurtleScreenBase._createimage  s      ww##Aq#66r   c                     Uu  pEU R                   R                  XU R                  -  U* U R                  -  45        U R                   R	                  XS9  g Nr1  )r  r  r  r  
itemconfig)r   r  r\   r2  r   r   s         r   
_drawimageTurtleScreenBase._drawimage  sH     t$++orDKK/?@A4-r   c                 l    U R                   R                  XS9  U R                   R                  U5        g r7  )r  r8  	tag_lower)r   r  r2  s      r   	_setbgpicTurtleScreenBase._setbgpic  s+    
 	4-$r   c                 8    U R                   R                  U5      $ r   )r  r  r  s     r   _typeTurtleScreenBase._type  s     ww||D!!r   c                     U R                   R                  U5      n[        S[        U5      S5       Vs/ s H  o2U   X#S-      * 4PM     nnU$ s  snf )Nr   r#  r   )r  r  rangelen)r   r  r  ipls        r   
_pointlistTurtleScreenBase._pointlist  sR     WW^^D!).q#b'1)=>)=A!urA#wh)=>
 ?s   Ac                 :    U R                   R                  XX44S9  g )Nr  )r  rQ  )r   srx1sry1srx2sry2s        r   _setscrollregion!TurtleScreenBase._setscrollregion  s    T$<=r   c                 T   U R                   R                  5       nU H  n[        U R                   R                  U5      5      n/ nU(       a;  US S u  pxUR	                  Xq-  5        UR	                  X-  5        USS  nU(       a  M;  U R                   R                  " U/UQ76   M     g )Nr#  )r  find_allr   r  r  )	r   xscalefactoryscalefactorr  r  coordinatesnewcoordlistr   r   s	            r   _rescaleTurtleScreenBase._rescale  s      "Dtww~~d34KL"2A##A$45##A$45)!"o	 +
 GGNN4/,/ r   c                 H   [        U R                  [        5      (       d  U R                  U R                  4$ Xs=L a	  Us=L a  c/  O  O,U R                  R                  U R                  R                  4$ Ub  Xl        Ub  X l        U R                  R                  XU5        g r   )r   r  r   r   r   ra   rU  s       r   _resizeTurtleScreenBase._resize  s}    
 $''>22>>4??220b0077$$dgg&8&888 &N!(OiR0r   c                     U R                   R                  5       nUS::  a  U R                   S   nU R                   R                  5       nUS::  a  U R                   S   nX4$ )Nr   r{   r   )r  rX  rY  )r   r{   r   s      r   _window_sizeTurtleScreenBase._window_size
  sZ     ##%A:GGG$E%%'Q;WWX&F}r   c                 L    U R                   R                  R                  5         g r   )r  tkr   r   s    r   r   TurtleScreenBase.mainloop  s     	

r   c                 @    [         R                  " XU R                  S9$ )N)parent)r   	askstringr  )r   r*   prompts      r   r)   TurtleScreenBase.textinput$  s     %%eDGGDDr   c           	      D    [         R                  " XUXEU R                  S9$ )N)initialvalueminvaluemaxvaluerb  )r   askfloatr  )r   r*   rd  defaultminvalmaxvals         r   r   TurtleScreenBase.numinput3  s%    $ $$U.4,0GG5 	5r   )r   r   r  r  r  )NNNFr   r   Nrw  )&r   r   r   r   r  r  r9  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r'  r.  r4  r9  r=  r@  rG  rN  rV  rY  r\  r   r)   r   r   r   r   r   r  r    s    <(O
 3705(28 -1-2(.
&G,&M*=$	<>$
"7
. "
>
01	E5r   r  c                       \ rS rSrSrg)r   iO  r   Nr   r   r   r   r   r   r   r   r   r   O  s     	r   c                       \ rS rSrSrg)TurtleGraphicsErroriX  r   Nrq  r   r   r   rs  rs  X  s     r   rs  c                   (    \ rS rSrSS jrSS jrSrg)r   i]  Nc                 b   Xl         US:X  a!  [        U[        5      (       a  [        U5      nO|US:X  a_  [        U[        5      (       aI  UR                  5       R                  S5      (       a%  [        U5      (       a  [        R                  U5      nOUS:X  a  / nO[        SU-  5      eX l        g )Npolygonr2  .gifcompoundzThere is no shape type %s)r@  r   r   r   r  lowerendswithr   r	   r  rs  _data)r   type_datas      r   r9  Shape.__init__d  s    
I$%%T{g$$$::<((00VD\\'..t4Dj D%&AE&IJJ
r   c                     U R                   S:w  a  [        SU R                   -  5      eUc  UnU R                  R                  XU/5        g )Nrx  z Cannot add component to %s Shape)r@  rs  r{  r  )r   polyr  r  s       r   addcomponentShape.addcomponentt  sP      ::#%&HBF**'M N N?G

4w/0r   )r{  r@  r   )r   r   r   r   r9  r  r   r   r   r   r   r   ]  s     1r   r   c                   @    \ rS rSrS
S jrSS jrS rS rS rS r	S	r
g)Tbufferi  c                 D    Xl         S //U-  U l        SU l        SU l        g )Nr  F)bufsizebufferptrcumulate)r   r  s     r   r9  Tbuffer.__init__  s%    vh(r   Nc                     Uc-  [        U R                  5       H  nS /U R                  U'   M     OXl        S //U-  U l        SU l        g )Nr  )rC  r  r  r  )r   r  rE  s      r   ra   Tbuffer.reset  sG    ?4<<("&A ) #L 6(W,DKr   c                    U R                   S:  at  U R                  (       d:  U R                  S-   U R                   -  U l        XR                  U R                  '   g U R                  U R                     R	                  U5        g g r   )r  r  r  r  r  r  s     r   pushTbuffer.push  s]    <<!== HHqLDLL8(,DHH%DHH%,,T2 r   c                     U R                   S:  aZ  U R                  U R                     nUc  g S /U R                  U R                  '   U R                  S-
  U R                   -  U l        U$ g r   )r  r  r  r  s     r   popTbuffer.pop  s^    <<!;;txx(D|)-DHH% HHqLDLL8 r   c                 T    U R                   U R                  R                  S /5      -
  $ r   )r  r  countr   s    r   nr_of_itemsTbuffer.nr_of_items  s"    ||dkk//777r   c                 ^    [        U R                  5      S-   [        U R                  5      -   $ )N )r  r  r  r   s    r   r   Tbuffer.__repr__  s#    4;;#%DHH55r   )r  r  r  r  )r   r   )r   r   r   r   r9  ra   r  r  r  r   r   r   r   r   r  r    s     
386r   r  c                      \ rS rSrSr\S   \S   \S   4S jrS rS"S	 jrS
 r	S"S jr
S rS rS"S jrS rS rS rS#S jrS"S jrS rS rS rS rS rS rS$S jrS rS"S jrS#S jrS%S jrS"S jrS&S  jr\r \r!\r"\
r#\r$S!r%g)'r	   i  Tr   r   r   c                    [         R                  X5        [        SS5      [        SS5      [        SS5      [        SS5      [        SS5      [        SS5      [        SU R                  5       5      S	.U l        S
S0U l        X l        X@l        [        S   U l	        / U l
        U R                  5         [        R                  S:X  a;  UR                  5       nUR                  SSSSS5        UR                  SSSSS5        g g )Nrv  )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  r2  )arrowr   r5   squaretriangler   r  nopicr   r   darwinwm
attributesr   z-topmost10)r  r9  r   r  _shapes_bgpics_mode_delayvaluer   
_colormode_keysr6   sysplatformr:  call)r   r  r   r   r   
rootwindows         r   r9  TurtleScreen.__init__  s   !!$+ #9.GH"9 /& '
 #9 /H I #9 /) *"9 /+ ,"9.KL"7D,<,<,>?%*  "~
 {+


<<8# **,JOOD,ZEOOD,ZE $r   c                    [         S   U l        [         S   U l        U R                  S5        U R	                  S5      U l        SU l        SU l        SU l        / U l	        U R                  S5        S	 H  nU R                  S U5        M     U R                  S 5        U R                  S S   H'  nU R                  S U5        U R                  S U5        M)     S [        l        g )
Nr   r   allr   r  r   r   r"  )r   r#     )r   r  r  r  r4  _bgpic
_bgpicname_tracing_updatecounter_turtlesr   rS   r    r  r   r   _pen)r   btnr   s      r   r6   TurtleScreen.clear  s      ={+U''+!WCLLs# ::a=CJJtS!OOD#& ! r   Nc                 R   Uc  U R                   $ UR                  5       nUS;  a  [        SU-  5      eXl         US;   aX  U R                  U R                  * S-  U R
                  * S-  U R                  S-  U R
                  S-  5        S=U l        U l        U R                  5         g )Nr   logoworldzNo turtle-graphics-mode %s)r   r  r#  r   )	r  ry  rs  rN  r   r   r  r  ra   r   r   s     r   r   TurtleScreen.mode  s    , <::zz|44%&BT&IJJ
''!!4>>/1"4t6F6I'+~~q'8$//1:LN(++DK$+

r   c                 h   U R                  5       S:w  a  U R                  S5        [        X1-
  5      n[        XB-
  5      nU R                  5       u  pxU R                  US-
  US-
  5        U R                  U R
                  pU R                  U-  U l        U R                  U-  U l        XR                  -  nU* U R
                  -  nU R                  U-   nU R                  U-   nU R                  XX5        U R                  U R                  U	-  U R
                  U
-  5        U R                  5         g )Nr     )r   r   r\  r&   r  r  r   r   rN  rV  r-   )r   llxllyurxuryxspanyspanwxwy	oldxscale	oldyscalerJ  rK  rL  rM  s                  r   r(    TurtleScreen.setworldcoordinates#  s    , 99;'!IIgci ci ""$2r"u%#{{DKK9nnu,oo-[[ tdkk!~~$%d$5dkk)+T[[-BCr   c                     UcK  UR                  5       R                  S5      (       a  [        SU R                  U5      5      nO,[	        S5      e[        U[        5      (       a  [        SU5      nX R                  U'   g )Nrw  r2  z;Bad arguments for register_shape.
Use  help(register_shape)rv  )ry  rz  r   r  rs  r   r   r  )r   namerk   s      r   r$   TurtleScreen.register_shapeJ  so    . =zz|$$V,,gt{{4'89) +H J Ju%%)U+E"Tr   c                 ,   [        U5      S:X  a  US   n[        U[        5      (       a5  U R                  U5      (       d  US:X  a  U$ [	        S[        U5      -  5      e Uu  p#nU R                  S:X  a$  X#U4 Vs/ s H  n[        SU-  5      PM     snu  p#nSUs=::  a  S::  a"  O  OSUs=::  a  S::  a  O  OSUs=::  a  S::  d  O  [	        S	[        U5      -  5      eS
X#U4-  $ ! [
        [        4 a    [	        S[        U5      -  5      ef = fs  snf )Nr   r   r   zbad color string: %sbad color arguments: %sr        o@   bad color sequence: %s#%02x%02x%02x)	rD  r   r  r  rs  	TypeErrorr   r  round)r   r:   r   gbr   s         r   	_colorstrTurtleScreen._colorstrm  s    u:?!HEeS!!""5))Ub[)*@3u:*MNN	NGA! ??c!01ay9y!uU1W~y9GA!a3Q!]s]a3%&>U&KLL!** :& 	N%&?#e*&LMM	N :s    C& ;D&(Dc           	      X  ^  UR                  S5      (       d  U$ [        U5      S:X  a"  S Vs/ s H  n[        XUS-    S5      PM     nnOB[        U5      S:X  a%  USS   Vs/ s H  nS[        X   S5      -  PM     nnO[        SU-  5      e[	        U 4S	 jU 5       5      $ s  snf s  snf )
Nr   r  )r   r  r  r#  r  r  r   zbad colorstring: %sc              3   F   >#    U  H  oTR                   -  S -  v   M     g7f)r  N)r  ).0r   r   s     r   	<genexpr>&TurtleScreen._color.<locals>.<genexpr>  s     9b(,bs   !)r   rD  r   rs  r   )r   cstrrE  r  r  s   `    r   _colorTurtleScreen._color  s    s##Kt9>09:	1#dQqSk2&	B:BY!^/3ABx8x!"S"%%xB8B%&;d&BCC9b999 ;8s   B"!B'c                 ~    Uc  U R                   $ US:X  a  [        U5      U l         g US:X  a  [        U5      U l         g g )Nr   r  )r  r   r   )r   cmodes     r   r   TurtleScreen.colormode  s<     =??"C<#ElDOc\!%jDO r   c                     U R                    H.  nUR                  U R                  5        UR                  5         M0     g r   )r  _setmoder  ra   )r   r   s     r   ra   TurtleScreen.reset  s+     mmFOODJJ'LLN $r   c                     U R                   $ r   )r  r   s    r   r,   TurtleScreen.turtles  s     }}r   c                     U(       a  U R                  U5      nOS nU R                  U5      nUb  U R                  U5      nU$ r   )r  r  r  r   rd  r:   s      r   r   TurtleScreen.bgcolor  sA     NN4(EEe$KK&Er   c                     Uc  U R                   $ [        U5      U l         SU l        Ub  [        U5      U l        U R                   (       a  U R	                  5         g g r*  )r  r   r  r  r-   )r   nr   s      r   r+   TurtleScreen.tracer  sM    & 9== A"5zD==KKM r   c                 B    Uc  U R                   $ [        U5      U l         g r   )r  r   r  s     r   r   TurtleScreen.delay  s!     =###u:r   c                     [         R                  (       d  S[         l        [        eU R                  S:  a5  U =R                  S-  sl        U =R                  U R                  -  sl        g g )NTr   r   )r	   _RUNNINGr   r  r  r   s    r   _incrementudcTurtleScreen._incrementudc  sP    $$$(L!==11$4==0 r   c                     U R                   nSU l         U R                  5        H#  nUR                  5         UR                  5         M%     Xl         U R	                  5         g NT)r  r,   _update_data_drawturtler  )r   tracingr-  s      r   r-   TurtleScreen.update  sG     --ANNMMO    r   c                 (    U R                  5       S   $ r*  r\  r   s    r   r/   TurtleScreen.window_width         "1%%r   c                 (    U R                  5       S   $ Nr   r  r   s    r   r.   TurtleScreen.window_height  r!  r   c                     U R                   $ r   )r  r   s    r   r   TurtleScreen.getcanvas%  s     wwr   c                 H    [        U R                  R                  5       5      $ r   )sortedr  r
  r   s    r   r   TurtleScreen.getshapes1  s     dll'')**r   c                 (    U R                  XU5        g r   )r  r   r  r  r  s       r   rS   TurtleScreen.onclick<  s     	Cc*r   c                     Uc+  X R                   ;   a  U R                   R                  U5        O*X R                   ;  a  U R                   R                  U5        U R                  X5        g r   )r  remover  r  r   r  r   s      r   r   TurtleScreen.onkeyM  sP    . ;jj 

!!#&

"JJc"3$r   c                     Uc+  X R                   ;   a  U R                   R                  U5        O-Ub*  X R                   ;  a  U R                   R                  U5        U R                  X5        g r   )r  r.  r  r$  r/  s      r   r    TurtleScreen.onkeypressk  sT    2 ;jj 

!!#&_JJ!6JJc""r   c                 $    U R                  5         g r   )r'  )r   xdummyydummys      r   r   TurtleScreen.listen  s     	r   c                 &    U R                  X5        g r   )r.  r,  s      r   r#   TurtleScreen.ontimer  s    & 	cr   c                     Uc  U R                   $ XR                  ;  a  U R                  U5      U R                  U'   U R                  U R                  U R                  U   5        Xl         g r   )r  r  r  r=  r  )r   picnames     r   r   TurtleScreen.bgpic  sT    " ???",,&$(KK$8DLL!t{{DLL$9:!r   c                 &    U R                  XU5      $ r   )rY  rU  s       r   r&   TurtleScreen.screensize  s    " ||I266r   )r  r  r  r  r  r  r  r  r  r  r  r  r  r   NNro  r   rw  )&r   r   r   r   r  r   r9  r6   r   r(   r$   r  r  r   ra   r,   r   r+   r   r  r-   r/   r.   r   r   rS   r   r    r   r#   r   r&   r"   r%   r   r   r!   r   r   r   r   r	   r	     s     H $V,DM&FP< D%N!#F+6	:)*
.8&1	&&
	++"%<#@
*"07& MKKHLr   r	   c                   j   \ rS rSr\" SS5      \" SS5      \" SS5      S.rSrSrSr\4S jr	S	 r
S+S jrS rS,S jrS rS rS rS rS-SS.S\SS
4S jjjrS rS rS rS rS rS rS rS+S jrS rS  rS! rS+S" jrS+S# jr S$ r!S% r"S-S& jr#S.S' jr$S-S( jr%S+S) jr&\r'\r(\r)\r*\r+\r,\r-\r.\"r/S*r0g
)/
TNavigatori  r           )r   r  r  r   r   r   c                     U R                   U l        U R                  U l        Xl        S U l        U R                  5         S U l        U R                  U5        [        R                  U 5        g r   )
DEFAULT_ANGLEOFFSET_angleOffsetDEFAULT_ANGLEORIENT_angleOrientr  
undobufferr;   r  rA  ra   r  s     r   r9  TNavigator.__init__  sT     44 44

dr   c                 j    [        SS5      U l        [        R                  U R                     U l        g )NrB  )r   	_positionrA  START_ORIENTATIONr  _orientr   s    r   ra   TNavigator.reset  s'    
 sC"44TZZ@r   Nc                     Uc  U R                   $ US;  a  g Xl         US;   a  SU l        SU l        g U R                  S-  U l        SU l        g )Nr  )r   r  r   r         @r  )r  rE  rG  _fullcircler  s     r   r  TNavigator._setmode  sX     <::44
(( !D !D $ 0 0 3D "Dr   c                 h    Xl         SU-  U l        U R                  S:X  a  SU l        g US-  U l        g )Nih  r   r   rP  )rQ  _degreesPerAUr  rE  r   
fullcircles     r   _setDegreesPerAUTNavigator._setDegreesPerAU
  s4    % ^::# !D *2Dr   c                 &    U R                  U5        g r   )rW  rU  s     r   r;   TNavigator.degrees  s    , 	j)r   c                 B    U R                  [        R                  5        g r   )rW  r   taur   s    r   r_   TNavigator.radians+  s     	dhh'r   c                 ^    U R                   U R                  U-  -   nU R                  U5        g r   )rK  rM  _goto)r   r<   endes      r   _goTNavigator._go9  s%    ~~x 77

4r   c                 `    XR                   -  nU R                  R                  U5      U l        g r   )rT  rM  r   r   r   s     r   _rotateTNavigator._rotate>  s&    ###||**51r   c                     Xl         g r   rK  )r   ends     r   r_  TNavigator._gotoC  s    r   Ffill_gaprl  returnc                t    Ub  UOU R                   S   nUb  UOU R                   S   n[        XE5      U l         g r   )rK  r   )r   r   r   rl  new_xnew_ys         r   rs   TNavigator.teleportG  s8     ]q(9]q(9u,r   c                 &    U R                  U5        g r   ra  r   r<   s     r   rD   TNavigator.forwardN  s    * 	r   c                 (    U R                  U* 5        g r   rs  rt  s     r   r0   TNavigator.backe  s    $ 	(r   c                 (    U R                  U* 5        g r   re  rd  s     r   r`   TNavigator.righty  s    & 	eVr   c                 &    U R                  U5        g r   ry  rd  s     r   rQ   TNavigator.left  s    & 	Ur   c                     U R                   $ r   rh  r   s    r   r\   TNavigator.pos  s     ~~r   c                      U R                   S   $ r*  rh  r   s    r   r}   TNavigator.xcor       ~~a  r   c                      U R                   S   $ r#  rh  r   s    r   r~   TNavigator.ycor  r  r   c                 n    Uc  U R                  [        U6 5        g U R                  [        X5      5        g r   )r_  r   )r   r   r   s      r   rJ   TNavigator.goto  s)    < 9JJuay!JJuQ{#r   c                 J    U R                  SS5        U R                  S5        g r*  )rJ   re   r   s    r   rM   TNavigator.home  s     			!Qr   c                 R    U R                  [        XR                  S   5      5        g r#  r_  r   rK  )r   r   s     r   ri   TNavigator.setx  s      	

5NN1-./r   c                 T    U R                  [        U R                  S   U5      5        g r*  r  )r   r   s     r   rj   TNavigator.sety  s       	

5*A./r   c                     Ub  [        X5      n[        U[         5      (       a  UnO?[        U[        5      (       a	  [        U6 nO![        U[        5      (       a  UR                  n[        WU R                  -
  5      $ r   )r   r   r   rA  rK  abs)r   r   r   r\   s       r   r<   TNavigator.distance"  sd    , =+CaC5!!)C:&&++C3'((r   c                    Ub  [        X5      n[        U[         5      (       a  UnO?[        U[        5      (       a	  [        U6 nO![        U[        5      (       a  UR                  nWU R                  -
  u  p[        [        R                  " [        R                  " X!5      5      S5      S-  nX@R                  -  nU R                  U R                  U-  -   U R                  -  $ Nr        v@)r   r   r   rA  rK  r  r   r;   atan2rT  rE  rG  rQ  )r   r   r   r\   results        r   rv   TNavigator.towardsB  s    , =+CaC5!!)C:&&++CT^^#t||DJJq$45r:UB$$$!!D$5$5f$<<@P@PPPr   c                     U R                   u  p[        [        R                  " [        R                  " X!5      5      S5      S-  nX0R
                  -  nU R                  U R                  U-  -   U R                  -  $ r  )	rM  r  r   r;   r  rT  rE  rG  rQ  )r   r   r   r  s       r   rK   TNavigator.headinge  sg     ||t||DJJq$45r:UB$$$!!D$5$5f$<<@P@PPPr   c                     XR                  5       -
  U R                  -  nU R                  nX#S-  -   U-  US-  -
  nU R                  U5        g )N       @)rK   rG  rQ  re  )r   to_angler   fulls       r   re   TNavigator.setheadingt  sM    . LLN*D,=,==Bw$tBw.Ur   c           	         U R                   (       a-  U R                   R                  S/5        SU R                   l        U R                  5       nUc  U R                  nUcB  [        U5      U R                  -  nS[        [        S[        U5      S-  -   S5      U-  5      -   nSU-  U-  nSU-  nS	U-  [        R                  " [        R                  " U5      U R                  -  5      -  nUS
:  a  U* U* U* pvnU R                  5       n	U R                  5       n
US
:X  a  U R                  S
S
5        OU R                  S
5        U R                  U5        [        U5       HG  nU R                  U5        U R!                  U5        U R                  S
5        U R                  U5        MI     U R                  U* 5        US
:X  a  U R                  X5        U R                  U5        U R                   (       a  SU R                   l        g g )NseqTr      g      @g     M@r   r   r  r   F)rH  r  r  rp   rQ  r  r   minr   r   r_   rT  _tracerr  re  rC  ra  )r   radiusextentstepsrp   fracr  w2ltrdlrE  s               r   r5   TNavigator.circle  s   < ??OO  %)'+DOO$

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

5??',DOO$ r   c                     g r   r   )r   r   s     r   rp   TNavigator.speed      r   c                     g r   r   )r   ar  s      r   r  TNavigator._tracer  r  r   c                     g r   r   )r   r  s     r   r  TNavigator._delay  r  r   )rE  rG  rT  rQ  r  rM  rK  rH  r   )r  r>  r?  )1r   r   r   r   r   rL  DEFAULT_MODErD  rF  r9  ra   r  rW  r;   r_   ra  re  r_  boolrs   rD   r0   r`   rQ   r\   r}   r~   rJ   rM   ri   rj   r<   rv   rK   re   r5   rp   r  r  rA   r4   r1   rc   rR   r]   rf   rg   rd   r   r   r   r   rA  rA    s   
 #sO#sO#sO' L( A#.*0(
2
-5 -D -T -.(**!!!$F0$0$)@!QFQ8=-B>>> 
B	BH	B	BHFKDr   rA  c                       \ rS rSr\S   4S jr\S   \S   4S jrSS jrSS	 jrS
 r	S r
S rSS jrS rS rS rS SS.S\SS4S jjjrS rS rS rSS jrS!S jrS"S jrS rS r\r\	r\	r\
r\
r\r\r Sr!g)#TPeni  rb   c                 H    Xl         S U l        [        R                  U 5        g r   )_resizemoderH  r  _reset)r   rb   s     r   r9  TPen.__init__  s    %Dr   rX   rB   c                     SU l         SU l        Xl        X l        SU l        SU l        SU l        SU l        SU l        SU l	        SU l
        g )Nr   Tr  )r   r   rB  )r   rB  rB  r   )_pensize_shown	_pencolor
_fillcolor_drawing_speed_stretchfactor_shearfactor_tilt_shapetrafo_outlinewidth)r   rX   rB   s      r   r  TPen._reset  sO    !#&
+r   Nc                 n    Uc  U R                   $ UR                  5       nUS;   a  U R                  US9  g g )N)autouserr   rb   )r  ry  rW   )r   rmodes     r   rb   TPen.resizemode  s<    , =###00HHH& 1r   c                 @    Uc  U R                   $ U R                  US9  g )N)rZ   )r  rW   )r   r{   s     r   rZ   TPen.pensize  s!    $ === r   c                 F    U R                   (       d  g U R                  SS9  g NFrY   r  rW   r   s    r   r[   
TPen.penup-  s     }}r   c                 F    U R                   (       a  g U R                  SS9  g )NTr  r  r   s    r   rY   TPen.pendown;  s     ==r   c                     U R                   $ r   )r  r   s    r   rO   TPen.isdownI  s     }}r   c                     SSSSSS.nUc  U R                   $ X;   a  X!   nO'SUs=:  a  S:  a  O  O[        [        U5      5      nOSnU R                  US	9  g )
Nr   r   r  r  r   )fastestfastnormalslowslowestr   g      %@)rp   )r  r   r  rW   )r   rp   speedss      r   rp   
TPen.speedX  s]    6 b1Q!M=;;?ME54e%EEur   c                 8   U(       a^  [        U5      nUS:X  a  US   =p4OUS:X  a  Uu  p4O	US:X  a  U=p4U R                  W5      nU R                  W5      nU R                  X4S9  g U R                  U R                  5      U R                  U R
                  5      4$ )Nr   r   r#  r  )rX   rB   )rD  r  rW   r  r  r  )r   rd  r  pcolorfcolors        r   r:   
TPen.color~  s    @ D	AAv"&q')a!%a"&&^^F+F^^F+FHHfH7;;t~~.DOO0LLLr   c                     U(       a1  U R                  U5      nX R                  :X  a  g U R                  US9  g U R                  U R                  5      $ )N)rX   )r  r  rW   r  r  s      r   rX   TPen.pencolor  sC    : NN4(E&HHeH$;;t~~..r   c                     U(       a1  U R                  U5      nX R                  :X  a  g U R                  US9  g U R                  U R                  5      $ )N)rB   )r  r  rW   r  r  s      r   rB   TPen.fillcolor  sC    8 NN4(E'HHuH%;;t//r   Frk  rl  rm  c                n    U R                  5       nU(       a  U R                  SS9  U R                  US9  g r  )rO   rW   )r   r   r   rl  rY   s        r   rs   TPen.teleport  s.     ++-HHUH#!r   c                 "    U R                  SS9  g )NTshownrW   r   s    r   ro   TPen.showturtle  s     	tr   c                 "    U R                  SS9  g )NFr  r  r   s    r   rL   TPen.hideturtle	  s     	ur   c                     U R                   $ r   )r  r   s    r   rP   TPen.isvisible	  s     {{r   c                 X   U R                   U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  S.nU(       d	  U(       d  U$ [        U[        5      (       a  UnO0 nUR                  U5        0 nU H	  nX6   XV'   M     U R                  (       a  U R                  R                  SU45        SnSU;   a  U R                  US   :w  a  SnSU;   aE  [        US   [         5      (       a  U R#                  US   45      US'   U R                  US   :w  a  SnSU;   a  U R                  US   :w  a  SnU(       a  U R%                  5         SU;   a
  US   U l        SU;   a
  US   U l        SU;   a
  US   U l        SU;   a:  [        US   [         5      (       a  U R#                  US   45      US'   US   U l        S	U;   a
  US	   U l        S
U;   a
  US
   U l        SU;   a)  US   n[        U[&        [(        45      (       a  X4nXl        SU;   a
  US   U l        SU;   a
  US   U l	        SU;   a
  US   U l         SU;   a
  US   U l
        SU;   d  SU;   d  SU;   ay  U R                  u  pU R                  n[*        R,                  " U R                  5      [*        R.                  " U R                  5      pX-  XU-  U-   -  U	* U-  XX-  -
  -  4U l        U R3                  5         g )N)r  rY   rX   rB   rZ   rp   rb   stretchfactorrn   r  rt   rW   FrY   TrX   rZ   rB   rp   rb   r  rn   r  r  rt   )r  r  r  r  r  r  r  r  r  r  r  r   dictr-   rH  r  r   r  _newLiner   r   r   r   r   r  r  )r   rW   pendict_pdp_p_bufr   newLinesfscxscyshfsacas                 r   rW   TPen.pen'	  s   ^ #'++"&--"&.."&//"&--"&++"&"2"2"&"5"5"&"3"3"&"4"4"&** wJc4  AA	C(FK  ??OO  %1>}}),?!J-// $*/? @*~~:.>}}),MMO>iLDM?z]DN>iLDM!!K.%00!%;0A!B+nDOa<G*DK1 Da?#B"sEl++X"$A !- 0D>!"9Da<G*DKQ;6DJa6Q;-12D**HC##CXXdjj)488DJJ+?!$"frk):!$R36k): <Dr   c                     g r   r   r   usePoss     r   r  TPen._newLine	  r  r   c                     g r   r   )r   r  forceds      r   r  TPen._update	  r  r   c                     g r   r   rc  s     r   r  TPen._color	  r  r   c                     g r   r   rc  s     r   r  TPen._colorstr	  r  r   )r  r  r  r  r  r  r  r  r  r  r  r  rH  r   r>  T)TF)"r   r   r   r   r   r9  r  rb   rZ   r[   rY   rO   rp   r:   rX   rB   r  rs   ro   rL   rP   rW   r  r  r  r  r{   rz   r^   rV   r>   rq   rN   r   r   r   r   r  r    s     #'|"4 
 #:.#K0'8 . $L,M\#/J"0H"5 "D "T " 
{~>>>> E	B	B	BD	B	Br   r  c                        \ rS rSrS rS rSrg)_TurtleImagei	  c                 @    Xl         S U l        U R                  U5        g r   )r   r@  	_setshape)r   r   
shapeIndexs      r   r9  _TurtleImage.__init__	  s    
z"r   c                 T   U R                   nXl        U R                  Ss=:X  a  UR                  U   R                  :X  a   g   U R                  Ss=:X  a  UR                  U   R                  :X  a   g   U R                  S;   a  UR	                  U R
                  5        O4U R                  S:X  a$  U R
                   H  nUR	                  U5        M     UR                  U   R                  U l        U R                  S:X  a  UR                  5       U l        g U R                  S:X  a.  UR                  UR                  S   R                  5      U l        g U R                  S:X  a=  UR                  U   R                   Vs/ s H  o2R                  5       PM     snU l        g g s  snf )Nrv  r2  )r2  rv  rx  r  )	r   r  r@  r  r  _itemr  r4  r{  )r   r  r   r  s       r   r  _TurtleImage._setshape	  sR   $::FfnnZ&@&F&FF G::DFNN:$>$D$DD E::--NN4::&ZZ:%

t$ #^^J/55
::"++-DJZZ7",,V^^G-D-J-JKDJZZ:%*0..*D*J*JL*J 48,,.*JLDJ &Ls   F%)r  r@  r   r  N)r   r   r   r   r9  r  r   r   r   r   r  r  	  s    #
Lr   r  c                      \ rS rSr/ rS\S   \S   \S   4S jrS rS rS	 r	S
 r
S rS rS rS<S jrS rS rS rS<SS.S\SS4S jjjrS rS=S jrS>S jrS=S jrS=S jrS rS?S jrS rS rS@S  jrS! rS" rS# r S$ r!S=S% jr"S& r#S' r$S( r%SAS) jr&S* r'S+ r(S, r)S=S- jr*S. r+SBS/ jr,S0 r-S1 r.S2 r/S3 r0S4 r1\1r2S=S5 jr3SCS6 jr4SCS7 jr5SCS8 jr6S9 r7S: r8\r9S;r:g)Dr   i	  Nrk   r   r   c                 $   [        U[        5      (       a  Xl        O[        U[        5      (       a:  U[        R
                  ;  a  [        R
                  R                  U5        Xl        O[        U[        [        45      (       ai  [        R
                   H  nUR                  U:X  d  M  XPl          OJ   [        U5      U l        [        R
                  R                  U R                  5        O[        SU-  5      eU R                  n[        R                  XR                  5       5        [        R                  U 5        UR                  R                  U 5        UR!                  5       U l        [%        XR5      U l        S U l        SU l        S =U l        U l        X@l        SU l        UR!                  5       U l        U R6                  /U l        U R4                  /U l        / U l        X0l        [A        U5      U l!        U RE                  5         g )Nzbad canvas argument %sF)#r   _Screenr   r	   r   screensr  r   r<  r  rs  rA  r9  r   r  r  r  drawingLineItemr  r   _poly_creatingPoly	_fillitem	_fillpathr  _hidden_from_screencurrentLineItemrK  currentLiner  
stampItems_undobuffersizer  rH  r  )r   canvasrk   r   r   r   s         r   r9  RawTurtle.__init__	  s    fg&& K--Y...!!((0 K 899#++99&"(K ,
 +62!!((5%&>&GHHD++-0dt$%113"61
"*..#( %113 NN+**+
-!.1r   c                     [         R                  U 5        [        R                  U 5        U R	                  5         U R                  5         U R                  5         g r   )rA  ra   r  r  _clearr  r  r   s    r   ra   RawTurtle.reset
  s<    & 	Dr   c                 F    Ub  US::  a  S U l         g [        U5      U l         g r*  )rH  r  )r   sizes     r   rh   RawTurtle.setundobuffer
  s!     <419"DO%dmDOr   c                 R    U R                   c  gU R                   R                  5       $ r*  )rH  r  r   s    r   ry   RawTurtle.undobufferentries2
  s$     ??"**,,r   c                    S =U l         U l        U R                   H  nU R                  R	                  U5        M      U R                  R                  5       U l        / U l        U R                  (       a%  U R                  R                  U R                  5        U R                  /U l        U R                  5         U R                  U R                  5        g r   )r   r!  r  r   r  r  r#  r$  r  r  rK  r8   rh   r&  r  s     r   r*  RawTurtle._clear?
  s    *..JJDKK% #{{668==##DNN3**+
4//0r   c                 D    U R                  5         U R                  5         g r   )r*  r  r   s    r   r6   RawTurtle.clearM
  s     	r   c                 .   U R                   R                  5         U R                   R                  S:w  a  g [        U R                  5      S:  aG  U R                   R                  U R                  U R                  U R                  U R                  5        g g r   )	r   r  r  rD  r$  r  r#  r  r  r   s    r   r  RawTurtle._update_data\
  so    !!#;;%%*t "KK!!$"6"68H8H"&..$--A #r   c                    U R                   nUR                  S:X  a  g UR                  S:X  aL  U R                  5         U R                  5         UR	                  5         UR                  UR                  5        g U R                  5         UR                  S:X  a8  UR                  5        H  nUR                  5         M     UR	                  5         g g r   )	r   r  r  r  r  r  r  r  r,   )r   r   r-  s      r   r  RawTurtle._updated
  s     ??a__!NNMM&,,-$$))AMMO *  *r   c                 8    U R                   R                  X5      $ r   )r   r+   )r   flagr   s      r   r  RawTurtle._tracerv
  s    & {{!!$..r   c                 8    U R                   R                  U5      $ r   )r   r  rc  s     r   r  RawTurtle._color
  s    {{!!$''r   c                 8    U R                   R                  U5      $ r   )r   r  rc  s     r   r  RawTurtle._colorstr
  s    {{$$T**r   c                    [        U[        5      (       a  U$  Uu  p#nU R
                  R                  S:X  a$  X#U4 Vs/ s H  n[        SU-  5      PM     snu  p#nSUs=::  a  S::  a"  O  OSUs=::  a  S::  a  O  OSUs=::  a  S::  d  O  [	        S[        U5      -  5      eSX#U4-  $ ! [        [        4 a    [	        S[        U5      -  5      ef = fs  snf )Nr  r   r  r   r  r  r  )r   r  r  r   rs  r   r  r  )r   rd  r   r  r  r   s         r   _ccRawTurtle._cc
  s     dC  K	MGA! ;;!!S(01ay9y!uU1W~y9GA!a3Q!]s]a3%&>T&JKK!** :& 	M%&?#d)&KLL	M :s   B) C)(CFrk  rl  rm  c                z   U R                  5       nU R                  5       nU(       a  U R                  SS9  U(       a  U(       d  U R                  5         Ub  UOU R                  S   nUb  UOU R                  S   n[        Xg5      U l        U R                  US9  U(       a  U(       d  U R                  5         g g g )NFr  r   r   )rO   rC   rW   r?   rK  r   r2   )r   r   r   rl  rY   was_fillingro  rp  s           r   rs   RawTurtle.teleport
  s    F ++-llnHHUH#xMMO]q(9]q(9u,!xOO  (;r   c                 v   U R                   nU R                  U R                  5        U R                  nS U l         S U l        [	        U 5      nXl         X l        Xl         [        XR                  R                  5      Ul        UR                  R                  U5        UR                  U R                  R                     R                  nUS:X  a   UR                  5       UR                  l        OUS:X  a8  UR                  UR                  S   R                  5      UR                  l        O`US:X  aZ  UR                  U R                  R                     R                   Vs/ s H  oQR                  5       PM     snUR                  l        UR                  5       Ul        UR#                  5         U$ s  snf )Nrv  r2  r  rx  )r   r  r  r   r   r  r  r  r  r  r@  r  r  r4  r{  r  r#  r  )r   r   r   qttyper  s         r   r9   RawTurtle.clone
  sM    dmm$TN(>(>?q!t{{556<<I#//1AHHNg#001H1N1NOAHHNj $nnT[[-C-CDJJLJ 8<002JLAHHN"..0				Ls   $F6c                     Uc  U R                   R                  $ XR                  R                  5       ;  a  [	        SU-  5      eU R                   R                  U5        U R                  5         g )NzThere is no shape named %s)r   r  r   r   rs  r  r  )r   r  s     r   rk   RawTurtle.shape
  sX    ( <;;))){{,,..%&BT&IJJd#r   c                 (   Xs=L a	  Us=L a  c  O  OU R                   u  pXU R                  4$ US:X  d  US:X  a  [        S5      eUb  Uc  X4nO%X4nO!Ub  U R                   S   U4nOU R                   nUc  U R                  nU R                  SXCS9  g )Nr   z(stretch_wid/stretch_len must not be zeror  )rb   r  r  )r  r  rs  rW   )r   stretch_widstretch_lenr  r  s        r   rl   RawTurtle.shapesize  s    * 888'+':':$KT-?-???!{a/%&PQQ"" + 8 + 8$ //2K?M //M?((GF, 	 	?r   c                 B    Uc  U R                   $ U R                  SUS9  g )Nr  )rb   rn   )r  rW   )r   shears     r   rn   RawTurtle.shearfactor;  s%    & =$$$F6r   c                 D   UcI  [         R                  " U R                  5      * U R                  -  nX R                  -  U R
                  -  $ U* U R                  -  U R                  -  n[         R                  " U5      [         R                  -  nU R                  SUS9  g )Nr  )rb   rt   )	r   r;   r  rG  rT  rQ  r_   r\  rW   )r   r   rt   s      r   ru   RawTurtle.tiltangleR  s    8 =LL,,t/@/@@D---1A1AAA6D...1B1BBD<<%0DHHTH2r   c                 F    U R                  XR                  5       -   5        g r   )ru   rd  s     r   rt   RawTurtle.tiltv  s    " 	u~~//0r   c                    Xs=L a  Us=L a  Us=L a  c   U R                   $   U R                   u  pVpxUb  UnUb  UnUb  UnUb  UnX-  X#-  -
  S:X  a  [        S5      eXVXx4U l         [        R                  " U* U5      [        R                  -  n	[        R
                  " U	5      [        R                  " U	5      pX-  X-  -
  X-  X-  -
  X-  X-  -   X-  X-  -   4u  ppX4U l        X-  U l        Xl	        U R                  SS9  g )Nr   z0Bad shape transform matrix: must not be singularr  r  )r  rs  r   r  r\  r   r   r  r  r  rW   )r   t11t12t21t22m11m12m21m22alfar  r  a11a12a21a22s                   r   rm   RawTurtle.shapetransform  s   ( +++### ,!--#?#C?#C?#C?#C9sy A%%&XYYc/zz3$$txx/$$B frvorv frvorv@#!hG
F#r   c           	      ^   U R                   nU R                  u  p4U R                  u  pV[        XVUR                  -  UR
                  -  5      nS[        U5      -  U-  u  pVU VV	s/ s H8  u  pX6U-  XY-  -   UR
                  -  -   XE* U-  Xi-  -   UR                  -  -   4PM:     sn	n$ s  sn	nf )Nr   )r   rK  rM  r   r  r  r  )
r   r  r   p0p1e0e1er   r   s
             r   
_polytrafoRawTurtle._polytrafo  s     "6==(6==89A,!#IMOIMv T"$Y--r3q5:v}}2L/LMIMO 	O Os   &?B)c                     U R                   R                  U R                  R                     nUR                  S:X  a)  U R                  UR                  UR                  S:H  5      $ g )Nrv  rx  )r   r  r   r  r@  _getshapepolyr{  )r   rk   s     r   rH   RawTurtle.get_shapepoly  sS     ##DKK$:$:;;;)#%%ekk5;;*3LMM $r   c                   ^^^^ U R                   S:X  d  U(       a  U R                  u  mmmmOGU R                   S:X  a%  [        SU R                  S-  5      nUSSU4u  mmmmOU R                   S:X  a  U$ [	        UUUU4S jU 5       5      $ )Nr  r  r   g      @r   r   c              3   T   >#    U  H  u  pTU-  TU-  -   TU-  TU-  -   4v   M     g 7fr   r   )r  r   r   rX  rY  rZ  r[  s      r   r  *RawTurtle._getshapepoly.<locals>.<genexpr>  s0     J'c!ec!emSUSU]3's   %()r  r  maxr  r   )r   rv  rx  r  rX  rY  rZ  r[  s       @@@@r   ro  RawTurtle._getshapepoly  s     v%!%!1!1Cc3'At}}S()A!"Aq!Cc3+NJ'JJJr   c           
         U R                   nUR                  U R                  R                     nUR                  nU R                  R
                  nU R                  (       Ga`  UR                  S:X  GaO  UR                  S:  Ga>  SU l	        UR                  nUS:X  a  U R                  S:X  a  SnO)U R                  S:X  a  U R                  nOU R                  nU R                  U R                  U5      5      nU R                   U R"                  pUR%                  XBXxUSS9  g US	:X  a  UR'                  X@R(                  U5        g US
:X  au  [+        XE5       He  u  n	u  pnU R                  U R                  U
S5      5      n
UR%                  XU R-                  U5      U R-                  U5      U R                  SS9  Mg     g g U R                  (       a  g US:X  a  UR%                  USSS5        O]US	:X  a4  UR'                  X@R(                  UR                  S   R                  5        O#US
:X  a  U H  n	UR%                  U	SSS5        M     SU l	        g )Nr   Frv  r   r   r  Tr  r  r{   r  r2  rx  r  r  r  r   r  )r   r  r   r  r@  r  r  r  r  r"  r{  r  r  r  rl  ro  r  r  r  r9  rK  ziprA  )r   r   rk   rH  titemtshaper  fcocr  r  s              r   r  RawTurtle._drawturtle  s
    t{{556!!;;;600A5&//A:M',D$[[F	!##z1q1%%/T]]++a(:(:6(BC$..B  B<=4 ! I'!!!%@*$,/,>(D.4R??4+=+=dD+IJD$$Tdhhrl-1XXb\ASASY] % _ -? % ''	!  (@"bI'!!!%*0..*A*G*GI*$!D$$T+CRL "'+D$r   c           
         U R                   nUR                  U R                  R                     nUR                  nUR
                  nUS:X  a  UR                  5       nU R                  S:X  a  SnO)U R                  S:X  a  U R                  nOU R                  nU R                  U R                  U5      5      nU R                  U R                  pUR                  XRXxUSS9  OUS:X  a.  UR                  S5      nUR!                  XPR"                  U5        OUS	:X  a  / nU H$  n	UR                  5       n
UR%                  U
5        M&     ['        U5      n[)        XT5       He  u  n
u  pnU R                  U R                  US5      5      nUR                  XU R+                  U5      U R+                  U5      U R                  SS9  Mg     U R,                  R%                  W5        U R.                  R1                  S
U45        U$ )Nrv  r   r   r  Trw  r2  r   rx  rr   )r   r  r   r  r@  r{  r  r  r  r  rl  ro  r  r  r  r4  r9  rK  r  r   ry  rA  r%  rH  r  )r   r   rk   rH  r{  stitemr  r|  r}  elementr  r  s               r   rr   RawTurtle.stamp  s    t{{556I'')F:-1q!!V+Q''!OOD$6$6v$>?E__dnnV89t  Eg((,Ffnnf=j F!))+d# " 6]F(+F(;$ntt'9'9$'EF  $((2,)-"T=O=OUY ! [ )< 	v&gv./r   c                 |   XR                   ;   ap  [        U[        5      (       a%  U H  nU R                  R	                  U5        M      OU R                  R	                  U5        U R                   R                  U5        SU4nU R                  nX4R                  ;  a  g UR                  R                  U5      nUR                  R                  U5        XTR                  ::  a!  UR                  S-
  UR                  -  Ul	        UR                  R                  UR                  S-   UR                  -  S /5        g )Nrr   r   )r%  r   r   r   r  r.  rH  r  indexr  r  insert)r   stampidsubitemr  bufr  s         r   _clearstampRawTurtle._clearstamp0  s     oo%'5))&GKK''0  ' ##G,OO""7+ !oozz!

  &

$GGww{ckk1CG

37719ckk1D6:r   c                 F    U R                  U5        U R                  5         g r   )r  r  )r   r  s     r   r7   RawTurtle.clearstampF  s     	!r   c                     Uc  U R                   S S  nO%US:  a  U R                   S U nOU R                   US  nU H  nU R                  U5        M     U R                  5         g r*  )r%  r  r  )r   r  toDeleter  s       r   r8   RawTurtle.clearstampsU  s_    $ 9q)H!Vr*Hqr*HDT" r   c           
         U R                   U R                  U R                  [        U R                  [
        5      4nU R                  nSU R                  XU R                  U R                  S S  UR                  U R                  5      U R                  S S  44nU R                  (       a  U R                  R                  U5        U R                  nU R                  (       Ga9  UR                  S:X  Ga(  X-
  nUS   UR                   -  S-  US   UR"                  -  S-  -   nS[%        US-  SSU R                  -  -  U R                  -  -  5      -   nUSU-  -  n	['        SU5       Hy  n
U
S:X  a  S	nOS
nXYU
-  -   U l        U R                   (       a>  UR)                  U R*                  XPR                  4U R                  U R                  U5        U R-                  5         M{     U R                   (       a&  UR)                  U R*                  SSU R                  S9  U R                   (       a  U R                  R/                  U5        [        U R                  [
        5      (       a  U R                  R/                  U5        Xl        U R0                  (       a  U R2                  R/                  U5        [5        U R                  5      S:  a  U R7                  5         U R-                  5         g )Ngor   r   r#  r   r  皙?r   TFr  r  r   r  r{   *   )r  r  r  r   r!  r   r   rK  r#  r$  rG  r  rH  r  r  r  r  r  r   rC  r  r  r  r  r  r  rD  r  )r   ri  go_modesr   
undo_entrystartdiffdiffsqnhopsdeltar  r  s               r   r_  RawTurtle._gotoq  sW    ]]^^]]57 DNNC++&&q)''(<(<=jjm%
 ??OO  ,;;;6??a/ID1gfmm+a/476==3H12LLFc63;C,<)=dkk)IJKKECI&E1e_6CC!&!2==$$T%9%9&+^^%<%)^^T]]CI  % }}  !5!57G46dmm ! M ==##C(dnnd++NN!!#&JJc"t 2%MMOr   c                    Uu  p#pEUu  pgpUu  ppU R                   n[        U R                  U-
  5      S:  a  [        S5        Xl        Xl        USS/:X  a  SnOUnUR                  XXS9  U R                   Vs/ s H$  nUU;  d  M  UR                  U5      S:X  d  M"  UPM&     nnU H/  nUR                  U5        U R                  R                  U5        M1     UnU R                  (       Ga  UR                  S:X  a  X#-
  nUS   UR                  -  S	-  US   UR                  -  S	-  -   nS[        US-  S
SU R                  -  -  U R                  -  -  5      -   nUSU-  -  n[!        SU5       H\  nUS:X  a  SnOSnUUU-  -   U l        U(       a*  UR                  U R"                  UU R                  4XxU5        U R%                  5         M^     U(       a  UR                  U R"                  SSUS9  X l        U R&                  (       aQ  [)        U R*                  5      S:  a  U R*                  R-                  5         U R*                  / :X  a  SU l        S U l        U	(       aJ  U R.                  / :X  a  S U l        [        S5        O'U R.                  b  U R.                  R-                  5         U R%                  5         g s  snf )Nr   z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!r  r   r  r   r   r   r#  r  r  r   TFr  zUnwahrscheinlich in _undogoto!)r   r  rK  r   r#  r$  r  r  r@  r  r.  r  r  r  r  r   rC  r  r  r  rD  r  r  r!  )r   entryoldnewr  coodatadrawingpcpsrC   cLIcLrF  r  r   usepcrE  todeleter  r  r  r  r  r  r  s                            r   	_undogotoRawTurtle._undogoto  s    ',#(#+ R$t~~#$s*9:"&&!!EEu7#zz Dz!aunA(.Q6(A z DANN1JJa   ;;;6??a/9D1gfmm+a/476==3H12LLFc63;C,<)=dkk)IJKKECI&E1e_6CC!$uqy$$T%9%9&+T^^%<%'S2  %   !5!57G46b ! B 
 4::"

 zzR%*"!
~~#!%67+""$YDs   :
KKKc                 0   U R                   (       a'  U R                   R                  SXR                  45        XR                  -  nU R                  R	                  U5      nU R
                  R                  nUS:X  a  U R                  S:  as  SU R                  -  nS[        [        U5      U-  5      -   nSU-  U-  n[        U5       H3  nU R                  R	                  U5      U l        U R                  5         M5     X l        U R                  5         g )Nrotr   r   g      @r   )rH  r  rT  rM  r   r   r  r  r   r  rC  r  )r   r   	neworientr  anglevelr  r  r  s           r   re  RawTurtle._rotate  s     ??OO  %0B0B!CD###LL''.	++&&a<DKK!OT[[(HCJx/00EIeOE5\#||2259 " !r   c                    [        U R                  5      S:  a  U R                  R                  U R                  U R                  U R
                  U R                  5        U R                  R                  5       U l        U R                  R                  U R                  5        O$U R                  R                  U R                  SS9  / U l        U(       a  U R                  /U l        g g )Nr   T)r  )rD  r$  r   r  r#  r  r  r  r  r  rK  r  s     r   r  RawTurtle._newLine  s    
 t 1$KK!!$"6"68H8H&*nndmmE#';;#:#:#<D JJd223KK!!$"6"6D!A $/D r   c                 6    [        U R                  [        5      $ r   )r   r!  r   r   s    r   rC   RawTurtle.filling	  s     $..$//r   c                    U R                  5       (       dD  U R                  R                  5       U l        U R                  R                  U R                  5        U R                  /U l        U R                  5         U R                  (       a'  U R                  R                  SU R                  45        U R                  5         g )N	beginfill)rC   r   r  r   r  r  rK  r!  r  rH  r  r  r   s    r   r2   RawTurtle.begin_fill  s{     ||~~![[446DNJJdnn-..)??OO  +t~~!>?r   c                    U R                  5       (       a  [        U R                  5      S:  aq  U R                  R	                  U R
                  U R                  U R                  S9  U R                  (       a'  U R                  R                  SU R
                  45        S =U l        U l        U R                  5         g g )Nr#  r  dofill)
rC   rD  r!  r   r  r   r  rH  r  r  r   s    r   r?   RawTurtle.end_fill,  s     <<>>4>>"Q&%%dnndnn+/?? & <??OO(((DNN)CD.22DNT^LLN r   c                    U(       d  [        U[        [        45      (       a5  U R                  U5      nU R                  [        U R                  S5      -   nOnU R                  nU(       d#  U R                  [        U R                  S5      -   nO7Uc#  U R                  [        U R                  S5      -   nU R                  U5      nU R                  5       nU R                  (       a-  U R                  R                  S/5        SU R                  l
         U R                  5       S:X  a  U R                  5         U R                  5         U R                  U5        U R                  U5        U R!                  S5        U R                  U5        U R                  (       a  SU R                  l
        g g ! U R                  U5        f = f)Nr  r  Tr  r   F)r   r  r   r  r  rt  r  rW   rH  r  r  rb   rN   rY   rZ   rX   rD   )r   r-  r:   rW   s       r   r=   RawTurtle.dot@  s>    $e--t,}}s4==!'<<==3t}}a+@@D|}}s4==!'<<NN5)Ehhj??OO  %)'+DOO$	 F*	LLNLLMM% LLOHHSM??',DOO$  HHSMs   A'F1 1Gc                     U R                   R                  U R                  XUU R                  5      u  pEU R	                  5         U R
                  R                  U5        U R                  (       a  U R                  R                  SU45        U$ )Nwri)	r   r  rK  r  r  r  r  rH  r  )r   r  r  r  r  ri  s         r   r  RawTurtle._writek  si     KK&&t~~s4:>..J	

$??OO  %/
r   c                 n   U R                   (       a-  U R                   R                  S/5        SU R                   l        U R                  [	        U5      UR                  5       U5      nU(       a#  U R                  5       u  pgU R                  XW5        U R                   (       a  SU R                   l        g g )Nr  TF)rH  r  r  r  r  ry  r\   rf   )r   argmover  r  ri  r   r   s           r   r|   RawTurtle.writev  s{    & ??OO  %)'+DOO$kk#c(EKKM4888:DAKK??',DOO$ r   c                 6    U R                   /U l        SU l        g r  )rK  r  r  r   s    r   r3   RawTurtle.begin_poly  s     nn%
!r   c                     SU l         g NF)r  r   s    r   r@   RawTurtle.end_poly  s     #r   c                 H    U R                   b  [        U R                   5      $ g r   )r  r   r   s    r   rE   RawTurtle.get_poly  s"     ::!$$ "r   c                     U R                   $ r   )r   r   s    r   rG   RawTurtle.getscreen  s     {{r   c                     U $ r   r   r   s    r   rI   RawTurtle.getturtle  s	     r   c                 8    U R                   R                  U5      $ r   )r   r   r  s     r   r  RawTurtle._delay  s     {{  ''r   c                     U R                   R                  U R                  R                  XU5        U R	                  5         g r   )r   r  r   r  r  r+  s       r   rS   RawTurtle.onclick  s-    $ 	T[[..#>r   c                     U R                   R                  U R                  R                  XU5        U R	                  5         g r   )r   r  r   r  r  r+  s       r   rU   RawTurtle.onrelease  s-    , 	t{{00#C@r   c                 f    U R                   R                  U R                  R                  XU5        g r   )r   r  r   r  r+  s       r   rT   RawTurtle.ondrag  s$    $ 	DKK--s=r   c                    U R                   c  g US:X  aA  Uu  p4U R                  U* U-  U R                  -  5        U R                   R                  5       ng US:X  a  US   nU R	                  U5        g US:X  a  U R                  U5        g US;   a<  US   nU R                  R                  U5        U R                  R                  U5        g US:X  a"  US   nU R                  R                  USSSS	9  g US
:X  aZ  US   nS =U l        U l        XpR                  ;   a7  U R                  R                  U5        U R                  R                  U5        g g US:X  a3  [        R                  XS   5        U R                   R                  5         g g )Nr  rr   r   r  )r  r=   r  rx  r   r  r  rW   )rH  re  rT  r  r7   r  r   r  r  r.  r  r   r!  r  rW   )r   actionr}  r   degPAUdummyr  r  s           r   _undoRawTurtle._undo+  se    ??"U? MELL%t'9'99:OO'')Ew!WFOOF#t^NN4 ~%7DKK%JJd#x7DKK!!$(>')2 " 7{"7D.22DNT^zz!##D)

!!$' " u_HHT7#OO! r   c                 
   U R                   c  g U R                   R                  5       nUS   nUSS  nUS:X  a:  U(       a2  UR                  5       nU R                  US   USS  5        U(       a  M1  g g U R                  X#5        g )Nr   r   r  )rH  r  r  )r   r  r  r}  s       r   rx   RawTurtle.undoK  sy    " ??"""$aABxU?xxz

47DH- $ JJv$r   )r  r   r!  r"  rM  r  rK  r  r  r  r  r  r&  r$  r#  r  r  r   r%  r   rH  r>  r   rw  )NNNN)Fr  )FrQ   )Arialr  r  ro  );r   r   r   r   r  r   r9  ra   rh   ry   r*  r6   r  r  r  r  r  rA  r  rs   r9   rk   rl   rn   ru   rt   rm   rl  rH   ro  r  rr   r  r7   r8   r_  r  re  r  rC   r2   r?   r=   r  r|   r3   r@   rE   rG   rI   rF   r  rS   rU   rT   r  rx   rw   r   r   r   r   r   r   	  sK   
 G"G} $%5 6i&P2,&-1A!$/*(++.5 .D .T .`&P6&?P7."3H1&%$P
ON"K$,P+Z;,83j?B$0 0*()-V	-:"#% " F(
*2>*"@%: Jr   r   c                  j    [         R                  c  [        5       [         l        [         R                  $ r   )r   _screenr  r   r   r   r
   r
   n  s!     ~~ >>r   c                   n    \ rS rSrSrSr\S   rS r\S   \S   \S   \S   4S	 jr	S
 r
S rS rS rSrg)r  iv  Nr*   c                 p   [         R                  ch  [        5       =[         l        U l        U R                  R                  [         R                  5        U R                  R                  U R                  5        [         R                  c  [        S   n[        S   n[        S   n[        S   n[        S   n[        S   nU R                  R                  XX45        U R                  R                  5       [         l        [        R                  U [         R                  5        U R                  XXV5        g g )Nr{   r   r   r   r   r   )r  _rootry  r*   _titler  _destroyr>  r   r  r  r	   r9  r'   )r   r{   r   r   r   r   r   s          r   r9  _Screen.__init__|  s    == ).0GMDJJJW^^,JJ  /??"ME(^F[)Il+J[)I[)IJJ""5)H"jj335GO!!$8JJui; #r   r{   r   r   r   c                    [        U R                  S5      (       d  g U R                  R                  5       nU R                  R                  5       n[	        U[
        5      (       a  SUs=::  a  S::  a  O  OXQ-  nUc  XQ-
  S-  n[	        U[
        5      (       a  SUs=::  a  S::  a  O  OXb-  nUc  Xb-
  S-  nU R                  R                  XX45        U R                  5         g )Nr  r   r   r#  )hasattrr  r  r  r   r   r  r-   )r   r{   r   r  r  r  shs          r   r'   _Screen.setup  s    2 tzz>22ZZ!!#ZZ""$eU##UaHE>jA%Ffe$$f)9)9YF>kQ&F

v>r   c                 z    [         R                  b  [         R                  R                  U5        U[         l        g r   )r  r  r*   r  )r   titlestrings     r   r*   _Screen.title  s'     ==$MM,$r   c                     U R                   nU[        R                   L a,  S [        l        S [        l        S [        l         S [        l        S[        l        UR                  5         g r  )	r  r  r   r  r  r>  r	   r  r  )r   roots     r   r  _Screen._destroy  sD    zz7== FK!FN GM"GO %r   c                 $    U R                  5         g r   )r  r   s    r   r   _Screen.bye  s     	r   c                    ^  U 4S jnT R                  U5        [        S   (       a  g  [        5         g ! [         a    [	        S5         g f = f)Nc                 &   > TR                  5         g r   )r   )r   r   r   s     r   exitGracefully+_Screen.exitonclick.<locals>.exitGracefully  s    HHJr   r   r   )rS   r   r   AttributeErrorexit)r   r  s   ` r   r   _Screen.exitonclick  sA    &	 	^$	J 	G	s   
4 AA)r  )r   r   r   r   r  r>  r   r  r9  r'   r*   r  r   r   r   r   r   r   r  r  v  sR    EG']F<" w-X+&tK/@&P%"r   r  c                   >    \ rS rSrSrSr\S   \S   \S   4S jrSrg)r   i  Nrk   r   r   c                     [         R                  c  [        5       [         l        [        R	                  U [         R                  UUUS9  g )N)rk   r   r   )r   r  r
   r   r9  )r   rk   r   r   s       r   r9  Turtle.__init__  s;     >>!#XFN4!&*8#* 	 	,r   r   )	r   r   r   r   r  r  r   r9  r   r   r   r   r   r     s,     DG G} $%5 6i	,r   r   c                 t   0 n[          H  nSU-   n[        U5      R                  X'   M!     [         H  nSU-   n[        U5      R                  X'   M!     [	        SU -  S5       n[        S U 5       5      nUR                  S5        US S  H6  nUR                  S[        U5      -  5        UR                  S	X   -  5        M8     US   nUR                  S[        U5      -  5        UR                  S
X   -  5        UR                  S5        UR                  5         S S S 5        g ! , (       d  f       g = f)Nz_Screen.zTurtle.z%s.pyr  c              3   b   #    U  H%  nUR                  S 5      S   [        ;  d  M!  Uv   M'     g7f)r   r   N)r   _alias_list)r  r   s     r   r  &write_docstringdict.<locals>.<genexpr>"  s+      =Aa; as    /	/zdocsdict = {

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

z        """%s
"""

z}
)	_tg_screen_functionsr   __doc___tg_turtle_functionsr   r(  r|   reprclose)r   docsdict
methodnamer   r   r
  s         r   r   r     s    H*
#S	)) + +

"S	)) + 
g 	% = = =	"#9CGGHtCy()GG-=>  2h	49$%	(8=89			 
&	%	%s   $B<D))
D7c                     SSU R                  5       0-  n[        U5      nUR                  nU H  n X4   [        U5      l        M     g ! [
         a    [        SU-  5         M6  f = f)Nz!turtle_docstringdict_%(language)sr   zBad docstring-entry: %s)ry  
__import__r  r   r  r   r   )langmodnamemoduler  r   s        r   read_docstringsr  .  sh     2Z

4MMG FH	3 (DI   	3+c12	3s   A

A&%A&zCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc                    [         R                  " U 5      nUR                  [        UR                  R                  5       5      SS  S9n/ nUR                  R                  5        GHK  nUR                  ==[         R                  R                  :X  a  O!=[         R                  R                  :X  a  O  O    UR                  UR                  5        Mo  =[         R                  R                  :X  a!    UR                  SUR                   35        M  =[         R                  R                  :X  a-    UR                  UR                   SUR                   35        M  [         R                  R                  :X  a!  UR                  SUR                   35        GM7   [        SUR                  5      e   SSR!                  U5       S	3n[#        U5      U4$ )
Nr   )
parameters*r   z**zUnsupported parameter kind(z, ))inspect	signaturereplacer   r  valueskind	ParameterPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr  r  VAR_POSITIONALKEYWORD_ONLYVAR_KEYWORDRuntimeErrorr   r  )oborig_sigfunc_sig	call_argsparam	call_texts         r   getmethparlistr&  K  sr      $H ++2245ab9   H I$$++-jj:1!!119'##99:   ,1""11  1UZZL!12/""//  EJJ<q!=>""..  2ejj\!23"#?LL . DIIi()+Ix=)##r   c                     SS K nU c  g [        S   nU R                  SU-  S5      nUR                  SU-  5      nUR	                  SU5      nU$ )Nr   r   %s.r    \(.+ %s\)::rer   r  compilesub)docstrr,  
turtlename	newdocstrparexps        r   _turtle_docreviser3  o  W     ~o&Juz1"5IZZ34F

3	*Ir   c                     SS K nU c  g [        S   nU R                  SU-  S5      nUR                  SU-  5      nUR	                  SU5      nU$ )Nr   r   r(  r   r)  r*  r+  )r/  r,  
screennamer1  r2  s        r   _screen_docreviser7  {  r4  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           	         U  Hz  n[        X5      n[        U5      u  pxUS:X  a  [        SXx5        M/  [        R	                  X#UXxS9n	[        U	[        5       5        U" UR                  5      [        5       U   l        M|     g )Nr   z>>>>>>)objinitr  
paramslistargslist)getattrr&  r   __func_bodyformatr  globalsr  )
	functionsr   r9  r:  	docreviser  r  pl1pl2defstrs
             r   _make_global_funcsrF    sw    
)!&)"9(C%##Z/2 $ BVWY(1&..(A	*%  r   zTurtle._screenzScreen()zTurtle._penzTurtle()__main__c                  L    [        5       (       a  [        5         g [        5         g r   )rO   r^   rV   r   r   r   	switchpenrI    s    88DDr   c                     [        5         [        S5        [        5         [        S5        [	        5         [        S5        [        S5       Hu  n U S:X  a
  [        5         [        S5       H  n[        S5        [        S5        M     U S:X  a  [        S5        [        5         [        5         [        S	5        [	        5         Mw     [        S
5        [        S5        [        S5        [        5         [        S5        [        S5        [        S5        [        S5        [        S5        [	        5         [        SS
5        [        SS
5        [        S5        [        S5       H/  n [        S5        [        S5        [        S5        [        S5        M1     [        S5        [        5         [        S5       H/  n [        S5        [        S5        [        S5        [        S5        M1     [        5         g )NTd   r  r#  r  r  Z   maroonrP  r   r   F   
startstartr  redr  )ra   r+   rz   r1   r>   r{   rC  r2   rD   rQ   r:   r?   r`   r|   )rE  r  s     r   demo1rQ    sJ   t
aqAAv1XR  Avh
DBKF  	agu
b	b	c
lAgqeqABKHBK"I	  	tqABKHBK"I	 
 	
r   c                  	   [        S5        [        5         [        S5        [        [	        SS5      5        [        SS5      S-  n [        S5        [        S5       H  n[        5         [        U S5        M     [        S5        [        5       (       a  [        5         [        5       (       a  M  [        5         [        S5        [        S	5        Sn[!        S
5        [        S5        [        S5        [        SS5       H  nUS:  a   [#        5         [%        S	SU-  -
  SSU-  5        [        S5       H  n['        U5        [        S5        M     [)        5         US-  n[        S5        [        [        5       S-   S-  5        M     [        S5        [+        5         ['        S5        [        S5        [-        5         [/        SS5        [        S5        [#        5         [        S5       H0  n[        SS5        [        S5        ['        S5        [        S5        M2     [)        5         [        S5        [+        5         ['        S5        [-        5         [1        S5        [3        5       nUR5                  S5        [7        5       nUR5                  S5        UR1                  S5        UR                  5         UR9                  S5        UR                  S5        UR;                  5         UR=                  SS5        UR                  S5        UR?                  5         UR                  S5        UR/                  SS5        UR                  S5        UR                  S5        [        [	        U5      5        SnUR                  U5      S:  a  UR'                  S5        UR                  S 5        UR                  UR	                  U5      5        UR'                  S5        US!-  S:X  a*  URA                  5         URA                  5         [        5         US-  nUR                  U5      S:  a  M  UR                  S"S#S$S%9  UR!                  S&5        UR!                  S5        S' n[B        RD                  " S5        [        5       (       a1  UR                  5         UR                  5         [        5       (       a  M1  UR'                  S5        UR                  S(S)S*9  URG                  US5        g )+Nr   r  r   r  rL     r   zwait a moment...r  greenrN  r  r     x      F   rP  rP  yellowr  2   r   r  i  (   r  blueoranger#  g      @g333333?r  zCAUGHT! )r  r  boldr`   )r  r  r   c                 ,    [        5         [        5         g r   )r   r   )r4  r5  s     r   babademo2.<locals>.babaA  s    MEr   z  Click me!)CourierrW  r^  )r  )$rp   rq   rZ   re   rv   r<   rc   rC  rI  r5   r|   ry   rx   ra   rR   r   rX   r2   rB   rA   r?   r^   rV   r:   rk   rI   rb   r   rQ   rz   rJ   r>   rr   timesleeprS   )r  r  laengerE  trir   r  r`  s           r   demo2rg    s   a

71a=!!Q#
2rAK62  	 !!!F  !!
2#

3r2A1u#bd(Ar!t,1X6
3  JbLFrF5719b.!  	3

2
2
eHaqA2rNrFrFrF	 
 	

2

2
hkv&!XBQ		C		"QVH%q		!76?#ll6"Q&IIcNIIcNNN3;;v./FF1IrzQ		QJE ll6"Q& 			*#8	HWU	 	

1!!HHJKKM  !! 	r
		-(?	AD!r   )r   )turtle_docstringdict)Dtkinterr7  r  r   rc  r  r  os.pathr   r   r   copyr   r   _tg_classesr  r  _tg_utilities__all__r   r   r   r   r   r   r   r   r   r  r  r  r8  r   r<  r{  ry  objectr  r   rs  r   r  r	   rA  r  r  r   r   r
   r  r   r   r   r  	_LANGUAGEImportErrorr&  r3  r7  r>  rF  r   r   r   rI  rQ  rg  r   r   r   r   <module>rr     s  J      
 ' '   I) !  '/--0DD(>*,	# 	4	c	 	c	 	T		
 	T	 	
	 	S	 		 	$	 		 	W	 	g	 	z	 	D	 	I	  	!	" ")'	,:<1t
*$E *$j1 .*a#RXX a#F I 6)BEE )0 
B5v B5T	) 	) 
,1F ,1^"6f "6Li# iVC CLR6 RjL6 L>Qj Qf$ 
~l ~@,Y ,(  D3" 	MI	""$H

  
B '#Z1BD ' *.?A z2jaF 
G	GMC [v  1	/01Ds  1	
$i0 M	HBKL MMs*   G4 H	 4HH	H-H-,H-