
    j                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 e	j1        dk    rd Z2nd Z2ej3        d             Z4d	 Z5d
 Z6d Z7d Z8d Z9d Z:ej;        <                     e/            dk     d          d             Z=ej;        <                     e/            dk     d          d             Z>d Z?d Z@ej;        <                     e/            dk     d          d             ZAej;        <                     e/            dk     d          d             ZBej;        <                     e/            dk     d          d             ZCej;        <                     e/            dk     d          d             ZDej;        <                     e/            dk     d          d             ZEej;        <                     e/            dk     d          d             ZFej;        <                     e/            dk     d          d             ZGej;        <                     e/            dk     d          d              ZHej;        <                     e/            d!k     d          d"             ZId# ZJej;        <                     e/            dk     d          d$             ZKd% ZLd& ZMd' ZNej;        <                     e/            dk     d          d(             ZOd) ZPej;        <                     e/            dk     d          d*             ZQej;        <                     e/            dk     d          d+             ZRd, ZSd- ZTd. ZUdEd/ZVd0 ZWd1 ZXd2 ZYd3 ZZd4 Z[d5 Z\d6 Z]d7 Z^d8 Z_d9 Z`ej;        <                     e/            dk     d          d:             Zad; Zbd< Zcd= Zdd> Zeej;        <                     e/            d?k     d          d@             ZfdA ZgdB Zhej;        <                     e/            dCk     d          dD             ZidS )Fz
    cairocffi.tests
    ~~~~~~~~~~~~~~~

    Test suite for cairocffi.

    :copyright: Copyright 2013-2019 by Simon Sapin
    :license: BSD, see LICENSE for details.

    N   )"PDF_METADATA_AUTHORPDF_METADATA_CREATE_DATEPDF_METADATA_CREATORPDF_METADATA_KEYWORDSPDF_METADATA_MOD_DATEPDF_METADATA_SUBJECTPDF_METADATA_TITLEPDF_OUTLINE_FLAG_BOLDPDF_OUTLINE_FLAG_OPENPDF_OUTLINE_ROOTSVG_UNIT_PCSVG_UNIT_PTSVG_UNIT_PXSVG_UNIT_USERTAG_LINKContextFontFaceFontOptionsImageSurfaceLinearGradientMatrixPattern
PDFSurface	PSSurfaceRadialGradientRecordingSurface
ScaledFontSolidPatternSurfaceSurfacePattern
SVGSurfaceToyFontFacecairo_versioncairo_version_stringlittlec                     | ddd         S ).Convert a 4-byte ARGB string to native-endian.N argbs    [/home/ubuntu/budget-transfer-bot/.venv/lib/python3.11/site-packages/cairocffi/test_cairo.pypixelr.   '   s    DDbDz    c                     | S )r(   r*   r+   s    r-   r.   r.   +   s    r/   c               #      K   t          j        d          } d| v sJ 	 | V  t          j        |            d S # t          j        |            w xY w)N   é)tempfilemkdtempshutilrmtree)tempdirs    r-   temp_directoryr8   0   s]      t$$G7????ggs	   8 Ac                 4    t          d | D                       S )Nc              3   6   K   | ]}t          |d           V  dS )   N)round).0vs     r-   	<genexpr>zround_tuple.<locals>.<genexpr>;   s*      --q!------r/   )tuple)valuess    r-   round_tuplerB   :   s    --f------r/   c                     t          j        t          j                  5 } | |i | d d d            n# 1 swxY w Y   dt	          |          v sdt	          |          v sJ d S d S )NSURFACE_FINISHEDExceptionInfo)pytestraises	cairocffi
CairoErrorstr)funcargskwargsexcs       r-   assert_raise_finishedrO   >   s    	y+	,	, df              S))_C-H-H-HH))-H-Hs   	488c                      t          t          t                                          d                    \  } }}t	                      | dz  |dz  z   |z   k    sJ d S )N.i'  d   )mapintr%   splitr$   )majorminormicros      r-   test_cairo_versionrY   D   sZ    c#7#9#9#?#?#D#DEEE5%??eemeck9EAAAAAAAr/   c                  J    t          j                     dd l} | t           u sJ d S )Nr   )rH   install_as_pycairocairo)r\   s    r-   test_install_as_pycairor]   I   s1     """LLLIr/   c                     t          j        t          j        d          dk    sJ t          j        t          j        d          dk    sJ t          t          j        dd          } |                                 t          j        k    sJ |                                 dk    sJ |                                 dk    sJ |                                 dk    sJ t          j
        t                    5  t          j        dd          }t          j        |t          j        dd           d d d            n# 1 swxY w Y   t          j        dd	          }t          j        |t          j        ddd
          } t          |           }|                                                                dk    sJ |                    d           |                                t'          d          dz  k    sJ d S )NrR   i        P   Bs                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
   s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (   strider   r   r   r         ?         )r   format_stride_for_widthrH   FORMAT_ARGB32	FORMAT_A8
get_format	get_width
get_height
get_striderF   rG   
ValueErrorarraycreate_for_datar   
get_sourceget_rgbapaint_with_alphatobytesr.   )surfacedatacontexts      r-   test_image_surfacer|   O   s=   /& &),- - - -/S" "%() ) ) ) 92B;;G9#:::::"$$$$2%%%%6))))	z	"	" L L{3..$T9+BBKKKL L L L L L L L L L L L L L L ;sM**D*41H+-r"> > >GgG((**l::::S!!!<<>>U#677#=======s   17D44D8;D8c                      dt           j        v rt          j                     t	          d          } t          j        | t          j        ddd          }t          |          
                    d           | t          d          d	z  k    sJ d S )
N__pypy__i   rc   r_   rd   re   rh   ri   rj   )sysmodulesrF   xfail	bytearrayr   rt   rH   rl   r   rw   r.   )rz   ry   s     r-   test_image_bytearray_bufferr   i   s    S[   S>>D*41H+-r"> > >GG%%c***5,--3333333r/   +  zCairo version too low)reasonc                     t          t          j        dd          } |                     t          j        dd          }t          |t                     sJ |                                t          j        k    sJ |                                t          j        k    sJ |	                                dk    sJ |
                                dk    sJ d S )Nr_   r`      rR   )r   rH   rl   create_similar_imagerm   
isinstanceget_contentCONTENT_ALPHArn   ro   rp   )ry   similars     r-   !test_surface_create_similar_imager   u   s     92B;;G**9+>3GGGg|,,,,,  I$;;;;;9#66666!####3&&&&&&r/   i*  c                     t          t          j        dd          } |                                 }|d d          dk    sJ t	          |                     dddd                                                     |d d          dk    sJ d S )Nr                      r      s               )r   rH   rm   get_datar   create_for_rectanglepaint)ry   rz   s     r-   !test_surface_create_for_rectangler      s     9.155GD7l""""G((Aq!4455;;===7	     r/   c                  6   t          t          j        dd          } |                     t          j        dd          }t          |t                     sJ |                                t          j        k    sJ |                                t          j        k    sJ |	                                dk    sJ |
                                dk    sJ |                                du sJ t          d dd                                          du sJ |                                  |                                  |                                  |                     ddd	d
           |                                  |                     dd           |                                 dk    sJ |                     dd           |                                 dk    sJ t-          |           }t          |                                t                     sJ t          j        j        }	 |t          j        = |                                }|j        | j        k    sJ t          |t8                    sJ t          |t                     rJ 	 t           |t          j        <   n# t           |t          j        <   w xY w|                                  t=          | j                   t=          | j                   t=          | j        dd           t=          | j        dd           d S )Nr_   r`   r   rR   Fr   Tr   i,  i.        )r   r      r;   )r   r;   )r   rH   rl   create_similarr   r   r   rn   rm   ro   rp   has_show_text_glyphsr   	copy_page	show_page
