o
     e                     @   s   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 ddlmZ dde	e ded	e	e	e  fd
dZdee ded	eeef fddZe
dZ	dde	e deeeegef f deded	e	e	e  f
ddZdS )    N)Hashable)
itemgetter)CallableDictIterableListTypeVarUnion   )T_numxs	tolerancereturnc                 C   s   |dkrdd t | D S t| dk rdd t | D S g }tt | } | d g}| d }| dd  D ]}||| krA|| n|| |g}|}q3|| |S )Nr   c                 S      g | ]}|gqS  r   .0xr   r   N/var/www/html/venv/lib/python3.10/site-packages/pdfplumber/utils/clustering.py
<listcomp>       z cluster_list.<locals>.<listcomp>r
   c                 S   r   r   r   r   r   r   r   r      r      )sortedlenlistappend)r   r   groupscurrent_grouplastr   r   r   r   cluster_list	   s    


r   valuesc                 C   s2   t tt| |}dd t|D }ttj| S )Nc                    s"   g | ]\ } fd d|D qS )c                    s   g | ]}| fqS r   r   )r   valir   r   r   !   s    z0make_cluster_dict.<locals>.<listcomp>.<listcomp>r   )r   value_clusterr   r"   r   r       s    z%make_cluster_dict.<locals>.<listcomp>)r   r   set	enumeratedict	itertoolschain)r    r   clustersnested_tuplesr   r   r   make_cluster_dict   s
   r,   RFkey_fnpreserve_orderc                    s   t stt| }t|| tdtd}|r( fdd| D }nt fdd| D |d}tj||d}fdd|D S )	Nr   r   c                    s   g | ]}|  |fqS r   getr   cluster_dictr.   r   r   r   :       z#cluster_objects.<locals>.<listcomp>c                 3   s"    | ]}|  |fV  qd S )Nr0   r   r2   r   r   	<genexpr>=   s     z"cluster_objects.<locals>.<genexpr>)keyc                    s   g | ]\}}t t |qS r   )r   map)r   kv)get_0r   r   r   B   r4   )callabler   r7   r,   r   r(   groupby)r   r.   r   r/   r    get_1cluster_tuplesgroupedr   )r3   r:   r.   r   cluster_objects*   s   

r@   )r   )F)r(   collections.abcr   operatorr   typingr   r   r   r   r   r	   _typingr   r   intr,   r-   boolr@   r   r   r   r   <module>   s(     $"

