
    h?                        S SK Jr  S SKJr  S SKJr  S SKrS SKJr  S SK	J
r
  S SKJr  S SKJr  S S	KJr  S
SKJr  S
SKJr   " S S\5      rg)    )annotations)Path)AnyN)Model)DEFAULT_CFG_DICT)attempt_download_asset)
torch_load)
model_info   )NASPredictor)NASValidatorc                  d   ^  \ rS rSrSrSS	U 4S jjjrS
SS jjrSSS jjr\SS j5       r	Sr
U =r$ )NAS   a_  
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.
c                b   > [        U5      R                  S;  d   S5       e[        TU ]  USS9  g)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__)selfmodel	__class__s     V/home/james-whalen/.local/lib/python3.13/site-packages/ultralytics/models/nas/model.pyr   NAS.__init__-   s4    E{!!)::n<nn:X.    c                :  ^  SSK n[        U5      R                  nUS:X  a  [        [	        U5      5      T l        O/US:X  a)  UR                  R                  R                  USS9T l        U 4S jnT R
                  R                  T R
                  l
        UT R
                  l	        SU 4S jjT R
                  l        [        R                  " S	/5      T R
                  l        [        [!        T R
                  R"                  5      5      T R
                  l        S
 T R
                  l        0 T R
                  l        UT R
                  l        ST R
                  l        0 [.        ET R0                  ET R
                  l        T R
                  R5                  5         g)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                :   > TR                   R                  U 5      $ )z%Ignore additional __call__ arguments.)r   _original_forward)xargskwargsr   s      r   new_forwardNAS._load.<locals>.new_forwardC   s    :://22r   c                   > TR                   $ Nr   )verboser   s    r   <lambda>NAS._load.<locals>.<lambda>K   s	    tzzr       c                     g)NF r2   r   r   r.   r/   N   s    er   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   weightsr   r3   r   r(   s   `     r   _load	NAS._load2   s    	g%%U?#$:7$CDDJr\(1188<<WY_<`DJ	3 (,zz'9'9

$(

 :

!LL".

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

+



$

"

@-@@



r   c                ,    [        U R                  XSS9$ )z
Log model information.

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

Returns:
    (dict[str, Any]): Model information dictionary.
i  )detailedr-   imgsz)r
   r   )r   rI   r-   s      r   infoNAS.infoU   s     $**xPSTTr   c                     S[         [        S.0$ )zPReturn a dictionary mapping tasks to respective predictor and validator classes.r   )	predictor	validator)r   r   )r   s    r   task_mapNAS.task_mapb   s     <PQQr   r,   )zyolo_nas_s.pt)r   strreturnNoner+   )rE   rR   rS   rT   )FT)rI   boolr-   rU   rS   zdict[str, Any])rS   zdict[str, dict[str, Any]])__name__
__module____qualname____firstlineno____doc__r   rF   rK   propertyrP   __static_attributes____classcell__)r   s   @r   r   r      s4    0/ /
!FU R Rr   r   )
__future__r   pathlibr   typingr   r9   ultralytics.engine.modelr   ultralytics.utilsr   ultralytics.utils.downloadsr   ultralytics.utils.patchesr	   ultralytics.utils.torch_utilsr
   predictr   valr   r   r2   r   r   <module>rh      s8    #    * . > 0 4 ! QR% QRr   