mark_dirtymark_dirty_rectangleflushset_device_offsetget_device_offsetset_fallback_resolutionget_fallback_resolutionr   
get_targetsurfacesSURFACE_TYPE_TO_CLASSSURFACE_TYPE_IMAGE_pointerr    finishrO   )ry   r   r{   surface_maptargets        r-   test_surfacer      s   92B;;G$$Y%<aEEGg|,,,,,  I$;;;;;9#66666!####3&&&&''))U2222dAq!!6688D@@@@  AsE222MMOOOb!$$$$$&&'1111##B*****,,7777gGg((**L99999$:KA	45##%%'"22222&'*****fl3333334@I011LI01@@@@NN'+,,,'+,,,'3Q:::'91a@@@@@s   !A!J J.c                  x   t          t          d          st          j                     t	          j                     t          j                    } t          j        |           }t          t          j        j        j                  dk    sJ t          | dd          }t          t          j        j        j                  dk    sJ t          j        |           |dz   k    sJ ~t	          j                     t          t          j        j        j                  dk    sJ t          j        |           |k    sJ d S )Ngetrefcountr   rR   r   )hasattrr   rF   r   gccollectioBytesIOr   lenrH   r   	KeepAlive	instancesr   )r   initial_refcountry   s      r-   test_target_lifetimer      s    3&& JLLLZ\\Fv..y!+566!;;;;c**Gy!+566!;;;;?6""&6&:::::JLLLy!+566!;;;;?6""&6666666r/   c                     t          d dd          } |                     d          J t          j                     t	          t
          j        j        j                  dk    sJ | 	                    dd           t	          t
          j        j        j                  dk    sJ |                     d          d d          dk    sJ | 	                    dd            t	          t
          j        j        j                  dk    sJ t                      dk    r|                     d          J |                                  t          | j	        dd            d S )Nr   
image/jpegr   s   lolr   )r   get_mime_datar   r   r   rH   r   r   r   set_mime_datar$   r   rO   ry   s    r-   test_mime_datar      sH    q!$$G  ..666JLLLy!+566!;;;;,///y!+566!;;;;  ..qqq1V;;;;,---y!+566!;;;;%$$\22:::NN'/tDDDDDr/   c                      t          d dd                              d          du sJ t          t          j        dd          } |                     d          du sJ d S )Nr   r   TF)r   supports_mime_typer   rH   rm   r   s    r-   test_supports_mime_typer      sh     dAq!!44\BBdJJJJ9.155G%%l33u<<<<<<r/   i,  c                      t          d dd          } |                                 dk    sJ |                     dd           |                                 dk    sJ d S )Nr   r   r   r   r   )r   r   )r   get_device_scaleset_device_scaler   s    r-   test_device_scaler      sk     q!$$G##%%////Q"""##%%//////r/   i,  c                  p   t          j                    } t          | dd          }|                    t          d           |                    t
          d           |                    t          d           |                    t          d           |                    t          d           |                    t          d           |                    t          d           |                                 t          j                            |           }|j        d	         dk    sJ |j        d
         dk    sJ |j        d         dk    sJ |j        d         dk    sJ |j        d         dk    sJ t!          |j        d                                       d          sJ |j        d         dk    sJ d S )Nr   titlesubjectcreatorauthorkeywordsz2013-07-21T23:46:00+01:00z2013-07-21T23:46:00Zz/Titlez/Subjectz/Creatorz/Authorz	/Keywordsz/CreationDatez20130721234600+01'00z/ModDate20130721234600Z)r   r   r   set_metadatar
   r	   r   r   r   r   r   r   pikepdfPdfopendocinforJ   
startswithfile_objry   pdfs      r-   test_metadatar      s    z||H1a((G+W555-y999-y999,h777.
;;;13NOOO.0FGGGNN
+

8
$
$C;x G++++;z"i////;z"i////;y!X----;{#z1111 s{?+,,778NOOOOO;z"&7777777r/   c                     t          j                    } t          | dd          }|                    t          ddt
          t          z            }|                    |dd           |                                 t          j	        
                    |           }|                                }|j        d         j        dk    sJ |j        d         j        d         j        dk    sJ d S )Nr   ztitle 1zpage=1 pos=[1 1]ztitle 2r   )r   r   r   add_outliner   r   r   r   r   r   r   open_outlinerootr   children)r   ry   outliner   s       r-   test_outliner   
  s     z||H1a((G!!)%7 557 7G ,>???NN
+

8
$
$C  G<? I----<?#A&,	999999r/   c                     t          j                    } t          | dd          }|                    d           |                                 t
          j                            |           }|j        d         j	        dk    sJ d S )Nr   abcr   )
r   r   r   set_page_labelr   r   r   r   pageslabelr   s      r-   test_page_labelr     sy     z||H1a((G5!!!NN
+

8
$
$C9Q<&&&&&&r/   c                     t          j                    } t          | dd          }t          |          }|                    d           |                    t
          d           |                    dddd           |                    dd	d
d           |                                 |	                    t
                     |	                    d           |
                                 |                                 t          j                            |           }dt          |j                  v sJ dt          |j                  v sJ d S )Nrc   Documentz3rect=[1 2 4 5] uri='https://www.courtbouillon.org/')
