+
    UV-jGC  ã                  óÚ  € ^ RI Ht ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ]P                  ! R4      tRR	R
RRRR//tRR	R
RRR^ RR/R^R^/tRRRRRRRR./R]RRRR^/R/ ]CR^/C/RRR.RR/tRRRRRRRR./R]RRR/RRRR^/R/ ]CR^/C/R. R]ORR/tRRRRRRR^/R RRR^/R!RRR^/R"RRR^/R/ ]CR^/C/R. R^ORR/tRRRRRRR^/R RRR^/R"RRR^/R#RRR^/R/ ]CR^/C/R. R_ORR/t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/t]! R*R*R+7       ! R, R-4      4       t]! R*R*R+7       ! R. R/4      4       t ! R0 R1]4      tR2 R3 ltR4 R5 ltR6R*R7R*/R8 R9 lltR6R*R:RR;RR<RR7R*/R= R> lltR?R/R@ RA lltRBtRC RD lt RE RF lt!RG RH lt"RI RJ lt#RK RL lt$RM RN lt%RO RP lt&RQ RR lt'RS RT lt(RU RV lt)RW RX lt*R`RY RZ llt+R[ R\ lt,R# )aé    )ÚannotationsN)ÚMapping)Ú	dataclass)Úgcd)ÚAnyz^#[0-9A-F]{6}$ÚtypeÚarrayÚitemsÚstringÚpatternÚintegerÚminimumÚmaximuméè  ÚminItemsÚmaxItemsÚobjectÚ
propertiesÚenumÚobjÚbboxÚdescÚ	minLengthÚcolor_paletteÚrequiredÚadditionalPropertiesFÚtextÚ
aestheticsÚlightingÚphotoÚmediumÚ	art_styleÚhigh_level_descriptionÚstyle_descriptionÚanyOfÚcompositional_deconstructionÚ
backgroundÚelementsT)ÚfrozenÚslotsc                  óx   € ] tR t^]t$ R]R&   R]R&   R]R&   R]R&   RtR]R&   R	tR
]R&   RtR]R&   R	tR
]R&   Rt	R	# )ÚNormalizedPromptÚstrr   ÚboolÚis_json_captionÚis_structured_captionÚwas_wrappedztuple[str, ...]ÚwarningsNú
str | NoneÚprompt_expansion_modelFÚprompt_expansion_usedÚprompt_expansion_error© )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r2   r4   r5   r6   Ú__static_attributes__r7   ó    Ús/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/ideogram4/prompting.pyr,   r,   ]   sD   ‡ à
ƒIØÓØÓØÓØ "€HˆoÓ"Ø)-Ð˜JÓ-Ø"'Ð˜4Ó'Ø)-Ð˜J×-r>   r,   c                  ó6   € ] tR t^it$ R]R&   R]R&   R]R&   RtR# )ÚPromptExpansionResultr-   r   Úraw_textÚmodelr7   N)r8   r9   r:   r;   r<   r=   r7   r>   r?   rA   rA   i   s   ‡ à
ƒIØƒMØ‡Jr>   rA   c                  ó   € ] tR t^ptRtR# )ÚPromptExpansionCaptionErrorr7   N)r8   r9   r:   r;   r=   r7   r>   r?   rE   rE   p   s   † Ûr>   rE   c               ó    € V ^8„  d   QhRRRR/# )é   ÚcaptionúMapping[str, Any]Úreturnr-   r7   )Úformats   "r?   Ú__annotate__rL   t   s   € ÷ Jñ JÐ-ð J°#ñ Jr>   c                ó4   € \         P                  ! V RRR7      # )Ú,F)Ú
separatorsÚensure_ascii)rN   Ú:)ÚjsonÚdumps)rH   s   &r?   Úformat_captionrT   t   s   € Ü�:Š:�g¨*À5ÔIÐIr>   c               ó    € V ^8„  d   QhRRRR/# ©rG   Úpromptr-   rJ   r.   r7   )rK   s   "r?   rL   rL   x   s   € ÷ *ñ * #ð *¨$ñ *r>   c                óD   € \        V 4      pVf   R# \        V4      '       * # )NF)Ú_parse_json_captionÚ_caption_warnings)rW   rH   s   & r?   r0   r0   x   s"   € Ü! &Ó)€GØ‚ÙÜ  Ó)Ô)Ð)r>   Úauto_json_captionÚwarnc               ó(   € V ^8„  d   QhRRRRRRRR/# )rG   rW   r-   r[   r.   r\   rJ   r,   r7   )rK   s   "r?   rL   rL      s2   € ÷  ñ  Øð ð ð ð ð	 ð
 ñ r>   c               ón  € V P                  4       p\        V4      '       d^   \        V4      p\        \	        V4      4      pV'       d"   V F  p\
        P                  ! V^R7       K  	  \        V RV'       * RVR7      # V'       g   \        V RRRR7      # \        \        \        V4      4      RRRR7      # )rG   ©Ú
