+
    �vj2m  ã                   ó0  a € R6 t>0 t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	H
t
HtHtHtHtHtHtHtHt ^RIHtHtHtHtHtHt ^RIHt ^RIHt ^RIHt ]P@                  ! ]!4      t"^t#^t$Rt%^t&R	t'] ^ k R
t(] ^k RRRRRRRRRRRRRR/t)R R lt*R R lt+R	]! ^4      R]! ^4      R
]! ^ 4      R]! ^4      /t,R	]! R4      R]! R4      R
]! R 4      R]! R!4      /t-R7R" R# llt. ! R$ R%4      t/ ! R& R'4      t0 ! R( R)4      t1R8R* R+ llt2]Pf                  ! ]0Ph                  4      Pj                  Pm                  4       t7]Pf                  ! ]14      Pj                  Pm                  4       t8R, R- lt9R9R. R/ llt:]#3R0 R1 llt;]#]$3R2 R3 llt<R:R4 R5 llt=R# );é    N)Ú
itemgetter)
ÚAnyÚCallableÚDictÚ	GeneratorÚListÚMatchÚOptionalÚPatternÚTupleÚUnion)ÚT_bboxÚT_dirÚT_numÚT_objÚ
T_obj_iterÚ
T_obj_list)Úcluster_objects)Úto_list)Úobjects_to_bboxg      @ÚttbÚltru   ï¬€Úffu   ï¬ƒÚffiu   ï¬„Úfflu   ï¬�Úfiu   ï¬‚Úflu   ï¬†Ústu   ï¬…c                óT   € V ^8„  d   QhR\         R\        \        .\        3,          /# )é   Úline_dirÚreturn)r   r   r   r   )Úformats   "ÚY/var/www/html/daimler-pipeline/venv/lib/python3.14/site-packages/pdfplumber/utils/text.pyÚ__annotate__r%   -   s%   € ÷ ñ ¤5ð ¬X´u°g¼u°nÕ-Eñ ó    c                 ó,   € R R RR RR RR /V ,          # )r   c                 ó   € V R ,          # )Útop© ©Úxs   &r$   Ú<lambda>Ú&get_line_cluster_key.<locals>.<lambda>/   s   € ˜˜5žr&   Úbttc                 ó   € V R ,          ) # )Úbottomr*   r+   s   &r$   r-   r.   0   s
   € ˜!˜H�+™r&   r   c                 ó   € V R ,          # ©Úx0r*   r+   s   &r$   r-   r.   1   s   € ˜˜4žr&   Úrtlc                 ó   € V R ,          ) # )Úx1r*   r+   s   &r$   r-   r.   2   s
   € ˜!˜D�'™r&   r*   )r!   s   &r$   Úget_line_cluster_keyr8   -   s.   € àÑ!ØÑ%ØÑ ØÑ!ð	ð
 õð r&   c                óv   € V ^8„  d   QhR\         R\        \        .\        \        \        3,          3,          /# )r    Úchar_dirr"   )r   r   r   r   r   )r#   s   "r$   r%   r%   6   s/   € ÷ ñ ¤ð ¬(´E°7¼EÄ%ÌÀ,Õ<OÐ3OÕ*Pñ r&   c                 ó,   € R R RR RR RR /V ,          # )r   c                 ó&   € V R ,          V R,          3# )r)   r1   r*   r+   s   &r$   r-   Ú#get_char_sort_key.<locals>.<lambda>8   s   € ˜!˜E�( A h¥KÑ0r&   r/   c                 óF   € V R ,          V R,          ,           ) V R ,          ) 3# )r)   Úheightr*   r+   s   &r$   r-   r=   9   s   € ˜A˜e�H q¨¥{Õ2Ð3°a¸µh°YÑ?r&   r   c                 ó&   € V R ,          V R ,          3# r3   r*   r+   s   &r$   r-   r=   :   s   € ˜!˜D�' 1 T¥7Ñ+r&   r5   c                 ó*   € V R ,          ) V R,          ) 3# )r7   r4   r*   r+   s   &r$   r-   r=   ;   s   € ˜1˜T�7˜( Q t¥W HÑ-r&   r*   )r:   s   &r$   Úget_char_sort_keyrB   6   s.   € àÑ0ØÑ?ØÑ+ØÑ-ð	ð
 õð r&   r/   r5   r)   r1   r4   r7   c                ó@   € V ^8„  d   QhR\         R\         R\        RR/# )r    r!   r:   Úsuffixr"   N)r   Ústr)r#   s   "r$   r%   r%   N   s(   € ÷ 
ñ 
¤%ð 
´5ð 
Ä#ð 
Ètñ 
r&   c           
      ó  € \        \        P                  4       4      pW9  d   \        R V RV RV  24      hW9  d   \        RV RV RV 24      h\        V 4      \        V4      8X  d   \        R V RV  RV RV 24      hR# )r!   z must be one of z, not r:   Ú=z is incompatible with char_dirN)ÚsetÚPOSITION_KEYSÚkeysÚ
ValueError)r!   r:   rD   Ú
valid_dirss   &&& r$   Úvalidate_directionsrM   N   s±   € Ü”]×'Ñ'Ó)Ó*€JØÔ!ÜØ�v�hÐ.¨z¨l¸&ÀÀ
ÐKó
ð 	
ð Ô!ÜØ�v�hÐ.¨z¨l¸&ÀÀ
ÐKó
ð 	
ô ˆ8ƒ}œ˜H›Ô%ÜØ�v�h˜a ˜zð *Ø"˜8 1 X Jð0ó
ð 	
ñ &r&   c                   óŠ   a € ] tR t^_t o RtV 3R lR ltV 3R lR ltRV 3R lR lltRV 3R lR	 lltRV 3R
 lR llt	Rt