attributesr   r   rh   r   r   r      z("/URI": "https://www.courtbouillon.org/"z"/S": "/Document")r   r   r   r   	tag_beginr   set_source_rgba	rectanglefilltag_endr   r   r   r   r   rJ   objects)r   ry   r{   r   s       r-   test_tagr   %  sA    z||H2r**GgGj!!!J  L L L Aq"a(((aAq!!!LLNNNOOHOOJNN
+

8
$
$C5S[9I9IIIII#ck"2"2222222r/   c                     t          j                    } t          | dd          }|                    dd           |                                 |                                 }t          j                    } t          | dd          }|                    dd           |                                 |                                 }t          |          t          |          k     sJ d S )Nr   	   )r   r   r   set_thumbnail_sizer   getvaluer   )r   ry   
pdf_bytes1
pdf_bytes2s       r-   test_thumbnail_sizer   ;  s     z||H1a((Gq!$$$NN""$$Jz||H1a((Gq!$$$NN""$$Jz??S__,,,,,,r/   i,  c                     t          d dd          } |                                 t          t          fv sJ t	          j                    }t          |dd          } |                     t                     |                                 t          k    sJ |                                  |	                                }d|v sJ d|v sJ t	          j                    }t          |dd          } |                     t                     |                                 t          k    sJ |                                  |	                                }d|v sJ d|v sJ d S )Nr   r   s   width="1px"s   height="2px"s   width="1pc"s   height="2pc")r"   get_document_unitr   r   r   r   set_document_unitr   r   r   r   )ry   r   	pdf_bytess      r-   test_document_unitr   M  s]    q!$$G$$&&=+*FFFFFz||H1a((Gk***$$&&+5555NN!!##IY&&&&i''''z||H1a((Gk***$$&&+5555NN!!##IY&&&&i''''''r/   c                     t          j        d          } | d d         }t                      5 }t          j                            |d          }|                    t          j                              }t          t          j        dd          }|                    |           t          |d          5 }|                                }|                    |          sJ 	 d d d            n# 1 swxY w Y   t          |d                                           t          |d          5 }|                                dk    sJ 	 d d d            n# 1 swxY w Y   |                    |           t          |d          5 }|                                |k    sJ 	 d d d            n# 1 swxY w Y   t#          j                    }|                    |           |                                |k    sJ |                                |k    sJ t          |d          5 }|                    |            d d d            n# 1 swxY w Y   t#          j        |           ||fD ]}	t          j        |	          }|                                t          j        k    sJ |                                dk    sJ |                                dk    sJ |                                dk    sJ |                                d d          t7          d	          k    sJ 	 d d d            n# 1 swxY w Y   t9          j        t<                    5  t          j        t#          j        | d d
                             }d d d            n# 1 swxY w Y   t9          j        t<                    5  t          j        t#          j        d                    }d d d            d S # 1 swxY w Y   d S )Ns`   iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQI12Ow69x7BgAE3gJRgNit0AAAAABJRU5ErkJggg==   zfoo.pngr   rbwbr/   r   s   2nr`   )base64	b64decoder8   ospathjoinencoder   getfilesystemencodingr   rH   rl   write_to_pngr   readr   closer   r   r   writecreate_from_pngrn   ro   rp   rq   r   r.   rF   rG   IOError)
	png_bytespng_magic_numberr7   filenamefilename_bytesry   fdwritten_png_bytesr   sources
             r-   test_pngr  f  s    	12 2I !!}			 GW7<<33!)B)D)DEEy61==X&&&(D!! 	BR "		$//0@AAAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Xt""$$$(D!! 	$R7799#####	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$^,,,(D!! 	2R7799 111111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2:<<X&&&  ""&77777##%%):::::(D!! 	 RHHY	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 z),,hG 	G 	GF"26::G%%''9+BBBBB$$&&!++++%%''1,,,,%%''1,,,,##%%aaa(E2E,F,FFFFFF	G-G G G G G G G G G G G G G G G< 
w		 K K.rz)CRC./I/IJJK K K K K K K K K K K K K K K 
w		 @ @.rz#??@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   BL*4,C-!L*-C1	1L*4C1	55L**EL*E	L*E	(L*F*L**F.	.L*1F.	2A/L*!I7L*I	L*
I	CL**L.1L./N		NN-'O!!O%(O%c                     t          t          j                              t          t          j        t          j        g          k    sJ t          j        t          j                  dk    sJ t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j                    } t          | dd                                           |                                                     d          sJ t          j                    } t          | dd          }|                    t          j                   |                                 |                                                     d          sJ d S )NzPDF 1.4PDF_VERSION_42*   r   )s   %PDF-1.5s   %PDF-1.7s   %PDF-1.4)setr   get_versionsrH   PDF_VERSION_1_4PDF_VERSION_1_5version_to_stringrF   rG   	TypeErrorrr   r   r   r   r   r   restrict_to_version)r   ry   s     r-   test_pdf_versionsr    s    z&(())S!9#<2> .? .? ? ? ? ?'	(ABBiOOOO	y	!	! 7 7$%56667 7 7 7 7 7 7 7 7 7 7 7 7 7 7	z	"	" ) )$R((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) z||HxA%%'''))*DEEEEEz||H1a((G	 9:::NN))+6666666s$   B((B,/B,C--C14C1c                     t                      5 } t          j                            | d          }|                    t          j                              }t          j                    }|||d fD ]'}t          |dd          }|
                                 (t          |d          5 }|                                                    d          sJ 	 d d d            n# 1 swxY w Y   t          |d          5 }|                                                    d          sJ 	 d d d            n# 1 swxY w Y   t          j                            |          }|j        d         d         g dk    sJ t#          |j                  d	k    sJ 	 d d d            n# 1 swxY w Y   t          j                    }t          |d	d	          }t%          |          }|                    d
d           |                                 |                    dd           |                                 |
                                 t          j                            |          }dt-          |j                  vsJ |j        d         d         g dk    sJ |j        d	         d         g dk    sJ t#          |j                  dk    sJ d S )Nzfoo.pdf{     r   s   %PDFr   z	/MediaBox)r   r   r!  r"  r      rR   r    z"/MediaBox": [ 0 0 1 1 ])r   r   r#  rR   )r   r   r  r$  r   )r8   r  r  r  r  r   r  r   r   r   r   r   r  r   r   r   r   r   r   set_sizer   r   rJ   r   )	r7   r  r  r   r   ry   r  r   r{   s	            r-   test_pdf_surfacer&    sR   			 #W7<<33!)B)D)DEE:<<4@ 	 	F c22GNN(D!! 	1R7799''000000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1.$'' 	127799''000000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1kx((y|K(,<,<,<<<<<39~~"""""# # # # # # # # # # # # # # # z||H1a((GgGRRNN
+

8
$
$C%S-=-=====9Q<$77779Q<$7777sy>>Qs[   BF'*CFC"	"F%C"	&F9*D0$F0D4	4F7D4	8AFF #F c                  V   t          t          j                              t          t          j        t          j        g          k    sJ t          j        t          j                  dk    sJ t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t                      5 } t          j                            | d          }|                    t!          j                              }t%          j                    }|||d fD ]%}t          |dd                                           &t+          |d          5 }|                                                    d          sJ 	 d d d            n# 1 swxY w Y   t+          |d          5 }|                                                    d          sJ 	 d d d            n# 1 swxY w Y   |                                }|                    d          sJ d	|v sJ 	 d d d            n# 1 swxY w Y   t          d d
d
          }|                    t          j                   d S )NzSVG 1.1SVG_VERSION_42r  zfoo.svgr!  r"  r   s   <?xmls   viewBox="0 0 123 432"r   )r  r"   r  rH   SVG_VERSION_1_1SVG_VERSION_1_2r  rF   rG   r  rr   r8   r  r  r  r  r   r  r   r   r   r   r  r   r   r  )r7   r  r  r   r   r  	svg_bytesry   s           r-   test_svg_surfacer,    s   z&(())S!9#<2> .? .? ? ? ? ?'	(ABBiOOOO	y	!	! 7 7$%56667 7 7 7 7 7 7 7 7 7 7 7 7 7 7	z	"	" ) )$R((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) 
		 5W7<<33!)B)D)DEE:<<4@ 	2 	2FvsC((//1111(D!! 	2R7799''111111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2.$'' 	227799''111111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2%%''	##H-----'9444445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 q!$$G	 9:::::s   B((B,/B,C--C14C1BI.*GI.G	I.G	I..*H%I.%H)	)I.,H)	-4I..I25I2c                     t          t          j                              t          t          j        t          j        g          k    sJ t          j        t          j                  dk    sJ t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t                      5 } t          j                            | d          }|                    t!          j                              }t%          j                    }|||d fD ]%}t          |dd                                           &t+          |d          5 }|                                                    d          sJ 	 d d d            n# 1 swxY w Y   t+          |d          5 }|                                                    d          sJ 	 d d d            n# 1 swxY w Y   |                                                    d          sJ 	 d d d            n# 1 swxY w Y   t%          j                    }t          |d	d	          }|                    t          j                   |                                d
u sJ |                    d           |                                du sJ |                    d           |                                d
u sJ |                    dd           |                    d           |                                 |                    d           |                                 |                    d           |                                 |                                }d|v sJ d|v sJ d|v sJ d S )Nz
PS Level 3PS_LEVEL_42r  zfoo.psr!  r"  r   s   %!PSr   FlolT rc   r#  z%%Loremz%%ipsumz%%dolors   %%Lorems   %%ipsums   %%dolor) r  r   
get_levelsrH   
PS_LEVEL_2
PS_LEVEL_3ps_level_to_stringrF   rG   r  rr   r8   r  r  r  r  r   r  r   r   r   r   r  r   r   restrict_to_levelget_epsset_epsr%  dsc_commentdsc_begin_setupdsc_begin_page_setup)r7   r  r  r   r   r  ry   ps_bytess           r-   test_ps_surfacer<    s   y#%%&&#i2/4 +5 +5 5 5 5 5'	(<==MMMM	y	!	! 4 4$]3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4	z	"	" ) )$R((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) 
		 
7W7<<22!)B)D)DEE:<<4@ 	1 	1Ffc3''..0000(D!! 	1R7799''000000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1.$'' 	127799''000000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1  ""--g666666
7 
7 
7 
7 
7 
7 
7 
7 
7 
7 
7 
7 
7 
7 
7 z||H!Q''Gi2333??%%%%OOE??$$$$OOB??%%%%R	"""	"""  """	"""NN  ""H!!!!!!!!!!!!!!s   B((B,/B,C--C14C1BI&*GI&G	I&G	I&.*H%I&%H)	)I&,H)	-,I&&I*-I*c                    t          t          j        dd          }|                                d d          }|ddz  k    sJ t          t          j        dd          }t	          |          }|                    dd           |                    d           |                                d d          }||k    sJ t          t          j        |           }t	          |          }|                    dd           |	                                dk    sJ |                    d           |
                                 |	                                dk    sJ t          t          j        dd          }t	          |          }|                    |           |                                 |                                d d          }||fS )NrR       i@  r_   2   zSomething about us.)r   r   r   r   )r   rH   rl   r   r   move_to	show_textr   CONTENT_COLOR_ALPHAink_extentsr   set_source_surfacer   )extentsry   empty_pixelsr{   text_pixelsrecording_surfacerecorded_pixelss          r-   _recording_surface_commonrJ    s    92C==G##%%aaa(L7U?****92C==GgGOOB+,,,""$$QQQ'K,&&&&()F)02 2'((GOOB((**l::::+,,,((**l::::92C==GgG0111MMOOO&&((+O''r/   c                  :    t          d          \  } }|| k    sJ d S N)r   r      ra   rJ  rG  rI  s     r-   test_recording_surfacerP  +  s+    #<_#M#M Kk))))))r/   c                  :    t          d           \  } }|| k    sJ d S NrN  rO  s     r-    test_unbounded_recording_surfacerS  0  s-     $=T#B#B Kk))))))r/   c                  x    dD ]6} t          t          j        |           }|                                | k    sJ 7d S )NrL  )r   rH   rB  get_extents)rE  ry   s     r-   "test_recording_surface_get_extentsrV  7  sO     + 0 0"9#@'JJ""$$/////0 0r/   c                     t                      } t          j        t                    5  | j         d d d            n# 1 swxY w Y   |                                 dk    sJ |                     dd           |                                 dk    sJ |                     dd           |                                 dk    sJ | d         dk    sJ | j        dk    sJ d| _        |                                 d	k    sJ t          |           d
k    sJ t          |           d
k    sJ |                     dd          dk    sJ |                     dd          dk    sJ |                                 }|| k    sJ |                                 |                                dk    sJ |                                 |k    sJ |                                 d	k    sJ t          |  }|| k    sJ |                                 |                                dk    sJ |                                 |k    sJ |                                 d	k    sJ |                     t"          j        dz             t'          |                                           dk    sJ | t          j        t"          j                  z  } t'          |                                           dk    sJ d S )Nr   r   r   r   r   r   r#  r   )r   r   r   r   r#  r   r      )r   r   r   rY  r#  r   r   r   r   r   r   r#  r   zMatrix(2, 0, 0, 3, 12, 4)r   r   r;   r   rc   )rh   r   r   gUUUUUU?g      gUUUUUU)r   r   r   r#  r   )r   r   r   i)r   rF   rG   AttributeErrorsome_inexistent_attributeas_tuple	translatescaleyyreprrJ   transform_distancetransform_pointcopyinvertinvertedrotatemathpirB   init_rotate)mm2s     r-   test_matrixrr  ?  s   A	~	&	& $ $	##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $::<</////KKA::<<00000GGAqMMM::<<00000Q419999419999AD::<<000007711111q66000001%%////Q""h....	
B7777IIKKK;;==AAAAA::<<2::<<00000	B7777IIKKK;;==AAAAA::<<2::<<00000HHTWq[qzz||$$(>>>>>	DG	$	$$Aqzz||$$(@@@@@@@s   <A A c                  l   t          t          j        dd          } t          |           }|                                }|| usJ |j        | j        k    sJ |                                t          j        k    sJ |                    t          j	                   |                                t          j	        k    sJ |
                                t          j        k    sJ |                    t          j                   |
                                t          j        k    sJ |                                t                      k    sJ t          j        d          }|                    |           |                                |k    sJ |                                t                      k    sJ d S )Nr   rh   )r   rH   	FORMAT_A1r!   get_surfacer   
get_extendEXTEND_NONE
set_extendEXTEND_REPEAT
get_filterFILTER_GOOD
set_filterFILTER_BEST
get_matrixr   ro  
set_matrix)ry   patternsurface_againmatrixs       r-   test_surface_patternr  f  s   9.155GW%%G''))M''''!W%555559#88888y.///9#:::::9#88888y,---9#88888688++++$$Fv6))))688++++++r/   c                     t          ddd                                          dk    sJ t          dddd                                          dk    sJ t          d dd          } t          |           }t          ddd          }|                    |           t          |                                t                     sJ t          j        j	        }	 |t          j
        = |                                }|j        |j        k    sJ t          |t                    sJ t          |t                     rJ 	 t           |t          j
        <   d S # t           |t          j
        <   w xY w)Nr   rh         ?)r   rh   r  r         ?)r   rh   r  r  )r   rv   r   r   
