Ë
    £èhÏ>  ã                  ó¬   — d dl mZ d dlmZmZ d dlZddlmZmZ ddl	m
Z
 ddlmZ ddlmZmZ  G d	„ d
«      Zdd„Zdd„Zdd„Zddd„Zddd„Zd„ Zd„ Zy)é    )Úannotations)ÚIteratorÚIterableNé   )ÚVec2ÚNULLVEC2)ÚRGB)ÚPlotter)ÚCommandÚ	pe_decodec                  ó.  — e Zd ZdZd#d„Zd$d„Zd%d„Zd&d„Zd'd„Zd'd„Z	d'd„Z
d'd	„Zd'd
„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zed'd„«       Zd'd„Zd'd„Zed'd„«       Zd'd„Zd'd„Zed'd„«       Z d'd„Z!d(d„Z"d(d „Z#d)d!„Z$y")*ÚInterpreteraa  The :class:`Interpreter` is the frontend for the :class:`Plotter` class.
    The :meth:`run` methods interprets the low level HPGL commands from the
    :func:`hpgl2_commands` parser and sends the commands to the virtual plotter
    device, which sends his output to a low level :class:`Backend` class.

    Most CAD application send a very restricted subset of commands to plotters,
    mostly just polylines and filled polygons. Implementing the whole HPGL/2 command set
    is not worth the effort - unless reality proofs otherwise.

    Not implemented commands:

        - the whole character group - text is send as filled polygons or polylines
        - configuration group: IN, DF, RO, IW - the plotter is initialized by creating a
          new plotter and page rotation is handled by the add-on itself
        - polygon group: EA, ER, EW, FA, RR, WG, the rectangle and wedge commands
        - line and fill attributes group: LA, RF, SM, SV, TR, UL, WU, linetypes and
          hatch patterns are decomposed into simple lines by CAD applications

    Args:
        plotter: virtual :class:`Plotter` device

    c                ó\   — g | _         t        «       | _        t        «       | _        || _        y ©N)ÚerrorsÚsetÚnot_implemented_commandsÚ_disabled_commandsÚplotter)Úselfr   s     ú>lib/python3.12/site-packages/ezdxf/addons/hpgl2/interpreter.pyÚ__init__zInterpreter.__init__$   s$   € Ø!#ˆŒÜ25³%ˆÔ%Ü,/«EˆÔØˆ�ó    c                ó:   — | j                   j                  |«       y r   )r   Úappend)r   Úerrors     r   Ú	add_errorzInterpreter.add_error*   s   € Ø�‰×Ñ˜5Õ!r   c                óê   — |D ]n  \  }}|| j                   v rŒt        | d|j                  «       › �d«      }|r	 ||«       Œ>|d   t        j                  v sŒT| j
                  j                  |«       Œp y)z”Interprets the low level HPGL commands from the :func:`hpgl2_commands` parser
        and sends the commands to the virtual plotter device.
        Úcmd_Nr   )r   ÚgetattrÚlowerÚstringÚascii_lettersr   Úadd)r   ÚcommandsÚnameÚargsÚmethods        r   ÚrunzInterpreter.run-   sn   € ó #‰JˆD�$Ø�t×.Ñ.Ñ.ØÜ˜T T¨$¯*©*«,¨Ð#8¸$Ó?ˆFÙÙ�t•Ø�a‘œF×0Ñ0Ò0Ø×-Ñ-×1Ñ1°$Õ7ñ #r   c                ó:   — | j                   j                  |«       y)zäDisable commands manually, like the scaling command ["SC", "IP", "IR"].
        This is a feature for experts, because disabling commands which changes the pen
        location may distort or destroy the plotter output.
        N)r   Úupdate)r   r%   s     r   Údisable_commandszInterpreter.disable_commands:   s   € ð
 	×Ñ×&Ñ& xÕ0r   c                óÖ   — d}d}d}t        t        |«      «      }t        |«      }|dkD  rt        |d   «      }|dkD  r|d   }|dkD  r|d   }| j                  j                  |||«       y)zSet fill type.r   ç        r   é   N)ÚtupleÚ	to_floatsÚlenÚintr   Úset_fill_type)r   r'   Ú	fill_typeÚspacingÚangleÚvaluesÚ	arg_counts          r   Úcmd_ftzInterpreter.cmd_ftB   sr   € àˆ	ØˆØˆÜ”y “Ó'ˆÜ˜“Kˆ	Ø�qŠ=Ü˜F 1™I›ˆIØ�qŠ=Ø˜Q‘iˆGØ�qŠ=Ø˜1‘IˆEØ�‰×"Ñ" 9¨g°uÕ=r   c                óÈ   — t        t        |«      «      }t        |«      dk(  r/|\  }}}}| j                  j	                  |t        |||«      «       y| j                  d«       y)zSet pen color as RGB tuple.é   z invalid arguments for PC commandN)ÚlistÚto_intsr2   r   Úset_pen_colorr	   r   )r   r'   r8   ÚindexÚrÚgÚbs          r   Úcmd_pczInterpreter.cmd_pcQ   sR   € ä”g˜d“mÓ$ˆÜˆv‹;˜!ÒØ#‰NˆE�1�a˜Ø�L‰L×&Ñ& u¬c°!°Q¸«lÕ;à�N‰NÐ=Õ>r   c                óÆ   — t        |«      }|rt        |d   d«      }n| j                  d«       yd}|dkD  rt        |d   |«      }| j                  j                  ||«       y)zSet pen width.r   gffffffÖ?z invalid arguments for PW commandNéÿÿÿÿr   )r2   Úto_floatr   Úto_intr   Úset_pen_width)r   r'   r9   Úwidthr@   s        r   Úcmd_pwzInterpreter.cmd_pwZ   s^   € ä˜“Iˆ	ÙÜ˜T !™W dÓ+‰Eà�N‰NÐ=Ô>ØØˆØ�qŠ=Ü˜4 ™7 EÓ*ˆEØ�‰×"Ñ" 5¨%Õ0r   c                ól   — t        |«      r)| j                  j                  t        |d   d«      «       yy)zSelect pen.r   r   N)r2   r   Úset_current_penrH   ©r   r'   s     r   Úcmd_spzInterpreter.cmd_spg   s+   € äˆtŒ9Ø�L‰L×(Ñ(¬°°Q±¸Ó);Õ<ð r   c                ól   — t        |«      r)| j                  j                  t        |d   d«      «       yy)zSet number of pens.r   r/   N)r2   r   Úset_max_pen_countrH   rN   s     r   Úcmd_npzInterpreter.cmd_npl   s+   € äˆtŒ9Ø�L‰L×*Ñ*¬6°$°q±'¸1Ó+=Õ>ð r   c                ó  — t        |«      dk(  r| j                  j                  «        yt        t	        |«      «      }t        |«      dkD  r#| j                  j                  |d   |d   «       y| j                  d«       y)z$Set input points p1 and p2 absolute.r   Nr   ú invalid arguments for IP command)r2   r   Úreset_scalingÚ	to_pointsr1   Úset_scaling_pointsr   )r   r'   Úpointss      r   Úcmd_ipzInterpreter.cmd_ipq   sb   € äˆt‹9˜Š>Ø�L‰L×&Ñ&Ô(Øäœ9 T›?Ó+ˆÜˆv‹;˜Š?Ø�L‰L×+Ñ+¨F°1©I°v¸a±yÕAà�N‰NÐ=Õ>r   c                ó4  — t        |«      dk(  r| j                  j                  «        yt        t	        |«      «      }t        |«      dk(  rCt        |d   dd«      }t        |d   dd«      }| j                  j                  |dz  |dz  «       yt        |«      dk(  rkt        |d   dd«      }t        |d   dd«      }t        |d   dd«      }t        |d   dd«      }| j                  j                  |dz  |dz  |dz  |dz  «       y| j                  d	«       y)
