
    )i                         S SK r S SKJr  S SKJr  S SKJrJrJrJ	r	J
r
Jr  SSKJr  SS\	\   S\S	\	\	\      4S
 jjrS\\   S\S	\\\4   4S jr\
" S5      r SS\	\   S\\\\/\4   4   S\S\S	\	\	\      4
S jjrg)    N)Hashable)
itemgetter)CallableDictIterableListTypeVarUnion   )T_numxs	tolerancereturnc                    US:X  a  [        U 5       Vs/ s H  o"/PM     sn$ [        U 5      S:  a  [        U 5       Vs/ s H  o"/PM     sn$ / n[        [        U 5      5      n U S   /nU S   nU SS   H3  nX%U-   ::  a  UR                  U5        OUR                  U5        U/nUnM5     UR                  U5        U$ s  snf s  snf )Nr   r      )sortedlenlistappend)r   r   xgroupscurrent_grouplasts         [/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/pdfplumber/utils/clustering.pycluster_listr   	   s    A~#BZ(ZZ((
2w{#BZ(ZZ((F	fRj	BUGMa5DV	!"  #MM-(CM  MM- M )(s
   B>Cvaluesc           
          [        [        [        U 5      5      U5      n[        U5       VVVs/ s H  u  p4U Vs/ s H  oUU4PM     snPM     nnnn[	        [
        R                  " U6 5      $ s  snf s  snnnf N)r   r   set	enumeratedict	itertoolschain)r   r   clustersivalue_clustervalnested_tupless          r   make_cluster_dictr)      sq    DV-y9H ENhDWDW0@]+]cq]+DW   	/00 	,s   A3A.A3.A3Rkey_fnpreserve_orderc           
        ^^ [        T5      (       d  [        T5      m[        TU 5      n[        XB5      m[        S5      [        S5      peU(       a)  U  Vs/ s H  owTR	                  T" U5      5      4PM     nnO[        UU4S jU  5       US9n[        R                  " XS9n	U	 V
Vs/ s H  u  p[        [        X[5      5      PM     snn
$ s  snf s  snn
f )Nr   r   c              3   T   >#    U  H  oTR                  T" U5      5      4v   M     g 7fr   )get).0r   cluster_dictr+   s     r   	<genexpr>"cluster_objects.<locals>.<genexpr>=   s#     :r!!!&),-rs   %()key)	callabler   mapr)   r/   r   r"   groupbyr   )r   r+   r   r,   r   get_0get_1r   cluster_tuplesgroupedkvr1   s    `          @r   cluster_objectsr>   *   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
   _typingr   r   intr)   r*   boolr>        r   <module>rG      s     $  A A T%[ U 4U;L (1huo 1% 1DPSDT 1 CL !	5Q5(HaS%Z0015 5 	5
 
$q']5rF   