+
    f0i7                         ^ RI t ^ RIHt ^ RIHt ^ RIHtHtHtH	t	H
t
HtHtHt ^RIHtHt RR R lltR R	 lt]! R
]]]R3,          4      tRR R lltR# )    N)Hashable)
itemgetter)AnyCallableDictIterableListTupleTypeVarUnion)T_numT_objc                ~    V ^8  d   QhR\         \        ,          R\        R\         \         \        ,          ,          /# )   xs	tolerancereturn)r	   r   )formats   "a/Users/agent/.openclaw/workspace/venv/lib/python3.14/site-packages/pdfplumber/utils/clustering.py__annotate__r   	   s.      T%[ U 4U;L     c                    V^ 8X  d   \        V 4       Uu. uF  q".NK  	  up# \        V 4      ^8  d   \        V 4       Uu. uF  q".NK  	  up# . p\        \        V 4      4      p V ^ ,          .pV ^ ,          pV R,           F8  pW%V,           8:  d   VP                  V4       MVP                  V4       V.pTpK:  	  VP                  V4       V# u upi u upi )r   :   NN)sortedlenlistappend)r   r   xgroupscurrent_grouplasts   &&    r   cluster_listr"   	   s    A~#BZ(ZZ((
2w{#BZ(ZZ((F	fRj	BUGMa5DVV	!"  #MM-(CM  MM- M )(s   C Cc                t    V ^8  d   QhR\         \        ,          R\        R\        \        \        3,          /# )r   valuesr   r   )r   r   r   int)r   s   "r   r   r      s/     1 1huo 1% 1DPSDT 1r   c           
          \        \        \        V 4      4      V4      p\        V4       UUUu. uF  w  r4V Uu. uF  qUV3NK  	  upNK  	  pppp\	        \
        P                  ! V!  4      # u upi u upppi N)r"   r   set	enumeratedict	itertoolschain)r$   r   clustersivalue_clustervalnested_tupless   &&     r   make_cluster_dictr2      sq    DV-y9H ENhDWDW0@]+]cq]+DW   	/00 	,s   A2A-A2-A2Clusterable.c                    V ^8  d   QhR\         \        ,          R\        \        \        \        .\
        3,          3,          R\
        R\        R\         \         \        ,          ,          /# )r   r   key_fnr   preserve_orderr   )r	   r3   r   r   r   r   bool)r   s   "r   r   r   *   s_     5 5[5(Hk]E%9::;5 5 	5
 
${
5r   c           
        aa \        S4      '       g   \        S4      o\        SV 4      p\        WB4      o\        ^ 4      \        ^4      reV'       d)   V  Uu. uF  qwSP	                  S! V4      4      3NK  	  ppM\        VV3R lV  4       VR7      p\        P                  ! WR7      p	V	 U
Uu. uF  w  r\        \        W[4      4      NK  	  upp
# u upi u upp
i )r   c              3   T   <"   T F  qSP                  S! V4      4      3x  K  	  R # 5ir'   )get).0r   cluster_dictr5   s   & r   	<genexpr>"cluster_objects.<locals>.<genexpr>=   s#     :r!!!&),-rs   %()key)	callabler   mapr2   r:   r   r+   groupbyr   )r   r5   r   r6   r$   get_0get_1r   cluster_tuplesgroupedkvr<   s   &f&&        @r   cluster_objectsrI   *   s     FF#_F$V7La=*Q-5DFGBql..vay9:BG:r:
 :G,34GDADUG44 H 5s   !C/C)r   )F)r+   collections.abcr   operatorr   typingr   r   r   r   r	   r
   r   r   _typingr   r   r"   r2   r3   rI    r   r   <module>rO      sF     $  M M M "(1 mUE#s(O<5 5r   