o
    Fg                     @  s&  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
 G dd dZG dd de	ZG dd	 d	e	ZG d
d de	ZG dd de	ZG dd de	ZG dd de	ZG dd de	ZG dd de	ZeG dd dZG dd dZee Zee Zee Zee Zee Zeee  Zee ZdS )    )annotations)	dataclass)AnyDictListOptional	TypedDictUnionc                   @  s   e Zd Zd6d7ddZdd Zdd	 Zed
d Zedd Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd Zd8ddZd9d d!Zd9d"d#Zd9d$d%Zd9d&d'Zd:d-d.Zd;d3d4Zd5S )<BboxFbboxList[float]c                 C  sP   |r t |}t|d |d d |d< t|d |d d |d< || _|| _d S Nr            )listmaxr   ensure_nonzero_area)selfr   r    r   h/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/venv/lib/python3.10/site-packages/pdftext/schema.py__init__   s   
zBbox.__init__c                 C  s
   | j | S Nr   )r   itemr   r   r   __getitem__      
zBbox.__getitem__c                 C  s   d| j  dS )NzBbox()r   r   r   r   r   __repr__      zBbox.__repr__c                 C     | j d | j d  S )Nr   r   r   r   r   r   r   height      zBbox.heightc                 C  r!   )Nr   r   r   r   r   r   r   width   r#   z
Bbox.widthc                 C  s   | j | j S r   r$   r"   r   r   r   r   area      z	Bbox.areac                 C  s0   | j d | j d  d | j d | j d  d gS r   r   r   r   r   r   center"   s   0zBbox.centerc                 C  s   | j | jgS r   r%   r   r   r   r   size&   r'   z	Bbox.sizec                 C  
   | j d S Nr   r   r   r   r   r   x_start*      
zBbox.x_startc                 C  r*   )Nr   r   r   r   r   r   y_start.   r-   zBbox.y_startc                 C  r*   )Nr   r   r   r   r   r   x_end2   r-   z
Bbox.x_endc                 C  r*   )Nr   r   r   r   r   r   y_end6   r-   z
Bbox.y_endotherreturnc                 C  sp   | j |j k r	| j n|j }| j|jk r| jn|j}| j|jkr!| jn|j}| j|jkr-| jn|j}t||||gS r   )r,   r.   r/   r0   r
   )r   r1   r,   r.   r/   r0   r   r   r   merge:   s
   z
Bbox.mergec                 C  s2   t dt| jd |jd t | jd |jd  S )Nr   r   r   minr   r   r1   r   r   r   	overlap_xB      2zBbox.overlap_xc                 C  s2   t dt| jd |jd t | jd |jd  S )Nr   r   r   r4   r6   r   r   r   	overlap_yE   r8   zBbox.overlap_yc                 C  s   |  || | S r   )r7   r9   r6   r   r   r   intersection_areaH   s   zBbox.intersection_areac                 C  s"   | j dkrdS | |}|| j  S r+   )r&   r:   )r   r1   intersectionr   r   r   intersection_pctK   s   


zBbox.intersection_pct
page_widthfloatpage_heightrotationintc                 C  s   |dvrt d| j\}}}}|dkrt| jS |dkr)|| }|}	|| }
|}n%|dkr>|| }|| }	|| }
|| }n|dkrN|}|| }	|}
|| }t||
t|	|t||
t|	|f}t|S )N)r   Z        z2Rotation must be one of [0, 90, 180, 270] degrees.r   rB   rC   rD   )
ValueErrorr   r
   r5   r   )r   r=   r?   r@   x_miny_minx_maxy_max	new_x_min	new_y_min	new_x_max	new_y_maxrotated_bboxr   r   r   rotateR   s4   

