ó
    Z½j¢  ã            	       ó  • S r SrS rS r SS jrSS	 jr\S
:X  aà  SSKr\R                  R                  \R                  R                  \R                  R                  \5      SS5      5      r\R                  " \SS9  \" SSSS9\" SSSS9\" SSSS9/r\" \S5       HW  u  rr\R                  R                  \S\ S35      r\" \SSS9 r\R/                  \" S0 \D65        SSS5        \" S\5        MY     gg! , (       d  f       N= f)a‘  Measuring beaker / cylinder SVG generator for AGS Math instruments.

generate(capacity, reading, unit, size) -> str  (self-contained SVG)

  - Glass/cream body (rounded-bottom cylinder) with an ink outline.
  - Steel-blue graduation ticks up the right side with numeric labels;
    long majors, short minors.
  - Crimson liquid fill from the bottom up to the `reading` level, with a
    flat liquid surface.
  - D0ACAC rounded border frame; CSS-var style block.

  capacity : full scale of the beaker (top graduation).
  reading  : liquid level (0..capacity); clamped to range.
  unit     : "ml" or "l" (label only; affects tick number formatting a touch).
zƒ<style>svg{--crimson:#960000;--gold:#BF9237;--lime:#88C808;--steel:#4A6488;--cream:#FAF5EE;--ink:#2A2A2A;--border:#D0ACAC;}</style>c                 ó|   • [        U [        U 5      -
  5      S:  a  [        [        [        U 5      5      5      $ SU -  $ )Ng•Ö&è.>z%g)ÚabsÚroundÚstrÚint)Úvs    Ú7C:\allgifted\mathapi11v2\tools\svg_generators\beaker.pyÚ_fmtr	      s4   € Ü
ˆ1Œu�Q‹x‰<Ó˜4ÓÜ”3”u˜Q“x“=Ó!Ð!Ø�1‰HÐó    c                 óB   • / SQnU S-  nU H  nX2:¼  d  M
  Us  $    U S-  $ )z2Pick a graduation step giving roughly 5-10 majors.)é   é   g      @é   é
   é   é   é2   éd   éÈ   éú   éô  iè  g       @© )ÚcapacityÚtargetsÚrawÚts       r   Ú