stacklevelTF)r   r/   r0   r1   r2   )r   r/   r0   r1   )
ÚstripÚ_looks_like_json_objectÚ_loads_json_captionÚtuplerZ   r2   r\   r,   rT   Ú_minimal_caption)rW   r[   r\   ÚstrippedrH   ÚissuesÚissues   &$$    r?   Únormalize_promptri      s±   € ð �|‰|‹~€HÜ˜x×(Ò(Ü% hÓ/ˆÜÔ(¨Ó1Ó2ˆßÛ�Ü—’˜e°×2ñ  äØØ Ø&,¤*ØØô
ð 	
÷ ÜØØ!Ø"'Øô	
ð 	
ô ÜÔ,¨XÓ6Ó7ØØ"Øô	ð r>   r4   ÚwidthÚheightc               ó4   € V ^8„  d   QhRRRRRRRRR	RR
RRR/# )rG   rW   r-   r[   r.   r4   r3   rj   ú
int | Nonerk   r\   rJ   r,   r7   )rK   s   "r?   rL   rL   ¢   sP   € ÷ <
ñ <
Øð<
ð ð<
ð 'ð	<
ð
 ð<
ð ð<
ð ð<
ð ñ<
r>   c               ó¸  € V P                  4       p\        V4      '       g   Vf   \        V VVR7      #  \        VV\	        W44      R7      p\        VP
                  RVR7      p\        VP
                  VP                  VP                  RVP                  VP                  RR7      #   \         d§   p	T'       g   \        R4      T	hT'       d   \        P                  ! RT	 2^R7       \        T RTR7      p
\        T
P
                  T
P                  T
P                  T
P                  T
P                  \        T4      R\        T	4      R	7      u R p	?	# R p	?	ii ; i)
N)r[   r\   )rC   Úaspect_ratioFT)r   r/   r0   r1   r2   r4   r5   zPrompt expansion failedzVPrompt expansion failed; falling back to the minimal Ideogram 4 JSON caption wrapper. r_   )r   r/   r0   r1   r2   r4   r5   r6   )ra   rb   ri   Ú!generate_prompt_expansion_captionÚ_aspect_ratio_from_sizer   r,   r/   r0   r2   rC   rE   Ú
ValueErrorr\   r1   r-   )rW   r[   r4   rj   rk   r\   rf   Ú	expansionÚpreparedÚexcÚfallbacks   &$$$$$     r?   Úprepare_promptrw   ¢   sP  € ð �|‰|‹~€HÜ˜x×(Ò(Ð,BÒ,JÜØØ/Øô
ð 	
ð+
Ü5ØØ(Ü0°Ó?ô
ˆ	ô
 $Ø�N‰NØ#Øô
ˆô
  Ø—‘Ø$×4Ñ4Ø"*×"@Ñ"@ØØ×&Ñ&Ø#,§?¡?Ø"&ô
ð 	
øô 'ô 
ß ÜÐ6Ó7¸SÐ@ßÜ�MŠMð4Ø47°5ð:àõô
 $ØØ"Øô
ˆô
  Ø—‘Ø$×4Ñ4Ø"*×"@Ñ"@Ø ×,Ñ,Ø×&Ñ&Ü#&Ð'=Ó#>Ø"'Ü#& s£8ô	
õ 		
ûð
ús%   µA2B( Â(EÂ3EÃA?EÅEÅEro   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rG   rW   r-   rC   ro   r3   rJ   rA   r7   )rK   s   "r?   rL   rL   á   s2   € ÷ 7ñ 7Øð7ð ð7ð ð	7ð
 ñ7r>   c          	     óN  € ^ RI p^ RIHp ^RIHp ^RIHp ^RIHp ^RI	H
p Rp	Rp
 V! V4      w  ršRRR\        /RR	R\        W4      /.pV! V
V	P                  V4      p\        V
R
4      '       d   V
P                  MT
pV! V\         4      pV! V	V
VV.RRR7      pVP"                  P%                  4       p\'        \)        \+        V4      4      V\-        V4      R7      ?	?
VP/                  4        VP1                  4        #   ?	?
TP/                  4        TP1                  4        i ; i)r   N)Úgenerate)Úapply_chat_template)Ú"build_json_schema_logits_processor)ÚloadÚroleÚsystemÚcontentÚuserÚ	tokenizerFT)Úlogits_processorsÚverboseÚskip_special_tokens)r   rB   rC   )ÚgcÚmlx.coreÚcoreÚgenerate.dispatchrz   Úprompt_utilsr{   Ú
structuredr|   Úutilsr}   ÚPROMPT_EXPANSION_SYSTEM_PROMPTÚ_prompt_expansion_user_promptÚconfigÚhasattrr‚   ÚIDEOGRAM4_CAPTION_SCHEMAr   ra   rA   rT   Ú_load_prompt_expansion_captionr-   ÚcollectÚclear_cache)rW   rC   ro   r†   Úmxrz   r{   r|   r}   Ú	model_objÚ	processorÚmessagesÚformatted_promptr‚   Úlogits_processorÚresultrB   s   &$$              r?   rp   rp   á   s2  € ó åå-Ý3Ý@Ýà€IØ€Ið&Ù# E›{Ñˆ	à�X˜yÔ*HÐIà˜ØÔ8¸ÓNðð
ˆñ /ØØ×ÑØó
Ðô $+¨9°k×#BÒ#BˆI×ÒÈ	ð 	ñ >ØÜ$ó
Ðñ ØØØØ/Ð0ØØ $ô
ˆð —;‘;×$Ñ$Ó&ˆÜ$ÜÔ >¸xÓ HÓIØÜ�e“*ô
ð �yØ
�
‰
ŒØ
�‰Õøð �yØ
�
‰
ŒØ
�‰Õús   ¨B5D  Ä $D$a�  You prepare structured JSON captions for Ideogram 4 image generation. Return
only JSON matching the provided schema. Preserve the user's intent, requested
wording, and constraints while making the visual description more specific and
useful to the image model.