zBbox.rotateimg_size	List[int]pagePagec                 C  s\   |d |d  }|d |d  }| j d | | j d | | j d | | j d | g}t|S )Nr   r$   r   r"   r   r   )r   r
   )r   rP   rR   w_scaleh_scalenew_bboxr   r   r   rescalet   s   zBbox.rescaleN)F)r   r   )r1   r
   r2   r
   )r1   r
   )r=   r>   r?   r>   r@   rA   r2   r
   )rP   rQ   rR   rS   r2   r
   )__name__
__module____qualname__r   r   r   propertyr"   r$   r&   r(   r)   r,   r.   r/   r0   r3   r7   r9   r:   r<   rO   rW   r   r   r   r   r
      s:    














"r
   c                   @  6   e Zd ZU ded< ded< ded< ded< d	ed
< dS )Charr
   r   strcharr>   r@   Dict[str, Union[Any, str]]fontrA   char_idxNrX   rY   rZ   __annotations__r   r   r   r   r]         
 r]   c                   @  s^   e Zd ZU ded< ded< ded< ded< d	ed
< d	ed< d	ed< ded< ded< ded< dS )Spanr
   r   r^   textr`   ra   z
List[Char]charsrA   char_start_idxchar_end_idxr@   urlboolsuperscript	subscriptNrc   r   r   r   r   rf      s   
 rf   c                   @  &   e Zd ZU ded< ded< ded< dS )Linez
List[Span]spansr
   r   rA   r@   Nrc   r   r   r   r   rp         
 rp   c                   @  ro   )Blockz
List[Line]linesr
   r   rA   r@   Nrc   r   r   r   r   rs      rr   rs   c                   @  sF   e Zd ZU ded< ded< ded< ded< ded< ded	< d
ed< dS )rS   rA   rR   r
   r   r$   r"   zList[Block]blocksr@   List[Reference]refsNrc   r   r   r   r   rS      s   
 rS   c                   @     e Zd ZU ded< ded< dS )	TableCellr^   rg   r
   r   Nrc   r   r   r   r   ry         
 ry   c                   @  rx   )
TableInputzList[List[int]]tablesrQ   rP   Nrc   r   r   r   r   r{      rz   r{   c                   @  r\   )LinkrA   rR   r   r   zOptional[int]	dest_pagezOptional[List[float]]dest_poszOptional[str]rk   Nrc   r   r   r   r   r}      re   r}   c                   @  s>   e Zd ZU ded< ded< ded< edd Zedd	 Zd
S )	ReferencerA   idxrR   r   coordc                 C  s   d| j  d| j S )Nzpage--)rR   r   r   r   r   r   ref   r#   zReference.refc                 C  s   d| j  S )N#)r   r   r   r   r   rk      r'   zReference.urlN)rX   rY   rZ   rd   r[   r   rk   r   r   r   r   r      s   
 
r   c                   @  s2   e Zd Zdd ZdddZdddZdddZdS )PageReferencec                 C  s
   i | _ d S r   )page_ref_mapr   r   r   r   r      r   zPageReference.__init__rR   rA   r2   rv   c                 C  s   | j |g S r   )r   get)r   rR   r   r   r   get_refs   r    zPageReference.get_refsr   r   r   c                 C  sN   | j |g  | ||}|d u r%tt| j | ||d}| j | | |S )N)r   rR   r   )r   
setdefault	check_refr   lenappend)r   rR   r   r   r   r   r   add_ref   s   zPageReference.add_refOptional[Reference]c                 C  s.   | j |g }|D ]}|j|kr|  S q	d S r   )r   r   r   )r   rR   r   rw   r   r   r   r   r      s   
zPageReference.check_refN)rR   rA   r2   rv   )rR   rA   r   r   r2   r   )rR   rA   r   r   r2   r   )rX   rY   rZ   r   r   r   r   r   r   r   r   r      s
    

r   N)
__future__r   dataclassesr   typingr   r   r   r   r   r	   r
   r]   rf   rp   rs   rS   ry   r{   r}   r   r   CharsSpansLinesBlocksPagesTablesTableInputsr   r   r   r   <module>   s,     z