set_sourcer   ru   rH   patternsPATTERN_TYPE_TO_CLASSPATTERN_TYPE_SOLIDr   r   )ry   r{   r  pattern_map
re_patterns        r-   test_solid_patternr  }  s[   2s##,,../AAAA2sC((11337HHHHHq!$$GgG1b#&&Gwg((**L99999$:KA	45''))
"g&66666*g.....j,7777774@I0111LI01@@@@s   A!E E#c                    t          j                    }t          |dd          }t          |          }| |                    |            |                                 |                                 |                                S )NrR   )r   r   r   r   r  r   r   r   )r  r   ry   r{   s       r-   pdf_with_patternr    st    z||H3,,GgG7###MMOOONNr/   c                  *   t          dddd          } |                                 dk    sJ |                     dddd           |                     dddd           |                     dddd	d           |                                 g d
k    sJ t          t          j        dd          }|                                d d          dk    sJ t          dddd          } |                     ddddd           |                     ddddd           t          |          }|
                    |            |                                 |                                d d          dk    sJ dt                      vsJ dt          |           v sJ d S )Nr   r   rc   r_   )r   r   rc   r_   rh   r  offsetredgreenbluer  )rh   r   rh   r  r   )rh   r   rh   r  r  )r   r   rh   r  r   r   r   s                                          ?r   g      @s      3f  3f  3f  3fs   /ShadingType 2)r   get_linear_pointsadd_color_stop_rgbadd_color_stop_rgbaget_color_stopsr   rH   rm   r   r   r  r   r  )gradientry   r{   s      r-   test_linear_gradientr    s   aB++H%%''>99991b#...rqEEE  QC555##%% * * *     9.155Gaaa L0000c1c1--H  Aq!Q///  Aq!Q///gGx   MMOOOaaa $KKKKK$4$6$66666 0 : :::::::r/   c                  x   t          dddddd          } |                                 dk    sJ |                     ddd	d
           |                     d	dd	d
           |                     d	dd	dd
           |                                 g dk    sJ dt                      vsJ dt          |           v sJ d S )Nr    rc   +     rR   )r  r  rc   r  r  rR   r   rh   r  r  r  r  s   /ShadingType 3)r   get_radial_circlesr  r  r  r  )r  s    r-   test_radial_gradientr    s    b#r2sC88H&&((,GGGGG1b#...rqEEE  QC555##%% * * *    
 $4$6$66666 0 : :::::::r/   c                     t          t          j        dd          } t          |           }|                                                                dk    sJ |5  |                    ddd           |                                                                dk    sJ 	 d d d            n# 1 swxY w Y   |                                                                dk    sJ 	 |5  |                    dddd           |                                                                dk    sJ t          # 1 swxY w Y   n# t          $ r Y nw xY w|                                                                dk    sJ d S )Nr   rg   r  rh   )r   r  rh   r   r  )r   r  r  rh   )	r   rH   rl   r   ru   rv   set_source_rgbr   rr   ry   r{   s     r-   test_context_as_context_managerr    s   92Aq99GgG((**l::::	 B Bq#r***!!##,,../AAAAAB B B B B B B B B B B B B B B ((**l:::: 	 	##AsC444%%''00226GGGGG	 	 	 	 	 	 	 	 	     ((**l::::::sD   AB**B.1B."D< $AD00D44D< 7D48D< <
