o
    Tg                     @   s8  d dl Z d dlZd dlmZ d dlmZmZ d dlZd dl	Z	d dl
mZ d dlmZ d dlmZ dee dee fd	d
Zdee dee fddZdd ZdeeB dB fddZdedee fddZdeee  deee  dejfddZdeee  deee  dejfddZd!dee fddZdd  ZdS )"    N)import_module)List	Annotated)	BaseModel)
PolygonBox)settingsitemsreturnc                 C   s:   g }| D ]}| dd\}}t|}|t|| q|S )N.   )rsplitr   appendgetattr)r   classesitemmodule_name
class_namemodule r   J/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/marker/marker/util.pystrings_to_classes   s   r   c                 C   s2   | D ]}t |std| dqdd | D S )NzItem z is not a classc                 S   s   g | ]}|j  d |j qS )r
   )
__module____name__).0r   r   r   r   
<listcomp>   s    z&classes_to_strings.<locals>.<listcomp>)inspectisclass
ValueError)r   r   r   r   r   classes_to_strings   s
   
r   c                 C   s   t | j}d}| D ]\}}t|tttdf r+t| |}|d u r+|| d7 }qt	|dks?J d| jj
 d| dd S )N z, r   zIn order to use z), you must set the configuration values `z`.)r   get_annotations	__class__r   
isinstancetyper   strr   lenr   )objannotations	none_vals	attr_name
annotationvaluer   r   r   verify_config_keys   s   
*r,   configc                 C   s   | j j}|d u r
d S t|tr| }nt|tr|}ntd|D ]}t| |r1t| |||  q"|D ]}||vr;q4||d }t| |rOt| |||  q4d S )Nz-config must be a dict or a pydantic BaseModel_)	r!   r   r"   r   dictr   hasattrsetattrremoveprefix)clsr-   cls_namedict_configksplit_kr   r   r   assign_config,   s(   




r8   	range_strc                 C   sp   |  d}g }|D ]$}d|v r&| d\}}|ttt|t|d 7 }q	|t| q	ttt|}|S )N,-r   )splitlistrangeintr   sortedset)r9   	range_lstpage_lstistartendr   r   r   parse_range_strD   s   
 rG   boxes1boxes2c                 C   s   t | dkst |dkrtt | t |fS t| } t|}| d d tjd d f } |tjd d d d f }t| d |d }t| d |d }t| d |d }t| d |d }td|| }td|| }|| S )Nr   ).r   ).r   ).   ).   )r%   npzerosarraynewaxismaximumminimum)rH   rI   min_xmin_ymax_xmax_ywidthheightr   r   r   matrix_intersection_areaQ   s   

rX   c                 C   s   t |dkrtt | dfS t | dkrtdt |fS t| } t|}| d d d df | d d dd f  d }|d d d df |d d dd f  d }|d d tjd d f }|tjd d d d f }tjj|| dd}|S )Nr   rJ   )axis)r%   rL   rM   rN   rO   linalgnorm)rH   rI   boxes1_centersboxes2_centers	distancesr   r   r   matrix_distancef   s   

,,r_         ?linesc           	      C   sz   i }| D ]}t |jd | | }||vrg ||< || | qg }t| D ]\}}t|dd d}|| q)|S )Nr   c                 S   s
   | j d S )Nr   )bbox)xr   r   r   <lambda>   s   
 z!sort_text_lines.<locals>.<lambda>)key)roundrb   r   r@   r   extend)	ra   	tolerancevertical_groupsline	group_keysorted_linesr.   groupsorted_groupr   r   r   sort_text_linesy   s   ro   c               	   C   s   t jtjsft jt jtjdd tj dtj } t	j
| dd9}ttjd}|  |jddD ]}|| q5W d    n1 sGw   Y  W d    d S W d    d S 1 s_w   Y  d S d S )NT)exist_ok/)streamwbi    )
chunk_size)ospathexistsr   	FONT_PATHmakedirsdirnameARTIFACT_URL	FONT_NAMErequestsgetopenraise_for_statusiter_contentwrite)font_dl_pathrfchunkr   r   r   download_font   s   Pr   )r`   )r   ru   	importlibr   typingr   r   numpyrL   r}   pydanticr   marker.schema.polygonr   marker.settingsr   r$   r#   r   r   r,   r/   r8   r?   rG   floatndarrayrX   r_   ro   r   r   r   r   r   <module>   s$    	((