z6Set input points p1 and p2 in percentage of page size.r   Nr/   r.   ç      Y@r   r<   é   rT   )	r2   r   rU   r=   r1   ÚclampÚset_scaling_points_relative_1Úset_scaling_points_relative_2r   )r   r'   r8   Úxp1Úyp1Úxp2Úyp2s          r   Úcmd_irzInterpreter.cmd_ir}   s  € äˆt‹9˜Š>Ø�L‰L×&Ñ&Ô(Øä”i “oÓ&ˆÜˆv‹;˜!ÒÜ˜˜q™	 3¨Ó.ˆCÜ˜˜q™	 3¨Ó.ˆCØ�L‰L×6Ñ6°s¸U±{ÀCÈ%ÁKÕPÜ�‹[˜AÒÜ˜˜q™	 3¨Ó.ˆCÜ˜˜q™	 3¨Ó.ˆCÜ˜˜q™	 3¨Ó.ˆCÜ˜˜q™	 3¨Ó.ˆCØ�L‰L×6Ñ6Ø�e‘˜S 5™[¨#°©+°s¸U±{õð �N‰NÐ=Õ>r   c                ó¤  — t        |«      dk(  r| j                  j                  «        y t        t	        |«      «      }t        |«      dk  r| j                  d«       y d}t        |«      dkD  rt        |d   «      }|dk(  rmd}t        |«      dkD  rt        |d   dd«      }d}t        |«      d	kD  rt        |d	   dd«      }| j                  j                  |d   |d   |d
   |d   ||«       y |d