Always include a concrete high_level_description and
compositional_deconstruction. Write descriptions as observations of the desired
image, never as commands or as a copy of the user's request. The background must
describe the actual scene, not a generic placeholder.

Use one obj element for each explicitly named visual subject. Use one text
element for every quoted string or other visible wording the user requests.
Copy each text field verbatim, including capitalization, punctuation, line
breaks, and non-ASCII characters. Do not hide requested lettering inside an obj
description.

Bounding boxes are optional. Include them only when useful for layout, using
integer normalized [0, 1000] coordinates as [y_min, x_min, y_max, x_max] with
y_min < y_max and x_min < x_max. If style_description is included, use exactly
one of photo or art_style. Use only uppercase #RRGGBB values in color palettes.
c               ó$   € V ^8„  d   QhRRRRRR/# )rG   rW   r-   ro   r3   rJ   r7   )rK   s   "r?   rL   rL   3  s&   € ÷ Uñ U¨#ð U¸Zð UÈCñ Ur>   c                ó2   € V'       d   R V R2MRpRV RV  2# )z
Target aspect ratio: zH. Use it only to plan the composition; do not add an aspect_ratio field.Ú z4Convert this prompt into an Ideogram 4 JSON caption:Ú
r7   )rW   ro   Úaspects   && r?   rŽ   rŽ   3  s:   € ÷ ð " , ð 09ñ 	9ð ð	 ð BÀ&ÀÈÈFÈ8ÐTÐTr>   c               ó$   € V ^8„  d   QhRRRRRR/# )rG   rj   rm   rk   rJ   r3   r7   )rK   s   "r?   rL   rL   =  s!   € ÷ ?ñ ? :ð ?°zð ?Àjñ ?r>   c                ó°   € V '       d	   V'       g   R # \        \        V 4      \        V4      4      p\        V 4      V,           R\        V4      V,           2# )NrQ   )r   Úint)rj   rk   Údivisors   && r?   rq   rq   =  sC   € ßŸÙÜ”#�e“*œc &›kÓ*€GÜ�%‹j˜GÕ#Ð$ A¤c¨&£k°WÕ&<Ð%=Ð>Ð>r>   c               ó    € V ^8„  d   QhRRRR/# rV   r7   )rK   s   "r?   rL   rL   D  s   € ÷ "ñ " Cð "¨Dñ "r>   c                ó$   € V P                  R 4      # )Ú{)Ú
startswith©rW   s   &r?   rb   rb   D  s   € Ø×Ñ˜SÓ!Ð!r>   c               ó    € V ^8„  d   QhRRRR/# )rG   rW   r-   rJ   zdict[str, Any] | Noner7   )rK   s   "r?   rL   rL   H  s   € ÷ ñ  ð Ð(=ñ r>   c                ó„   € V P                  4       p\        V4      '       g   R #  \        V4      #   \         d     R # i ; i©N)ra   rb   rc   rr   )rW   rf   s   & r?   rY   rY   H  s=   € Ø�|‰|‹~€HÜ" 8×,Ò,ÙðÜ" 8Ó,Ð,øÜô Úðús   ¥
0 °?¾?c               ó    € V ^8„  d   QhRRRR/# ©rG   rW   r-   rJ   údict[str, Any]r7   )rK   s   "r?   rL   rL   R  s   € ÷ ñ  ð ¨ñ r>   c                óÈ   €  \         P                  ! V 4      p\	        T\
        4      '       g   \        R4      hT#   \         P                   d   p\        R 4      ThRp?ii ; i)zInvalid Ideogram 4 JSON captionNz)Ideogram 4 JSON caption must be an object)rR   ÚloadsÚJSONDecodeErrorrr   Ú
