
    FPh0                     f    d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
 ddlmZ  G d	 d
e      Zy)z
YOLO-NAS model interface.

Example:
    ```python
    from ultralytics import NAS

    model = NAS('yolo_nas_s')
    results = model.predict('ultralytics/assets/bus.jpg')
    ```
    )PathN)Model)
model_infosmart_inference_mode   )NASPredictor)NASValidatorc                   b     e Zd ZdZdd	 fdZ e       dedefd       Zd
dZe	d        Z
 xZS )NASa  
    YOLO NAS model for object detection.

    This class provides an interface for the YOLO-NAS models and extends the `Model` class from Ultralytics engine.
    It is designed to facilitate the task of object detection using pre-trained or custom-trained YOLO-NAS models.

    Example:
        ```python
        from ultralytics import NAS

        model = NAS('yolo_nas_s')
        results = model.predict('ultralytics/assets/bus.jpg')
        ```

    Attributes:
        model (str): Path to the pre-trained model or model name. Defaults to 'yolo_nas_s.pt'.

    Note:
        YOLO-NAS models only support pre-trained models. Do not provide YAML configuration files.
    c                 d    t        |      j                  dvsJ d       t        |   |d       y)zMInitializes the NAS model with the provided or default 'yolo_nas_s.pt' model.)z.yamlz.ymlz0YOLO-NAS models only support pre-trained models.detect)taskN)r   suffixsuper__init__)selfmodel	__class__s     gC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\ultralytics/models/nas/model.pyr   zNAS.__init__/   s4    E{!!)::n<nn:X.    weightsr   c                 F    ddl }t        |      j                  }|dk(  rt        j                  |       _        n1|dk(  r,|j                  j                  j                  |d       _        d fd	 j
                  _	        t        j                  dg       j
                  _        t        t         j
                  j                               j
                  _        d	  j
                  _        i  j
                  _        | j
                  _        d
 j
                  _        y)zgLoads an existing NAS model weights or creates a new NAS model with pretrained weights if not provided.r   Nz.pt coco)pretrained_weightsc                     j                   S )N)r   )verboser   s    r   <lambda>zNAS._load.<locals>.<lambda>>   s	    tzzr       c                       y)NF r!   r   r   r   zNAS._load.<locals>.<lambda>A   s    er   r   )T)super_gradientsr   r   torchloadr   trainingmodelsgetfusetensorstridedict	enumerate_class_namesnamesis_fusedyamlpt_pathr   )r   r   r   r"   r   s   `    r   _loadz	NAS._load4   s     	g%%U?G,DJr\(1188<<WY_<`DJ9

!LL".

	$***A*A BC

+



$

"

r   c                 4    t        | j                  ||d      S )z
        Logs model info.

        Args:
            detailed (bool): Show detailed information about model.
            verbose (bool): Controls verbosity.
        i  )detailedr   imgsz)r   r   )r   r4   r   s      r   infozNAS.infoF   s     $**xPSTTr   c                      dt         t        diS )zQReturns a dictionary mapping tasks to respective predictor and validator classes.r   )	predictor	validator)r   r	   )r   s    r   task_mapzNAS.task_mapP   s     <PQQr   )zyolo_nas_s.pt)returnN)FT)__name__
__module____qualname____doc__r   r   strr2   r6   propertyr:   __classcell__)r   s   @r   r   r      sN    */
 #S # # #"U R Rr   r   )r?   pathlibr   r#   ultralytics.engine.modelr   ultralytics.utils.torch_utilsr   r   predictr   valr	   r   r!   r   r   <module>rH      s,   
   * J ! :R% :Rr   