o
    -h7                     @   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mZmZ ddlmZ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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dZdS )    N)Hashable)
itemgetter)AnyCallableDictIterableListTupleTypeVarUnion   )T_numT_obj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   T/var/www/html/govbot/env/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/   Clusterable.F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_dictr1   r   r   r   :       z#cluster_objects.<locals>.<listcomp>c                 3   s"    | ]}|  |fV  qd S )Nr3   r   r5   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   r7   )callabler   r:   r/   r   r+   groupby)r   r1   r   r2   r#   get_1cluster_tuplesgroupedr   )r6   r=   r1   r   cluster_objects*   s   

rC   )r   )F)r+   collections.abcr   operatorr   typingr   r   r   r   r   r	   r
   r   _typingr   r   r"   intr/   r0   boolrC   r   r   r   r   <module>   s(    ($"