isinstanceÚdict)rW   Úvalueru   s   &  r?   rc   rc   R  s^   € ðEÜ—
’
˜6Ó"ˆô �eœT×"Ò"ÜÐDÓEÐEØ€Løô	 ×Ñô EÜÐ:Ó;ÀÐDûðEús   ‚; »A!ÁAÁA!c               ó    € V ^8„  d   QhRRRR/# )rG   r   r-   rJ   r¯   r7   )rK   s   "r?   rL   rL   \  s   € ÷ ñ ¨ð °ñ r>   c                ó  €  \         P                  ! V 4      p\	        T\
        4      '       g   \        R4      h\        T4      pT'       d   \        RT^ ,           24      hT#   \         P                   d   p\        R 4      ThRp?ii ; i)z0Prompt expansion model did not return valid JSONNz3Prompt expansion model did not return a JSON objectz4Prompt expansion model returned an invalid caption: )rR   r±   r²   rE   r³   r´   rZ   )r   rµ   ru   rg   s   &   r?   r’   r’   \  s�   € ðÜ—
’
˜4Ó ˆô
 �eœT×"Ò"Ü)ØAó
ð 	
ô ˜uÓ%€FßÜ)ØBÀ6È!Å9À+ÐNó
ð 	
ð €Løô ×Ñô Ü)Ø>ó
àð	ûðús   ‚A# Á#B	Á8BÂB	c               ó    € V ^8„  d   QhRRRR/# r®   r7   )rK   s   "r?   rL   rL   o  s   € ÷ 
ñ 
˜Sð 
 ^ñ 
r>   c           
     ó    € R V RRRRRRRV /.//# )r#   r&   r'   zHThe setting, environment, and surrounding context implied by the prompt.r(   r   r   r   r7   r©   s   &r?   re   re   o  s4   € à  &Ø&Øðð ˜& %¨°Ð8Ð9ð)
