ó
    �´j  ã                   ó$  • S r SSKrSSKrSSKrSSKJrJrJr  \R                  R                  \R                  R                  \5      5      rSS jrS rS r\S:X  a³  SS	S
SS.S
SS.S
SS./SS0S.SS
SS./S./SSS
/S.S.r\" \R&                  5      S
:”  a  \R&                  S
   O\R                  R)                  \S5      r\r\" \R&                  5      S:”  a$  \R.                  " \" \R&                  S   SS95      r\" \" \\5      5        gg)a1  Bar-model (Singapore model-method) renderer -> PNG.

Reads a structured spec and draws unit boxes with labels, a "?" bracket,
and an optional total brace. Used by Workstream B to attach drawn model
diagrams to solutions (the Flutter solution modal renders only text/LaTeX,
so the bars have to be a real image).

Spec shape:
{
  "unit_px": 90,          # width of ONE unit box
  "bars": [
    {"label": "Alan",
     "segments": [{"u": 1, "text": "", "fill": "#dbe9ff"},
                  {"u": 1, "text": "", "fill": "#dbe9ff"},
                  {"u": 1, "text": "", "fill": "#dbe9ff"}],
     "brace": {"text": "?"}},          # brace under whole bar
    {"label": "Ben",
     "segments": [{"u": 1, "text": "", "fill": "#ffe7c2"}]}
  ],
  "total": {"text": "$640", "bars": [0,1]}   # right-side brace spanning bars
}
é    N)ÚImageÚ	ImageDrawÚ	ImageFontc                 ó–   • SU(       a  SOS-   n [         R                  " X 5      $ ! [         a    [         R                  " 5       s $ f = f)NzC:/Windows/Fonts/zarialbd.ttfz	arial.ttf)r   ÚtruetypeÚ	ExceptionÚload_default)ÚszÚboldÚps      Ú>C:\allgifted\mathapi11v2\docs\past year questions\_barmodel.pyÚ_fontr      sD   € Ø¶™}¸+ÑF€Að(Ü×!Ò! !Ó(Ð(øÜó (Ü×%Ò%Ó'Ò'ð(ús   �& ¦AÁAc                 ób   ^ • T =(       d    SR                  S5      m [        U 4S jS 5       5      $ )Nú#ffffffÚ#c              3   óF   >#   • U  H  n[        TXS -    S5      v •  M     g7f)é   é   N)Úint)Ú.0ÚiÚcs     €r   Ú	<genexpr>Ú_hex.<locals>.<genexpr>%   s#   øé € Ð6ªI q”�Q�q˜1™�X˜r×"Ð"ªIùs   ƒ!)r   r   é   )ÚlstripÚtuple)r   s   `r   Ú_hexr   #   s(   ø€ Ø	
�ˆi×Ñ Ó$€AÜÔ6©IÓ6Ó6Ð6ó    c                 ó˜  ^'^(• [        U R                  SS5      5      nSnSnSnSnSn[        S5      n[        SS	S
9n	[        S5      n
U S   m'[        U R                  S5      5      n[	        S T' 5       5      nSnU(       ad  [        U S   R                  SS5      5      n[        R                  " [        R                  " SS5      5      nUR                  SXêS9S   nSU-   S-   nX\U-  -   U-   US-  -   nT' Vs/ s H   nUUR                  S5      (       a  UOS-   PM"     nnUS-  [        U5      -   U[        T'5      S-
  -  -   n[        R                  " SUU4S5      n[        R                  " U5      m(S.U(4S jjnUn0 n[        T'5       GH…  u  nnXe-   nUUU'   T(R                  UUUS-  -   S-
  4UR                  SS5      USS9  UnUS    H~  nUS    U-  nT(R                  UUUU-   UU-   /SS![!        UR                  S"S#5      5      S$9  UR                  S5      (       a#  U" UUS-  -   UUS-  -   [        US   5      U
5        UU-  nM€     [        S% US    5       5      U-  nUR                  S5      (       a†  UU-   S&-   n T(R#                  UU UU-   U /SSS'9  T(R#                  UU UU S(-
  /SSS'9  T(R#                  UU-   U UU-   U S(-
  /SSS'9  U" UUS-  -   U S)-   [        US   R                  SS*5      5      U5        UUU   U-   -  nGMˆ     U(       Ga  U S   n!U!R                  S[%        ['        [        T'5      5      5      5      n"[	        U'4S+ jU" 5       5      U-  n#Xe-   U#-   S,-   n$U[)        U"5         n%U[	        U"5         U-   n&T(R#                  U$U%U$U&/SSS'9  T(R#                  U$U%U$S(-
  U%/SSS'9  T(R#                  U$U&U$S(-
  U&/SSS'9  T(R#                  U$U%U&-   S-  U$S--   U%U&-   S-  /SSS'9  T(R                  U$S,-   U%U&-   S-  S-
  4[        U!R                  SS5      5      U
SS9  UR+                  U5        U$ s  snf )/NÚunit_pxéZ   é8   é   é‚   é   é   é   F)r   ÚbarsÚtotalc              3   óL   #   • U  H  n[        S  US    5       5      v •  M     g7f)c              3   ó*   #   • U  H	  oS    v •  M     g7f©ÚuN© ©r   Úss     r   r   Ú#render.<locals>.<genexpr>.<genexpr>2   s   é € Ð6ª 1˜#žªùó   ‚ÚsegmentsN©Úsum)r   Úbs     r   r   Úrender.<locals>.<genexpr>2   s"   é € ÐEÂ¸1”CÑ6¨¨*ªÓ6×6Ð6Âùs   ‚"$r   ÚtextÚ ÚRGB)é   r<   ©r   r   ©Úfontr   é    Úbraceé   )éÿ   rC   rC   ©r   r   r   c                 ór   >• T	R                  SX#S9u  pVpxT	R                  XU-
  S-  -
  XU-
  S-  -
  4X#US9  g )Nr=   r>   r   ©r?   Úfill)Útextbboxr9   )
ÚcxÚcyÚtr?   rG   ÚlÚtpÚrr7   Úds
            €r   ÚctextÚrender.<locals>.ctextD   sF   ø€ Ø—j‘j ¨�jÐ6‰ˆˆqØ	�‰�˜!‘e˜q‘[Ñ  "¨B©°!¡|Ñ"3Ð4°aÈˆÒNr   é   ÚlabelrF   r4   r.   é   rG   r   )ÚoutlineÚwidthrG   c              3   ó*   #   • U  H	  oS    v •  M     g7fr-   r/   r0   s     r   r   r8   W   s   é € Ð5¢_ �s–V¢_ùr3   r<   )rG   rV   é   é   Ú?c              3   óT   >#   • U  H  n[        S  TU   S    5       5      v •  M     g7f)c              3   ó*   #   • U  H	  oS    v •  M     g7fr-   r/   r0   s     r   r   r2   e   s   é € Ð<Ò(; 1˜#žÒ(;ùr3   r4   Nr5   )r   r   r)   s     €r   r   r8   e   s(   øé € ÐKÂdÀ”CÑ<¨¨Q©°
Ò(;Ó<×<Ð<Âdùs   ƒ%(r   é
   )rD   )r   Úgetr   ÚboolÚmaxÚstrr   ÚDrawr   ÚnewrH   r6   ÚlenÚ	enumerater9   Ú	rectangler   ÚlineÚlistÚrangeÚminÚsave))ÚspecÚout_pathÚUÚBHÚGAPÚLBL_WÚPADÚBRACEÚfÚfsÚfbÚ	has_totalÚ	max_unitsÚRTOTALÚttxtÚ_tmpÚtwÚWr7   ÚrowhÚHÚimgrP   ÚyÚbar_topr   ÚbarÚxÚseg_xr1   ÚwÚfull_wÚbyÚtbÚidxsÚspanwÚbxÚytopÚybotr)   rO   s)                                          @@r   Úrenderr�   '   s’  ù€ Ü�—‘˜) RÓ(Ó)€AØ€BØ€CØ€EØ€CØ€EÜ�2‹Y€AœU 2¨EÑ2˜¼¸r»°Bà�‰<€DÜ�T—X‘X˜gÓ&Ó'€IÜÑEÁÓEÓE€Ið €FÞÜ�4˜‘=×$Ñ$ V¨RÓ0Ó1ˆÜ�~Š~œeŸiši¨¨vÓ6Ó7ˆØ�]‰]˜6 4ˆ]Ð1°!Ñ4ˆØ˜2‘ Ñ"ˆà˜A‘Ñ Ñ&¨¨q©Ñ0€AÙ;?Ó@º4°aˆB˜1Ÿ5™5 Ÿ>™>‘%¨qÔ1¹4€DÐ@Øˆa‰”#�d“)Ñ˜c¤S¨£Y°¡]Ñ3Ñ3€Aä
�)Š)�E˜A˜q˜6 ?Ó
3€CÜ�Š�sÓ€A÷Oð 	€AØ€GÜ˜D—/‰ˆˆ3Ø‰KˆØˆ�‰
à	�‰��Q˜˜a™‘Z "‘_Ð% s§w¡w¨w¸Ó';À!È)ˆÑTØˆØ�Z”ˆAØ�#‘˜‘
ˆAØ�K‰K˜  5¨1¡9¨a°"©fÐ5¸yØ¤d¨1¯5©5°¸Ó+CÓ&Dð ñ Fà�u‰u�V�}‰}Ù�e˜a !™e‘m Q¨¨a©¡Z´°Q°v±Y³ÀÔDØ�Q‰JŠEñ !ô Ñ5 S¨¢_Ó5Ó5¸Ñ9ˆà�7‰7�7×ÑØ�R‘˜!‘ˆBØ�F‰F�A�r˜1˜v™: rÐ*°À!ˆFÑDØ�F‰F�A�r˜1˜b 1™fÐ%¨I¸QˆFÑ?Ø�F‰F�A˜‘J  A¨¡J°°Q±Ð7¸iÈqˆFÑQÙ�!�f˜q‘j‘. " r¡'¬3¨s°7©|×/?Ñ/?ÀÈÓ/LÓ+MÈqÔQØ	ˆT�!‰W�s‰]Ñ‹ñ+ "÷0 Ø�'‰]ˆØ�v‰v�fœd¤5¬¨T«Ó#3Ó4Ó5ˆÜÔKÁdÓKÓKÈaÑOˆØ‰[˜5Ñ  2Ñ%ˆØ”s˜4“yÑ!ˆØ”s˜4“yÑ! BÑ&ˆØ	�‰��D˜"˜dÐ#¨)¸1ˆÑ=Ø	�‰��D˜"˜q™& $Ð'¨i¸qˆÑAØ	�‰��D˜"˜q™& $Ð'¨i¸qˆÑAØ	�‰��T˜D‘[ AÑ% r¨B¡w°¸±ÀÑ0AÐBÈÐZ[ˆÑ\Ø	�‰��R‘˜$ ™+¨Ñ*¨RÑ/Ð0´#°b·f±f¸VÀRÓ6HÓ2IÐPRÐYbˆÑcà‡H�HˆXÔØ€Oùòe As   Ã:'QÚ__main__r"   ÚAlanrB   z#dbe9ff)r.   rG   r9   rZ   )rS   r4   rA   ÚBenz#ffe7c2)rS   r4   z$640)r9   r)   )r!   r)   r*   z_barmodel_sample.pngr   zutf-8)Úencoding)T)Ú__doc__ÚjsonÚsysÚosÚPILr   r   r   ÚpathÚdirnameÚabspathÚ__file__ÚBASEr   r   r�   Ú__name__Údemord   ÚargvÚjoinÚoutrl   ÚloadÚopenÚprintr/   r   r   Ú<module>r¦      s'  ðñ÷, Ó ß +Ñ +à	‡w�w‡��r—w‘w—‘ xÓ0Ó1€ô(ò7òIðV ˆzÓð àØ !¨9Ñ5¸QÈ	Ñ7RØ !¨9Ñ5ð7à˜s�mñ%ð Ø !¨9Ñ5Ð6ñ8ð
ð !¨1¨a¨&Ñ1ñ€Dñ ˜SŸX™X›¨Ó*ˆ#�(‰(�1Š+°·±·±¸TÐCYÓ0Z€CØ€DÙ
ˆ3�8‰8ƒ}�qÓØ�yŠy™˜cŸh™h q™k°GÑ<Ó=ˆÙ	‰&��sÓ
Õð% r   