E	E	c                  ~   t          t          j        dd          } t          |           }t	          |                                t                     sJ |                                j        | j        k    sJ |                                j        | j        k    sJ |                                                                t          j	        k    sJ | 
                                d d          t          d          k    sJ |5  |                    t          j                   |                                                                t          j        k    sJ |                    dddd           t	          |                                t                     sJ |                                 |                                 t	          |                                t&                    sJ | 
                                d d          t          d          k    sJ |                                 | 
                                d d          t          d          k    sJ 	 d d d            n# 1 swxY w Y   |5  |                                 |                    ddd           |                                 |                                }t	          |                                t                     sJ t	          |t&                    sJ |                    |                                           | 
                                d d          t          d          k    sJ |                                 | 
                                d d          t          d          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr          g?g?皙?s      s   3f)r   rH   rl   r   r   r   r   get_group_targetr   rB  r   r.   push_group_with_contentr   r   ru   r   r   pop_group_to_sourcer!   
push_group	pop_grouprD  ru  )ry   r{   groups      r-   test_context_groupsr    s    92Aq99GgGg((**L99999(G,<<<<<##%%.'2BBBBB$$&&2244)* * * *aaa E*=$>$>>>>>	 C C''	(?@@@((**6688'( ( ( (2r2...',,..=====##%%%',,..?????!!!!!$.A(B(BBBBB!!!!!$.A(B(BBBBBBC C C C C C C C C C C C C C C 
 
C 
C2r***!!##',,..=====%00000""5#4#4#6#6777!!!!!$.A(B(BBBBB!!!!!$.A(B(BBBBBB
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
Cs&   EI**I.1I.7D-N22N69N6c            
      X   t          t          j        dd          } t          |           }t	          |                                t                    sJ |                                                                dk    sJ |                    dd           |                                                                dk    sJ |	                    dd           |                                                                dk    sJ |	                    d           |                                                                dk    sJ |
                    t          j        d	z             t          |                                                                          d
k    sJ |                                 |                                                                dk    sJ |                    t          d	ddddd	                     |                                                                dk    sJ |                    t          d	ddddd                     |                                                                dk    sJ |                    t          d	ddddd                     |                    dd	          dk    sJ |                    dd	          dk    sJ |                    d	d          dk    sJ t          |                    dd                    dk    sJ d S )Nr   rX  r;   r   )r   r   r   r   r;   r   )r   r   r   r;   r;   r   rh   )rh   r   r   r   r;   r   r   )r   r   g      r   r;   r   r   rY  r   )r   r   r   rY  r   r   r   )r   r   r  g      @r   r   r#  r   r[  r\  )r   r   r   rc   )r   rH   rl   r   r   r~  r   rb  rc  rd  rl  rm  rn  rB   identity_matrixr  	transformuser_to_device_distanceuser_to_devicedevice_to_user_distancedevice_to_userr  s     r-   %test_context_current_transform_matrixr    s   92Aq99GgGg((**F33333((**.@@@@@a((**.@@@@@MM!Q((**.@@@@@MM"((**.AAAAANN47Q;w))++446677;OOOOO((**.@@@@@vaAq!Q//000((**.@@@@@fQ1b!Q//000((**.DDDDDvaQB22333**1a00F::::!!!Q''83333**1a00F::::w--b"5566&@@@@@@r/   c            	         t          t          j        dd          } t          |           }|                                g k    sJ |                                du sJ |                                dk    sJ |                    dddt          j	        dz  d           |                                }|d         t          j
        d	fk    sJ t          |          dk    sJ t          d
 |dd          D                       sJ |                                du sJ |                                dk    sJ |                                 |                                |k    sJ |                                du sJ |                                dk    sJ |                                 |                                g k    sJ |                                du sJ |                                dk    sJ |                    dddt          j	        dz  d           |                                }|d         t          j
        d	fk    sJ t          |          dk    sJ t          d |dd          D                       sJ ||k    sJ |                                 |                    dddd           |                                }|d         t          j
        dfk    r
