
    |h!                         d dl mZ d dlmZmZ d dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d	d
lmZ d	dlmZ  G d de      Zy)    )Path)AnyDictN)Model)DEFAULT_CFG_DICT)attempt_download_asset)
torch_load)
model_info   )NASPredictor)NASValidatorc            	            e Zd ZdZddeddf fdZddeddfdZdded	edeee	f   fd
Z
edeeeee	f   f   f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.

    Attributes:
        model (torch.nn.Module): The loaded YOLO-NAS model.
        task (str): The task type for the model, defaults to 'detect'.
        predictor (NASPredictor): The predictor instance for making predictions.
        validator (NASValidator): The validator instance for model validation.

    Methods:
        info: Log model information and return model details.

    Examples:
        >>> from ultralytics import NAS
        >>> model = NAS("yolo_nas_s")
        >>> results = model.predict("ultralytics/assets/bus.jpg")

    Notes:
        YOLO-NAS models only support pre-trained models. Do not provide YAML configuration files.
    modelreturnNc                 d    t        |      j                  dvsJ d       t        |   |d       y)z<Initialize the NAS model with the provided or default model.>   .yml.yamlz0YOLO-NAS models only support pre-trained models.detect)taskN)r   suffixsuper__init__)selfr   	__class__s     [/var/www/html/test/engine/venv/lib/python3.12/site-packages/ultralytics/models/nas/model.pyr   zNAS.__init__+   s4    E{!!)::n<nn:X.    weightsc                 4    ddl }t        |      j                  }|dk(  rt        t	        |             _        n1|dk(  r,|j                  j                  j                  |d       _         fd} j
                  j                   j
                  _
        | j
                  _	        d fd	 j
                  _        t        j                  d	g       j
                  _        t        t!         j
                  j"                               j
                  _        d
  j
                  _        i  j
                  _        | j
                  _        d j
                  _        i t.         j0                   j
                  _         j
                  j5                          y)z
        Load an existing NAS model weights or create a new NAS model with pretrained weights.

        Args:
            weights (str): Path to the model weights file or model name.
            task (str, optional): Task type for the model.
        r   Nz.pt coco)pretrained_weightsc                 :    j                   j                  |       S )z%Ignore additional __call__ arguments.)r   _original_forward)xargskwargsr   s      r   new_forwardzNAS._load.<locals>.new_forwardA   s    :://22r   c                     j                   S N)r   )verboser   s    r   <lambda>zNAS._load.<locals>.<lambda>I   s    tzz r       c                       y)NF r/   r   r   r,   zNAS._load.<locals>.<lambda>L   s    r   r   )T)super_gradientsr   r   r	   r   r   trainingmodelsgetforwardr$   fusetorchtensorstridedict	enumerate_class_namesnamesis_fusedyamlpt_pathr   r   	overridesr&   eval)r   r   r   r0   r   r(   s   `     r   _loadz	NAS._load0   s    	g%%U?#$:7$CDDJr\(1188<<WY_<`DJ	3 (,zz'9'9

$(

 :

!LL".

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

+



$

"

@-@@



r   detailedr+   c                 4    t        | j                  ||d      S )z
        Log model information.

        Args:
            detailed (bool): Show detailed information about model.
            verbose (bool): Controls verbosity.

        Returns:
            (Dict[str, Any]): Model information dictionary.
        i  )rC   r+   imgsz)r
   r   )r   rC   r+   s      r   infozNAS.infoS   s     $**xPSTTr   c                      dt         t        diS )zPReturn a dictionary mapping tasks to respective predictor and validator classes.r   )	predictor	validator)r   r   )r   s    r   task_mapzNAS.task_map`   s     <PQQr   )zyolo_nas_s.ptr*   )FT)__name__
__module____qualname____doc__strr   rB   boolr   r   rF   propertyrJ   __classcell__)r   s   @r   r   r      s    0/c / /
!S ! !FUT UD UDcN U R$sDcN23 R Rr   r   )pathlibr   typingr   r   r6   ultralytics.engine.modelr   ultralytics.utilsr   ultralytics.utils.downloadsr   ultralytics.utils.patchesr	   ultralytics.utils.torch_utilsr
   predictr   valr   r   r/   r   r   <module>r\      s5       * . > 0 4 ! QR% QRr   