
    Ng7                     X   d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZ ddlmZmZ dde
e         ded	e
e
e                  fd
Zde	e         ded	eeef         fdZ edeeedf                   Z	 dde
e         deeeegef         f         deded	e
e
e                  f
dZdS )    N)Hashable)
itemgetter)AnyCallableDictIterableListTupleTypeVarUnion   )T_numT_objxs	tolerancereturnc                    |dk    rd t          |           D             S t          |           dk     rd t          |           D             S g }t          t          |                     } | d         g}| d         }| dd          D ];}|||z   k    r|                    |           n|                    |           |g}|}<|                    |           |S )Nr   c                     g | ]}|gS  r   .0xs     W/var/www/html/ai-engine/env/lib/python3.11/site-packages/pdfplumber/utils/clustering.py
<listcomp>z cluster_list.<locals>.<listcomp>       ((((((    r   c                     g | ]}|gS r   r   r   s     r   r   z cluster_list.<locals>.<listcomp>   r   r      )sortedlenlistappend)r   r   groupscurrent_grouplastr   s         r   cluster_listr&   	   s    A~~((VBZZ((((
2ww{{((VBZZ((((F	fRjj		BUGMa5DV  	!""  ####MM-(((CM
MM-   Mr   valuesc                     t          t          t          |                     |          }d t          |          D             }t	          t          j        |           S )Nc                 2    g | ]\  }fd |D             S )c                     g | ]}|fS r   r   )r   valis     r   r   z0make_cluster_dict.<locals>.<listcomp>.<listcomp>!   s    +++c#q+++r   r   )r   value_clusterr,   s     @r   r   z%make_cluster_dict.<locals>.<listcomp>    s?       0@=++++]+++  r   )r&   r!   set	enumeratedict	itertoolschain)r'   r   clustersnested_tupless       r   make_cluster_dictr5      s\    DV--y99H DMhDWDW  M 	/000r   Clusterable.Fkey_fnpreserve_orderc                 j  	 t                    st                    t          |           }t          ||          t          d          t          d          c	}|rfd| D             }nt	          fd| D             |          }t          j        ||          }	fd|D             S )Nr   r   c                 P    g | ]"}|                      |                    f#S r   getr   r   cluster_dictr7   s     r   r   z#cluster_objects.<locals>.<listcomp>:   s4    GGGq1l..vvayy99:GGGr   c              3   X   K   | ]$}|                      |                    fV  %d S )Nr;   r=   s     r   	<genexpr>z"cluster_objects.<locals>.<genexpr>=   s>      ::!a!!&&)),,-::::::r   )keyc                 P    g | ]"\  }}t          t          |                    #S r   )r!   map)r   kvget_0s      r   r   z#cluster_objects.<locals>.<listcomp>B   s-    444DAqDUA444r   )callabler   rC   r5   r   r1   groupby)
r   r7   r   r8   r'   get_1cluster_tuplesgroupedr>   rF   s
    `      @@r   cluster_objectsrL   *   s     F $F##__F$VY77La==*Q--LE5 
GGGGGBGGG:::::r:::
 
 
 E:::G4444G4444r   )r   )F)r1   collections.abcr   operatorr   typingr   r   r   r   r	   r
   r   r   _typingr   r   r&   intr5   r6   boolrL   r   r   r   <module>rS      s       $ $ $ $ $ $       M M M M M M M M M M M M M M M M M M M M " " " " " " " " T%[ U 4U;L    (1huo 1% 1DPSDT 1 1 1 1 gmUE#s(O<< !	5 5[5(Hk]E%9::;5 5 	5
 
${
5 5 5 5 5 5r   