o
    1ju                     @   sL   d dl Z d dlmZ ddlmZ ddlmZ ddlmZ G dd	 d	eZ	dS )
    N)Union   )logging)abspath   )BaseSegConfigc                   @   s   e Zd ZdZddedefddZdefdd	Zd
eee	f fddZ
defddZdefddZddefddZdedefddZdS )	SegConfigzSemantic Segmentation ConfigNdataset_pathdataset_typec              	   C   st   t |}|du r
d}|dkr| |}| | dS |dkr1| dd|tj|dddi dS tt| d)	zupdate dataset settings

        Args:
            dataset_path (str): the root path of dataset.
            dataset_type (str, optional): dataset type. Defaults to None.

        Raises:
            ValueError: the dataset_type error.
        N
SegDatasetZ_dummyval_datasetval.txtvaltypedataset_rootZval_pathmodez is not supported.)r   _make_custom_dataset_configupdateospathjoin
ValueErrorrepr)selfr	   r
   Zdataset_dirds_cfg r   k/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/repo_apis/PaddleSeg_api/seg/config.pyupdate_dataset   s"   

zSegConfig.update_datasetnum_classesc                 C   s   d| v r	|| j d< d| v r|| jd< d| v r|| jd< | jdv r@| j d D ]}|d dkr1||d< q%| jd	 }|D ]}||d< q9d
S d
S )zmupdate classes number

        Args:
            num_classes (int): the classes number value to set.
        train_datasetr   r   model)ZMaskFormer_tinyZMaskFormer_small
transformsr   ZGenerateInstanceTargetstypesN)r    r   r!   Z
model_nameZloss)r   r   tf_cfgZlossesZloss_cfgr   r   r   update_num_classes;   s    





zSegConfig.update_num_classes	crop_sizec                 C   s   t |tr
||g}nt|}t|dkrtt|d t|d g}| jd }d}|D ]}|d dkr9||d< d	}q+|sCtd
 dS dS )zupdate the image cropping size of training preprocessing

        Args:
            crop_size (int | list): the size of image to be cropped.

        Raises:
            ValueError: the `crop_size` error.
        r   r      r"   Fr   ZRandomPaddingCropr&   TzvCould not find configuration item of image cropping transformation operator. Therefore, the crop size was not updated.N)
isinstanceintlistlenr   r    r   warning)r   r&   Ztf_cfg_listmodifiedr$   r   r   r   update_train_crop_sizeQ   s$   



z SegConfig.update_train_crop_sizereturnc                 C   s   d| v r| j S dS )ziget epochs

        Returns:
            int: the epochs value, i.e., `Global.epochs` in config.
        itersi  )r0   r   r   r   r   get_epochs_iterso   s   zSegConfig.get_epochs_itersc                 C   s    d| vs	d| j vrdS | j d S )zget learning rate

        Returns:
            float: the learning rate value, i.e., `Optimizer.lr.learning_rate` in config.
        lr_schedulerZlearning_rateg-C6?)r3   r1   r   r   r   get_learning_rate{   s   
zSegConfig.get_learning_ratetrainc                 C   s.   |dkrd| v r| j S dS tdt| d)a  get batch size

        Args:
            mode (str, optional): the mode that to be get batch size value, must be one of 'train', 'eval', 'test'.
                Defaults to 'train'.

        Raises:
            ValueError: the `mode` error. `train` is supported only.

        Returns:
            int: the batch size value of `mode`, i.e., `DataLoader.{mode}.sampler.batch_size` in config.
        r5   
batch_sizer   zGetting `batch_size` in z mode is not supported.)r6   r   r   )r   r   r   r   r   get_batch_size   s   zSegConfig.get_batch_sizedataset_root_pathc                 C   s6   d|t j|dddd|t j|dddd}|S )	zconstruct the dataset config that meets the format requirements

        Args:
            dataset_root_path (str): the root directory of dataset.

        Returns:
            dict: the dataset config.
        r   z	train.txtr5   )r   r   Z
train_pathr   r   r   r   )r    r   )r   r   r   )r   r8   r   r   r   r   r      s   z%SegConfig._make_custom_dataset_config)N)r5   )__name__
__module____qualname____doc__strr   r)   r%   r   r*   r.   r2   floatr4   r7   dictr   r   r   r   r   r      s     r   )
r   typingr   utilsr   Z
utils.miscr   Zbase_seg_configr   r   r   r   r   r   <module>   s   