ð	ð 	r>   c               ó    € V ^8„  d   QhRRRR/# )rG   rH   rI   rJ   ú	list[str]r7   )rK   s   "r?   rL   rL   |  s   € ÷ 8ñ 8Ð0ð 8°Yñ 8r>   c                ó  € . pV P                  R 4      p\        V\        4      '       g   VP                  R4       M˜\	        VP                  R4      4      '       g   VP                  R4       VP                  R4      p\        V\
        4      '       g   VP                  R4       M.\        V4       F  w  rEVP                  \        WT4      4       K!  	  V P                  R4      p\        V\        4      '       d×   RV9   pRV9   pWx8X  d   VP                  R	4       Rp	V	 F:  p
\	        VP                  V
4      4      '       d   K%  VP                  R
V
 R24       K<  	  V'       d2   \	        VP                  R4      4      '       g   VP                  R4       V'       d2   \	        VP                  R4      4      '       g   VP                  R4       MVe   VP                  R4       VP                  \        V 4      4       V# )r&   zOIdeogram 4 JSON caption should include a 'compositional_deconstruction' object.r'   zgIdeogram 4 JSON caption should include 'compositional_deconstruction.background' as a non-empty string.r(   zYIdeogram 4 JSON caption should include 'compositional_deconstruction.elements' as a list.r$   r    r"   zaIdeogram 4 JSON caption 'style_description' should include exactly one of 'photo' or 'art_style'.z<Ideogram 4 JSON caption 'style_description' should include 'z' as a non-empty string.zOIdeogram 4 JSON caption 'style_description.photo' should be a non-empty string.zSIdeogram 4 JSON caption 'style_description.art_style' should be a non-empty string.z@Ideogram 4 JSON caption 'style_description' should be an object.)r   r   r!   )
Úgetr³   r   ÚappendÚ_is_non_empty_stringÚlistÚ	enumerateÚextendÚ_element_warningsÚ_color_palette_warnings)rH   rg   Úcompositionalr(   ÚidxÚelementÚstyleÚ	has_photoÚhas_art_styler   Úkeys   &          r?   rZ   rZ   |  sÄ  € Ø€FØ—K‘KÐ >Ó?€MÜ�m¤W×-Ò-Ø�‰ð5õ	
ô
 $ M×$5Ñ$5°lÓ$C×DÒDØ�M‰MðSôð !×$Ñ$ ZÓ0ˆÜ˜(¤D×)Ò)Ø�M‰MðEõô
 !*¨(Ö 3‘�Ø—‘Ô/°Ó=Ö>ñ !4ð �K‰KÐ+Ó,€EÜ�%œ×!Ò!Ø˜uÑ$ˆ	Ø# uÑ,ˆØÔ%Ø�M‰Mð9ôð 8ˆÛˆCÜ'¨¯	©	°#«×7Ô7Ø—‘ðØ�uÐ4ð6öñ ÷ Ô1°%·)±)¸GÓ2D×EÒEØ�M‰Mð&ô÷ Ô!5°e·i±iÀÓ6L×!MÒ!MØ�M‰Mð&ôøð 
Ò	Ø�‰ØNô	
ð ‡M�MÔ)¨'Ó2Ô3Ø€Mr>   c               ó$   € V ^8„  d   QhRRRRRR/# )rG   rµ   r   rÆ   r£   rJ   r»   r7   )rK   s   "r?   rL   rL   ·  s!   € ÷ ñ ˜Sð  sð ¨yñ r>   c                óî  € R V R2p\        V \        4      '       g   RV R2.# . pV P                  R4      pVR9  d   VP                  RV R24       \	        V P                  R4      4      '       g   VP                  RV R24       VR8X  d;   \        V P                  R4      \
        4      '       g   VP                  RV R	24       R
