� c��j�;��\� ddlZddlZddlZddlZddlZddlZddlZddlm Z m Z m Z ddl m Z ddlmZgd�Zgd�Zgd�Zdd gZeezezezd gzZgd �Zid d �dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�d d!�d"d!�d#d$�d%d&�d'd(�d)d*�d+d,d-d.��Zd/�Zd0�Z ee�Gd2�d3e�Zd4�Zd5�Zd6Zdfd7�ZGd8�d9ej@�Z!ee!ejDd:�Gd;�de%�Z&Gd?�d e�Z'Gd@�dAe�Z(GdB�dCe%�Z)GdD�dEe%�Z*GdF�dGe&�Z+GdH�dIe%�Z,GdJ�dKe%�Z-GdL�dMe%�Z.GdN�dOe-e,�Z/e/Z0dP�Z1GdQ�dRe+�Z2GdS�dTe/�Z3e3Z4dgdU�Z5dV�Z6ed'Z7 e7d(k7re6e7�dY�Z9dZ�Z:d[�Z;d\ZZ?e@dbk(rdc�ZAdd�ZBde�ZCeB�eC�eD�yy#e$r ed1�Y��dwxYw#e8$r edWe7�Y�qe$redXe7z�Y��wxYw)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)P�back�backward� begin_fill� begin_poly�bk�circle�clear� clearstamp� clearstamps�clone�color�degrees�distance�dot�down�end_fill�end_poly�fd� fillcolor�filling�forward�get_poly�getpen� getscreen� get_shapepoly� getturtle�goto�heading� hideturtle�home�ht�isdown� isvisible�left�lt�onclick�ondrag� onrelease�pd�pen�pencolor�pendown�pensize�penup�pos�position�pu�radians�right�reset� resizemode�rt�seth� setheading�setpos� setposition� settiltangle� setundobuffer�setx�sety�shape� shapesize�shapetransform� shearfactor� showturtle�speed�st�stamp�teleport�tilt� tiltangle�towards� turtlesize�undo�undobufferentries�up�width�write�xcor�ycor�write_docstringdict�done� Terminator)rr1r4rArNrRrVr\r^rcrdrfrgrrrxr{r|r|��?�heightg�?� canvwidthi�� canvheighti,� leftright� topbottomr�standardr��?r� �undobuffersizei�rl�classicrX�blackrBrb�noresize�visibleT�language�english� exampleturtle�turtle�screenzPython Turtle GraphicsF)� examplescreenr*� using_IDLEc��� t|d�5}|j�}ddd�i}D]�}|j�}|r|jd�r�' |j d�\}}|j�}|j�}|dvr t|�}n d|vr t|�}n t|�}|||<��|S#1swY��xYw#t $rt d|�d|���Y��wxYw#t $rY�@wxYw)N�r�#�=zBad line in config-file z: )�True�False�Nonez''z""�.) �open� readlines�strip� startswithr� ValueError�print�eval�float�int)�filename�f�cfglines�cfgdict�line�key�values �/usr/lib64/python3.12/turtle.py� config_dictr��s���9� �h�� ���;�;�=�� ��G����z�z�|���t���s�+� � ����C��J�C���i�i�k��� � � �� �9� 9���K�E� ��%�<�!�%�L�E���J�E���� �+�, �N�3 � ��� � �x��E� F� � ��� �� �s/�B<�C�C(�<C�C%�$C%�( C4�3C4c�6� d}i}i}t|�r t|�}d|vrd|dz} tt�\}}t ||�}t|�r t|�}t j|�t j|�y#t $rd}Y�NwxYw)Nz turtle.cfg� importconfigz turtle_%s.cfg�)rr�r�__file__r� Exception�_CFGr-)r�� default_cfg�cfgdict1�cfgdict2�head�tail� cfg_file2s r�� readconfigr��s��� ��K��H��H� �k���{�+����!�%���(@�@� ���8�_� ��d���{�+� ��i���y�)���K�K����K�K���� ��� ��s�B � B�Bz"No configfile read, reason unknownc�J�eZdZ d�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z d �Z d �Z y ) rc�2�tj|||f�S�N)�tuple�__new__)�cls�x�ys r�r�z Vec2D.__new__�s���}�}�S�1�a�&�)�)�c�>�t|d|dz|d|dz�S�Nr��r��self�others r��__add__z Vec2D.__add__��)���T�!�W�U�1�X�%�t�A�w�u�Q�x�'7�8�8r�c��t|t�r|d|dz|d|dzzSt|d|z|d|z�Sr�)� isinstancerr�s r��__mul__z Vec2D.__mul__�sN�� �e�U� #���7�5��8�#�D��G�E�!�H�$4�4� 4��T�!�W�U�]�D��G�E�M�2�2r�c�~�t|t�st|t�rt|d|z|d|z�StSr�)r�r�r�r�NotImplementedr�s r��__rmul__zVec2D.__rmul__�s8�� �e�S� !�Z��u�%=���a�����Q��� �6� 6��r�c�>�t|d|dz |d|dz �Sr�r�r�s r��__sub__z Vec2D.__sub__r�r�c�*�t|d |d �Sr�r��r�s r��__neg__z Vec2D.__neg__s���d�1�g�X��Q��x�(�(r�c�&�tj|�Sr�)�math�hypotr�s r��__abs__z Vec2D.__abs__s���z�z�4� � r�c��� t|d |d�}tj|�}tj|�tj|�}}t|d|z|d|zz|d|z|d|zz�S)Nr�r)rr�r_�cos�sin)r��angle�perp�c�ss r��rotatez Vec2D.rotates{�� ��d�1�g�X�t�A�w�'��� � �U�#���x�x��������1���T�!�W�Q�Y�t�A�w�q�y�(�$�q�'�!�)�D��G�A�I�*=�>�>r�c��|d|dfSr��r�s r��__getnewargs__zVec2D.__getnewargs__s���Q���a��!�!r�c� �d|zS)Nz (%.2f,%.2f)r�r�s r��__repr__zVec2D.__repr__s ���t�#�#r�N) �__name__� __module__� __qualname__r�r�r�r�r�r�r�r�r�r�r�r�r�rr�s9�� �*�9�3��9�)�!�?�"�$r�rc��� t|j�}|j�|D]}t||��|jj �D]'\}}t |�tjk(s�#|||<�)yr�) �list� __bases__�reverse� __methodDict�__dict__�items�type�types� FunctionType)r��_dict�baseList�_superr�r�s r�r�r�si��-��C�M�M�"�H� �������V�U�#���l�l�(�(�*� ��U� ��;�%�,�,� ,��E�#�J�+r�c�@� i}t||�|j�Sr�)r��keys)r�r�s r�� __methodsr�&s ��-� �E���e�� �:�:�<�r�zTdef %(method)s(self, *args, **kw): return self.%(attribute)s.%(method)s(*args, **kw)c�P�i}t||�i}t|�}|j�D]#}|dddk(s|dddk(s||vs||vr�||||<�%|j�D]B\}} || d�} t |t �r t ||d�z} t | �t||| |��Dy)Nr��_�����)�method�func)r� attribute) r�r�r�r�r��str� __stringBody�exec�setattr) � fromClass�toClass�toPart�exclude�_dict_1r��mfc�exrr�d� execStrings r��__forwardmethodsr0s����G���'�"� �E� �I� �C��l�l�n�� �b�q�6�S�=�B�r�s�G�s�N�b�G�m�r�S�y� ��� �E�"�I� � � � � � ����t� ,�� �f�c� "��6��H�H� � �Z���� �6�1�V�9�-� &r�c�R�eZdZ d d�Zd d�Zd�Zd�Zd�Zd�Zd�Z d �Z d �Z d �Z y)rc �$�tjj||||��|j�|_||c|_|_||c|_|_d|_ tj||||jtjd��|_ tj||jjtj��|_tj||jj"��|_|jj'|j j(|j$j(��|j+dd d� �|j-dd d� �|jj/d |d ddd d d � �|j$j/d |d dd d d d � �|j j/d |d d dd d d � �|j1�|jj3d |j4�y)N)r|r��white�)r|r��bg�relief� borderwidth)�command�orient)r)�xscrollcommand�yscrollcommandrr�)�weight�minsize�news��padx�in_�pady�row�column�rowspan� columnspan�stickyz )�TK�Frame�__init__�winfo_toplevel� _rootwindowr|r�r�r�r�Canvas�SUNKEN�_canvas� Scrollbar�xview� HORIZONTAL�hscroll�yview�vscroll� configure�set� rowconfigure�columnconfigure�gridra�bind�onResize)r��masterr|r�r�r�s r�r-zScrolledCanvas.__init__Ks��� �����$��e�F��C��.�.�0���"'���� �D�K�*3�Z�'���������y�y��u�V�$(�G�G�B�I�I�1�N�� ��|�|�F�D�L�L�4F�4F�+-�=�=�:�� ��|�|�F�D�L�L�4F�4F�G�� � � � ���d�l�l�.>�.>�.2�l�l�.>�.>� � @� ���!�A�q��1� ���Q�q�!��4� � � ���q��1�!��!��&� � B� � � ���q��1�!��!��&� � B� � � ���q��1�!��!��&� � B� � � � � �����m�T�]�]�;r�Nc�� |r||_|r||_|r||_|jj ||j dz|j dz|jdz|jdzf��|jj d|j|j z dzz|jz �|jjd|j|jz dzz|jz �|j�y)Nr)r� scrollregionr��) r�r�rr2�config� xview_movetor|� yview_movetor�� adjustScrolls�r�r�r�rs r�razScrolledCanvas.resetds���J� �&�D�N� �(�D�O� ��D�G� � � ���r�'+�~�~�o�q�&8�4�?�?�:J�A�:M�'+�~�~�q�'8�$�/�/�1�:L�&N� � O� � � �!�!�#�t�~�~�� � �'B�R�'G�"H�?C�~�~�#N� O� � � �!�!�#�t���� � �'C�b�'H�"I�>B�o�o�#N� O� ���r�c �� |jj�}|jj�}|jjd|j|z z|jz �|jj d|j |z z|j z �||jks||j krG|jjd|dddddd��|jjd|dddddd��y|jj�|jj�y)Nr�r�rr!r") r2� winfo_width� winfo_heightrEr�rFr�r6r=r8� grid_forget)r��cwidth�cheights r�rGzScrolledCanvas.adjustScrollsvs�� ����)�)�+���,�,�+�+�-�� � � �!�!�#�t�~�~�f�'<�"=�d�n�n�"L�M� � � �!�!�#�t���w�'>�"?����"O�P� �D�N�N� "�g����&?� �L�L� � �1�D�q�a�%&��a�� � P� �L�L� � �1�D�q�a�%&��a�� � P� �L�L� $� $� &� �L�L� $� $� &r�c�&� |j�yr�)rG)r��events r�r?zScrolledCanvas.onResize�s��� ���r�c�6� |jj|�Sr�)r2�bbox�r��argss r�rRzScrolledCanvas.bbox�s�� � �t�|�|� � �$�'�'r�c�<� |jj|i|��Sr�)r2�cget�r�rT�kwargss r�rVzScrolledCanvas.cget�s#�� � �t�|�|� � �$�1�&�1�1r�c�>� |jj|i|��yr�)r2rDrWs r�rDzScrolledCanvas.config�� �� ��� � ���T�,�V�,r�c�>� |jj|i|��yr�)r2r>rWs r�r>zScrolledCanvas.bind�s �� ��� � ���4�*�6�*r�c�>� |jj|i|��yr�)r2�unbindrWs r�r]zScrolledCanvas.unbind�rZr�c�:� |jj�yr�)r2� focus_forcer�s r�r_zScrolledCanvas.focus_force�s�� � � � � � �"r�)��i^iXr`�NNN) r�r�r�r-rarGr?rRrVrDr>r]r_r�r�r�rrEsA��� 25�DG�<�2�$'� �(� 2� -� +� -� #r�rr2c�8�eZdZ d�Zd�Zd�Zd�Zd�Zd�Zd�Z y) �_Rootc�B�tjj|�yr�)r+�Tkr-r�s r�r-z_Root.__init__�s�� �����t�r�c�f�t|||||�|_|jjdd��y)Nr��both)�expand�fill)rr2�pack)r�r|r�rMrNs r�� setupcanvasz_Root.setupcanvas�s-��%�d�E�6�6�7�K�� � � � ������0r�c��|jSr�)r2r�s r�� _getcanvasz_Root._getcanvas�s ���|�|�r�c�4�|jd||||fz�y)Nz %dx%d%+d%+d)�geometry)r�r|r��startx�startys r�� set_geometryz_Root.set_geometry�s�� � � �m�U�F�F�F�$C�C�Dr�c�(�|jd|�y)N�WM_DELETE_WINDOW)� wm_protocol)r��destroys r�� ondestroyz_Root.ondestroy�s�� ���+�W�5r�c�"�|j�Sr�)�winfo_screenwidthr�s r�� win_widthz_Root.win_width�s���%�%�'�'r�c�"�|j�Sr�)�winfo_screenheightr�s r�� win_heightz_Root.win_height�s���&�&�(�(r�N) r�r�r�r-rkrmrrrwrzr}r�r�r�rcrc�s)��1��1��E�6�(�)r�rcc���eZdZ d�Zd�Zd�Zd�Z d#d�Zd�Z d#d�Z d �Z d �Z d �Z d �Z d$d �Zd�Zd%d�Zd%d�Zd%d�Zd%d�Zd�Zd$d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd&d�Zd�Z d �Z!d!�Z"d&d"�Z#y)'�TurtleScreenBasec�l� tjdd|j��}|j�|S)Nr�)r|r�r@)r+� PhotoImage�cv�blank)r��imgs r�� _blankimagezTurtleScreenBase._blankimage�s+�� ��m�m�!�A�d�g�g�>�� � � � �� r�c�F� tj||j��S)N)�filer@)r+r�r�)r�r�s r��_imagezTurtleScreenBase._image�s�� ��}�}�(�4�7�7�;�;r�c��||_t|t�r-|jj}|jj}nvt |jj d��}t |jj d��}|jj| dz| dz|dz|dzf��||_||_dx|_|_ y)Nr|r�r�rBr�) r�r�rr�r�r�rVrD�xscale�yscale)r�r��w�hs r�r-zTurtleScreenBase.__init__�s������ �b�.� )����!�!�A����"�"�A��D�G�G�L�L��)�*�A��D�G�G�L�L��*�+�A� �G�G�N�N�A�2�q�5�1�"�a�%��A��q�!�t�*E�N� F�������$'�'�� �d�kr�c�@� |jjddd��S)N)rrrrrrr��ri�outline)r��create_polygonr�s r�� _createpolyzTurtleScreenBase._createpoly�s$�� ��w�w�%�%�&8�r�2�%�N�Nr�Nc��� g}|D]B\}} |j||jz�|j| |jz��D|jj|g|���|�|jj ||��|�|jj ||��|�|jj ||��|r|jj |�yy)N�ri)r��r|��appendr�r�r��coords� itemconfigure� tag_raise) r��polyitem� coordlistrir�r|�top�clr�r�s r�� _drawpolyzTurtleScreenBase._drawpoly�s��� ����D�A�q� �I�I�a�$�+�+�o� &� �I�I�q�b�4�;�;�&� '�� ������x�%�"�%� � � �G�G� !� !�(�� !� 6� � � �G�G� !� !�(�G� !� <� � � �G�G� !� !�(�%� !� 8� � �G�G� � �h� '� r�c �d� |jjddddddtj��S)Nrr�r)rir|�capstyle)r�� create_liner+�ROUNDr�s r�� _createlinezTurtleScreenBase._createlines6�� ��w�w�"�"�1�a��A�B�a�.0�h�h�#�8� 8r�c�� |�fg}|D]B\}}|j||jz�|j| |jz��D|jj|g|���|�|jj ||��|�|jj ||��|r|jj |�yy)Nr�r�r�) r��lineitemr�rir|r�r�r�r�s r�� _drawlinezTurtleScreenBase._drawline s��� � � ��B�!���1�� � �!�d�k�k�/�*�� � �1�"�t�{�{�*�+�"� �D�G�G�N�N�8� )�b� )� � � �G�G� !� !�(�� !� 6� � � �G�G� !� !�(�%� !� 8� � �G�G� � �h� '� r�c�<� |jj|�yr�)r��delete�r��items r��_deletezTurtleScreenBase._delete#s�� � �����t�r�c�:� |jj�yr�)r�r-r�s r��_updatezTurtleScreenBase._update)s�� � �����r�c�<� |jj|�yr�)r��after�r�rs r��_delayzTurtleScreenBase._delay.s��;� ��� � �e�r�c�|� |jj|�}d}|S#tj$rd}Y|SwxYw)NTF)r�� winfo_rgbr+�TclError)r�r:�rgb�oks r��_iscolorstringzTurtleScreenBase._iscolorstring2sK�� � ��'�'�#�#�E�*�C��B�� ���{�{� ��B�� � �s �"�;�;c�� |�-|jj|��|j�y|jjd�S)N)rr)r�rDr�rV)r�r:s r��_bgcolorzTurtleScreenBase._bgcolor<s;�� (� � � �G�G�N�N��N� &� �L�L�N��7�7�<�<��%� %r�c��� |\}}||jz}||jz}dddd�}|jj|dz | |||||��} |jj | �\} } } } | | dz fS)N�swr��se)rQ�centerr`r�)�text�anchorri�font)r�r�r�� create_textrR)r�r\�txt�alignr�rXr�r�r�r��x0�y0�x1�y1s r��_writezTurtleScreenBase._writeEs��� #����1� �� � �O�� �� � �O����T�;���w�w�"�"�1�Q�3���3����/7��#�F�������d�+���B��B��R��T�z�r�c���� �� �jj|d|z�y��fd�}�jj|d|z||�y)N� c�����jj|j��jz �jj |j � �j z }}�||�yr��r��canvasxr�r��canvasyr�r��rPr�r��funr�s ��r��eventfunz+TurtleScreenBase._onclick..eventfun\�P�����������0����<���������1�1�$�+�+�=����A�q� r��r�� tag_unbind�tag_bind�r�r�r��num�addr�s` ` r��_onclickzTurtleScreenBase._onclickSsL��� � �;� �G�G� � �t�]�S�%8� 9� � �G�G� � �T�=�3�#6��#� Fr�c���� �� �jj|d|z�y��fd�}�jj|d|z||�y)Nzc�����jj|j��jz �jj |j � �j z }}�||�yr�r�r�s ��r�r�z-TurtleScreenBase._onrelease..eventfunnr�r�r�r�s` ` r�� _onreleasezTurtleScreenBase._onreleasebsQ��� � �;� �G�G� � �t�%?�#�%E� F� � �G�G� � �T�#=��#C�%�s� ,r�c���� �� �jj|d|z�y��fd�}�jj|d|z||�y)Nzc��� �jj|j��jz �jj |j � �j z }}�||�y#t$rYywxYwr�)r�r�r�r�r�r�r�r�r�s ��r�r�z*TurtleScreenBase._ondrag..eventfun�sg���� �G�G�O�O�E�G�G�4�T�[�[�@� �G�G�O�O�E�G�G�4�4�T�[�[�@��A���1�I�� ����s�A.A2�2 A>�=A>r�r�s` ` r��_ondragzTurtleScreenBase._ondragusN��� � �;� �G�G� � �t�%8�3�%>� ?� � �G�G� � �T�#6��#<�h�� Lr�c���� ���jjd|z�y��fd�}�jjd|z||�y)Nr�c�����jj|j��jz �jj |j � �j z }}�||�yr�r�r�s ��r�r�z1TurtleScreenBase._onscreenclick..eventfun�r�r��r�r]r>)r�r�r�r�r�s`` r��_onscreenclickzTurtleScreenBase._onscreenclick�sD��� � �;� �G�G�N�N�=�3�.� /� � �G�G�L�L���,�h�� c�����yr�r��rPr�s �r�r�z0TurtleScreenBase._onkeyrelease..eventfun������r�r��r�r�r�r�s ` r�� _onkeyreleasezTurtleScreenBase._onkeyrelease�sD��� � �;� �G�G�N�N�,�s�2�D� 9� � �G�G�L�L�*�S�0�(� ;r�c��� ��?|�|jjdd�y|jjd|zd�y�fd�}|�|jjd|�y|jjd|z|�y)Nz z c�����yr�r�r�s �r�r�z.TurtleScreenBase._onkeypress..eventfun�r�r�r�r�s ` r�� _onkeypresszTurtleScreenBase._onkeypress�sp��� � �;��{������|�T�2��������4�d�;� ��{���� � �\�8�4���� � �_�s�2�H�=r�c�:� |jj�yr�)r�r_r�s r��_listenzTurtleScreenBase._listen�s�� � �����r�c�� |dk(r|jj|�y|jj||�y�Nr)r�� after_idler��r�r��ts r��_ontimerzTurtleScreenBase._ontimer�s2�� � ��6� �G�G� � �s� #� �G�G�M�M�!�S� !r�c�@� |jjdd|��S)Nr��image)r�� create_image)r�r�s r�� _createimagezTurtleScreenBase._createimage�s#�� ��w�w�#�#�A�q��#�6�6r�c�� |\}}|jj|||jz| |jzf�|jj ||��y�Nr�)r�r�r�r�� itemconfig)r�r�r\r�r�r�s r�� _drawimagezTurtleScreenBase._drawimage�sS�� ����1� �����t�a�$�+�+�o��r�D�K�K�/?�@�A� �����4�u��-r�c�v� |jj||��|jj|�yr�)r�r�� tag_lower)r�r�r�s r�� _setbgpiczTurtleScreenBase._setbgpic�s2�� � �����4�u��-� �����$�r�c�:� |jj|�Sr�)r�r�r�s r��_typezTurtleScreenBase._type�s�� ��w�w�|�|�D�!�!r�c�� |jj|�}tdt|�d�D�cgc]}||||dz f��}}|Scc}w)Nrrr�)r�r��range�len)r�r�r��i�pls r�� _pointlistzTurtleScreenBase._pointlist�s[�� ��W�W�^�^�D� !��).�q�#�b�'�1�)=� >�)=�A�r�!�u�r�!�A�#�w�h��)=�� >�� ��?s�Ac�D�|jj||||f��y)Nr�)r�rD)r��srx1�sry1�srx2�sry2s r��_setscrollregionz!TurtleScreenBase._setscrollregion�s�� �����T�4��t�$<��=r�c�@�|jj�}|D]}t|jj|��}g}|r8|dd\}}|j ||z�|j ||z�|dd}|r�8|jj|g|�����y)Nr)r��find_allr�r�r�) r�� xscalefactor� yscalefactorr�r�� coordinates� newcoordlistr�r�s r��_rescalezTurtleScreenBase._rescale�s������ � �"���D��t�w�w�~�~�d�3�4�K��L��"�2�A����1��#�#�A� �$4�5��#�#�A� �$4�5�)�!�"�o� � � �D�G�G�N�N�4� /�,� /�r�c�>� t|jt�s|j|jfS||cxur|cxur�/nn,|jj|jjfS|�||_|�||_|jj |||�yr�)r�r�rr�r�rarHs r��_resizezTurtleScreenBase._resize�s��� ��$�'�'�>�2��>�>�4�?�?�2� 2� � � 0�b� 0��7�7�$�$�d�g�g�&8�&8�8� 8� � �&�D�N� � !�(�D�O� ��� � �i��R�0r�c��� |jj�}|dkr|jd}|jj�}|dkr|jd}||fS)Nr�r|r�)r�rJrK)r�r|r�s r�� _window_sizezTurtleScreenBase._window_size s_�� ����#�#�%�� �A�:��G�G�G�$�E����%�%�'�� �Q�;��W�W�X�&�F��f�}�r�c�N� |jjj�yr�)r��tkrr�s r�rzTurtleScreenBase.mainloops�� � ��� � ���r�c�H� tj|||j��S)N)�parent)r� askstringr�)r�r*�prompts r�r)zTurtleScreenBase.textinput%s"�� ��%�%�e�V�D�G�G�D�Dr�c�N� tj||||||j��S)N)� initialvalue�minvalue�maxvaluer)r�askfloatr�)r�r*r!�default�minval�maxvals r�rzTurtleScreenBase.numinput4s.�� �"�$�$�U�F��.4�v�,0�G�G�5� 5r�)NNNFr��r�Nra)$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�rrr rrrrrr)rr�r�r�rr�s�����<� (�O� 37�05�(�28� -1�-2�(�.� � ��&� � G�,�&M�*=�$ <�>�$� "�7� .� �"� �>� 0� 1� � � E�5r�rc��eZdZ y)r�N�r�r�r�r�r�r�r�r�Ps ���  r�c� �eZdZy)�TurtleGraphicsErrorNr,r�r�r�r.r.Ys��r�r.c��eZdZ dd�Zdd�Zy)rNc�b�||_|dk(r#t|t�r�t|�}||_ y|dk(rWt|t�rd|j �j d�rEt|�r:tj|�}||_ y|dk(r g}||_ ytd|z��||_ y)N�polygonr��.gif�compoundzThere is no shape type %s) rr�r�r�r�lower�endswithrr r�r.�_data)r��type_�datas r�r-zShape.__init__es����� � �I� ��$��%��T�{���� ��g� ��$��$��:�:�<�(�(��0�V�D�\�'�.�.�t�4�D� �� � �j� ��D��� �&�&A�E�&I�J� J��� r�c�� |jdk7rtd|jz��|�|}|jj|||g�y)Nr3z Cannot add component to %s Shape)rr.r6r�)r��polyrir�s r�� addcomponentzShape.addcomponentusW�� � �:�:�� #�%�&H�BF�*�*�'M�N� N� �?��G� � � ���4��w�/�0r�r�)r�r�r�r-r;r�r�r�rr^s��� � 1r�rc�6�eZdZ dd�Zd d�Zd�Zd�Zd�Zd�Zy) �Tbufferc�F�||_dgg|z|_d|_d|_y)NrF)�bufsize�buffer�ptr�cumulate)r�r?s r�r-zTbuffer.__init__�s'���� ��v�h��(�� ������ r�Nc��|�2t|j�D]}dg|j|<�d|_y||_dgg|z|_d|_y)Nr)rr?r@rA)r�r?rs r�raz Tbuffer.reset�sR�� �?��4�<�<�(��"&��� � �A��)� ���#�D�L� �6�(�W�,�D�K���r�c��|jdkDrp|js;|jdz|jz|_||j|j<y|j|jj |�yyr�)r?rBrAr@r�r�s r��pushz Tbuffer.push�s_�� �<�<�!� ��=�=� �H�H�q�L�D�L�L�8���(,�� � �D�H�H�%�� � �D�H�H�%�,�,�T�2� r�c���|jdkDrY|j|j}|�ydg|j|j<|jdz |jz|_|Syr�)r?r@rAr�s r��popz Tbuffer.pop�s^�� �<�<�!� ��;�;�t�x�x�(�D��|��)-��� � �D�H�H�%� �H�H�q�L�D�L�L�8���� � r�c�T�|j|jjdg�z Sr�)r?r@�countr�s r�� nr_of_itemszTbuffer.nr_of_items�s"���|�|�d�k�k�/�/���7�7�7r�c�^�t|j�dzt|j�zS)N� )rr@rAr�s r�r�zTbuffer.__repr__�s#���4�;�;��#�%��D�H�H� �5�5r�)r�r�) r�r�r�r-rarErGrJr�r�r�r�r=r=�s#��?�� �3��8�6r�r=c���eZdZ dZedededfd�Zd�Zd d�Zd �Zd d �Z d �Z d �Z d d �Z d�Z d�Zd�Zd!d�Zd d�Zd�Zd�Zd�Zd�Zd�Zd�Zd"d�Zd�Zd d�Zd!d�Zd#d�Zd d�Zd$d�ZeZe Z eZ!e Z"eZ#y)%r Trrrc � �tj||�tdd�tdd�tdd�tdd�tdd�tdd�td|j��d �|_d d i|_||_||_td |_ g|_ |j�tjd k(r;|j�}|jddddd�|jddddd�yy)Nr1)������r�r�r�rr�))r�)������)rr�)������)������ )������)������)rXr�)����������)�����r\)r\r`)rVr^�rrX)�r^)�r`)r[r\)r]r_)rWr�)rcr])rYr[)rWrY)rbrW)r�r�)rrU)rQ)��Q�#@���Q�@)�G�z. @��Q��@)rgrf)rerdrR)���Q��rd)��Q���rf)�G�z. �rg)��Q�#�rerO)rkrh)rjri)rirj)rhrk)g�g$�)rerk)rgrj)rfri)rdrh))r�rP)r�r�)rPr�)rPrP))r���G�z�)rg�����'@)rPrl)�rr)r^rZra)r]rZr�)�arrowr�r5�square�triangler�r��nopicr�r�darwin�wm� attributesr�z-topmost�1�0)rr-rr��_shapes�_bgpics�_mode� _delayvaluer�� _colormode�_keysr6�sys�platformr.�call)r�r�rrr� rootwindows r�r-zTurtleScreen.__init__�s ���!�!�$��+�#�9�.G�H�"�9�/&�'� #�9�/H�I� #�9�/)�*�"�9�/+�,�"�9�.K�L�"�7�D�,<�,<�,>�?�%�� �* �"�~�� ��� � ����{�+����� � � � � � �<�<�8� #��*�*�,�J� �O�O�D�,��Z�� E� �O�O�D�,��Z�� E� $r�c��� td|_td|_|jd�|j d�|_d|_d|_d|_g|_ |jd�d D]}|jd|��|jd�|jddD]&}|jd|�|jd|��(dt_y) Nrr�allr�rqr�rr)r�r�)r�rzr{r�r��_bgpic� _bgpicname�_tracing�_updatecounter�_turtlesrrSr r|rr �_pen)r��btnr�s r�r6zTurtleScreen.clear�s��� � ��=����{�+��� � � �U���'�'��+�� �!����� ������ � � � �W���C� �L�L��s� #�� ������:�:�a�=�C� �J�J�t�S� !� �O�O�D�#� &�!��� r�Nc�L� |� |jS|j�}|dvrtd|z��||_|dvrX|j|j dz|j dz|jdz|j dz�dx|_|_|j�y)N�r��logo�worldzNo turtle-graphics-mode %s)r�r�rr�) ryr4r.rr�r�r�r�ra�r�rs r�rzTurtleScreen.modes��� �* �<��:�:� ��z�z�|�� �4� 4�%�&B�T�&I�J� J��� � �'� '� � !� !�4�>�>�/�1�"4�t���6F��6I�'+�~�~�q�'8�$�/�/�1�:L� N�(+� +�D�K�$�+� � � � r�c�v� |j�dk7r|jd�t||z �}t||z �}|j�\}}|j|dz |dz �|j|j } } |j |z |_|j|z |_||jz} | |j z} |j | z} |j| z}|j| | | |�|j|j| z |j | z �|j�y)Nr��) rr�rr&r�r�r�r�rrr-)r��llx�lly�urx�ury�xspan�yspan�wx�wy� oldxscale� oldyscaler r rrs r�r(z TurtleScreen.setworldcoordinates$s�� �* �9�9�;�'� !� �I�I�g� ��c�C�i� ���c�C�i� ���"�"�$���B� ����2��r�"�u�%�#�{�{�D�K�K�9� ��n�n�u�,�� ��o�o��-�� ��T�[�[� ���t�d�k�k�!���~�~��$������%�� ���d�D�$��5� � � �d�k�k�)�+�T�[�[��-B�C� � � � r�c��� |�F|j�jd�rtd|j|��}n't d��t |t �r td|�}||j|<y)Nr2r�z;Bad arguments for register_shape. Use help(register_shape)r1)r4r5rr�r.r�r�rw)r��namerls r�r$zTurtleScreen.register_shapeKsp�� �, �=��z�z�|�$�$�V�,��g�t�{�{�4�'8�9��)�+H�J�J� ��u� %��)�U�+�E�"�� � �T�r�c�� t|�dk(r|d}t|t�r/|j|�s|dk(r|St dt|�z�� |\}}}|jdk(r#|||fD�cgc]}td|z���c}\}}}d|cxkrdkrnnd|cxkrdkrnn d|cxkrdksnt d t|�z��d |||fzS#t t f$rt dt|�z��wxYwcc}w) Nr�rr�zbad color string: %s�bad color arguments: %sr���o@���bad color sequence: %s� #%02x%02x%02x) rr�rr�r.� TypeErrorr�r{�round)r�r:r��g�br�s r�� _colorstrzTurtleScreen._colorstrns�� � �u�:��?��!�H�E� �e�S� !��"�"�5�)�U�b�[�� �)�*@�3�u�:�*M�N�N� N��G�A�q�!� �?�?�c� !�01�1�a�y�9�y�!�u�U�1�W�~�y�9�G�A�q�!��a��3��Q�!�]�s�]��a��3��%�&>��U��&K�L� L��!�Q���*�*�� �:�&� N�%�&?�#�e�*�&L�M� M� N��:s�C�1C?�'C<c �@��|jd�s|St|�dk(r dD�cgc]}t|||dzd���}}n?t|�dk(r#|ddD�cgc]}dt||d�z��}}ntd|z��t �fd �|D��Scc}wcc}w) Nr�rW)r�r�r]rrSrbr�zbad colorstring: %sc3�B�K�|]}|�jzdz ���y�w)r�N)r{)�.0r�r�s �r�� z&TurtleScreen._color..�s �����9�b��Q����(��,�b�s�)r�rr�r.r�)r��cstrrr�r�s` r��_colorzTurtleScreen._color�s�������s�#��K� �t�9��>�09�:� �1�#�d�1�Q�q�S�k�2�&� �B�:� ��Y�!�^�/3�A�B�x�8�x�!�"�S��a��"�%�%�x�B�8�%�&;�d�&B�C� C��9�b�9�9�9�� ;��8s �B�Bc�z� |� |jS|dk(rt|�|_y|dk(rt|�|_yy)Nr�r�)r{r�r�)r��cmodes r�rzTurtleScreen.colormode�sA�� � �=��?�?� "� �C�<�#�E�l�D�O� �c�\�!�%�j�D�O�r�c�~� |jD]-}|j|j�|j��/yr�)r��_setmoderyra)r�r�s r�razTurtleScreen.reset�s0�� ��m�m�F� �O�O�D�J�J� '� �L�L�N�$r�c�� |jSr�)r�r�s r�r,zTurtleScreen.turtles�s�� � �}�}�r�c�|� |r|j|�}nd}|j|�}|�|j|�}|Sr�)r�r�r��r�rTr:s r�rzTurtleScreen.bgcolor�sF�� � ��N�N�4�(�E��E�� � �e�$�� � ��K�K��&�E�� r�c�� |� |jSt|�|_d|_|�t|�|_|jr|j �yyr�)r�r�r�rzr-)r��nrs r�r+zTurtleScreen.tracer�sR�� �$ �9��=�=� ��A��� ���� � �"�5�z�D� � �=�=� �K�K�M� r�c�B� |� |jSt|�|_yr�)rzr�r�s r�rzTurtleScreen.delay�s&�� � �=��#�#� #��u�:��r�c��� tjsdt_t�|jdkDr5|xjdz c_|xj|jzc_yy)NTrr�)r �_RUNNINGr�r�r�r�s r�� _incrementudczTurtleScreen._incrementudcsS��'��$�$�$(�L� !�� � �=�=�1� � � � �1� $� � � � �4�=�=� 0� � r�c��� |j}d|_|j�D]"}|j�|j��$||_|j �y�NT)r�r,� _update_data� _drawturtler�)r��tracingr�s r�r-zTurtleScreen.update sL�� ��-�-���� �����A� �N�N� � �M�M�O� � �� � � � �r�c�*� |j�dSr��rr�s r�r/zTurtleScreen.window_width��� � � � �"�1�%�%r�c�*� |j�dS�Nr�r�r�s r�r.zTurtleScreen.window_heightr�r�c�� |jSr�)r�r�s r�rzTurtleScreen.getcanvas&s�� ��w�w�r�c�J� t|jj��Sr�)�sortedrwr�r�s r�rzTurtleScreen.getshapes2s!�� ��d�l�l�'�'�)�*�*r�c�,� |j|||�yr�)r��r�r�r�r�s r�rSzTurtleScreen.onclick=s�� � ���C��c�*r�c��� |�*||jvrE|jj|�n)||jvr|jj|�|j||�yr�)r|�remover�r��r�r�r�s r�rzTurtleScreen.onkeyNsZ�� �, �;��d�j�j� �� � �!�!�#�&� �� � � "� �J�J� � �c� "� ���3��$r�c��� |�*||jvrG|jj|�n+|�)||jvr|jj|�|j||�yr�)r|r�r�r�r�s r�r zTurtleScreen.onkeypressls^�� �0 �;��d�j�j� �� � �!�!�#�&� �_��D�J�J�!6� �J�J� � �c� "� ����c�"r�c�&� |j�yr�)r�)r��xdummy�ydummys r�rzTurtleScreen.listen�s�� � � � �r�c�*� |j||�yr�)r�r�s r�r#zTurtleScreen.ontimer�s�� �$ � � �c�1�r�c��� |� |jS||jvr|j|�|j|<|j|j|j|�||_yr�)r�rxr�rr�)r��picnames r�rzTurtleScreen.bgpic�s]�� � �?��?�?� "� �$�,�,� &�$(�K�K��$8�D�L�L�� !� ���t�{�{�D�L�L��$9�:�!��r�c�*� |j|||�Sr�)rrHs r�r&zTurtleScreen.screensize�s�� � �|�|�I�z�2�6�6r�r��NNr*�rra)$r�r�r�r�r�r-r6rr(r$r�r�rrar,rr+rr�r-r/r.rrrSrr rr#rr&r"r%rrr!r�r�r�r r �s���� �H� $�V� �� �,�D��M�&F�P�< �D%�N!#�F+�6 :�)�* ���.�8 &�1� �&�&� � +�+�"%�<#�@ ��*"�07�&�M��K��K��H��Lr�r c�J�eZdZ edd�edd�edd�d�ZdZdZdZefd�Zd�Z d)d �Z d �Z d*d �Z d �Z d�Zd�Zd�Zd+dd�dedd fd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd)d�Zd�Zd�Zd �Zd)d!�Zd)d"�Zd#�Z d$�Z!d+d%�Z"d,d&�Z#d+d'�Z$d)d(�Z%eZ&eZ'eZ(eZ)eZ*eZ+eZ,eZ-e!Z.y )-� TNavigatorr��)r�r�r�r�rr�c���|j|_|j|_||_d|_|j �d|_|j|�tj|�yr�) �DEFAULT_ANGLEOFFSET� _angleOffset�DEFAULT_ANGLEORIENT� _angleOrientry� undobufferr;r�r�rar�s r�r-zTNavigator.__init__�sV�� �4�4��� �4�4����� ���� � � ���� � � � �d������r�c�l� tdd�|_tj|j|_y)Nr�)r� _positionr��START_ORIENTATIONry�_orientr�s r�razTNavigator.reset�s,�� ��s�C����"�4�4�T�Z�Z�@�� r�Nc�� |� |jS|dvry||_|dvrd|_d|_y|jdz |_d|_y)Nr�)r�r�rr��@r)ryr�r�� _fullcircler�s r�r�zTNavigator._setmode�s]�� � �<��:�:� � �4� 4� ��� � �(� (� !�D� � !�D� � $� 0� 0�� 3�D� � "�D� r�c�j� ||_d|z |_|jdk(rd|_y|dz |_y)Nihr�rr�)r�� _degreesPerAUryr��r�� fullcircles r��_setDegreesPerAUzTNavigator._setDegreesPerAU s9��9�%��� ��^��� �:�:�� #� !�D� � *�2� �D� r�c�(� |j|�yr�)r�r�s r�r;zTNavigator.degreess�� �* ���j�)r�c�D� |jtj�yr�)r�r��taur�s r�r_zTNavigator.radians,s�� � ���d�h�h�'r�c�`� |j|j|zz}|j|�yr�)r�r��_goto)r�r<�endes r��_gozTNavigator._go:s(��7��~�~�� � �x� 7�7�� � � �4�r�c�d� ||jz}|jj|�|_yr�)r�r�r��r�r�s r��_rotatezTNavigator._rotate?s+��K� ��#�#�#���|�|�*�*�5�1�� r�c�� ||_yr��r�)r��ends r�r�zTNavigator._gotoDs ��*���r�F��fill_gapr��returnc�t� |�|n|jd}|�|n|jd}t||�|_yr�)r�r)r�r�r�r��new_x�new_ys r�rtzTNavigator.teleportHs=�� (��]�����q�(9���]�����q�(9���u�e�,��r�c�(� |j|�yr��r��r�r<s r�rDzTNavigator.forwardOs�� �( ����r�c�*� |j| �yr�rrs r�r0zTNavigator.backfs�� �" ���(��r�c�*� |j| �yr��r�r�s r�r`zTNavigator.rightzs�� �$ � � �e�V�r�c�(� |j|�yr�rr�s r�rQzTNavigator.left�s�� �$ � � �U�r�c�� |jSr�r�r�s r�r\zTNavigator.pos�s�� ��~�~�r�c�"� |jdSr�r�r�s r�r~zTNavigator.xcor���� ��~�~�a� � r�c�"� |jdSr�r�r�s r�rzTNavigator.ycor�r r�c�p� |�|jt|��y|jt||��yr�)r�r)r�r�r�s r�rJzTNavigator.goto�s0�� �: �9� �J�J�u�a�y� !� �J�J�u�Q��{� #r�c�L� |jdd�|jd�yr�)rJrer�s r�rMzTNavigator.home�s"�� � � � �!�Q�� ����r�c�V� |jt||jd��yr��r�rr�)r�r�s r�rjzTNavigator.setx�s%�� � � � �5��D�N�N�1�-�.�/r�c�V� |jt|jd|��yr�r)r�r�s r�rkzTNavigator.setys%�� � � � �5�����*�A�.�/r�c��� |� t||�}t|t�r|}n5t|t�r t|�}nt|t�r |j}t |jz �Sr�)rr�r�r�r��abs)r�r�r�r\s r�r<zTNavigator.distance#sb�� �* �=���1�+�C� �a�� ��C� ��5� !���)�C� ��:� &��+�+�C��3����'�(�(r�c�� |� t||�}t|t�r|}n5t|t�r t|�}nt|t�r |j}|jz \}}t t jt j||��d�dz}||jz}|j|j|zz|jzS�Nr���v@) rr�r�r�r�r�r�r;�atan2r�r�r�r�)r�r�r�r\�results r�rwzTNavigator.towardsCs��� �* �=���1�+�C� �a�� ��C� ��5� !���)�C� ��:� &��+�+�C��T�^�^�#���1��t�|�|�D�J�J�q�!�$4�5�r�:�U�B���$�$�$�$���!�!�D�$5�$5�f�$<�<��@P�@P�P�Pr�c��� |j\}}ttjtj||��d�dz}||j z}|j |j|zz|jzSr) r�r�r�r;rr�r�r�r�)r�r�r�rs r�rKzTNavigator.headingfsr�� ��|�|���1��t�|�|�D�J�J�q�!�$4�5�r�:�U�B���$�$�$�$���!�!�D�$5�$5�f�$<�<��@P�@P�P�Pr�c�� ||j�z |jz}|j}||dz z|z|dz z }|j|�y)N�@)rKr�r�r�)r��to_angler��fulls r�rezTNavigator.setheadingusV�� �,�D�L�L�N�*�D�,=�,=�=�������t�B�w���$�t�B�w�.�� � � �U�r�c ��� |jr-|jjdg�d|j_|j�}|� |j}|�Bt |�|jz }dt tdt |�dz zd�|z�z}d|z|z }d|z}d |ztjtj|�|jz�z}|d kr | | | }}}|j�} |j�} |d k(r|jd d �n|jd �|j|�t|�D]F} |j|�|j!|�|jd �|j|��H|j| �|d k(r|j| | �|j|�|jrd |j_yy) N�seqTr�� g@g�M@r�r�rrF)r�rErBrqr�rr��minr�r�r_r��_tracerr�r�rr�) r��radius�extent�stepsrq�fracr��w2�l�tr�dlrs r�r5zTNavigator.circle�s��� �: �?�?� �O�O� � �%�� )�'+�D�O�O� $�� � � �� �>��%�%�F� �=��v�;�t�/�/�/�D��c�#�b��V��S��0�$�7��<�=�=�E� �&�L�5� �� �1�W�� �&�L�4�8�8�D�L�L��$4�T�5G�5G�$G�H� H�� �A�:��r�A�2��s�"�q�A� �\�\�^�� �[�[�]�� �A�:� �L�L��A� � �J�J�q�M� � � �R���u��A� �J�J�u� � �H�H�Q�K� �J�J�q�M� �L�L��O� � � � �b�S�� �A�:� �L�L��R� � � � �5�� �?�?�',�D�O�O� $� r�c��yr�r�)r�r�s r�rqzTNavigator.speed����=r�c��yr�r�)r��ar�s r�r zTNavigator._tracer�r*r�c��yr�r�)r�r�s r�r�zTNavigator._delay�r*r�r�)rr�r�)/r�r�r�rr�� DEFAULT_MODEr�r�r-rar�r�r;r_r�r�r��boolrtrDr0r`rQr\r~rrJrMrjrkr<rwrKrer5rqr r�rAr4r1rcrRr]rfrgrdr�r�r�r�r��s����#�s�O��#�s�O��#�s�O�'���L�����(��A� #�.�*�0 (�� 2� �-�5�-�D�-�T�-��.�(�*�* � !� !�!$�F �0�$0�$)�@!Q�F Q��8=-�B>�>�>� �B� �B��H� �B� �B��H� �F��K� �Dr�r�c���eZdZ edfd�Zededfd�Zdd�Zdd�Zd �Zd �Z d �Z dd �Z d �Z d�Z d�Zddd�deddfd�Zd�Zd�Zd�Zdd�Zdd�Zd d�Zd�Zd�ZeZeZeZe Ze ZeZeZy)!�TPenrbc�J�||_d|_tj|�yr�)� _resizemoder�r1�_reset)r�rbs r�r-z TPen.__init__�s��%������ � � �D�r�rXrBc��d|_d|_||_||_d|_d|_d|_d|_d|_d|_ d|_ y)Nr�Tr�)r�r�r�)r�r�r�r�) �_pensize�_shown� _pencolor� _fillcolor�_drawing�_speed�_stretchfactor� _shearfactor�_tilt� _shapetrafo� _outlinewidth)r�rXrBs r�r4z TPen._reset�sS���� ��� �!���#����� ��� �&�������� �+�����r�Nc�p� |� |jS|j�}|dvr|j|��yy)N)�auto�userr��rb)r3r4rW)r��rmodes r�rbzTPen.resizemode�sA�� �* �=��#�#� #�� � � �� �0� 0� �H�H��H� &� 1r�c�F� |� |jS|j|��y)N)rZ)r6rW)r�r|s r�rZz TPen.pensizes&�� �" �=��=�=� � �����r�c�D� |jsy|jd��y�NF�rY�r:rWr�s r�r[z TPen.penup.s!�� ��}�}� � �����r�c�D� |jry|jd��y)NTrIrJr�s r�rYz TPen.pendown<s!�� � �=�=� � �����r�c�� |jSr�)r:r�s r�rOz TPen.isdownJs�� ��}�}�r�c�� dddddd�}|� |jS||vr||}n%d|cxkrdkrnntt|��}nd}|j|� �y) Nrr�rcr�r�)�fastest�fast�normal�slow�slowestr�g%@)rq)r;r�r�rW)r�rq�speedss r�rqz TPen.speedYsf�� �4�b�1�Q�!�M�� �=��;�;� � �F�?��5�M�E� �5� �4� ���e� �%�E��E� ���u��r�c�8� |rbt|�}|dk(r|dx}}n|dk(r|\}}n |dk(r|x}}|j�}|j�}|j||��y|j|j�|j|j �fS)Nr�rrr�)rXrB)rr�rWr�r8r9)r�rTr&�pcolor�fcolors r�r:z TPen.colors��� �> ��D� �A��A�v�"&�q�'�)����a��!%�����a��"&�&����^�^�F�+�F��^�^�F�+�F� �H�H�f��H� 7��;�;�t�~�~�.�� � �D�O�O�0L�L� Lr�c�� |r4|j|�}||jk(ry|j|��y|j|j�S)N)rX)r�r8rWr�r�s r�rXz TPen.pencolor�sJ�� �8 ��N�N�4�(�E�����&�� �H�H�e�H� $��;�;�t�~�~�.� .r�c�� |r4|j|�}||jk(ry|j|��y|j|j�S)N)rB)r�r9rWr�r�s r�rBzTPen.fillcolor�sJ�� �6 ��N�N�4�(�E�����'�� �H�H�u�H� %��;�;�t���/� /r�Fr�r�r�c�r� |j�}|r|jd��|j|��yrH)rOrW)r�r�r�r�rYs r�rtz TPen.teleport�s3�� ��+�+�-�� � �H�H�U�H� #� �����!r�c�*� |jd��y)NT��shown�rWr�s r�rpzTPen.showturtle�s�� � ���t��r�c�*� |jd��y)NFr[r]r�s r�rLzTPen.hideturtle s�� � ���u��r�c�� |jSr�)r7r�s r�rPzTPen.isvisible s�� ��{�{�r�c ��� |j|j|j|j|j|j |j |j|j|j|jd� }|s|s|St|t�r|}ni}|j|�i}|D] }||||<� |jr|jjd|f�d}d|vr|j|dk7rd}d|vr?t|dt �r|j#|df�|d<|j|dk7rd}d|vr|j|dk7rd}|r|j%�d|vr |d|_d|vr |d|_d|vr |d|_d|vr5t|dt �r|j#|df�|d<|d|_d |vr |d |_d |vr |d |_d |vr&|d }t|t&t(f�r||f}||_d |vr |d |_d |vr |d |_ d|vr |d|_d|vr |d|_ d |vsd|vsd |vr}|j\} } |j} t+j,|j�t+j.|j�} } | | z| | | z| zz| | z| | | | zz zf|_|j3�y)N) r\rYrXrBrZrqrb� stretchfactorror�rurWFrYTrXrZrBrqrbraror�r\ru)r7r:r8r9r6r;r3r<r=r@r>r��dictr-r�rEr�r��_newLiner�r�r�r�r�r?r�)r�rW�pendict�_pd�p�_p_bufr��newLine�sf�scx�scy�shf�sa�cas r�rWzTPen.pen( s���- �\#'�+�+�"&�-�-�"&�.�.�"&�/�/�"&�-�-�"&�+�+�"&�"2�"2�"&�"5�"5�"&�"3�"3�"&�"4�"4�"&�*�*� ���w��J� �c�4� ��A��A� ��������C��c�(�F�3�K�� �?�?� �O�O� � �%��� 1��� ��>��}�}��)� �,��� ��?��!�J�-��/� $����*� �/?� @��*� ��~�~��:��.��� ��>��}�}��)� �,��� � �M�M�O� ��>��i�L�D�M� ��?��z�]�D�N� ��>��i�L�D�M� �!� ��!�K�.�%�0�!%����;��0A�!B��+��� �n�D�O� �a�<��G�*�D�K� �1� � ���D� � �a� ��?�#�B��"�s�E�l�+��"�X��"$�D� � �A� � !�-� 0�D� � ��>�!"�9��D� � �a�<��G�*�D�K� �Q�;��6��D�J� �a� �6�Q�;�-�1�2D��*�*�H�C���#�#�C��X�X�d�j�j�)�4�8�8�D�J�J�+?��B�!$�R���c�"�f�r�k�):�!$��R���b�3�r�6�k�):� <�D� � � � �r�c��yr�r��r��usePoss r�rcz TPen._newLine� r*r�c��yr�r�)r�rI�forceds r�r�z TPen._update� r*r�c��yr�r�rSs r�r�z TPen._color� r*r�c��yr�r�rSs r�r�zTPen._colorstr� r*r�r�r��T)TF) r�r�r�r�r-r4rbrZr[rYrOrqr:rXrBr/rtrprLrPrWrcr�r�r�r|r{r^rVr>rrrNr�r�r�r1r1�s����#'�|�"4�� #�:�.�#�K�0� �'�8 �.  � � �$�L,M�\#/�J"0�H"�5�"�D�"�T�"� �� �{�~>�>�>�>� �E� �B� �B� �B� �D� �B� �Br�r1c��eZdZ d�Zd�Zy)� _TurtleImagec�B�||_d|_|j|�yr�)r�r� _setshape)r�r�� shapeIndexs r�r-z_TurtleImage.__init__� s���� ��� � ���z�"r�c�6�|j}||_|jdcxk(r|j|jk(ry|jdcxk(r|j|jk(ry|jdvr|j |j �n1|jdk(r"|j D]}|j |��|j|j|_|jdk(r|j �|_y|jdk(r.|j|jdj�|_y|jdk(r;|j|jD�cgc]}|j ���c}|_yycc}w)Nr1r�)r�r1r3r�) r�r{rrwr��_itemr�r�r6)r�r{r�r�s r�rzz_TurtleImage._setshape� sV������$��� �:�:�� F�f�n�n�Z�&@�&F�&F� F� � G� �:�:�� D�F�N�N�:�$>�$D�$D� D� � E� �:�:�-� -� �N�N�4�:�:� &� �Z�Z�:� %�� � �����t�$�#��^�^�J�/�5�5�� � �:�:�� "��+�+�-�D�J� �Z�Z�7� "��,�,�V�^�^�G�-D�-J�-J�K�D�J� �Z�Z�:� %�*0�.�.��*D�*J�*J�L�*J�48�&�,�,�.�*J�L�D�J�&��Ls�5FN)r�r�r�r-rzr�r�r�rxrx� s���#� Lr�rxc��eZdZ gZdedededfd�Zd�Zd�Zd�Zd �Z d �Z d �Z d �Z d;d �Z d�Zd�Zd�Zd;dd�deddfd�Zd�Zdd�Zd�Zd�Zd?d �Zd!�Zd"�Zd#�Z d$�Z!d��&G�H� H��������D�&�+�+�-�0� � � �d�������t�$�%�1�1�3���"�6�5�1�� ��� �"���*.�.������� �#(�� �%�1�1�3��� �N�N�+����*�*�+�� ����-���!�.�1��� � � �r�c�� tj|�tj|�|j �|j �|j �yr�)r�rar1r4�_clearr�r�r�s r�razRawTurtle.reset sA�� �$ ����� � � �D�� � � � � ���� � � �r�c�D� |�|dkrd|_yt|�|_yr�)r�r=)r��sizes r�rizRawTurtle.setundobuffer s&�� � �<�4�1�9�"�D�O�%�d�m�D�Or�c�R� |j�y|jj�Sr�)r�rJr�s r�rzzRawTurtle.undobufferentries3 s)�� � �?�?� "�����*�*�,�,r�c�� dx|_|_|jD]}|jj |��|jj �|_g|_|jr%|jj|j�|j g|_|j�|j|j�yr�)r�r�r�r�r�r�r�r�r:r�r�r8rir�r�s r�r�zRawTurtle._clear@ s���*�*.�.������J�J�D� �K�K� � �� %��#�{�{�6�6�8������ �=�=� � � � #� #�D�N�N� 3��*�*�+�� � ���� ���4�/�/�0r�c�F� |j�|j�yr�)r�r�r�s r�r6zRawTurtle.clearN s�� � � � � � � � �r�c�*�|jj�|jjdk7ryt|j�dkDrG|jj |j |j|j|j�yyr�) r�r�r�rr�r�r�r8r6r�s r�r�zRawTurtle._update_data] so�� � � �!�!�#� �;�;� %� %�� *� � �t��� �� "� �K�K� !� !�$�"6�"6��8H�8H�"&�.�.�$�-�-� A� #r�c�� |j}|jdk(ry|jdk(rL|j�|j�|j �|j |j �y|j�|jdk(r6|j�D]}|j��|j �yyr�) r�r�r�r�r�r�rzr�r,)r�r�r�s r�r�zRawTurtle._updatee s��� ����� �?�?�a� � � �_�_�� !� � � � � � � � � �N�N� � �M�M�&�,�,� -� � � � ��$�$��)����)�A��M�M�O�*���� �*r�c�<� |jj||�Sr�)r�r+)r��flagrs r�r zRawTurtle._tracerw s �� �$�{�{�!�!�$��.�.r�c�8�|jj|�Sr�)r�r�rSs r�r�zRawTurtle._color� s���{�{�!�!�$�'�'r�c�8�|jj|�Sr�)r�r�rSs r�r�zRawTurtle._colorstr� s���{�{�$�$�T�*�*r�c�� t|t�r|S |\}}}|j j dk(r#|||fD�cgc]}td|z���c}\}}}d|cxkrdkrnnd|cxkrdkrnn d|cxkrdksnt dt|�z��d|||fzS#ttf$rt dt|�z��wxYwcc}w)Nr�r�r�rr�r�r�)r�rr�r�r.r�r{r�)r�rTr�r�r�r�s r��_ccz RawTurtle._cc� s��� � �d�C� ��K� M��G�A�q�!� �;�;� !� !�S� (�01�1�a�y�9�y�!�u�U�1�W�~�y�9�G�A�q�!��a��3��Q�!�]�s�]��a��3��%�&>��T��&J�K� K��!�Q���*�*�� �:�&� M�%�&?�#�d�)�&K�L� L� M��:s�B�C �'CFr�r�r�c�T� |j�}|j�}|r|jd��|r|s|j�|�|n|jd}|�|n|jd}t ||�|_|j|��|r|s|j �yyy)NFrIrr�)rOrCrWr?r�rr2)r�r�r�r�rY� was_fillingr�r�s r�rtzRawTurtle.teleport� s���! �D�+�+�-���l�l�n� � � �H�H�U�H� #� �x� �M�M�O��]�����q�(9���]�����q�(9���u�e�,��� �����!� �x� �O�O� � (�;r�c�v� |j}|j|j�|j}d|_d|_t |�}||_||_||_t ||jj �|_|jj|�|j|jj j}|dk(r |j�|j_ n�|dk(r8|j|jdj�|j_ n]|dk(rX|j|jj jD�cgc]}|j���c}|j_ |j�|_|j#�|Scc}w)Nr1r�r�r3)r�rcr:r�rrxr{r�r�rwrr�r}r�r6r�r�r�)r�r�r��q�ttyper�s r�r9zRawTurtle.clone� s\�� ����� � � �d�m�m�$������� ��� � �T�N���� ��� ������� � �(>�(>�?��������q�!����t�{�{�5�5�6�<�<�� �I� �#�/�/�1�A�H�H�N� �g� �#�0�0�����1H�1N�1N�O�A�H�H�N� �j� �$�n�n�T�[�[�-C�-C�D�J�J�L�J�8<�f�0�0�2�J�L�A�H�H�N�"�.�.�0��� � � � ���� Ls�&F6c��� |�|jjS||jj�vrt d|z��|jj |�|j �y)NzThere is no shape named %s)r�r{r�rr.rzr�)r�r�s r�rlzRawTurtle.shape� s_�� �& �<��;�;�)�)� )��t�{�{�,�,�.�.�%�&B�T�&I�J� J� � � ���d�#� � � �r�c�*� ||cxur|cxur�!nn|j\}}|||jfS|dk(s|dk(r td��|� |�||f}n%||f}n |�|jd|f}n |j}|� |j}|jd||��y)Nrz(stretch_wid/stretch_len must not be zerorC)rbrar�)r<r@r.rW)r�� stretch_wid� stretch_lenr�ras r�rmzRawTurtle.shapesize s��� �( �+� 8�� 8�'+�':�':� $�K��� �T�-?�-?�?� ?� �!� �{�a�/�%�&P�Q� Q� � "��"� +�[� 8� � +�[� 8� � � $� �/�/��2�K�?�M� �/�/�M� �?��(�(�G� ���F�,�g� � ?r�c�H� |� |jS|jd|��y)NrC)rbro)r=rW)r��shears r�rozRawTurtle.shearfactor< s*�� �$ �=��$�$� $� ���F���6r�c�X� tjddd��|j|�y)Nzturtle.RawTurtle.settiltangle()zn{name!r} is deprecated since Python 3.1 and scheduled for removal in Python {remove}. Use tiltangle() instead.)r�� )r�)�warnings� _deprecatedrvr�s r�rhzRawTurtle.settiltangleS s1�� �( ���>�X�$+� -� ���u�r�c�H� |�Itj|j� |jz}||jz |j zS| |jz|jz}tj |�tjz}|jd|��y)NrC)rbru) r�r;r>r�r�r�r_r�rW)r�r�rus r�rvzRawTurtle.tiltanglen s��� �< �=��L�L����,�,�t�/@�/@�@�D��4�-�-�-��1A�1A�A� A��6�D�.�.�.��1B�1B�B�D��<�<��%����0�D� �H�H��T�H� 2r�c�J� |j||j�z�yr�)rvr�s r�ruzRawTurtle.tilt� s!�� � ���u�t�~�~�/�/�0r�c�&� ||cxur|cxur|cxur � |jS|j\}}}}|�|}|�|}|�|}|�|}||z||zz dk(r td��||||f|_tj| |�tjz} tj | �tj | �} } | |z| |zz | |z| |zz | |z| |zz| |z| |zzf\} } }}| |f|_| |z |_| |_ |jd��y)Nrz0Bad shape transform matrix: must not be singularrCrD) r?r.r�rr�r�r�r<r=r>rW)r��t11�t12�t21�t22�m11�m12�m21�m22�alfarmrn�a11�a12�a21�a22s r�rnzRawTurtle.shapetransform� sB�� �& �#� +�� +�� +��#�#� #� ,�!�-�-���S�#�s� �?�#�C� �?�#�C� �?�#�C� �?�#�C� ��9�s�S�y� �A� %�%�&X�Y� Y���c�3�/����z�z�3�$��$�t�x�x�/�����$�����$��B�� ��f�r�#�v�o�r�#�v��3��� ��f�r�#�v�o�r�#�v��3���@���S�#�s�!�3�h�����G����� � ���F��#r�c �l� |j}|j\}}|j\}}t|||jz|j z �}dt |�z |z\}}|D�� cgc]<\}} |||z|| zz|j z z|| |z|| zz|jz zf��>c} }Scc} }w)Nr�)r�r�r�rr�r�r) r�r:r��p0�p1�e0�e1�er�r�s r�� _polytrafozRawTurtle._polytrafo� s��� ����������B������B� �"�b�6�=�=�(�6�=�=�8� 9����A��,�!�#���B�IM�O�IM�v��1��R��T�"�Q�$�Y�� � �-�-�r�B�3�q�5��A��:�v�}�}�2L�/L�M�IM�O� O��Os�+AB0c��� |jj|jj}|jdk(r)|j |j |jdk(�Sy)Nr1r3)r�rwr�r{r� _getshapepolyr6)r�rls r�rHzRawTurtle.get_shapepoly� sX�� �� � �#�#�D�K�K�$:�$:�;�� �;�;�)� #��%�%�e�k�k�5�;�;�*�3L�M� M� $r�c� ����� |jdk(s|r|j\����nE|jdk(r%td|jdz �}|dd|f\����n|jdk(r|St ����fd�|D��S)NrCrBr�g@rr�c3�P�K�|]\}}�|z�|zz�|z�|zzf���y�wr�r�)r�r�r�r�r�r�r�s ����r�r�z*RawTurtle._getshapepoly..� s3�����J�'���A�c�!�e�c�!�e�m�S��U�S��U�]�3�'�s�#&)r3r?�maxr6r�)r�r1r3r&r�r�r�r�s @@@@r�r�zRawTurtle._getshapepoly� s���� � � � �v� %��!%�!1�!1� �C��c�3� � � �� '��A�t�}�}�S�(�)�A�!"�A�q�!�� �C��c�3� � � �� +��N��J�'�J�J�Jr�c �� |j}|j|jj}|j}|jj }|j �rd|jdk(�rT|jdkD�rDd|_ |j}|dk(r�|jdk(rd}n(|jdk(r |j}n |j}|j|j|��}|j |j"}}|j%|||||d��y|d k(r|j'||j(|�y|d k(ryt+||�D]i\} \} }}|j|j| d��} |j%| | |j-|�|j-|�|jd���kyy|jry|dk(r|j%|d d d �nZ|d k(r5|j'||j(|jd j�n |d k(r|D]} |j%| d d d ��d|_ y)NrFr1r�r�rBT�rir�r|r�r�r3�rmrmrmr�r�)r�rwr�r{rr}r7r�r�r�r6r3r6r@r�r�r9r8r�r�r��zipr�) r�r�rlr��titem�tshaper��fc�ocr�r:s r�r�zRawTurtle._drawturtle� s�� 8��������t�{�{�5�5�6��� � ��� � �!�!�� �;�;�6�0�0�A�5�&�/�/�A�:M�',�D� $��[�[�F�� �!��#�#�z�1�q�1��%�%��/�T�]�]���+�+�a�����(:�(:�6�(B�C�����$�.�.�B��� � ���B��<=�4�!�I��'�!��!�!�%�����@��*�$�,/��v�,>�(�D�.�4��R��?�?�4�+=�+=�d�D�+I�J�D��$�$�T�4�d�h�h�r�l�-1�X�X�b�\��AS�AS�Y]�%�_�-?�%� �'�'��� �!�� � ��(@�"�b�I��'�!��!�!�%����*0�.�.��*A�*G�*G�I��*�$�!�D��$�$�T�+C�R��L�"�'+�D� $r�c �� |j}|j|jj}|j}|j }|dk(r�|j �}|jdk(rd}n(|jdk(r |j}n |j}|j|j|��}|j|j}}|j|||||d��n�|dk(r/|jd�}|j!||j"|�n�|d k(r�g}|D]#} |j �} |j%| ��%t'|�}t)||�D]i\} \} }}|j|j| d��} |j| | |j+|�|j+|�|jd���k|j,j%�|j.j1d |f�|S) Nr1r�r�rBTr�r�r�r3rs)r�rwr�r{rr6r�r3r6r@r�r�r9r8r�r�r�r�r�r�r�r�r�r�rE) r�r�rlr�r��stitemr�r�r��elementr�r:s r�rszRawTurtle.stamp" s��� ��������t�{�{�5�5�6��� � ������ �I� ��'�'�)�F����:�-�1�q��!�!�V�+����Q��'�'�!��O�O�D�$6�$6�v�$>�?�E��_�_�d�n�n��B� � � �V�U��R�89�t� � E� �g� ��(�(��,�F� � � �f�d�n�n�f� =� �j� ��F�!���)�)�+��� � �d�#�"��6�]�F�(+�F�F�(;�$��n�t�R�����t�'9�'9�$��'E�F��� � ��t�$�(�(�2�,�)-���"��T�=O�=O�UY�!�[�)<� �����v�&� �����g�v�.�/�� r�c�l� ||jvrit|t�r#|D]}|jj |��n|jj |�|jj |�d|f}|j }||jvry|jj|�}|jj |�||jkr!|jdz |jz|_ |jj|jdz|jzdg�y)Nrsr�) r�r�r�r�r�r�r�r@�indexrAr?�insert)r��stampid�subitemr��bufr�s r�� _clearstampzRawTurtle._clearstampO s��� � �d�o�o� %��'�5�)�&�G��K�K�'�'��0� '�� � �#�#�G�,� �O�O� "� "�7� +���!���o�o�� �s�z�z� !� �� � � � ��&�� � � ���$�� �C�G�G� ��w�w��{�c�k�k�1�C�G� � � ���3�7�7�1�9�c�k�k�1�D�6�:r�c�H� |j|�|j�yr�)r�r�)r�r�s r�r7zRawTurtle.clearstampe s �� � ����!� � � �r�c��� |�|jdd}n$|dk\r|jd|}n|j|d}|D]}|j|��|j�yr�)r�r�r�)r�r��toDeleter�s r�r8zRawTurtle.clearstampst sd�� �" �9����q�)�H� �!�V����r��*�H����q�r�*�H��D� � � �T� "�� � � �r�c �� |j|j|jt|jt �f}|j }d|j|||j|jdd|j|j�|jddff}|jr|jj|�|j}|j�r1|jdk(�r!||z }|d|j zdz|d|j"zdzz}dt%|dzdd|jzz|jzz �z}|d|z z} t'd|�D]t} | dk(rd } nd } || | zz|_|jr?|j)|j*||jf|j|j| �|j-��v|jr)|j)|j*d d |j� �|jr|jj/|�t|jt �r|jj/|�||_|j0r|j2j/|�t5|j�dkDr|j7�|j-�y)N�gor�rrr�r�皙�����?r�TF�rmrmr��rir|�*)r:r8r6r�r�r�r�r�r�r�r r�r�rEr;r�r�r�r�rr�r�r�r�r�r�rrc) r�r��go_modesr�� undo_entry�start�diff�diffsq�nhops�deltar�r�s r�r�zRawTurtle._goto� sa�� � �]�]��^�^��]�]������5�7�������D�N�N�C���+�+��&�&�q�)��'�'��(<�(<�=��j�j��m�%�� � �?�?� �O�O� � �� ,����� �;�;�6�?�?�a�/���I�D��1�g�f�m�m�+�a�/�4��7�6�=�=�3H�1�2L�L�F��c�6�3�;��C����,<�)=�d�k�k�)I�J�K�K�E��C��I�&�E��1�e�_����6��C��C�!&����!2����=�=��$�$�T�%9�%9�&+�T�^�^�%<�%)�^�^�T�]�]�C�I�� � ��%��}�}�� � ��!5�!5�7G�46�d�m�m�!�M� �=�=� � � � #� #�C� (� �d�n�n�d� +� �N�N� !� !�#� &���� � � � �J�J� � �c� "� �t��� �2� %� �M�M�O� � � �r�c�V� |\}}}}|\}}}} |\} } } } |j}t|j|z �dkDr td�| |_| |_| ddgk(rd}n|}|j | | ||��|jD�cgc]}|| vs�|j|�dk(r|��}}|D].}|j|�|jj|��0|}|jr�|jdk(r�||z }|d|jzd z|d|jzd zz}dt|dzd d |jzz|jzz �z}|d |z z}t!d|�D]V}|dk(rd }nd}|||zz|_|r+|j |j"||jf|||�|j%��X|r|j |j"dd|��||_|j&rOt)|j*�dkDr|j*j-�|j*gk(rd|_d|_| rH|j.gk(rd|_td�n&|j.�|j.j-�|j%�ycc}w)Nr�z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!rmr�r�r�r�rrr�r�r�TFr�zUnwahrscheinlich in _undogoto!)r�rr�r�r�r�r�r�rr�r�r;r�r�r�r�rr�r�r�rr�rGr�)r��entry�old�newr��coodata�drawing�pc�psrC�cLI�cLr r�r��usepcr�todeleter�r�r�r�r�r�r�s r�� _undogotozRawTurtle._undogoto� s��� �&+�#��S�(�G�#+� ���R��$���R��U����� �t�~�~��#� $�s� *� �9� :�"������ �&�&�!� !��E��E�����b�u�B��7�#�z�z�D�z�!�a�u�n�(.� � �Q��6�(A��z��D��A� �N�N�1� � �J�J� � �a� ���� �;�;�6�?�?�a�/���9�D��1�g�f�m�m�+�a�/�4��7�6�=�=�3H�1�2L�L�F��c�6�3�;��C����,<�)=�d�k�k�)I�J�K�K�E��C��I�&�E��1�e�_����6��C��C�!$�u�q�y������$�$�T�%9�%9�&+�T�^�^�%<�%'��S�2�� � ��%��� � ��!5�!5�7G�46�b�!�B���� � � ��4�:�:���"�� � ��� ��z�z�R��%*��"�!�� � ��~�~��#�!%����6�7����+����"�"�$� � � ���YDs � J&�J&c�&� |jr(|jjd||jf�||jz}|jj |�}|j j }|dk(r�|jdkDrqd|jz}dtt|�|z �z}d|z|z }t|�D]2}|jj |�|_|j��4||_|j�y)N�rotr�rg@r�) r�rEr�r�r�r�r�r;r�rrr�)r�r�� neworientr��anglevelr#r�rs r�r�zRawTurtle._rotate s��� � �?�?� �O�O� � �%���0B�0B�!C� D� ��#�#�#���L�L�'�'��.� ��+�+�&�&�� �a�<�D�K�K�!�O��T�[�[�(�H���C��J�x�/�0�0�E���I�e�O�E��5�\��#�|�|�2�2�5�9�� �� � ��"�!�� � � � �r�c��� t|j�dkDr�|jj|j|j|j |j �|jj�|_|jj|j�n'|jj|jd��g|_|r|jg|_yy)Nr�T)r�) rr�r�r�r�r8r6r�r�r�r�rps r�rczRawTurtle._newLine s��� � �t��� �1� $� �K�K� !� !�$�"6�"6��8H�8H�&*�n�n�d�m�m� E�#'�;�;�#:�#:�#<�D� � �J�J� � �d�2�2� 3� �K�K� !� !�$�"6�"6�D� !� A���� � $���/�D� � r�c�8� t|jt�Sr�)r�r�r�r�s r�rCzRawTurtle.filling( s�� ��$�.�.�$�/�/r�c�x� |j�sD|jj�|_|jj |j�|j g|_|j�|jr'|jjd|jf�|j�y)N� beginfill) rCr�r�r�r�r�r�r�rcr�rEr�r�s r�r2zRawTurtle.begin_fill6 s~�� ��|�|�~�!�[�[�4�4�6�D�N� �J�J� � �d�n�n� -��.�.�)��� � � �� �?�?� �O�O� � �+�t�~�~�!>� ?� � � �r�c�r� |j�r�t|j�dkDro|jj |j |j|j ��|jr'|jjd|j f�dx|_|_|j�yy)Nrr��dofill) rCrr�r�r�r�r9r�rEr�r�s r�r?zRawTurtle.end_fillK s��� � �<�<�>��4�>�>�"�Q�&�� � �%�%�d�n�n�d�n�n�+/�?�?�&�<��?�?��O�O�(�(�(�D�N�N�)C�D�.2� 2�D�N�T�^� �L�L�N� r�c�Z� |s}t|ttf�r5|j|�}|jt |jd�z}nh|j }|sZ|jt |jd�z}n6|�#|jt |jd�z}|j|�}|j�}|jr-|jjdg�d|j_ |j�dk(r|j�|j�|j|�|j|�|j!d�|j|�|jrd|j_ yy#|j|�wxYw)NrbrTrBrF)r�rr�r�r6r�r8rWr�rErBrbrNrYrZrXrD)r�r�r:rWs r�r=z RawTurtle.dot_ s?�� ���$��e� �-����t�,���}�}�s�4�=�=�!�'<�<��������=�=�3�t�}�}�a�+@�@�D��|��}�}�s�4�=�=�!�'<�<���N�N�5�)�E��h�h�j�� �?�?� �O�O� � �%�� )�'+�D�O�O� $� ���� �F�*���� � �L�L�N� �L�L�� � �M�M�%� � �L�L��O� �H�H�S�M� �?�?�',�D�O�O� $� �� �H�H�S�M�s �A&F�F*c�� |jj|j||||j�\}}|j �|j j |�|jr|jjd|f�|S)N�wri) r�r�r�r8r�r�r�r�rE)r�r�r�r�r�r�s r�r�zRawTurtle._write� sp�� ��K�K�&�&�t�~�~�s�E�4�:>�.�.�J� ��c� � � �� � � ���$�� �?�?� �O�O� � �%��� /�� r�c�V� |jr-|jjdg�d|j_|jt |�|j �|�}|r%|j �\}}|j||�|jrd|j_yy)NrTF)r�rErBr�rr4r\rf)r��arg�mover�r�r�r�r�s r�r}zRawTurtle.write� s��� �$ �?�?� �O�O� � �%�� )�'+�D�O�O� $��k�k�#�c�(�E�K�K�M�4�8�� ��8�8�:�D�A�q� �K�K��Q� � �?�?�',�D�O�O� $� r�c�8� |jg|_d|_yr�)r�r�r�r�s r�r3zRawTurtle.begin_poly� s�� ��n�n�%�� �!��r�c�� d|_y�NF)r�r�s r�r@zRawTurtle.end_poly� s�� �#��r�c�H� |j�t|j�Syr�)r�r�r�s r�rEzRawTurtle.get_poly� s'�� � �:�:� !�����$� $� "r�c�� |jSr�)r�r�s r�rGzRawTurtle.getscreen� s�� ��{�{�r�c�� |Sr�r�r�s r�rIzRawTurtle.getturtle� s�� �� r�c�:� |jj|�Sr�)r�rr�s r�r�zRawTurtle._delays�� ��{�{� � ��'�'r�c�� |jj|jj|||�|j �yr�)r�r�r�r}r�r�s r�rSzRawTurtle.onclicks4�� �" � � ���T�[�[�.�.��S�#�>� � � �r�c�� |jj|jj|||�|j �yr�)r�r�r�r}r�r�s r�rUzRawTurtle.onreleases4�� �* � � ���t�{�{�0�0�#�s�C�@� � � �r�c�j� |jj|jj|||�yr�)r�r�r�r}r�s r�rTzRawTurtle.ondrag5s+�� �" � � ���D�K�K�-�-�s�C��=r�c�� |j�y|dk(rB|\}}|j| |z|jz �|jj�}y|dk(r|d}|j |�y|dk(r|j |�y|dvr<|d}|j j|�|jj|�y|dk(r%|d}|j j|ddd� �y|d k(rY|d}dx|_ |_ ||jvr7|j j|�|jj|�yy|d k(r4tj||d�|jj�yy) Nr�rsrr�)rr=r�r�r�r�r�rW)r�r�r�rGr7r�r�r�r�r�r�r�r�r1rW)r��actionr8r��degPAU�dummyr�r�s r��_undozRawTurtle._undoJsn�� � �?�?� "� � �U�?� �M�E�6� �L�L�%����t�'9�'9�9� :��O�O�'�'�)�E� �w� ��!�W�F� �O�O�F� #� �t�^� �N�N�4� � �~� %���7�D� �K�K� � �� %� �J�J� � �d� #� �x� ���7�D� �K�K� !� !�$�(>�')�2� "� 7� �{� "���7�D�.2� 2�D�N�T�^��t�z�z�!�� � �#�#�D�)�� � �!�!�$�'�"��u�_� �H�H�T�4��7� #� �O�O� � � !�r�c��� |j�y|jj�}|d}|dd}|dk(r/|r,|j�}|j|d|dd�|r�+yy|j||�y)Nrr�r)r�rGr)r�r�rr8s r�ryzRawTurtle.undojs~�� � �?�?� "� ����"�"�$���a����A�B�x�� �U�?���x�x�z��� � �4��7�D���H�-�� �J�J�v�t� $r�r�r�ra)NNNN)Frv)FrQ)�Arialr[rPr*):r�r�r�r�r�r-rarirzr�r6r�r�r r�r�r�r/rtr9rlrmrorhrvrurnr�rHr�r�rsr�r7r8r�r�r�rcrCr2r?r=r�r}r3r@rErGrIrFr�rSrUrTrryrxr�r�r�r r � sU����G�"��G�}� $�%5� 6��i��&�P�2,�& -� 1� �A�!�$/�*(�+� +�.�5�.�D�.�T�.�`&�P�6&?�P7�.�6%3�N1�&%$�P O�N�" K�$,�P+�Z;�, ��83�j?�B�$0� 0��*�()-�V �-�: "� #� %�� �"�F�(� �*�2>�*"�@%�:�Jr�r c�j� tj�t�t_tjSr�)r �_screenr�r�r�r�r r �s&��%��~�~�� ���� �>�>�r�c�d�eZdZdZdZedZd�Zededededfd�Zd �Z d �Z d �Z d �Z y) r�Nr*c�t�tj�ht�xt_|_|jjtj�|jj |j �tj��td}td}td}td}td}td}|jj||||�|jj�t_tj|tj�|j||||�yy)Nr|r�r�r�r�r�)r��_rootrcr*�_titlerw�_destroyr2r�rkrmr r-r')r�r|r�r�r�r�r�s r�r-z_Screen.__init__�s��� �=�=� �).�� 0�G�M�D�J� �J�J� � �W�^�^� ,� �J�J� � ���� /� �?�?� "���M�E��(�^�F��[�)�I��l�+�J��[�)�I��[�)�I� �J�J� "� "�5�&�)�Z� H�"�j�j�3�3�5�G�O� � !� !�$���� 8� �J�J�u�f�i�� ;� #r�r|r�r�r�c�� t|jd�sy|jj�}|jj�}t |t �rd|cxkrdkrnn||z}|�||z dz }t |t �rd|cxkrdkrnn||z}|�||z dz }|jj ||||�|j�y)Nrrrr�r)�hasattrrrzr}r�r�rrr-)r�r|r�rprqr��shs r�r'z _Screen.setup�s��� �.�t�z�z�>�2� � �Z�Z� !� !� #�� �Z�Z� "� "� $�� �e�U� #��U��a���u�H�E� �>��5�j�A�%�F� �f�e� $��f�)9��)9���Y�F� �>��6�k�Q�&�F� � � ����v�v�v�>� � � � r�c�z� tj�tjj|�|t_yr�)r�rr*r)r�� titlestrings r�r*z _Screen.title�s,�� � �=�=� $� �M�M� � � � ,�$��r�c���|j}|tjur,dt_dt_dt_dt_dt _|j�yr) rr�r r�rr2r r�rv)r��roots r�rz_Screen._destroy�sD���z�z�� �7�=�=� ��F�K�!�F�N� �G�M�"�G�O� %� �� � � �r�c�&� |j�yr�)rr�s r�rz _Screen.bye�s�� � � � �r�c��� �fd�}�j|�tdry t�y#t$rt d�YywxYw)Nc�(�� �j�yr�)r)r�r�r�s �r��exitGracefullyz+_Screen.exitonclick..exitGracefully s��� 8� �H�H�Jr�r�r)rSr�r�AttributeError�exit)r�r(s` r�rz_Screen.exitonclick�sF��� �$ � � � �^�$� � � � � � �J��� � ��G� �s� /�A�A) r�r�r�rr2r�rr-r'r*rrrr�r�r�r�r��sR�� �E��G� �'�]�F�<�"�w�-��X���+�&�t�K�/@�&�P%�"��r�r�c�6�eZdZ dZdZedededfd�Zy)r Nrlr�r�c��tj�t�t_tj |tj|||��y)N)rlr�r�)r rr r r-)r�rlr�r�s r�r-zTurtle.__init__s;�� �>�>� !�#�X�F�N����4����!&�*8�#*� � ,r�)r�r�r�r�rr�r-r�r�r�r r s1��� �D��G��G�}� $�%5� 6��i�� ,r�r c�h� i}tD]}d|z}t|�j||<�!tD]}d|z}t|�j||<�!t d|zd�5}t d�|D��}|j d�|ddD]6}|j dt|�z�|j d ||z��8|d}|j dt|�z�|j d ||z�|j d �|j�ddd�y#1swYyxYw) Nz_Screen.zTurtle.z%s.pyr�c3�TK�|] }|jd�dtvr|���"y�w)r�r�N)r� _alias_list)r�r�s r�r�z&write_docstringdict..As*����=��A������a�� �;���s�&(zdocsdict = { rz%s : z """%s """, z """%s """ z} ) �_tg_screen_functionsr��__doc__�_tg_turtle_functionsr�r�r}�repr�close)r��docsdict� methodnamer�r�r�s r�r�r�+s%�� ��H�*� ���#���S� �)�)��� �+�+� �� �"���S� �)�)��� �+� �g�� �� %���=��=�=�� ���"�#����9�C� �G�G�H�t�C�y�(� )� �G�G�-��� �=� >���2�h�� ����4��9�$�%� ���(�8�C�=�8�9� ����� ��� � &� %� %�s �#B�values�kind� Parameter�POSITIONAL_ONLY�POSITIONAL_OR_KEYWORDr�r��VAR_POSITIONAL� KEYWORD_ONLY� VAR_KEYWORD� RuntimeErrorrr)�ob�orig_sig�func_sig� call_args�param� call_texts r��getmethparlistrTjsw���� � ��$�H������+�+�2�2�4�5�a�b�9� ��H��I��$�$�+�+�-���j�j�:�1��!�!�1�1�9�'�#�#�9�9�:�� � ����,�1��"�"�1�1�� � �1�U�Z�Z�L�!1�2�/��"�"�/�/�� � �E�J�J�<�q���� �!=�>��"�"�.�.�� � �2�e�j�j�\�!2�3��"�#?����L�L�.��D�I�I�i�(�)��+�I� �x�=�)� #�#r�c�� ddl}|�ytd}|jd|zd�}|jd|z�}|j d|�}|S)Nrr��%s.r�� \(.+ %s\):�:��rer�rD�compile�sub)�docstrrZ� turtlename� newdocstr�parexps r��_turtle_docrevisera��Z��� � �~���o�&�J����u�z�1�"�5�I� �Z�Z���3� 4�F�� � �3� �*�I� �r�c�� ddl}|�ytd}|jd|zd�}|jd|z�}|j d|�}|S)Nrr�rVr�rWrXrY)r]rZ� screennamer_r`s r��_screen_docrevisere�rbr�ardef {name}{paramslist}: if {obj} is None: if not TurtleScreen._RUNNING: TurtleScreen._RUNNING = True raise Terminator {obj} = {init} try: return {obj}.{name}{argslist} except TK.TclError: if not TurtleScreen._RUNNING: TurtleScreen._RUNNING = True raise Terminator raise c� �|D]}t||�}t|�\}}|dk(rtd||��0tj |||||��} t | t ��||j�t �|_��y)Nr�z>>>>>>)�obj�initr�� paramslist�argslist)�getattrrTr�� __func_body�formatr�globalsr1) � functionsr�rgrh� docreviser6r�pl1�pl2�defstrs r��_make_global_funcsrt�s���� ���j�)��!�&�)���S� �"�9� �(�C�� %� ��#�#��$�Z�/2�S�$�B�� �V�W�Y��(1�&�.�.�(A�� �*��%� r�zTurtle._screenzScreen()z Turtle._penzTurtle()�__main__c�B�t�r t�yt�yr�)rOr^rVr�r�r�� switchpenrw�s�� �8� �D� �Dr�c��� t�td�t�td�t �t d�t d�D]p}|dk(r t�t d�D]}td�td��|dk(rtd�t�t�td �t ��rt d �td �td �t�td�td�td�td�td �t �tdd �tdd �td�t d�D].}td�td�td�td��0td�t�t d�D].}td�td�td�td��0t�y)NT�dr�rrbr��Z�maroonrCr�r�F�� startstartr��redr])rar+r{r1r>r|rr2rDrQr:r?r`r})rrs r��demo1r�sM��,� ���t� � ���� � �� �a���q��A��A�v�� ��1�X���� ��R����A�v��h��� � �D� �B�K� �F�� �a�� �g���u� � �� �b� ��� � �b� ��� � �c� � �� �l�A�� �g�q�� �e� ��q��A� �B�K� ��H� �B�K� �"�I� � �t� �� ��q��A� �B�K� ��H� �B�K� �"�I� � � r�c� � td�t�td�tt dd��t dd�dz }t d�td�D]}t�t|d��td�t�rt�t�r�t�td�td �d}t!d �td�td �td d �D]�}|dkDr t#�t%d d|zz dd|z�td�D]}t'|�td��t)�|dz }td�tt�dzdz���td�t+�t'd�t d�t-�t/dd�td�t#�td�D]/}tdd�t d�t'd�t d��1t)�td�t+�t'd�t-�t1d�t3�}|j5d�t7�}|j5d�|j1d�|j�|j9d�|jd�|j;�|j=dd�|jd�|j?�|jd�|j/dd�|jd�|jd�tt |��d}|j |�dkDr�|j'd�|jd �|j|j |��|j'd�|d!zdk(r*|jA�|jA�t�|dz }|j |�dkDr��|jd"d#d$�%�|j!d&�|j!d�d'�}tCjDd�t�r+|j�|j�t�r�+|j'd�|jd(d)�*�|jG|d�y)+Nr�r�rrrz�r�zwait a moment...r��greenr|rTrS��x� �FrCr~�yellowrb�2r�rBi�(rc�blue�orangerg @g333333�?r�zCAUGHT! )rrS�boldr`)r�r�r�c�,�t�t�yr�)rr)r�r�s r��babazdemo2..baba`s �� �M� �Er�z Click me!)�Courierr�r�)r�)$rqrrrZrerwr<rcrrwr5r}rzryrarRrrXr2rBrAr?r^rVr:rlrIrbr rQr{rJr>rs�time�sleeprS)r!r�laenger�trir�rIr�s r��demo2r� sw��(� �a�� ���� ��7�1�a�=�!��!�Q���#�� �2���r��A� �K� �6�2� �� � �!��!� �F� �!� �� �2���#��������� � �3���r�2��A��1�u�� ��#�b��d�(�A�r�!�t�,��1�X���6� ��3��� �J� �b�L�F� �r�F� �5�7�1�9�b�.� !�� �3�� �� �2�� �2�� �� �e�H�� �a��� ��q��A� �2�r�N� �r�F� �r�F� �r�F� � � � �2�� �� �2�� �� �h���k�� ���v��������&�!�� � �X��� � ��� � �B��� � �Q��� � � �� � �C���� � �"� �� � � �� � �Q��� � �V�H�%����q�� � � �!� ��7�6�?�#����l�l�6�"�Q�&� �I�I�c�N� �I�I�c�N� �N�N�3�;�;�v�.� /� �F�F�1�I��r�z�Q��� � ��� � � �� � �Q�J�E��l�l�6�"�Q�&� � � �*�#8�� �H� � � �W�� � � �U�� � � � �1� ��!� �H�H�J� �K�K�M� �!� ���r� � � � �-�(?� �A� � � �D�!�r�)r�)�turtle_docstringdict)E�tkinterr+r�r�r�rBr}r��os.pathrrr�copyrr� _tg_classesr0r2� _tg_utilities�__all__r/r�r�r�r�r�r�rr�r�rrr,rr0rerc�objectrr�r.rr=r r�r1rxr r r r�r rr�r<� _LANGUAGE� ImportErrorrTrarerlrtrr�r�rwrr�rr�r�r��r�s���0K�Z� � � �� ��'�'�� �I� �)�� !��'��/� � �-� -�0D� D� � �(�>� *��,� � ��#� ��4� ��c� � �c� � �T�  � �T�  � � �  � �S� � �� � �$� � �� � �W� � �g� � �z� � �D� � �I� � ��! �""�)��' ��,�:�<1��t�� *$�E�*$�j��1� �.�*a#�R�X�X�a#�F�����I�6�)�B�E�E�)�0 ����B5�v�B5�T  �)� ��)�� ,1�F�,1�^"6�f�"6�Li�#�i�VC��C�LR�6�R�jL�6�L�>o��j�o�b% ���~�l�~�@,�Y�,�( �� �D3�" �� � �M��I��� �"�"$�H � � � � B��'��#�Z�1B�D��'�� �*�.?�A��� �z��� 2�ja�F �G� �G��M�C��Ww�1� � /�0�1��@t�1� � $�i�0��M� � H�BK� L�M�M�s*�G5� H �5 H�H� H+�H+�*H+