|d d         }|t          j
        dft          j        dft          j        dft          j        dft          j        dfgk    sJ |                                dk    sJ |                                 |                    dd           |                    dd           |                    dd           |                    dd           |                    dddddd           |                    dddddd           |                                 |                                }|d         t          j
        dfk    r
|d d         }|t          j
        dft          j        dft          j
        dft          j        dft          j        dft          j        dft          j        dfgk    sJ |                                 |                    dd            |                    dddddd           |                                t          j
        d!ft          j        dfgk    sJ |                                }t          |          dk    sJ |d         t          j
        d!fk    sJ t          d" |dd          D                       sJ |d         t          j        d#fk    sJ |                                 |                    dd           |                    dd           |                                }|t          j
        dft          j        dfgk    sJ t          j        d$fg}|                    |           |                                ||z   k    sJ t=          j        t@                    5  |                    t          j        d%fg           d d d            n# 1 swxY w Y   t=          j        t@                    5  |                    t          j        d&fg           d d d            d S # 1 swxY w Y   d S )'Nr   F)r   r   rR   rj   r_   r   r   )rR      c              3   B   K   | ]}|d          t           j        k    V  dS r   NrH   PATH_CURVE_TOr=   parts     r-   r?   z$test_context_path.<locals>.<genexpr>(  .      IIdtAw)11IIIIIIr/   T)x   rj   c              3   B   K   | ]}|d          t           j        k    V  dS r  r  r  s     r-   r?   z$test_context_path.<locals>.<genexpr>9  r  r/   rc   r)   )rc   r_   )n   r_   )r  r  )rc   r  r*   )rc   r_   r  r  r`   r   F   r?  r  )r#  #   )rc   r`   )r   rd   )r_   r`   r  r?  rR   r  )r        r  rj      r   )rc   r   c              3   B   K   | ]}|d          t           j        k    V  dS r  )rH   PATH_LINE_TOr  s     r-   r?   z$test_context_path.<locals>.<genexpr>g  s.      FFTtAw)00FFFFFFr/   )rR   r  )r`   r  )r`   r  r   )r`   r  r   r   )!r   rH   rl   r   	copy_pathhas_current_pointget_current_pointarcrm  rn  PATH_MOVE_TOr   allnew_sub_pathnew_patharc_negativer   r  PATH_CLOSE_PATHpath_extentsr@  line_torel_move_torel_line_tocurve_torel_curve_to
close_pathr  copy_path_flatappend_pathrF   rG   rr   )ry   r{   path_1path_2r  additional_paths         r-   test_context_pathr    s   92Aq99GgG"$$$$$$&&%////$$&&&0000KKS"dgai+++  F!9/<<<<<v;;????IIfQRRjIIIIIIII$$&&$....$$&&*4444&(((($$&&%////$$&&&0000"$$$$$$&&%////$$&&&0000c2twqy!444  F!9/<<<<<v;;????IIfQRRjIIIIIIIIVb"c3'''DBxI*H555CRCy		*		+		,		+		"B') ) ) ) ) !!%77777OOBOOB11RRS#...RRc222DBxI*H555CRCy		*		*		*		*		 "<=		 "@A		"B') ) ) ) ) OOBRRS#...		*		 "<=#? ? ? ? ? !!##Dt99q====7y-x88888FFT!""XFFFFFFFF8	.
;;;;;OOBOOBD		*		*, , , , , ".	:;O((($"88888	z	"	" F Fi4lCDEEEF F F F F F F F F F F F F F F	z	"	" I Ii4oFGHHHI I I I I I I I I I I I I I I I I Is$   ##ZZZ6#[&&[*-[*c                     t          t          j        dd          } t          |           }|                                t          j        k    sJ |                    t          j                   |                                t          j        k    sJ |                                g dfk    sJ |	                    g dd           |                                g ddfk    sJ |
                                dk    sJ |                                t          j        k    sJ |                    t          j                   |                                t          j        k    sJ |                                t          j        k    sJ |                    t          j                   |                                t          j        k    sJ |                                t          j        k    sJ |                    t          j                   |                                t          j        k    sJ |                                dk    sJ |                    d           |                                dk    sJ |                                dk    sJ |                    d           |                                dk    sJ |                                t          j        k    sJ |                    t          j                   |                                t          j        k    sJ |                                d	k    sJ |                     d
           |                                d
k    sJ d S )Nr   r   )r   r   r   r   r  r   r      rc   g?r  )!r   rH   rl   r   get_antialiasANTIALIAS_DEFAULTset_antialiasANTIALIAS_BESTget_dashset_dashget_dash_countget_fill_ruleFILL_RULE_WINDINGset_fill_ruleFILL_RULE_EVEN_ODDget_line_capLINE_CAP_BUTTset_line_capLINE_CAP_SQUAREget_line_joinLINE_JOIN_MITERset_line_joinLINE_JOIN_ROUNDget_line_widthset_line_widthget_miter_limitset_miter_limitget_operatorOPERATOR_OVERset_operatorOPERATOR_XORget_toleranceset_tolerancer  s     r-   test_context_propertiesr  {  sD   92Aq99GgG  ""i&AAAAA)2333  ""i&>>>>>"a((((\\\3''',,,!44444!!##q((((  ""i&AAAAA)6777  ""i&BBBBB!!Y%<<<<<2333!!Y%>>>>>  ""i&?????)3444  ""i&?????!!##q((((2!!##r))))""$$****A""$$))))!!Y%<<<<</000!!Y%;;;;;  ""c))))$  ""d******r/   c                     t          t          j        dd          } |                                 d d          dk    sJ t	          |           }|                    dddd           |                    d           |                    dddd           |                                dk    sJ |	                                dk    sJ |
                    dd          d	u sJ |
                    d
d          du sJ |                    dd          du sJ |                    d
d          d	u sJ t          |                                          }|sJ |                                 t          |                                          |k    sJ |                                 d d          dk    sJ |                                 t          |                                          g k    sJ |                                 d d          dk    sJ d S )Nr   r   r   rh   r   r   r   r   r   r   )r  r        
@r  Tr  Fs               s               )r   rH   rm   r   r   r   r  r   fill_extentsstroke_extentsin_fill	in_strokelistr  fill_preserver   ry   r{   r  s      r-   test_context_fillr    sE   9.155Gaaa L0000gGAq!R(((2aAq!!!!!\1111!!##'=====??1a  D((((??2q!!U****Q""e++++R##t++++!!##$$DKK4!!##$$,,,,aaa 	    LLNNN!!##$$****aaa 	     r/   c                  n   dD ]0} t          t          j        dd          }|                                d d          dk    sJ t	          |          }|                    dddd           |                    d           |                    dddd           t          |	                                          }|sJ | r|
                                n|                                 t          |	                                          | r|ng k    sJ |                                d d          dk    sJ 2d S )	N)TFr   r   r   r   rh   r   s           )r   rH   rm   r   r   r   r  r   r  r  stroke_preservestroke)preservery   r{   r  s       r-   test_context_stroker    sT   ! ! !y2Aq99!!!!!$4444'""1a+++q!!!"b!Q'''G%%''((t%-C!!!7>>3C3CG%%''((X-ETT2FFFF!!!!!$ ! ! ! ! !! !r/   c                     t          t          j        dd          } |                                 d d          dk    sJ t	          |           }|                    dddd           |                                dk    sJ t          |                                          }|sJ |	                                 t          |                                          |k    sJ |                                dk    sJ |
                                 t          |                                          g k    sJ |                                dk    sJ |                                 |                                dk    sJ |                    dddd           |                    dddd           |
                                 |                                ddgk    sJ |                                d	k    sJ d S )
Nr   r   r   r   )r   r   r   r   r  )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   rH   rm   r   r   r   clip_extentsr  r  clip_preserveclip
reset_clipcopy_clip_rectangle_listr  s      r-   test_context_clipr    s   9.155Gaaa L0000gGaAq!!!!!\1111!!##$$DKK4!!##$$,,,,!!\1111LLNNN!!##$$****!!\1111!!\1111aAq!!!aAq!!!LLNNN++--,1MMMMM!!\111111r/   c                     t          t          j        dd          } t          |           }|                    dddd           |                    dd          du sJ |                    dd          du sJ |                                 |                    dd          du sJ |                    dd          du sJ d S )Nr   r   r   rh   Tr  F)r   rH   rm   r   r   in_clipr  r  s     r-   test_context_in_clipr    s     9.155GgGaAq!!!??2q!!T))))??3""d****LLNNN??2q!!U****??3""d******r/   c                  v   t          t          j        dd          } t          |           }|                    dddd           |                    dddd           |                                 |                    dddd           |                    dddd           |                                 t          t          j        dd          }t          |          }|                    t          |                      t          d          }t          d          }t          d          }|
                                d d          ||z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   k    sJ t          t          j        dd          }t          |          }|                    | dd	           t          d          }t          d          }t          d          }|
                                d d          ||z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   k    sJ d S )