V 9   d&   VP                  \        V R
,          V R24      4       V# )z&compositional_deconstruction.elements[Ú]úIdeogram 4 JSON caption 'z' should be an object.r   r   z!.type' should be 'obj' or 'text'.r   z$.desc' should be a non-empty string.z.text' should be a string.r   z.bbox>   r   r   )r³   r   r½   r¾   r¿   r-   rÂ   Ú_bbox_warnings)rµ   rÆ   Úpathrg   Úelement_types   &&   r?   rÃ   rÃ   ·  sò   € Ø3°C°5¸Ð:€DÜ�eœW×%Ò%Ø+¨D¨6Ð1GÐHÐIÐIà€FØ—9‘9˜VÓ$€LØ˜?Ô*Ø�‰Ø'¨ vÐ-NÐOô	
ô   §	¡	¨&Ó 1×2Ò2Ø�‰Ø'¨ vÐ-QÐRô	
ð �vÔ¤j°·±¸6Ó1BÄC×&HÒ&HØ�‰Ð1°$°Ð7QÐRÔSØ�„Ø�‰”n U¨6¥]°t°f¸E°NÓCÔDØ€Mr>   c               ó$   € V ^8„  d   QhRRRRRR/# ©rG   rµ   r   rÑ   r-   rJ   r»   r7   )rK   s   "r?   rL   rL   Í  s!   € ÷ ñ ˜#ð  Sð ¨Yñ r>   c                ó  € \        V \        4      '       d   \        V 4      ^8w  d   RV R2.# \        ;QJ d    R V  4       F  '       g   K   RM	  RM! R V  4       4      '       d   RV R2.# V w  r#rEW$8¼  g   W58¼  d   RV R2.# . # )é   rÏ   z*' should contain four integer coordinates.c              3  óÂ   "  € T FU  p\        V\        4      ;'       g9    \        V\        4      '       * ;'       g    ^ Tu;8*  ;'       d    R8*  Mu '       * x € KW  	  R# 5i)r   r   N)r³   r.   r£   )Ú.0Úitems   & r?   Ú	<genexpr>Ú!_bbox_warnings.<locals>.<genexpr>Ó  sL   é € ð áˆDô 	�4œÓ×TÐT¤j°´sÓ&;Ô";×TÐTÀ1È×CTÔCTÐPTÔCTÔ?TÔTÛùs   ‚AžA»AÁ
ATFz4' coordinates should be integers between 0 and 1000.z1' should satisfy y_min < y_max and x_min < x_max.)r³   rÀ   ÚlenÚany)rµ   rÑ   Úy_minÚx_minÚy_maxÚx_maxs   &&    r?   rÐ   rÐ   Í  s¹   € Ü�eœT×"Ò"¤c¨%£j°A¤oà'¨ vð .ð ð
ð 	
÷ ƒsñ áó‡s‡s‚sñ áó÷ ò ð
 (¨ vð ."ð "ð
ð 	
ð "'Ñ€E�%Ø„~˜œà'¨ vð .ð ð
ð 	
ð €Ir>   c               ó    € V ^8„  d   QhRRRR/# )rG   rµ   r   rJ   r.   r7   )rK   s   "r?   rL   rL   ä  s   € ÷ :ñ : ð :¨ñ :r>   c                ód   € \        V \        4      ;'       d    \        V P                  4       4      # r¬   )r³   r-   r.   ra   )rµ   s   &r?   r¿   r¿   ä  s"   € Ü�eœSÓ!×9Ð9¤d¨5¯;©;«=Ó&9Ð9r>   c               ó$   € V ^8„  d   QhRRRRRR/# rÔ   r7   )rK   s   "r?   rL   rL   è  s!   € ÷ ñ  3ð ¨cð ¸Iñ r>   c           
     óˆ  € . p\        V \        4      '       d`   V P                  4        FI  w  r4V R V 2pVR8X  d   VP                  \	        WE4      4       K/  VP                  \        WE4      4       KK  	  V# \        V \        4      '       d5   \        V 4       F%  w  rdVP                  \        WA RV R24      4       K'  	  V# )Ú.r   Ú[rÎ   )r³   r   r
   rÂ   Ú_validate_color_paletterÄ   rÀ   rÁ   )rµ   rÑ   rg   rË   ÚnestedÚnested_pathrÆ   s   &&     r?   rÄ   rÄ   è  s¬   € Ø€FÜ�%œ×!Ò!Ø Ÿ;™;ž=‰KˆCØ!˜F ! C 5˜/ˆKØ�oÔ%Ø—‘Ô5°fÓJÖKà—‘Ô5°fÓJÖKñ )ð €Mô 