k(  r4| j                  j                  t        |d   |d
   «      |d   |d   «       y | j                  j                  |d   |d   |d
   |d   «       y )Nr   r<   z invalid arguments for SC commandr   g      I@é   r.   r[   é   r/   r\   )r2   r   rU   r=   r1   r   r3   r]   Úset_isotropic_scalingÚset_point_factorr   Úset_anisotropic_scaling)r   r'   r8   Úscaling_typeÚleftÚbottoms         r   Úcmd_sczInterpreter.cmd_sc“   sM  € Üˆt‹9˜Š>Ø�L‰L×&Ñ&Ô(ØÜ”i “oÓ&ˆÜˆv‹;˜Š?Ø�N‰NÐ=Ô>ØØˆÜˆv‹;˜Š?Ü˜v a™y›>ˆLØ˜1ÒØˆDÜ�6‹{˜QŠÜ˜V A™Y¨¨UÓ3�ØˆFÜ�6‹{˜QŠÜ˜v a™y¨#¨uÓ5�Ø�L‰L×.Ñ.Ø�q‘	Ø�q‘	Ø�q‘	Ø�q‘	ØØõð ˜QÒØ�L‰L×)Ñ)Ü�V˜A‘Y  q¡	Ó*¨F°1©I°v¸a±yõð �L‰L×0Ñ0Ø�q‘	˜6 !™9 f¨Q¡i°¸±õr   c                ó†   — d}t        |«      r4t        |d   |«      }| j                  j                  t	        |«      «       y y ©Nr   )r2   rH   r   Úset_merge_controlÚbool©r   r'   Ústatuss      r   Úcmd_mczInterpreter.cmd_mc¶   s9   € ØˆÜˆtŒ9Ü˜D ™G VÓ,ˆFØ�L‰L×*Ñ*¬4°«<Õ8ð r   c                óÀ   — d}d}t        |«      }|rt        |d   |«      }t        |dz  «      }|dkD  rt        |d   |«      }| j                  j	                  ||«       y )Ni¥  iI  r   g      ø?r   )r2   rH   r3   r   Ú