V tR# )ÚTextMapzŠ
A TextMap maps each unicode character in the text to an individual `char`
object (or, in the case of layout-implied whitespace, `None`).
c                óf   <€ V ^8„  d   QhRS[ S[S[S[S[,          3,          ,          RS[RS[RR/# )r    ÚtuplesÚline_dir_renderÚchar_dir_renderr"   N)r   r   rE   r
   r   r   )r#   Ú__classdict__s   "€r$   r%   ÚTextMap.__annotate__e   sF   ø€ ÷ 
*ñ 
*á‘U™3¡©¥Ð/Õ0Õ1ð
*ñ ð
*ñ ð	
*ð
 
ñ
*r&   c                ól   € \        W#R 4       Wn        W n        W0n        V P	                  4       V n        R# )Ú_renderN)rM   rQ   rR   rS   Ú	to_stringÚ	as_string)ÚselfrQ   rR   rS   s   &&&&r$   Ú__init__ÚTextMap.__init__e   s-   € ô 	˜O¸iÔHØŒØ.ÔØ.ÔØŸ™Ó)ˆŽr&   c                ó    <€ V ^8„  d   QhRS[ /# )r    r"   )rE   )r#   rT   s   "€r$   r%   rU   q   s   ø€ ÷ (ñ (™3ñ (r&   c           	     ó   a€ V P                   pV P                  pR P                  \        \	        ^ 4      V P
                  4      4      pVR8X  d
   VR8X  d   V# VP                  R4      oVR9   d   \        \        S4      4      oVR8X  d+   S Uu. uF  pR P                  \        V4      4      NK  	  upoVR	9   d¥   \        \        \        S4      4      pVR8X  d2   S Uu. uF#  pRV\        V4      ,
          ,          V,           NK%  	  upoM/S Uu. uF"  qDRV\        V4      ,
          ,          ,           NK$  	  upoRP                  V3R l\        V4       4       4      # RP                  S4      # u upi u upi u upi )
Ú r   r   Ú
r/   r5   Ú c              3   ó\   <a"  € T F   oR P                  V3R lS 4       4      x € K"  	  R# 5i)r_   c              3   ó4   <"  € T F  qS,          x € K  	  R # 5i©Nr*   )Ú.0ÚlineÚis   & €r$   Ú	<genexpr>Ú.TextMap.to_string.<locals>.<genexpr>.<genexpr>Œ   s   øé € Ð6±¨ ŸGšG³ùs   ƒN©Újoin)re   rg   Úliness   &@€r$   rh   Ú$TextMap.to_string.<locals>.<genexpr>‹   s'   ùé € ð !Ù@V¸1�B—G‘GÔ6±Ó6×6Ð6Ó@Vùs   „(,©r/   r5   )r5   r   )rS   rR   rk   Úmapr   rQ   ÚsplitÚlistÚreversedÚmaxÚlenÚrange)rZ   ÚcdÚldÚbaserf   Úmax_line_lengthrl   s   &     @r$   rX   ÚTextMap.to_stringq   s[  ø€ Ø×!Ñ!ˆØ×!Ñ!ˆà�w‰w”sœ: a›=¨$¯+©+Ó6Ó7ˆà�Œ;˜2 œ;ØˆKà—J‘J˜tÓ$ˆEØ�^Ô#ÜœX e›_Ó-�à�UŒ{Ù=BÓC¹U°T˜Ÿ™¤¨$£Ö0¹UÑC�à�^Ô#Ü"%¤c¬#¨u£oÓ"6�Ø˜”;áQVóÙQVÈ˜ ´#°d³)Õ ;Õ<À×DÐDÑQVñ‘Eñ
 RWóÙQVÈ  ¼¸T»Õ'BÕ C×DÐDÑQVñ�Eð —y‘yô !Ü@EÀoÔ@Vó!ó ð ð —y‘y Ó'Ð'ùò! Dùò
ùòs   Â#E1Ã )E6Ä(E;c                ó^   <€ V ^8„  d   QhRS[ S[,          RS[RS[RS[RS[S[S[3,          /# )r    ÚmÚ
main_groupÚreturn_groupsÚreturn_charsr"   )r	   rE   ÚintÚboolr   r   )r#   rT   s   "€r$   r%   rU   ‘   sI   ø€ ÷ ñ á‘�:ðñ ðñ ð	ñ
 ðñ 
‰c‘3ˆh�ñr&   c           
     óB  € V P                   VP                  V4      VP                  V4       pV UUu. uF  w  rgVf   K  VNK  	  ppp\        V4      w  ršr¼RVP	                  V4      RV	RV
RVRV/pV'       d   VP                  4       VR&   V'       d   W�R&   V# u uppi )NÚtextr4   r)   r7   r1   ÚgroupsÚchars)rQ   ÚstartÚendr   Úgroupr„   )rZ   r|   r}   r~   r   Úsubsetrƒ   Úcr…   r4   r)   r7   r1   Úresults   &&&&&         r$   Úmatch_to_dictÚTextMap.match_to_dict‘   s£   € ð —‘˜QŸW™W ZÓ0°1·5±5¸Ó3DÐEˆÙ$*Ô<¡F‘y˜¨a—�¡FˆÑ<Ü-¨eÓ4Ñˆ�ð �A—G‘G˜JÓ'Ø�"Ø�3Ø�"Ø�fð
ˆ÷ Ø Ÿx™x›zˆF�8ÑçØ#�7‰Oàˆùó# =s   ³BÁ Bc                ó�   <€ V ^8„  d   QhRS[ S[S[S[,          3,          RS[RS[RS[RS[RS[RS[S[S[S[3,          ,          /# )r    ÚpatternÚregexÚcaser~   r   r}   r"   )r   rE   r   r�   r€   r   r   r   )r#   rT   s   "€r$   r%   rU   ¬   sl   ø€ ÷ &
ñ &
á‘s™G¡C�LÐ(Õ)ð&
ñ ð&
ñ ð	&
ñ
 ð&
ñ ð&
ñ ð&
ñ 
‰d‘3™�8�nÕ	ñ&
r&   c           
     óÂ  a€ \        V\        4      '       d&   VR J d   \        R4      hVR J d   \        R4      hTpMJVR J d   \        P                  ! V4      pVR J d   \        P
                  M^ p\        P                  ! W4      p\        P                  ! WpP                  4      p	\        V3R lV	4      p
V
 Uu. uF  pV P                  VVVSR7      NK  	  up# u upi )FzACannot pass a compiled search pattern *and* regex=False together.z@Cannot pass a compiled search pattern *and* case=False together.c                 óT   <€ \        V P                  S4      P                  4       4      # rd   )r�   rˆ   Ústrip)r|   r}   s   &€r$   r-   Ú TextMap.search.<locals>.<lambda>É   s   ø€ ¤D¨¯©°Ó)<×)BÑ)BÓ)DÔ$Er&   )r~   r   r}   )Ú
isinstancer   rK   ÚreÚescapeÚIÚcompileÚfinditerrY   ÚfilterrŒ   )rZ   r�   r�   r‘   r~   r   r}   ÚcompiledÚflagsÚgenÚfilteredr|   s   &&&&&&f     r$   ÚsearchÚTextMap.search¬   så   ø€ ô �gœw×'Ò'Ø˜‹~Ü ØWóð ð �u‹}Ü ØVóð ð ‰Hà˜‹~ÜŸ)š) GÓ,�à  E›M”B—D’D¨qˆEÜ—z’z 'Ó1ˆHä�kŠk˜(§N¡NÓ3ˆô ÔEÀsÓKˆñ ó
ñ �ð ×ÑØØ+Ø)Ø%ð	 ö ñ ñ
ð 	
ùò 
s   Â;Cc          	      óR   <€ V ^8„  d   QhRS[ RS[ RS[S[S[S[3,          ,          /# )r    r”   r   r"   )r�   r   r   rE   r   )r#   rT   s   "€r$   r%   rU   Ô   s2   ø€ ÷ 
ñ 
Ùð
Ù04ð
á	‰d‘3™�8�nÕ	ñ
r&   c                óF   € V'       d   RpMRpV P                  V^VRR7      # )a6  
`strip` is analogous to Python's `str.strip()` method, and returns
`text` attributes without their surrounding whitespace. Only
relevant when the relevant TextMap is created with `layout` = True

Setting `return_chars` to False will exclude the individual
character objects from the returned text-line dicts.
z *([^\n]+?) *(\n|$)z([^\n]+)F)r}   r   r~   )r¡   )rZ   r”   r   Úpats   &&& r$   Úextract_text_linesÚTextMap.extract_text_linesÔ   s0   € ÷ Ø(‰CàˆCà�{‰{Ø˜A¨LÈð ó 
ð 	
r&   )rY   rS   rR   rQ   N)r   TT)TTTTr   )TT)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r[   rX   rŒ   r¡   r¦   Ú__static_attributes__Ú__classdictcell__©rT   s   @r$   rO   rO   _   sC   ø‡ € ñ÷

*ð 
*÷(ð (÷@ò ÷6&
ò &
÷P
÷ 
ð 
r&   rO   c                   ót   a € ] tR t^ét o RtV 3R lR ltR^ ^ ^ ^ R
]]^ ^ ]]	]
RRRRRRR3V 3R lR lltR	tV tR# )ÚWordMapz
A WordMap maps words->chars.
c                óJ   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          RR/# )r    rQ   r"   N)r   r   r   r   )r#   rT   s   "€r$   r%   ÚWordMap.__annotate__î   s*   ø€ ÷ ñ ™t¡E©%±Ð*;Õ$<Õ=ð À$ñ r&   c                ó   € Wn         R # rd   ©rQ   )rZ   rQ   s   &&r$   r[   ÚWordMap.__init__î   s   € ØŽr&   FNTc          *      óØ   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[RS[RS[RS[R	S[R
S[RS[RS[RS[RS[S[,          RS[S[,          RS[S[,          RS[S[,          RS[ RS[ RS[ RS[/# )r    ÚlayoutÚlayout_widthÚlayout_heightÚlayout_width_charsÚlayout_height_charsÚlayout_bboxÚ	x_densityÚ	y_densityÚx_shiftÚy_shiftÚy_tolerancer!   r:   Úline_dir_rotatedÚchar_dir_rotatedrS   rR   Úuse_text_flowÚ	presortedÚexpand_ligaturesr"   )r�   r   r€   r   r   r
   rO   )r#   rT   s   "€r$   r%   r³   ñ   s  ø€ ÷ s
ñ s
áðs
ñ ðs
ñ ð	s
ñ
  ðs
ñ !ðs
ñ ðs
ñ ðs
ñ ðs
ñ ðs
ñ ðs
ñ ðs
ñ ðs
ñ ðs
ñ #¡5�/ðs
ñ  #¡5�/ð!s
ñ" "¡%�ð#s
ñ$ "¡%�ð%s
ñ& ð's
ñ( ð)s
ñ* ð+s
ñ, 
ñ-s
r&   c                ó
  a2a3€ . p\        V P                  4      '       g#   \        TT;'       g    TT;'       g    TR7      # V'       d   \        M/ pV'       dx   V'       d   V'       d   \	        R4      hM\        \        W',          4      4      pV'       d   V'       d   \	        R4      hM\        \        W8,          4      4      pR.V,          pM. p^ p\        V4      o3\        V4      o2\        V,          p\        V,          p\        V,          ! V4      p\        V,          ! V4      pV'       g	   V'       d   V P                  M\        V P                  V33R lR7      p\        TV33R lTT;'       g    TR7      p\        V4       EFö  w  pp V'       dC   V! V ^ ,          ^ ,          4      p!V!VV
,           ,
          p"VR9   d   RM^p#V"V#,          V,          p$M^ p$\        \        V^ 8„  4      \        V$4      V,
          4      p%\        V%4       FC  p\        V4      '       d   VR,          ^ ,          R	8X  d
   VV,          pVP!                  R4       KE  	  VV%,          p^ p&V'       g	   V'       d   T M\        V V23R
 lR7      p'V' FÒ  w  p(p)V'       d5   V! V(4      p*V*VV	,           ,
          p+VR9   d   RM^p#V+V#,          V,          p,M^ p,\        \#        ^V&4      \        V,4      V&,
          4      p-VR.V-,          ,          pV&V-,          p&V) FH  p.VP%                  V.R,          V.R,          4      p/V/ F  p0VP!                  V0V.34       V&^,          p&K!  	  KJ  	  KÔ  	  V'       g   EKÞ  VR.VV&,
          ,          ,          pEKù  	  V'       dW   VV^,           ,
          p1\        V14       F$  pV^ 8”  d
   VV,          pVP!                  R4       K&  	  VR,          R8X  d   VRR p\        TT;'       g    TT;'       g    TR7      # )a  
Given a list of (word, chars) tuples (i.e., a WordMap), return a list of
(char-text, char) tuples (i.e., a TextMap) that can be used to mimic
the structural layout of the text on the page(s), using the following
approach for top-to-bottom, left-to-right text:

- Sort the words by (top, x0) if not already sorted.

- Cluster the words by top (taking `y_tolerance` into account), and
  iterate through them.

- For each cluster, divide (top - y_shift) by `y_density` to calculate
  the minimum number of newlines that should come before this cluster.
  Append that number of newlines *minus* the number of newlines already
  appended, with a minimum of one.

- Then for each cluster, iterate through each word in it. Divide each
  word's x0, minus `x_shift`, by `x_density` to calculate the minimum
  number of characters that should come before this cluster.  Append that
  number of spaces *minus* the number of characters and spaces already
  appended, with a minimum of one. Then append the word's text.

- At the termination of each line, add more spaces if necessary to
  mimic `layout_width`.

- Finally, add newlines to the end if necessary to mimic to
  `layout_height`.

For other line/character directions (e.g., bottom-to-top,
right-to-left), these steps are adjusted.
©rR   rS   z;`layout_width` and `layout_width_chars` cannot both be set.z=`layout_height` and `layout_height_chars` cannot both be set.Nc                 ó"   <€ S! V ^ ,          4      # ©r   r*   ©r,   Úline_cluster_keys   &€r$   r-   Ú$WordMap.to_textmap.<locals>.<lambda>U  s   ø€ Ñ3CÀAÀaÅDÔ3Ir&   ©Úkeyc                 ó"   <€ S! V ^ ,          4      # rË   r*   rÌ   s   &€r$   r-   rÎ   Z  s   ø€ Ñ& q¨¥tÔ,r&   )Úpreserve_orderr`   c                 ó"   <€ S! V ^ ,          4      # rË   r*   )r,   Úchar_sort_keys   &€r$   r-   rÎ   z  s   ø€ ±}ÀQÀqÅTÔ7Jr&   rƒ   )ra   Nrn   éÿÿÿÿ)r`   N)rt   rQ   rO   Ú	LIGATURESrK   r€   Úroundr8   rB   rI   ÚBBOX_ORIGIN_KEYSÚsortedr   Ú	enumeraters   ru   ÚappendÚminÚget)4rZ   r¸   r¹   rº   r»   r¼   r½   r¾   r¿   rÀ   rÁ   rÂ   r!   r:   rÃ   rÄ   rS   rR   rÅ   rÆ   rÇ   Ú_textmapÚ
expansionsÚ
blank_lineÚnum_newlinesÚline_position_keyÚchar_position_keyÚy_originÚx_originÚwords_sorted_line_dirÚtuples_by_linerg   Úline_tuplesÚline_positionÚ
y_dist_rawÚadjÚy_distÚnum_newlines_prependÚline_lenÚline_tuples_sortedÚwordr…   Úchar_positionÚ
x_dist_rawÚx_distÚnum_spaces_prependrŠ   ÚlettersÚletterÚnum_newlines_appendrÔ   rÍ   s4   &&&&&&&&&&&&&&&&&&&&&                             @@r$   Ú
to_textmapÚWordMap.to_textmapñ   s¬  ù€ ðl 79ˆä�4—;‘;×ÒÜØØ /× ;Ð ;°8Ø /× ;Ð ;°8ôð ÷ #3•Y¸ˆ
çß!ßÜ$ØUóð ð  ô
 &)¬¨|Õ/GÓ)HÓ%IÐ"ç"ß Ü$ØWóð ð !ô
 '*¬%°Õ0IÓ*JÓ&KÐ#à%˜Ð);Õ;‰JàˆJàˆä/°Ó9ÐÜ)¨(Ó3ˆä)¨(Õ3ÐÜ)¨(Õ3Ðä# HÖ-¨kÓ:ˆÜ# HÖ-¨kÓ:ˆ÷ ŸMð �KŠKä˜Ÿ™Ô)IÔJð 	ô )Ø!Ü,ØØ$×5Ð5¨ô	
ˆô (¨×7‰NˆAˆ{ßÙ 1°+¸aµ.ÀÕ2CÓ D�Ø*¨h¸Õ.@ÕA�
Ø$¨Ô6‘b¸A�Ø# cÕ)¨IÕ5‘à�Ü#&ä�A˜‘E“
ä�f“ Õ,ó	$Ð ô Ð/Ö0�Ü˜8—}’}¨°­°Q­¸4Ô(?Ø 
Õ*�HØ—‘ Ö-ñ 1ð
 Ð0Õ0ˆLàˆH÷ §ñ ä˜KÔ-JÔKð ó  2‘��eßÙ$5°dÓ$;�MØ!.°(¸WÕ2DÕ!E�JØ (¨NÔ :™"À�CØ'¨#Õ-°	Õ9‘Fà�Fä%(¬¨Q°Ó)9¼5À»=È8Õ;SÓ%TÐ"Ø˜[˜MÐ,>Õ>Õ>�ØÐ.Õ.�ã�AØ(Ÿn™n¨Q¨v­Y¸¸&½	ÓB�GÛ")˜Ø Ÿ™¨°¨Ô4Ø  A�šó #*ó ñ  2÷( ŠvØ˜[˜MÐ-?À(Õ-JÕKÕK“ñg 8÷l Ø"5¸ÈÕ9IÕ"JÐÜÐ.Ö/�Ø�q”5Ø 
Õ*�HØ—‘ Ö-ñ 0ð ˜�|˜|Ô+Ø# C R˜=�äØØ+×7Ð7¨xØ+×7Ð7¨xô
ð 	
r&   rµ   )r   r   r   r   )r¨   r©   rª   r«   r¬   r[   ÚDEFAULT_X_DENSITYÚDEFAULT_Y_DENSITYÚDEFAULT_Y_TOLERANCEÚDEFAULT_LINE_DIRÚDEFAULT_CHAR_DIRrø   r­   r®   r¯   s   @r$   r±   r±   é   sd   ø‡ € ñ÷ð ð
 ØØ Ø"#Ø#$Ø*Ø,Ø,ØØØ0Ø*Ø*Ø,0Ø,0Ø+/Ø+/Ø#ØØ!%÷+s
÷ s
ð s
r&   r±   c                   óè   a € ] tR tRt o ]]RRRRRR]]RRRRR3V 3R lR lltV 3R lR lt	V 3R	 lR
 lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRV 3R lR lltRtV tR# )ÚWordExtractori§  NFTc                óú   <€ V ^8„  d   QhRS[ RS[ RS[S[S[R3,          RS[S[S[R3,          RS[RS[RS[R	S[R
S[RS[RS[S[,          RS[S[,          RS[S[S[,          ,          RS[S[S[3,          RS[/# )r    Úx_tolerancerÂ   Úx_tolerance_ratioNÚy_tolerance_ratioÚkeep_blank_charsrÅ   Úvertical_ttbÚhorizontal_ltrr!   r:   rÃ   rÄ   Úextra_attrsÚsplit_at_punctuationrÇ   )	r   r   r€   Úfloatr�   r   r
   r   rE   )r#   rT   s   "€r$   r%   ÚWordExtractor.__annotate__¨  sä   ø€ ÷ 4@ñ 4@áð4@ñ ð4@ñ !¡¡e¨TÐ!1Õ2ð	4@ñ
 !¡¡e¨TÐ!1Õ2ð4@ñ ð4@ñ ð4@ñ ð4@ñ ð4@ñ ð4@ñ ð4@ñ #¡5�/ð4@ñ #¡5�/ð4@ñ ™d¡3�iÕ(ð4@ñ $¡D©# IÕ.ð4@ñ  ñ!4@r&   c                óP  € Wn         W n        W0n        W@n        WPn        W`n        W€n        Wpn        VR J d   \        P                  R4       VR J d   \        P                  R4       W�n
        W n        T;'       g    T
V n        T;'       g    T	V n        \        V P                  V P                  4       \        V P                  V P                  R4       Vf   . MTV n        VRJ d   \         P"                  MT;'       g    RV n        V'       d   \&        V n        R# / V n        R# )FzNvertical_ttb is deprecated and will be removed; use line_dir/char_dir instead.zPhorizontal_ltr is deprecated and will be removed; use line_dir/char_dir instead.Ú_rotatedNTr_   )r  rÂ   r  r  r  rÅ   r  r  ÚloggerÚwarningr!   r:   rÃ   rÄ   rM   r  ÚstringÚpunctuationr	  rÖ   rß   )rZ   r  rÂ   r  r  r  rÅ   r  r  r!   r:   rÃ   rÄ   r  r	  rÇ   s   &&&&&&&&&&&&&&&&r$   r[   ÚWordExtractor.__init__¨  s  € ð$ 'ÔØ&ÔØ!2ÔØ!2ÔØ 0ÔØ*ÔØ,ÔØ(ÔØ˜5Ó Ü�N‰Nð2ôð ˜UÓ"Ü�N‰Nð2ôð !ŒØ Œà 0× <Ð <°HˆÔØ 0× <Ð <°HˆÔÜ˜DŸM™M¨4¯=©=Ô9Ü˜D×1Ñ1°4×3HÑ3HÈ*ÔUØ!,Ò!4™2¸+ˆÔð
 $ tÓ+ô ×Òà&×,Ð,¨"ð 	Ô!÷ (8œ)ˆŽ¸RˆŽr&   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r    Úuprightr"   )r€   r   )r#   rT   s   "€r$   r%   r  Þ  s   ø€ ÷ 
Cñ 
C¡Cð 
C©Eñ 
Cr&   c                ó²   € V'       g   V P                   '       g   R # V'       d   V P                  '       g   R# V'       d   V P                  # V P                  # rn   )r  r  r:   rÄ   )rZ   r  s   &&r$   Úget_char_dirÚWordExtractor.get_char_dirÞ  s=   € ÷ ˜t×0×0Ð0Ùç˜T×0×0Ð0Ùç 'ˆt�}‰}ÐB¨T×-BÑ-BÐBr&   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r    Úordered_charsr"   )r   r   )r#   rT   s   "€r$   r%   r  ê  s   ø€ ÷ ñ ©ð ¹ñ r&   c                ó|  a € \        V4      w  r#rEV^ ,          R,          V^ ,          R,          ,
          pV^ ,          R,          pS P                  V4      pRRP                  V 3R lV 4       4      RVRVRVRW6,           R	VRVR
WS,
          RWB,
          RV/
p	S P                   F  p
V^ ,          V
,          Wš&   K  	  V	# )r   Údoctopr)   r  rƒ   r_   c              3   óx   <"  € T F/  pSP                   P                  VR ,          VR ,          4      x € K1  	  R# 5i©rƒ   N)rß   rÝ   )re   rŠ   rZ   s   & €r$   rh   Ú,WordExtractor.merge_chars.<locals>.<genexpr>ñ  s0   øé € ð ÙCP¸a�—‘×#Ñ# A f¥I¨q°­y×9Ð9Ã=ùs   ƒ7:r4   r7   r1   r?   ÚwidthÚ	direction)r   r  rk   r  )rZ   r  r4   r)   r7   r1   Ú
doctop_adjr  r:   rð   rÐ   s   f&         r$   Úmerge_charsÚWordExtractor.merge_charsê  sÓ   ø€ Ü-¨mÓ<Ñˆ�Ø" 1Õ% hÕ/°-ÀÕ2BÀ5Õ2IÕIˆ
Ø Õ" 9Õ-ˆØ×$Ñ$ WÓ-ˆð �B—G‘Gô ÙCPóó ð �"Ø�"Ø�3Ø�cÕ&Ø�fØ�wØ�f•lØ�R•WØ˜ð
ˆð ×#Ô#ˆCØ% aÕ(¨Õ-ˆD‹Iñ $ð ˆr&   c                ó>   <€ V ^8„  d   QhRS[ RS[ RS[RS[RS[RS[/# )r    Ú	prev_charÚ	curr_charr   r  rÂ   r"   )r   r   r   r�   )r#   rT   s   "€r$   r%   r    sO   ø€ ÷ K
ñ K
áðK
ñ ðK
ñ ð	K
ñ
 ðK
ñ ðK
ñ 
ñK
r&   c                óæ  € VR9   dY   TpTpVR,          pVR,          p	VR8X  d   VR,          p
VR,          pVR,          pMvVR,          ) p
VR,          ) pVR,          ) pMWTpTpVR,          pVR,          p	VR8X  d   VR,          p
VR,          pVR,          pMVR,          ) p
VR,          ) pVR,          ) p\        WÊ8  ;'       g(    WËV,           8„  ;'       g    \        W˜,
          4      V8„  4      # )a¼  This method takes several factors into account to determine if
`curr_char` represents the beginning of a new word:

- Whether the text is "upright" (i.e., non-rotated)
- Whether the user has specified that horizontal text runs
  left-to-right (default) or right-to-left, as represented by
  self.horizontal_ltr
- Whether the user has specified that vertical text the text runs
  top-to-bottom (default) or bottom-to-top, as represented by
  self.vertical_ttb
- The x0, top, x1, and bottom attributes of prev_char and
  curr_char
- The self.x_tolerance and self.y_tolerance settings. Note: In
  this case, x/y refer to those directions for non-rotated text.
  For vertical text, they are flipped. A more accurate terminology
  might be "*intra*line character distance tolerance" and
  "*inter*line character distance tolerance"

An important note: The *intra*line distance is measured from the
*end* of the previous character to the *beginning* of the current
character, while the *inter*line distance is measured from the
*top* of the previous character to the *top* of the next
character. The reasons for this are partly repository-historical,
and partly logical, as successive text lines' bounding boxes often
overlap slightly (and we don't want that overlap to be interpreted
as the two lines being the same line).

The upright-ness of the character determines the attributes to
compare, while horizontal_ltr/vertical_ttb determine the direction
of the comparison.
r   r)   r4   r7   r   r1   )r   r5   )r�   Úabs)rZ   r%  r&  r   r  rÂ   r,   ÚyÚayÚcyÚaxÚbxÚcxs   &&&&&&       r$   Úchar_begins_new_wordÚ"WordExtractor.char_begins_new_word  s  € ðR ˜Ô&ØˆAØˆAØ˜5Õ!ˆBØ˜5Õ!ˆBØ˜EÔ!Ø˜t•_�Ø˜t•_�Ø˜t•_‘à •oÐ%�Ø •oÐ%�Ø •oÐ%‘ð ˆAØˆAØ˜4•ˆBØ˜4•ˆBØ˜EÔ!Ø˜uÕ%�Ø˜xÕ(�Ø˜uÕ%‘à Õ)Ð)�Ø Õ&Ð&�Ø Õ)Ð)�äà‰W÷  ð  Ø˜!•V‘÷ ð  ô �2•7‹|˜aÑó
ð 	
r&   c          	      óB   <€ V ^8„  d   QhRS[ RS[RS[S[RR3,          /# )r    r  r   r"   N)r   r   r   r   )r#   rT   s   "€r$   r%   r  Q  s5   ø€ ÷ .ñ .á!ð.ñ ð.ñ 
‘:˜t TÐ)Õ	*ñ	.r&   c           
   #  ó¶  a
"  € . o
R  V
3R llpV P                   pV P                  pV P                  pV P                  pV Fü  pVR,          p	V P                  '       g)   V	P                  4       '       d   V! R4       Rj  x€L
  KF  W�P                  9   d#   V! V4       Rj  x€L
  V! R4       Rj  x€L
  Kx  S
'       dl   T P                  S
R,          TTVf   TMVS
R,          R,          ,          Vf   TMVS
R,          R,          ,          R7      '       d   V! V4       Rj  x€L
  Kë  S
P                  V4       Kþ  	  S
'       d   S
x € R# R#  LÐ L° L¢ L15i)c                ób   € V ^8„  d   QhR\         \        ,          R\        \        RR3,          /# )r    Únew_charr"   N)r
   r   r   r   )r#   s   "r$   r%   Ú7WordExtractor.iter_chars_to_words.<locals>.__annotate__X  s0   € ÷ 	Bñ 	BÜœu•oð	Bä”z 4¨Ð-Õ.ñ	Br&   c              3   ó>   <"  € S'       d   Sx € V f   . oR # V .oR # 5ird   r*   )r4  Úcurrent_words   &€r$   Ústart_next_wordÚ:WordExtractor.iter_chars_to_words.<locals>.start_next_wordX  s!   øé € ÷
 Ø"Ò"à!)Ò!1˜2ŠL¸°zŠLùs   ƒrƒ   NÚsize)r  rÂ   rÕ   )	r  r  rÂ   r  r  Úisspacer	  r/  rÛ   )rZ   r  r   r8  ÚxtÚxtrÚytÚytrÚcharrƒ   r7  s   &&&       @r$   Úiter_chars_to_wordsÚ!WordExtractor.iter_chars_to_wordsQ  s@  øé € ð
 $&ˆ÷	Bð 	Bð ×ÑˆØ×$Ñ$ˆØ×ÑˆØ×$Ñ$ˆã!ˆDØ˜•<ˆDà×(×(Ð(¨T¯\©\¯^ª^Ù*¨4Ó0×0Ò0à×2Ñ2Ô2Ù*¨4Ó0×0Ð0Ù*¨4Ó0×0Ò0ç $×";Ñ";Ø˜RÕ ØØØ#&¢;™R°C¸,ÀrÕ:JÈ6Õ:RÕ4RØ#&¢;™R°C¸,ÀrÕ:JÈ6Õ:RÕ4Rð #<÷ #ò #ñ +¨4Ó0×0Ò0ð ×#Ñ# DÖ)ñ) "÷. ØÔñ ñ' 1ñ 1Ù0ñ 1ùsa   ƒA1EÁ5EÂ EÂ!EÂ"EÂ#EÂ2EÂ3EÃAEÄEÄ%EÄ&"EÅ		EÅEÅEÅEc                óR   <€ V ^8„  d   QhRS[ RS[S[S[S[3,          RR3,          /# ©r    r…   r"   N)r   r   r   r   r   )r#   rT   s   "€r$   r%   r  �  s3   ø€ ÷ +ñ +Ùð+á	‘5™¡UÐ*Õ+¨T°4Ð7Õ	8ñ+r&   c              #  óZ  "  € \        V4      pV^ ,          R,          pV'       d   V P                  MV P                  pV P                  V4      p\	        V4      p\        V4      p\        TTVR9   d   V P                  MV P                  4      pV F  p\        W†R7      p	W”3x € K  	  R# 5i)r   r  rÏ   N©r   r/   )
rq   r!   rÃ   r  r8   rB   r   rÂ   r  rÙ   )
rZ   r…   r  r!   r:   rÍ   rÔ   ÚsubclustersÚscÚchars_sorteds
   &&        r$   Úiter_chars_to_linesÚ!WordExtractor.iter_chars_to_lines�  sŸ   é € ô �U“ˆØ˜•(˜9Õ%ˆß$+�4—=’=°×1FÑ1FˆØ×$Ñ$ WÓ-ˆä/°Ó9ÐÜ)¨(Ó3ˆô &ØØØ!)¨^Ô!;ˆT×ÒÀ×AQÑAQó
ˆó ˆBä! "Ô8ˆLØÐ*Ô*ó ùs   ‚B)B+c                óR   <€ V ^8„  d   QhRS[ RS[S[S[S[3,          RR3,          /# rD  )r   r   r   r   r   )r#   rT   s   "€r$   r%   r  ˜  s7   ø€ ÷ Eñ EÙðEá	‘5™¡
Ð*Õ+¨T°4Ð7Õ	8ñEr&   c              #  óP  "  € \        R .V P                  O5!  p\        P                  ! W4      pV Fn  w  rEV P                  '       d   WPP
                  3.MV P                  V4      pV F2  w  rxV P                  Wx4       F  p	V P                  V	4      V	3x € K  	  K4  	  Kp  	  R# 5i)r  N)	r   r  Ú	itertoolsÚgroupbyrÅ   r:   rJ  rA  r"  )
rZ   r…   Úgrouping_keyÚgrouped_charsÚkeyvalsÚ
char_groupÚline_groupsÚ
line_charsr   Ú
word_charss
   &&        r$   Úiter_extract_tuplesÚ!WordExtractor.iter_extract_tuples˜  s¤   é € ô " )Ð?¨d×.>Ñ.>Ó?ˆÜ!×)Ò)¨%Ó>ˆã#0ÑˆGð ×%×%Ð%ð Ÿm™mÐ,Ñ-à×-Ñ-¨jÓ9ð ó
 *5Ñ%�
Ø"&×":Ñ":¸:Ö"Q�JØ×+Ñ+¨JÓ7¸ÐDÔDó #Ró *5ó $1ùs   ‚B$B&c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r    r…   r"   )r   r±   )r#   rT   s   "€r$   r%   r  ¨  s   ø€ ÷ >ñ >¡Zð >±Gñ >r&   c                óH   € \        \        V P                  V4      4      4      # rd   )r±   rq   rW  )rZ   r…   s   &&r$   Úextract_wordmapÚWordExtractor.extract_wordmap¨  s   € Ü”t˜D×4Ñ4°UÓ;Ó<Ó=Ð=r&   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[ /# )r    r…   r   r"   )r   r�   )r#   rT   s   "€r$   r%   r  «  s*   ø€ ÷ 	Vñ 	VÙð	VÙ/3ð	Vá	ñ	Vr&   c                ó–   € V'       d"   \        R  V P                  V4       4       4      # \        R V P                  V4       4       4      # )c              3   ó6   "  € T F  w  r/ VCR V/Cx € K  	  R# 5i)r…   Nr*   ©re   rð   rV  s   &  r$   rh   Ú.WordExtractor.extract_words.<locals>.<genexpr>¯  s&   é € ð á(GÑ$�Dð .�4Ð-˜ *Ö-Û(Gùs   ‚c              3   ó*   "  € T F	  w  rVx € K  	  R # 5ird   r*   r`  s   &  r$   rh   ra  ´  s   é € ÐUÑ5TÑ!1 �Ó5Tùs   ‚)rq   rW  )rZ   r…   r   s   &&&r$   Úextract_wordsÚWordExtractor.extract_words«  sJ   € ÷ Üñ à(,×(@Ñ(@ÀÔ(Góó ð ô
 ÑU°T×5MÑ5MÈeÔ5TÓUÓUÐUr&   )r:   rÄ   rß   r  r  r  r!   rÃ   r	  rÅ   r  r  r  rÂ   r  ©F)r¨   r©   rª   r«   ÚDEFAULT_X_TOLERANCErü   rý   rþ   r[   r  r"  r/  rA  rJ  rW  r[  rc  r­   r®   r¯   s   @r$   r   r   §  s¡   ø‡ € ð 1Ø0Ø59Ø59Ø!&Ø#Ø!Ø#Ø*Ø*Ø,0Ø,0Ø+/Ø16Ø!%÷!4@ò 4@÷l
Cð 
C÷ð ÷4K
ð K
÷Z.ð .÷`+ð +÷.Eð E÷ >ð >÷	V÷ 	Vð 	Vr&   r   c                óH   € V ^8„  d   QhR\         R\        R\        R\         /# )r    r…   r   Úkwargsr"   )r   r�   r   )r#   s   "r$   r%   r%   ·  s2   € ÷ Fñ FÜðFÜ%)ðFÜ=@ðFäñFr&   c                 ó6   € \        R/ VB P                  W4      # )Nr*   )r   rc  )r…   r   rh  s   &&,r$   rc  rc  ·  s   € ô Ñ"˜6Ñ"×0Ñ0°ÓEÐEr&   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r    r…   rh  r"   )r   r   rO   )r#   s   "r$   r%   r%   Á  s!   € ÷ ñ œJð ´#ð ¼'ñ r&   c           
      óp  € TP                  R RRVP                  R4      ;'       g    \        V 4      /4       \        R/ \         Uu/ uF  q"V9   g   K  W!V,          bK  	  upB pVP                  V 4      pVP                  ! R/ \         Uu/ uF  q"V9   g   K  W!V,          bK  	  upB pV# u upi u upi )rÆ   Tr½   r*   )ÚupdaterÝ   r   r   ÚWORD_EXTRACTOR_KWARGSr[  rø   ÚTEXTMAP_KWARGS)r…   rh  ÚkÚ	extractorÚwordmapÚtextmaps   &,    r$   Úchars_to_textmaprs  Á  s¼   € Ø
‡M�Mà˜Ø˜6Ÿ:™: mÓ4×NÐN¼ÈÓ8Nð	
ôô ñ Ý!6Ó
FÑ!6˜A¸v¹+Œ<ˆ1�Q�iŠ<Ñ!6Ñ
Fñ€Ið ×'Ñ'¨Ó.€GØ× Ò ñ Ý!/Ó
?¡˜A¸±;Œ<ˆ1�Q�iŠ<¡Ñ
?ñ€Gð €Nùò Gùò @s   ÁB.ÁB.ÂB3ÂB3c          
      ó€   € V ^8„  d   QhR\         R\        \        ,          R\        \        ,          R\        R\        /# )r    r…   rR   rS   rh  r"   )r   r
   r   r   rE   )r#   s   "r$   r%   r%   Ó  sB   € ÷ -ñ -Üð-äœe•_ð-ô œe•_ð-ô ð	-ô
 	ñ-r&   c           
      óÂ  € \        V 4      p \        V 4      ^ 8X  d   R# VP                  R4      '       d!   / VCRVRV/Cp\        V 3/ VB P                  # \        R/ \         Uu/ uF  qUV9   g   K  WSV,          bK  	  upB pVP                  V 4      pT;'       g    VP                  pT;'       g    VP                  p\        VP                  4      pVP                  R\        4      p	VP                  R\        4      p
\        TTVR9   d   T
MT	4      p\        RP                  R V 4       4       Uu. uF  pVR	3NK	  	  upVVR
7      P                  # u upi u upi )r   r_   r¸   rR   rS   r  rÂ   r`   c              3   óR   "  € T F  pR P                  R V 4       4      x € K  	  R# 5i)ra   c              3   ó2   "  € T F  qR ,          x € K  	  R# 5ir  r*   )re   rð   s   & r$   rh   Ú)extract_text.<locals>.<genexpr>.<genexpr>û  s   é € Ð&EÁ¸¨F§|¢|Ãùs   ‚Nrj   )re   rf   s   & r$   rh   Úextract_text.<locals>.<genexpr>û  s$   é € ÐXÑRWÈ$˜cŸh™hÑ&EÁÓ&E×EÐEÓRWùs   ‚%'NrÉ   r*   rF  )r   rt   rÝ   rs  rY   r   rm  rc  r!   r:   r8   rf  rü   r   rO   rk   )r…   rR   rS   rh  Útextmap_kwargsro  rp  ÚwordsrÍ   r  rÂ   rl   r@  s   &&&,         r$   Úextract_textr|  Ó  sy  € ô �E‹N€EÜ
ˆ5ƒz�Q„Ùà‡z�z�(×Òð
Øð
à  /Ð3DÀoÐVð
ˆô   Ñ8¨Ñ8×BÑBÐBä!ñ 
Ý%:ÓJÑ%: À6¹kŒ|ˆq˜•)Š|Ñ%:ÑJñ
ˆ	ð ×'Ñ'¨Ó.ˆà)×?Ð?¨Y×-?Ñ-?ˆØ)×?Ð?¨Y×-?Ñ-?ˆä/°	×0BÑ0BÓCÐà—j‘j Ô0CÓDˆØ—j‘j Ô0CÓDˆäØØØ*¨nÔ<‰KÀ+ó
ˆô ð —I‘IÑXÑRWÓXÔXóñ Yð ð �t“áXñð ,Ø+ô	
÷ ‰)ð		ùò% Kùò&s   Á$EÁ1EÄ6Ec                ó<   € V ^8„  d   QhR\         R\        R\        /# )r    rU  Ú	tolerancer"   ©r   r   rE   )r#   s   "r$   r%   r%     s&   € ÷ ñ Üðäðô 	ñr&   c                 óº   € R pRp\        V \        R4      R7       F<  pVe   VR,          W1,           8”  d
   VR,          pVR,          pW$R,          ,          pK>  	  V# )r_   Nr4   rÏ   ra   r7   rƒ   )rÙ   r   )rU  r~  ÚcollÚlast_x1r@  s   &&   r$   Úcollate_linerƒ    s]   € ð €DØ€GÜ�z¤z°$Ó'7×8ˆØÒ d¨4¥j°GÕ4GÔ&HØ�C�KˆDØ�t•*ˆØ�V•ÕŠñ	 9ð
 €Kr&   c                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )r    r…   r  rÂ   r"   r  )r#   s   "r$   r%   r%     s6   € ÷ Fñ FÜðFäðFô ðFô 	ñ	Fr&   c                 óf   a€ \        V \        R 4      V4      pRP                  V3R lV 4       4      # )r  r`   c              3   ó<   <"  € T F  p\        VS4      x € K  	  R # 5ird   )rƒ  )re   rŠ   r  s   & €r$   rh   Ú&extract_text_simple.<locals>.<genexpr>  s   øé € ÐE¹9°a”\ ! [×1Ð1»9ùs   ƒ)r   r   rk   )r…   r  rÂ   Ú	clustereds   &f& r$   Úextract_text_simpler‰    s-   ø€ ô
   ¤z°(Ó';¸[ÓI€IØ�9‰9ÔE¹9ÓEÓEÐEr&   c          	      óx   € V ^8„  d   QhR\         R\        R\        \        \        R3,          ,          R\         /# )r    r…   r~  r  .r"   )r   r   r
   r   rE   )r#   s   "r$   r%   r%     s=   € ÷ ,ñ ,Üð,äð,ô œ%¤ S �/Õ*ð,ô ñ	,r&   c                ó²   aaa€ \        . ROT;'       g    \        4       O5!  o\        RR4      oR VVV3R llpV! V 4      p\        W@P                  R7      # )u×   
Removes duplicate chars â€”Â those sharing the same text and positioning
(within `tolerance`) as other characters in the set. Use extra_args to
be more restrictive with the properties shared by the matching chars.
r  r4   c                óL   € V ^8„  d   QhR\         R\        \        RR3,          /# rD  )r   r   r   )r#   s   "r$   r%   Ú"dedupe_chars.<locals>.__annotate__'  s&   € ÷ 	<ñ 	<¤*ð 	<´¼5À$ÈÐ;LÕ1Mñ 	<r&   c              3   ó  <"  € \        V SR 7      p\        P                  ! VSR 7       F^  w  r#\        \	        V4      \        R4      S4       F6  p\        V\        R4      S4       F  p\        VSR 7      ^ ,          x € K  	  K8  	  K`  	  R# 5i)rÏ   r  r4   N)rÙ   rN  rO  r   rq   r   )	r…   Úsorted_charsÚgrpÚ	grp_charsÚ	y_clusterÚ	x_clusterrÐ   Úpos_keyr~  s	   &     €€€r$   Úyield_unique_charsÚ(dedupe_chars.<locals>.yield_unique_chars'  s|   øé € Ü˜e¨Ô-ˆÜ'×/Ò/°À#×F‰NˆCÜ,Ü�Y“¤¨HÓ!5°yö�	ô "1Øœz¨$Ó/°ö"�Iô ! °Ô8¸Õ;Ô;ó"óó Gùs   ƒB
BrÏ   )r  rƒ   )r   ÚtuplerÙ   Úindex)r…   r~  r  r•  ÚdedupedrÐ   r”  s   &f&  @@r$   Údedupe_charsrš    sS   ú€ ô Ð
EÐ)Ð
E¨[×-CÐ-C¼E»GÓ
E€CÜ˜ 4Ó(€G÷	<ò 	<ñ ! Ó'€GÜ�'Ÿ{™{Ô+Ð+r&   c                óh   € V ^8„  d   Qh/ ^ \         9   d
   \        ;R&   ^\         9   d
   \        ;R&   # )r    rý   rþ   )Ú__conditional_annotations__r   )r#   s   "r$   r%   r%      s*   € ‡�÷<  Ò ”%Ñ ñ= ÷>  Ò ”%Ñ ò? r&   )r_   re  )NN)é   )Úfontnamer:  )?rœ  ÚinspectrN  Úloggingr—   r  Úoperatorr   Útypingr   r   r   r   r   r	   r
   r   r   r   Ú_typingr   r   r   r   r   r   Ú
clusteringr   Úgenericr   Úgeometryr   Ú	getLoggerr¨   r  rf  rü   rú   rû   rý   rþ   rÖ   r8   rB   rØ   rI   rM   rO   r±   r   rc  Ú	signaturerø   Ú
parametersrJ   rn  rm  rs  r|  rƒ  r‰  rš  r%   )rœ  s   @r$   Ú<module>rª     s²  øðß €Û Û Û 	Û Ý ÷÷ ÷ ÷ J× IÝ 'Ý Ý %à	×	Ò	˜8Ó	$€àÐ ØÐ ØÐ ØÐ ØÐ Ó ØÐ Ó ð 
ˆ4Ø	ˆ5Ø	ˆ5Ø	ˆ4Ø	ˆ4Ø	ˆ4Ø	ˆ4ð€	õõð 
‰:�a‹=Ø	‰:�a‹=Ø	‰:�a‹=Ø	‰:�a‹=ð	Ð ð 
‰:�eÓØ	‰:�hÓØ	‰:�dÓØ	‰:�dÓð	€÷
÷"G
ñ G
÷T{
ñ {
÷|MVñ MV÷`Fð ×"Ò" 7×#5Ñ#5Ó6×AÑA×FÑFÓH€Ø×)Ò)¨-Ó8×CÑC×HÑHÓJÐ õ÷$-ðd +÷ð  -Ø,÷F÷,ñ ,r&   