�Eœ4×	 Ò	 Ü$ UÖ+‰KˆCØ�M‰MÔ1°&¸FÀ!ÀCÀ5ÈÐ:JÓKÖLñ ,à€Mr>   c               ó$   € V ^8„  d   QhRRRRRR/# rÔ   r7   )rK   s   "r?   rL   rL   ÷  s!   € ÷ 
ñ 
 3ð 
¨cð 
°iñ 
r>   c                óú   € \        V \        4      '       g   R V R2.# . p\        V 4       FL  w  r4\        V\        4      '       d   \        P                  V4      e   K4  VP                  R V RV R24       KN  	  V# )rÏ   z!' should be a list of hex colors.rç   z,]' should be an uppercase #RRGGBB hex color.)r³   rÀ   rÁ   r-   Ú_HEX_COLOR_REÚ	fullmatchr¾   )rµ   rÑ   rg   rÆ   Úcolors   &&   r?   rè   rè   ÷  s�   € Ü�eœT×"Ò"Ø+¨D¨6Ð1RÐSÐTÐTØ€FÜ Ö&‰
ˆÜ˜%¤×%Ò%¬×)@Ñ)@ÀÓ)GÔ)OØ�M‰MðØ�6˜˜3˜%ÐKðMöñ 'ð €Mr>   )r   r   r   )r   r   r    r!   )r   r   r!   r"   )Ú$)-Ú
__future__r   rR   Úrer2   Úcollections.abcr   Údataclassesr   Úmathr   Útypingr   Úcompilerí   Ú_COLOR_PALETTE_SCHEMAÚ_BBOX_SCHEMAÚ_OBJECT_ELEMENT_SCHEMAÚ_TEXT_ELEMENT_SCHEMAÚ_PHOTO_STYLE_SCHEMAÚ_ART_STYLE_SCHEMAr‘   r,   rA   rr   rE   rT   r0   ri   rw   rp   r�   rŽ   rq   rb   rY   rc   r’   re   rZ   rÃ   rÐ   r¿   rÄ   rè   r7   r>   r?   Ú<module>rþ      s°  ðÝ "ã Û 	Û Ý #Ý !Ý Ý à—
’
Ð,Ó-€ð ˆGØˆf�h 	Ð+<Ð=ðÐ ð
 ˆGØˆf�i ¨A¨y¸$Ð?Ø�Ø�ð	€ð ˆHØØ�˜ 6¨E¨7Ð3Ø�Ø�˜ ;°Ð2ØÐAÐ1ÐA°:¸qÑAð	ð �˜Ð Ø˜Eð
Ð ð ˆHØØ�˜ 6¨F¨8Ð4Ø�Ø�˜Ð"Ø�˜ ;°Ð2ØÐAÐ1ÐA°:¸qÑAðð Ò(Ø˜EðÐ ð ˆHØØ�v˜x¨°aÐ8Ø�V˜X {°AÐ6Ø�&˜( K°Ð3Ø�6˜8 [°!Ð4ØÐBÐ1ÐB°:¸rÑBðð Ò=Ø˜EðÐ ð ˆHØØ�v˜x¨°aÐ8Ø�V˜X {°AÐ6Ø�6˜8 [°!Ð4Ø�f˜h¨°QÐ7ØÐBÐ1ÐB°:¸rÑBðð ÒAØ˜EðÐ ð ˆHØØ  6¨8°[À!Ð"DØ˜gÐ(;Ð=NÐ'OÐPØ&Ø�HØØ˜v x°¸aÐ@ØØ˜GØ˜gÐ(>Ð@TÐ'UÐVððð ˜ zÐ2Ø" Eð)
ðð  Ð/Ð0Ø˜Eð'Ð ñ. �$˜dÔ#÷.ð .ó $ð.ñ �$˜dÔ#÷ð ó $ðô	 *ô 	õJõ*ð ð #ð ð ÷	 ðF<
ð #ð<
ð *.ð	<
ð
 ð<
ð ð<
ð ÷<
ð~7ð  $÷	7ðt"Ð õ0Uõ?õ"õõõõ&
õ8õvõ,õ.:÷÷
r>   