setup_page)r   r'   ÚlengthÚheightÚcounts        r   Úcmd_pszInterpreter.cmd_ps¼   sa   € ØˆØˆÜ�D“	ˆÙÜ˜D ™G VÓ,ˆFÜ˜ #™Ó&ˆFØ�1Š9Ü˜D ™G VÓ,ˆFØ�‰×Ñ ¨Õ/r   c                óª   — | j                   j                  «        t        |«      r.| j                   j                  t	        t        |«      «      «       yy)zLower pen down and plot lines.N)r   Úpen_downr2   Úplot_polylinerV   r1   rN   s     r   Úcmd_pdzInterpreter.cmd_pdÈ   s9   € à�‰×ÑÔÜˆtŒ9Ø�L‰L×&Ñ&¤y´¸4³Ó'AÕBð r   c                óª   — | j                   j                  «        t        |«      r.| j                   j                  t	        t        |«      «      «       yy)zLift pen up and move pen.N)r   Úpen_upr2   r~   rV   r1   rN   s     r   Úcmd_puzInterpreter.cmd_puÎ   s9   € à�‰×ÑÔÜˆtŒ9Ø�L‰L×&Ñ&¤y´¸4³Ó'AÕBð r   c                óª   — | j                   j                  «        t        |«      r.| j                   j                  t	        t        |«      «      «       yy)z3Place pen absolute. Plots polylines if pen is down.N)r   Úset_absolute_moder2   r~   rV   r1   rN   s     r   Úcmd_pazInterpreter.cmd_paÔ   ó9   € à�‰×&Ñ&Ô(ÜˆtŒ9Ø�L‰L×&Ñ&¤y´¸4³Ó'AÕBð r   c                óª   — | j                   j                  «        t        |«      r.| j                   j                  t	        t        |«      «      «       yy)z2Place pen relative.Plots polylines if pen is down.N)r   Úset_relative_moder2   r~   rV   r1   rN   s     r   Úcmd_przInterpreter.cmd_prÚ   r†   r   c                ó`  — t        |«      }|s| j                  d«       y| j                  j                  «        | j                  j	                  «        t        |d   d«      }d}|dkD  rt        |d   |«      }| j                  j                  ||«       | j                  j                  «        y)zPlot full circle.z invalid arguments for CI commandNr   g      ð?ç      @r   )r2   r   r   Úpush_pen_stater}   rG   Úplot_abs_circleÚpop_pen_state)r   r'   r9   ÚradiusÚchord_angles        r   Úcmd_cizInterpreter.cmd_ciá   sŽ   € ä˜“Iˆ	ÙØ�N‰NÐ=Ô>ØØ�‰×#Ñ#Ô%à�‰×ÑÔÜ˜$˜q™' 3Ó'ˆØˆØ�qŠ=Ü" 4¨¡7¨KÓ8ˆKØ�‰×$Ñ$ V¨[Ô9Ø�‰×"Ñ"Õ$r   c                ó�   — t        |«      dk  r| j                  d«       y| j                  || j                  j                  «       y)zPlot arc absolute.r\   ú invalid arguments for AR commandN)r2   r   Ú_arc_outr   Úplot_abs_arcrN   s     r   Úcmd_aazInterpreter.cmd_aañ   ó5   € äˆt‹9�qŠ=Ø�N‰NÐ=Ô>ØØ�‰�d˜DŸL™L×5Ñ5Õ6r   c                ó�   — t        |«      dk  r| j                  d«       y| j                  || j                  j                  «       y)zPlot arc relative.r\   r“   N)r2   r   r”   r   Úplot_rel_arcrN   s     r   Úcmd_arzInterpreter.cmd_arø   r—   r   c                óÎ   — t        | «      }|dk  ryt        | d   «      }t        | d   «      }t        | d   «      }d}|dkD  rt        | d   |«      } |t        ||«      ||«       y)zPlot arcr\   Nr   r   r/   r‹   )r2   rG   r   )r'   Úoutput_methodr9   ÚxÚyÚsweep_angler�   s          r   r”   zInterpreter._arc_outÿ   so   € ô ˜“Iˆ	Ø�qŠ=ØÜ�T˜!‘WÓˆÜ�T˜!‘WÓˆÜ˜t A™wÓ'ˆØˆØ�qŠ=Ü" 4¨¡7¨KÓ8ˆKÙ”d˜1˜a“j +¨{Õ;r   c                ó�   — t        |«      dk  r| j                  d«       y| j                  || j                  j                  «       y)z$Plot arc absolute from three points.r<   z invalid arguments for AT commandN)r2   r   Ú_arc_3p_outr   Úplot_abs_arc_three_pointsrN   s     r   Úcmd_atzInterpreter.cmd_at  ó7   € äˆt‹9�qŠ=Ø�N‰NÐ=Ô>ØØ×Ñ˜˜tŸ|™|×EÑEÕFr   c                ó�   — t        |«      dk  r| j                  d«       y| j                  || j                  j                  «       y)z$Plot arc relative from three points.r<   z invalid arguments for RT commandN)r2   r   r¡   r   Úplot_rel_arc_three_pointsrN   s     r   Úcmd_rtzInterpreter.cmd_rt  r¤   r   c                óØ   — t        | «      }|dk  ryt        t        | «      «      }t        |«      dk  ryd}|dkD  rt        | d   |«      }	  ||d   |d   |«       y# t        $ r Y yw xY w)zPlot arc from three pointsr<   Nr/   r‹   r   r   )r2   rV   r1   rG   ÚZeroDivisionError)r'   rœ   r9   rX   r�   s        r   r¡   zInterpreter._arc_3p_out  sz   € ô ˜“Iˆ	Ø�qŠ=ØÜœ9 T›?Ó+ˆÜˆv‹;˜Š?ØØˆØ�qŠ=Ü" 4¨¡7¨KÓ8ˆKð	Ù˜& ™) V¨A¡Y°Õ<øÜ ò 	Ùð	ús   ÁA Á	A)Á(A)c                óP   — | j                  || j                  j                  «       y)z8Plot cubic Bezier curves with absolute user coordinates.N)Ú_bezier_outr   Úplot_abs_cubic_bezierrN   s     r   Úcmd_bzzInterpreter.cmd_bz,  ó   € à×Ñ˜˜tŸ|™|×AÑAÕBr   c                óP   — | j                  || j                  j                  «       y)z8Plot cubic Bezier curves with relative user coordinates.N)r«   r   Úplot_rel_cubic_bezierrN   s     r   Úcmd_brzInterpreter.cmd_br0  r®   r   c                ó¤   — d}t         }t         }t        t        | «      «      D ]+  }|dk(  r|}n|dk(  r|}n|dk(  r|} ||||«       |dz   dz  }Œ- y )Nr   r   r/   r\   )r   rV   r1   )r'   rœ   ÚkindÚctrl1Úctrl2ÚpointÚends          r   r«   zInterpreter._bezier_out4  sa   € àˆÜˆÜˆÜœy¨›Ö/ˆEØ�qŠyØ‘Ø˜’Ø‘Ø˜’Ø�Ù˜e U¨CÔ0Ø˜1‘H ‘>‰Dñ 0r   c                óº  — t        |«      r|d   }n| j                  d«       y| j                  }d}d}d}d}d}t        |«      }	g }
||	k  �r�||   }|dv rÌ|dz  }|d	k(  rZt        |||¬
«      \  }}|j	                  t        |d   «      «       t        |«      dkD  r²|
j                  t        |dd «      «       n”|dk(  rd}nŒ|dk(  rKt        |||¬
«      \  }}t        |d   «      }t        |«      dkD  rZ|
j                  t        |dd «      «       n<|dk(  rd}n4|dk(  r/d}n,t        ||||¬«      \  }}|
j                  t        |«      «       |
r„|j                  «        |r|
d   |j                  z
  |
d<   |s4|
j                  d«      }|j                  |«       |
s|j                  «        |
r!|j                  |
«       |
j                  «        d}d}||	k  r�ŒŽyy)zPlot Polyline Encoded.r   z invalid arguments for PE commandNTFé@   s   :<>=7r   é:   )ÚbaseÚstarté<   é>   é=   é7   é    )Ú	frac_bitsr»   r¼   )r2   r   r   r   rM   r3   ÚextendrV   r}   Úuser_locationÚpopÚmove_to_relr�   Úplot_rel_polylineÚclear)r   r'   Údatar   r}   ÚabsoluteÚfrac_bin_bitsr»   r@   rx   Úpoint_queueÚcharr8   Útargets                 r   Úcmd_pezInterpreter.cmd_peC  sç  € äˆtŒ9Ø˜‘7‰Dà�N‰NÐ=Ô>Øà—,‘,ˆàˆàˆØˆØˆØˆÜ�T“ˆØ"$ˆà�f‹nØ˜‘;ˆDØ�xÑØ˜‘
�Ø˜2’:Ü$-¨d¸ÀUÔ$K‘M�F˜EØ×+Ñ+¬C°°q±	«NÔ;Ü˜6“{ Q’Ø#×*Ñ*¬9°V¸A¸B°ZÓ+@ÕAØ˜R’ZØ$‘HØ˜R’ZÜ$-¨d¸ÀUÔ$K‘M�F˜EÜ$'¨¨q©	£N�MÜ˜6“{ Q’Ø#×*Ñ*¬9°V¸A¸B°ZÓ+@ÕAØ˜R’ZØ#‘HØ˜R’ZØ‘Dä )Ø M¸ÀEô!‘�˜ð ×"Ñ"¤9¨VÓ#4Ô5áØ× Ñ Ô"Ùà%0°¡^°g×6KÑ6KÑ%K�K ‘NÙØ(Ÿ_™_¨QÓ/�FØ×'Ñ'¨Ô/Ù&ØŸ™Ô(ÙØ×-Ñ-¨kÔ:Ø×%Ñ%Ô'Ø�Ø �ðQ �fŽnr   c                ó²   — d}t        |«      rt        |d   |«      }|dk(  r| j                  j                  «        y| j                  j	                  |«       y)zEnter/Exit polygon mode.r   r/   N)r2   rH   r   Úexit_polygon_modeÚenter_polygon_moders   s      r   Úcmd_pmzInterpreter.cmd_pm�  sG   € àˆÜˆtŒ9Ü˜D ™G VÓ,ˆFØ�QŠ;Ø�L‰L×*Ñ*Õ,à�L‰L×+Ñ+¨FÕ3r   c                ó†   — d}t        |«      rt        t        |d   |«      d«      }| j                  j	                  |«       y)zPlot filled polygon.r   )r   r   N)r2   Úone_ofrH   r   Úfill_polygon)r   r'   Úfill_methods      r   Úcmd_fpzInterpreter.cmd_fp‹  s7   € àˆÜˆtŒ9Ü ¤¨¨Q©°Ó!=¸vÓFˆKØ�‰×!Ñ! +Õ.r   c                ó8   — | j                   j                  «        y)zPlot edged polygon.N)r   Úedge_polygon)r   Ú_s     r   Úcmd_epzInterpreter.cmd_ep’  s   € à�‰×!Ñ!Õ#r   N)r   r
   ÚreturnÚNone)r   ÚstrrÝ   rÞ   )r%   zlist[Command]rÝ   rÞ   )r%   zIterable[str]rÝ   rÞ   )r'   úlist[bytes])r'   rà   rÝ   rÞ   )rÝ   rÞ   )%Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r)   r,   r:   rD   rK   rO   rR   rY   rd   rn   ru   r{   r   r‚   r…   r‰   r‘   r–   rš   Ústaticmethodr”   r£   r§   r¡   r­   r±   r«   rÏ   rÓ   rØ   rÜ   © r   r   r   r      sÞ   „ ñó,ó"ó8ó1ó>ó?ó1ó=ó
?ó

?ó?ó,!óF9ó	0óCóCóCóCó%ó 7ó7ð ò<ó ð<óGóGð òó ðó CóCð ò"ó ð"ó;!ó|4ó/ô$r   r   c              #  óT   K  — | D ]  }	 t        |«      –— Œ y # t        $ r Y Œw xY w­wr   ©ÚfloatÚ
ValueError©r'   Úargs     r   r1   r1   —  s2   è ø€ Ûˆð	Ü˜“*Óñ øô ò 	Ùð	üó   ‚(‰–(™	%¢(¤%¥(c              #  óT   K  — | D ]  }	 t        |«      –— Œ y # t        $ r Y Œw xY w­wr   ©r3   rê   rë   s     r   r>   r>   Ÿ  s1   è ø€ Ûˆð	Ü�c“(‹Nñ øô ò 	Ùð	ürí   c                óh   — g }d}d}| D ]&  }|r|j                  t        ||«      «       d}Œ#|}d}Œ( |S )NFr.   T)r   r   )r8   rX   Úappend_pointÚbufferÚvalues        r   rV   rV   §  sG   € Ø€FØ€LØ€FÛˆÙØ�M‰Mœ$˜v uÓ-Ô.Ø ‰LàˆFØ‰Lð ð €Mr   c                ó<   — 	 t        | «      S # t        $ r |cY S w xY wr   rè   ©ÚsÚdefaults     r   rG   rG   µ  s$   € ðÜ�Q‹xˆøÜò ØŠðúó   ‚
 �šc                ó<   — 	 t        | «      S # t        $ r |cY S w xY wr   rï   rõ   s     r   rH   rH   ¼  s$   € ðÜ�1‹vˆøÜò ØŠðúrø   c                ó.   — t        t        || «      |«      S r   )ÚmaxÚmin)ÚvÚv_minÚv_maxs      r   r]   r]   Ã  s   € ÜŒs�5˜!‹}˜eÓ$Ð$r   c                ó   — | |v r| S |d   S rp   ræ   )ró   Úchoices     r   rÕ   rÕ   Ç  s   € Ø��ØˆØ�!‰9Ðr   )r'   úIterable[bytes]rÝ   zIterator[float])r'   r  rÝ   zIterator[int])r8   zIterable[float]rÝ   z
list[Vec2])r.   )rö   ÚbytesrÝ   ré   )r   )rö   r  rÝ   r3   )Ú
__future__r   Útypingr   r   r"   Údepsr   r   Ú
propertiesr	   r   r
   Ú	tokenizerr   r   r   r1   r>   rV   rG   rH   r]   rÕ   ræ   r   r   Ú<module>r	     sL   ðõ #ß %Û ç  Ý Ý ß )÷G$ñ G$óTóóôôò%ór   