o
    jĎi                     @   sr   d dl mZ d dlmZmZ d dlmZ d dlmZ 	dde	dee
e
f d	ed
edef
ddZG dd deZdS )    )import_module)TupleUnion)sqrt)BaseBoundingBoxNFname
image_sizereturn_valuesfrom_vocreturnc                 K   sz   dt dt fdd}|  d}d| }||}	t|}
t|
|	}|r-|j|d|i|}n	||d|i|}|r;|jS |S )Nsnake_stringr   c                 S   s   |   ddS )N_ )titlereplace)r    r   O/home/jeff/fluffinator/venv/lib/python3.10/site-packages/pybboxes/boxes/bbox.py	pascalize   s   zload_bbox.<locals>.pascalize_bounding_boxzpybboxes.boxes.r   )strr   getattrr
   values)r   r   r   r	   r
   kwargsr   module_namemodule_path
klass_namemoduleklassbboxr   r   r   	load_bbox	   s   


r   c                       s  e Zd Z		d6dededededeeef def fd	d
Zdededededef
ddZdedededefddZd7ddZ	de
dd fddZdeeef dd fddZdededefddZ	d8dedeeeeeef df fddZd8dedeeeeeef df fdd Zd8dedeeeeeef df fd!d"Zd8dedeeeeeef df fd#d$Zd8dedeeeeeef df fd%d&Ze		'd9dededededeeef deddfd(d)Ze		d6de
de
de
de
deeef defd*d+Zed6deded,ed-edeeef defd.d/Ze	d6de
de
d,e
d-e
deeef defd0d1Ze	d6d2e
d3e
d,e
d-e
deeef defd4d5Z  ZS ):BoundingBoxNFx_tly_tlx_bry_brr   strictc                    s    t t| j||||||d d S )N)r   r%   )superr    __init__)selfr!   r"   r#   r$   r   r%   	__class__r   r   r'      s    	zBoundingBox.__init__r   c                 C   s   t |t |t |t |fS N)round)r(   r!   r"   r#   r$   r   r   r   _correct_value_types*   s   z BoundingBox._correct_value_typesc                 C   s   | j \}}||ks||krtd||f||fkrtdd|  kr'|k rEn nd|  kr3|k rEn n|d ur=||ksE|d urQ||krQ| jrLtdd| _d S |  sZd| _d S d S )NzGIncorrect BoundingBox format. Must be in type [x-tl, y-tl, x-br, y-br].z8Given top-left and bottom-right points must be distinct.r   zeGiven bounding box values is out of bounds. To silently skip out of bounds cases pass 'strict=False'.TF)r   
ValueErrorr%   _is_oobis_image_size_null)r(   r!   r"   r#   r$   image_widthimage_heightr   r   r   _validate_values-   s"   


zBoundingBox._validate_valuesc                 C   sl   |   s| js	| S | j\}}}}| j\}}t|d}t|d}t||}t||}||||f}| j|  | S )Nr   )r0   is_oob
raw_valuesr   maxmin_validate_and_set_values)r(   r!   r"   r#   r$   widthheight
new_valuesr   r   r   clampB   s   





zBoundingBox.clampfactorc                 C   s   |dkrt d| j\}}}}|| || }}||d  ||d  }}	|t|9 }|t|9 }||d  |	|d  ||d  |	|d  f}
| j|
  | S )Nr   z*Scaling 'factor' must be a positive value.   )r.   r5   r   r8   )r(   r=   r!   r"   r#   r$   whx_cy_cr;   r   r   r   scaleO   s   ,
zBoundingBox.scaleamountc           	      C   s@   | j \}}}}|\}}|| || || || f}| j|  | S r+   )r5   r8   )	r(   rD   r!   r"   r#   r$   horizontal_shiftvertical_shiftr;   r   r   r   shift]   s
   
zBoundingBox.shiftr   r	   c                 C   s   t || j| j|d| jdS )NT)r   r   r	   r
   r%   )r   r5   r   r%   )r(   r   r	   r   r   r   _to_bbox_typee   s   zBoundingBox._to_bbox_typer   c                 K      | j d|fi |S )NalbumentationsrH   r(   r	   r   r   r   r   to_albumentationso   s   zBoundingBox.to_albumentationsc                 K   rI   )NcocorK   rL   r   r   r   to_cocot      zBoundingBox.to_cococ                 K   rI   )NfiftyonerK   rL   r   r   r   to_fiftyonew   rP   zBoundingBox.to_fiftyonec                 K   rI   )NvocrK   rL   r   r   r   to_vocz   rP   zBoundingBox.to_vocc                 K   rI   )NyolorK   rL   r   r   r   to_yolo}   rP   zBoundingBox.to_yoloTc                 C      t d||||f||dS )NrS   r   r   r%   r   clsr!   r"   r#   r$   r   r%   r   r   r   r
         
zBoundingBox.from_vocc                 C   rW   )NrJ   rX   rY   rZ   r   r   r   from_albumentations   r\   zBoundingBox.from_albumentationsr?   r@   c                 C   rW   )NrN   rX   rY   r[   r!   r"   r?   r@   r   r%   r   r   r   	from_coco   s   zBoundingBox.from_cococ                 C   rW   )NrQ   rX   rY   r^   r   r   r   from_fiftyone      zBoundingBox.from_fiftyonerA   rB   c                 C   rW   )NrU   rX   rY   )r[   rA   rB   r?   r@   r   r%   r   r   r   	from_yolo   ra   zBoundingBox.from_yolo)NF)r   r    )F)NT)__name__
__module____qualname__intr   boolr'   r-   r3   r<   floatrC   rG   r   r   rH   r   rM   rO   rR   rT   rV   classmethodr
   r]   r_   r`   rb   __classcell__r   r   r)   r   r       s    


((((

.

r    )NFF)	importlibr   typingr   r   numpyr   pybboxes.boxes.baser   r   rf   rg   r   r    r   r   r   r   <module>   s"    