Nr   r   r   rh   r   r  ri   s      )	surface_x	surface_y)r   rH   rl   r   r   r   r   maskr!   r.   r   mask_surface)r"  r{   ry   obrb   s         r-   test_context_maskr%    s   	 7A>>Ll##GAq"a(((aAq!!!LLNNNAr1b)))aAq!!!LLNNN92Aq99GgGLL--...!""A!""A!""Aaaa 	A	A		
					
			 	
	
 	 	 	    92Aq99GgGa@@@!""A!""A!""Aaaa 	A	A		
					
			 	
	
 	 	 	     r/   c                  v   t          t          j        dd          } t          j        t          |           j        d          }|                                                                dk    sJ |                    t          dddddd	                     |                                                                d
k    sJ |
                    d           |                                                                dk    sJ |
                    d           |                    dt          j                   |                                }t          |t                    sJ |                                dk    sJ |                                t          j        k    sJ |                                t          j        k    sJ 	 t          j        j        t          j        = |                                }|j        |j        k    sJ t          |t.                    sJ t          |t                    rJ 	 t          t          j        j        t          j        <   n(# t          t          j        j        t          j        <   w xY w|                                \  }}}}}|dk    sJ |dk    sJ |                    d          \  }	}	}	}	}
}|
dk    sJ |dk    sJ |                    t          dt          j                             |                    d          \  }	}	}	}	}}||
k    sJ |dk    sJ t9          |                                          g k    sJ |                    d           t9          |                                          sJ |                                 d d          dk    sJ |                     dd           |!                    d           |                                 d d          dk    sJ |"                                #                                t          j$        k    sJ |%                    tM          t          j'                             |"                                #                                t          j'        k    sJ | "                                #                                t          j'        k    sJ |                    t          dddddd	                     |(                                                                                                d
k    sJ |)                    tU          t                      t          ddd	ddd	                               |                                                                dk    sJ |                    d            d S )Nrc   T)incref)rc   r   r   rc   r   r   r   r   r   r#  r   rZ  r   )r   r   r   r   r   r   s   @cairo:serif@cairo:serif
iiiiiiiiii@cairo:monospace)weightas                                                                                                                                                                                                                                                                                                                                                                                                                  r   r   hint_metrics)font_matrix)r   r   r   r   r#  r   )+r   rH   rl   r   _from_pointerr   get_font_matrixrb  set_font_matrixr   set_font_sizeselect_font_faceFONT_SLANT_ITALICget_font_facer   r#   
get_family	get_slant
get_weightFONT_WEIGHT_NORMALfontsFONT_TYPE_TO_CLASSFONT_TYPE_TOYr   font_extentstext_extentsset_font_faceFONT_WEIGHT_BOLDr  r  	text_pathr   r@  rA  get_font_optionsget_hint_metricsHINT_METRICS_DEFAULTset_font_optionsr   HINT_METRICS_ONget_scaled_fontset_scaled_fontr   )ry   r{   	font_facere_font_faceascentdescentheightmax_x_advancemax_y_advance_	x_advance	y_advancex_advance_monos                r-   test_context_fontrU  #  s   92B;;G#GG$4$4$=dKKKG""$$--//3GGGGGF1a!QQ77888""$$--//3HHHHH"""$$--//3GGGGG"_i.IJJJ%%''Ii-----!!^3333  I$?????!!Y%AAAAAO.y/FG,,..$	(:::::,11111lK888888  	*9+BCC 	*9+BC 	 	 	 	 	 :FGV]M 1A'.';';H'E'E$Aq!Q	9q====>>>>&y/IJJJL L L,3,@,@,J,J)Aq!Q	I%%%%>>>>!!##$$****c!!##$$$$$aaa M1111OOAqcaaa M1111$$&&7799*+ + + +!:;;;= = =$$&&7799%& & & &$$&&7799%& & & & F1a!QQ77888""$$4466??AA F    J{}}&	1q!b!C C      ""$$--//3HHHHH $s   A0I %Jc                     t          t                                } |                                 }|\  }}}}}|dk    sJ |dk    sJ |                     d          \  }}}}}}	|dk    sJ |	dk    sJ t          t          d                    } |                     d          \  }}}}}}	t          t          d                    } |                     d          \  }}}}}
}	|
|k    sJ |	dk    sJ t	          |                                 t                    sJ t          t          d          t          dd          t          dd          t          t          j
        	                    } |                                                                 t          j
        k    sJ |                                                                 d