_nice_stepr      s0   € âF€GØ
�S‰.€CÛˆØ�8ØŠHñ ð �c‰>Ðr
   Nc                 ób  • [        U5      n[        S[        U[        U5      5      5      nUS::  a  SOXe-  nXC-
  nUS-  nSR                  / SPUS PSPUS PSPUS PSPXM-
  S PS	PUS PSPUS PSPX-   S PSPUS PSPX-   U-
  S PSPUS PS	PX-   S PSPUS PSPX-   S PSPXM-
  S PSPX-   S PSPUS P5      nU R	                  S
U SU S35        U R	                  SU S35        XKU-  -
  nU R	                  SUS SUS SUS SXO-
  S SU S35        U R	                  SUS SUS SX-   S SUS SU S35        U R	                  SU S35        U R	                  SUS-
  S SUS SX-   S-   S SUS S3	5        [        U5      nU(       a  [        [        UU-  5      5      OSnX-   n[        US-   5       H’  nUU-  nU(       a  UUU-  U-  -
  OUnUS-  S:H  =(       d    US:*  nU(       a  SOS nU R	                  SUU-
  S SUS SUS SUS S!3	5        U(       d  Mi  U R	                  S"US-   S SUS S#[        U5       S$35        M”     U
c  US&-   n
U R	                  S"XS-  -   S SU
S S'U S$35        U	b-  U	S:w  a&  U R	                  S"XS-  -   S SU
S(-   S S)U	 S$35        g%g%g%)*aC  Draw ONE beaker (cream body, steel graduations, crimson fill, unit
label) into `parts` within the column [bx, bx+bw] / [top, bottom].

Each call defines its own clipPath (`clip_id` must be unique per beaker
in a shared SVG). Optionally draws `label` centred at `label_y`.
Returns nothing; appends SVG fragments to `parts`.
g        é    g
×£p=
Ç?Ú zM z.2fÚ z L z Q z<defs><clipPath id="z"><path d="z Z"/></clipPath></defs>z	<path d="z%" fill="var(--cream)" stroke="none"/>z	<rect x="z" y="z	" width="ú
" height="z(" fill="var(--crimson)" clip-path="url(#z)"/>z
<line x1="z" y1="z" x2="z" y2="z9" stroke="var(--ink)" stroke-width="1.5" clip-path="url(#zL" fill="none" stroke="var(--ink)" stroke-width="3" stroke-linejoin="round"/>é   z?" stroke="var(--ink)" stroke-width="3" stroke-linecap="round"/>r   r   é   é   z*" stroke="var(--steel)" stroke-width="2"/>z	<text x="zn" font-family="sans-serif" font-size="12" fill="var(--steel)" text-anchor="start" dominant-baseline="central">z</text>Né   zd" font-family="sans-serif" font-size="16" font-weight="bold" fill="var(--ink)" text-anchor="middle">r   zd" font-family="sans-serif" font-size="15" font-weight="bold" fill="var(--ink)" text-anchor="middle">)
ÚfloatÚmaxÚminÚjoinÚappendr   r   r   Úranger	   )ÚpartsÚbxÚbwÚtopÚbottomr   ÚreadingÚunitÚclip_idÚlabelÚlabel_yÚfracÚbody_hÚrx_bÚ	body_pathÚ
liquid_topÚstepÚnÚtick_xÚiÚvalÚyÚis_majorÚtlens                           r   Údraw_beakerrC   '   s�  € ô �X‹€HÜ�#”s˜8¤U¨7£^Ó4Ó5€GØ˜a“-‰3 WÑ%7€DØ‰\€FØ�‰9€D÷	#ó 	#ˆ"ð 	#ˆR�ˆHð 	#�Að 	#�c˜#�Yð 	#ð ð 	#Ø�ˆHð	#Øð	#Ø‘k #Ð&ð	#ð'ð	#à�ˆHð	#àð	#à˜S�\ð	#à!"ð	#à#%¡7¨3 -ð	#à/0ð	#à17¸°ð	#ð=ð	#ð ‰U�4‰Z˜Ðð	#ð ð	#ð % S˜\ð	#ð*ð	#ð ‰U�3ˆKð		#ð ð		#ð   ˜ð		#ð %&ð		#ð ')¡e¨C [ð		#ð 12ð		#ð 39±+¸cÐ1Bð		#ðCð		#ð
 ‰U�3ˆKð	#ð
 ð	#ð
 ˜S˜	ô	#ð ð 
‡L�Lð	Ø ˜	ð "Ø�;ð ð	ôð 
‡L�L�9˜Y˜KÐ'LÐMÔNð  ™-Ñ'€JØ	‡L�LØ
�B�s�8˜5 ¨CÐ 0°	¸"¸S¸ð BØÑ$ SÐ)ð *Ø"˜) 4ð	)ôð 
‡L�LØ
�R˜�H˜F :¨cÐ"2°&¸¹¸s¸ð DØ˜#Ðð Ø"˜) 4ð	)ôð 
‡L�LØ
�I�;ð 5ð 	6ôð
 
‡L�LØ
�R˜‘T˜#�J˜f S¨ I¨V°B±E¸!±G¸C°=ÀÀsÈ3Àið PHð 	Iôô �hÓ€DÞ'+ŒŒE�(˜T‘/Ó"Ô#°€AØ‰W€FÜ�1�q‘5Ž\ˆØ�$‰hˆÞ2:ˆF�c˜H‘n¨Ñ.Ò.ÀˆØ˜‘E˜Q‘J×) 1¨¡6ˆÞ‰r 1ˆØ�‰Ø˜ ™ SÐ)¨°°#¨w°f¸VÀC¸Lð IØ�S�'ÐCðEô	
÷ ˆ8Ø�L‰LØ˜F 1™H S˜>¨¨q°¨gð 6/ä/3°C«y¨k¸ðBöñ ð" �Ø˜2‘+ˆØ	‡L�LØ
�B˜!‘t‘G˜C�=  g¨c ]ð 3 à $˜v Wð	.ôð Ñ˜U b›[Ø�‰Ø˜˜a™4™ �} E¨'°"©*°SÐ)9ð :$à$) 7¨'ð3õ	
ð )Ðr
   r   é,  Úmlc                 ó>  • UnUnUS-  nUS-  nUS-  nUS-  n	/ n
U
R                  SU SU SU SU S	3	5        U
R                  [        5        U
R                  S
US-
   SUS-
   S35        [        X¦XxX�XSUS-  S9
  U
R                  S5        SR                  U
5      $ )Ng333333Ó?gš™™™™™Ù?g{®GázÄ?g…ëQ¸…ë?z/<svg xmlns="http://www.w3.org/2000/svg" width="r!   z" viewBox="0 0 r    z">z<rect x="3" y="3" width="r"   zG" rx="18" ry="18" fill="none" stroke="var(--border)" stroke-width="4"/>Ú
beakerClipgffffffî?)r3   r5   z</svg>Ú
)r*   ÚSTYLErC   r)   )r   r1   r2   ÚsizeÚwidthÚheightr-   r.   r/   r0   r,   s              r   ÚgeneraterM   Š   sÜ   € Ø€EØ€FØ	�‰€BØ	�‰€BØ
�4‰-€CØ�d‰]€Fà€EØ	‡L�LØ
9¸%¸À
È6È(ð SØ�w˜a ˜x rð	+ôð 
‡L�L”Ôð 
‡L�LØ
# E¨!¡G 9¨J°v¸a±x°jð A@ð 	Aôô
 �˜2 F°gØ$¨f°t©mò=ð 
‡L�L�ÔØ�9‰9�UÓÐr
   Ú__main__r   z..ÚsamplesT)Úexist_ok)r   r1   r2   r   g      è?Úlr   é}   Úbeaker_z.svgÚwzutf-8)ÚencodingÚwrote)rG   NN)r   rD   rE   i@  r   )Ú__doc__rI   r	   r   rC   rM   Ú__name__ÚosÚpathÚabspathr)   ÚdirnameÚ__file__ÚoutÚmakedirsÚdictrO   Ú	enumerater>   ÚkwÚpÚopenÚfÚwriteÚprintr   r
   r   Ú<module>rh      s  ðñð"Oð òòð ;?ô`
ôFð8 ˆzÓÛØ
�'‰'�/‰/˜"Ÿ'™'Ÿ,™, r§w¡w§¡°xÓ'@À$È	ÓRÓ
S€CØ‡K‚K�˜dÒ#á�c 3¨TÑ2Ù�a ¨CÑ0Ù�c 3¨TÑ2ð€Gñ
 ˜7 AÖ&‰ˆˆ2Ø�G‰G�L‰L˜ ¨ s¨$Ð/Ó0ˆÙ�!�S 7Ò+¨qØ�G‰G‘H‘N˜r‘NÔ#÷ ,áˆg�qÖò	 'ð ÷ ,Õ+ús   ÃC=Ã=
D	