o
    jĎi4                     @   s<   d dl mZmZ d dlmZ d dlmZ G dd deZdS )    )TupleUnion)BaseBoundingBox)BoundingBoxc                       s   e Zd Z		ddededededeeef def fd	d
Zdd Zdd Zddede	eeeeef df fddZ
e		ddededededeeef dedd fddZ  ZS )CocoBoundingBoxNFx_tly_tlwh
image_sizestrictc                    s    t t| j||||||d d S N)r   r   )superr   __init__)selfr   r   r	   r
   r   r   	__class__ \/home/jeff/fluffinator/venv/lib/python3.10/site-packages/pybboxes/boxes/coco_bounding_box.pyr      s    	zCocoBoundingBox.__init__c                 G   s   t dd |D S )Nc                 S   s   g | ]}t |qS r   )round).0valr   r   r   
<listcomp>   s    z8CocoBoundingBox._correct_value_types.<locals>.<listcomp>)tuple)r   valuesr   r   r   _correct_value_types   s   z$CocoBoundingBox._correct_value_typesc                 G   s   | j \}}|\}}}}|dks|dkrtd| jr&|dk s"|dk r&td|d ur0|| |ks:|d urF|| |krF| jrAtdd| _d S |  sOd| _d S d S )Nr   z.Given width and height must be greater than 0.z&Given top-left point is out of bounds.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   image_widthimage_heightr   r   r	   r
   r   r   r   _validate_values   s    


z CocoBoundingBox._validate_valuesreturn_valuesreturnr   c                 C   sF   | j \}}}}|| }|| }|r||||fS t||||| j| jdS r   )r   r   r   r   )r   r"   r   r   r	   r
   x_bry_brr   r   r   to_voc*   s   zCocoBoundingBox.to_vocTr$   r%   c           	      C   s$   || }|| }| ||||||dS r   r   )	clsr   r   r$   r%   r   r   r	   r
   r   r   r   from_voc2   s   
zCocoBoundingBox.from_voc)NF)F)NT)__name__
__module____qualname__intr   boolr   r   r!   r   r&   classmethodr(   __classcell__r   r   r   r   r      sJ    
(
r   N)typingr   r   pybboxes.boxes.baser   pybboxes.boxes.bboxr   r   r   r   r   r   <module>   s    