k    sJ |                                                                 dk    sJ |                                                                 dk    sJ |                     d          \  }}}}}}|	|k    sJ ||
k    sJ d S )Nr   r)  r(  r*  r_   )xxre  r   rh   )	antialias)r_   r   r   r_   r   r   )r   r   r   rh   r   r   )<   r   r   rc   r   r   )r   r#   rE  r?  r   r6  r   r   r   rH   r  rC  r  r1  rb  get_ctmget_scale_matrix)fontr>  rL  rM  rN  rO  rP  rQ  rR  rS  rT  x_advance_mono_2y_advance_2s                r-   test_scaled_fontr_  h  su   kmm$$D<<>>L<H9FGV]M1A'+'8'8'B'B$Aq!Q	9q====>>>>k.1122D'+'8'8'B'B$Aq!Q	9k"45566D,0,=,=h,G,G)Aq!Q	I%%%%>>>> d((**H55555&''"fb111i67779 9D   ""0022i6NNNNN!!**,,0DDDDD<<>>""$$(;;;;;  ""++--1EEEEE040A0A(0K0K-Aq!Q +####n,,,,,,r/   c                  n   t                      } |                                 t          j        k    sJ |                     t          j                   |                                 t          j        k    sJ |                                 t          j        k    sJ |                     t          j	                   |                                 t          j	        k    sJ | 
                                t          j        k    sJ |                     t          j                   | 
                                t          j        k    sJ |                                 t          j        k    sJ |                     t          j                   |                                 t          j        k    sJ t          t          j                  }|                                t          j        k    sJ |                                t          j        k    sJ |                                }||k    sJ t)          t+          ||g                    dk    sJ |                    t          j                   ||k    sJ t)          t+          ||g                    dk    sJ |                    |           ||k    sJ d S )Nr-  r   r   )r   r  rH   r  r  ANTIALIAS_FASTget_subpixel_orderSUBPIXEL_ORDER_DEFAULTset_subpixel_orderSUBPIXEL_ORDER_BGRget_hint_styleHINT_STYLE_DEFAULTset_hint_styleHINT_STYLE_SLIGHTrD  rE  set_hint_metricsHINT_METRICS_OFFrG  ri  r   r  r  merge)options	options_1	options_2s      r-   test_font_optionsrp    sw   mmG  ""i&AAAAA)2333  ""i&>>>>>%%''9+KKKKKy;<<<%%''9+GGGGG!!##y'CCCCC96777!!##y'BBBBB##%%)GGGGGY7888##%%)CCCCC)BCCCI%%''9+DDDDD""$$	(FFFFF  I	!!!!sIy)**++q0000I4555	!!!!sIy)**++q0000OOI	!!!!!!r/   i,  c                     t                      } |                                 J |                     d           |                                 dk    sJ |                     d            |                                 J d S )Nzwght 400, wdth 300)r   get_variationsset_variations)rm  s    r-   test_font_options_variationsrt    s     mmG!!##+++/000!!##';;;;;4   !!##+++++r/   c                  D   t          t          j        dd          } t          |           }|                                }d}|                    dd|d          \  }}}|                    dd|d          |k    sJ |\  \  }}}	\  }
}}\  }}}||
cxk    r|k    sn J |	|cxk    r|cxk    rdk    sn J d|cxk    r|cxk     r|k     sn J |g d	k    sJ |d
k    sJ t          |                    |                    t          |                    |                    k    sJ t          |                    |                    t          |                    |                    k    sJ |	                                g k    sJ |
                    |           |	                                }|sJ |                                 |	                                g k    sJ |                    dd           |                    |           |	                                g k    sJ |	                                |k    sJ |                                 |	                                g k    sJ |                    dd           |                    |           |	                                }|d d         |d d         k    sJ ddz  }|                                 d d          |k    sJ |                    |           |                                 d d          }||k    sJ t          t          j        dd          } t          |           }|                    dd           |                    ||||           |                                 d d          }||k    sJ t          t          j        dd          } t          |           }|                    dd           |                    |           |                                 d d          }||k    sJ d S )NrR   r_   u   Éttr   r   T)with_clustersF))r   r   r   r   r   rc   r)   s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  r   )r   rH   rl   r   rH  text_to_glyphsrB   glyph_extentsr?  r  
glyph_pathr  r@  rB  r   show_glyphsshow_text_glyphsrA  )ry   r{   r\  textglyphsclustersis_backwardsidx1x1y1idx2x2y2idx3x3y3ry  rB  emptyglyph_pixelstext_glyphs_pixelsrG  s                         r-   test_glyphsr    s   92C<<GgG""$$DD%)%8%8	2t4 &9 &) &)"FHlq"d%@@FJJJJ5;2NT2rNT2rNT2r44rRR"///////1t))&1122D%%d++,,. . . .t))&1122G))&11224 4 4 4 "$$$$v""$$J:"$$$$OOBd"$$$$*,,,,"$$$$OOArd!!##ISbS>Z_,,,,"Eaaa E))))##%%aaa(L5    92C<<GgGOOArT68\BBB ))++AAA.-----92C<<GgGOOArd""$$QQQ'K;&&&&&&r/   c                      t           t          t          t          t          fD ]X} t          j        t                    5  |                     t          j
        j        d           d d d            n# 1 swxY w Y   Yd S )Nunused)r    r   r   r   r   rF   rG   rr   r0  rH   ffiNULL)class_s    r-   test_from_null_pointerr    s    GWh
C ? ?]:&& 	? 	?  !3X>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?? ?s   &A..A2	5A2	i.  c                     dD ]} t          t          j        |           }t          |          }|                    d           |                                du sJ |                    d           |                                du sJ d S )NrL  TF)r   rH   rB  r   set_hairlineget_hairline)rE  ry   ctxs      r-   test_hairliner    s     + , ,"9#@'JJg!!T))))!!U*****, ,r/   rR  )j__doc__rs   r   
contextlibr   r   rm  r  r5   r   r3   r   rF   rH   r0  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"   r#   r$   r%   	byteorderr.   contextmanagerr8   rB   rO   rY   r]   r|   r   markr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r&  r,  r<  rJ  rP  rS  rV  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  rU  r_  rp  rt  r  r  r  r*   r/   r-   <module>r     sN	  	 	       				 				  				  



       ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) =H     
   . . .I I IB B B
  > > >4	4 	4 	4 ==??U*1  3 3' '3 3' ==??U*1  3 3	 	3 3	&A &A &AR7 7 7& ==??U*1  3 3E E3 3E$ ==??U*1  3 3= =3 3= ==??U*1  3 30 03 30 ==??U*1  3 38 83 38. ==??U*1  3 3: :3 3: ==??U*1  3 3' '3 3' ==??U*1  3 33 33 33( ==??U*1  3 3- -3 3-  ==??U*1  3 3( (3 3(.(@ (@ (@V ==??U*1  3 37 73 37(  >; ; ;8'" '" '"T ==??U*1  3 3( (3 3(:* * *
 ==??U*1  3 3* *3 3*
 ==??U*1  3 30 03 30$A $A $AN, , ,.A A A(   ; ; ;8; ; ;; ; ;*"C "C "CJA A A8[I [I [I|'+ '+ '+T  B! ! !&2 2 20 ==??U*1  3 3+ +3 3+" " "JA  A  A J!- !- !-H" " "@ ==??U*1  3 3, ,3 3,7' 7' 7't? ? ? ==??U*1  3 3, ,3 3, , ,r/   