
    h7                        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JrJr  SSKJrJr  SS\
\   S\S	\
\
\      4S
 jjrS\	\   S\S	\\\4   4S jr\" S\\\S4   5      r SS\
\   S\\\\/\4   4   S\S\S	\
\
\      4
S jjrg)    N)Hashable)
itemgetter)AnyCallableDictIterableListTupleTypeVarUnion   )T_numT_obj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         S/var/www/html/shao/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   A1A,A1,A1Clusterable.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   R   >#    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,   r2   r   r%   groupbyr   )r   r.   r   r/   r   get_0get_1r   cluster_tuplesgroupedkvr4   s    `          @r   cluster_objectsrA   *   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   intr,   r-   boolrA        r   <module>rJ      s     $  M M M "T%[ U 4U;L (1huo 1% 1DPSDT 1 mUE#s(O< !	5[5(Hk]E%9::;5 5 	5
 
${
5rI   