Ë
    FêñiO  ã                  óš   — d dl mZ d dlmZ d dl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)é    )Úannotations)ÚPath)ÚAnyN)ÚModel)ÚDEFAULT_CFG_DICT)Úattempt_download_asset)Ú
torch_load)Ú
model_infoé   )ÚNASPredictor)ÚNASValidatorc                  óL   ‡ — e Zd ZdZddˆ fd„Zdd	d„Zd
dd„Zed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.
    c                ó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__)ÚselfÚmodelÚ	__class__s     €ú^/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/ultralytics/models/nas/model.pyr   zNAS.__init__,   s4   ø€ ä�E‹{×!Ñ!Ð):Ñ:ÐnÐ<nÓnÐ:Ü‰Ñ˜ XÐÕ.ó    c                óF  ‡ — 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
                  _        t+        |«      ‰ j
                  _        d‰ j
                  _        i t0        ¥‰ j2                  ¥‰ j
                  _        ‰ j
                  j7                  «        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   ø€ ¨t¯z©z€ 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ÚstrÚpt_pathr   r   Ú	overridesr$   Úeval)r   Úweightsr   r.   r   r&   s   `     r   Ú_loadz	NAS._load1   s"  ø€ ó 	ä�g“×%Ñ%ˆØ�UŠ?Ü#Ô$:¸7Ó$CÓDˆD�JØ�rŠ\Ø(×1Ñ1×8Ñ8×<Ñ<¸WÐY_Ð<Ó`ˆDŒJô	3ð (,§z¡z×'9Ñ'9ˆ�
‰
Ô$Ø(ˆ�
‰
Ôô :ˆ�
‰
ŒÜ!ŸL™L¨"¨Ó.ˆ�
‰
ÔÜ¤	¨$¯*©*×*AÑ*AÓ BÓCˆ�
‰
ÔÙ+ˆ�
‰
ÔØˆ�
‰
ŒÜ  ›\ˆ�
‰
ÔØ"ˆ�
‰
ŒØ@Ô-Ð@°·±Ð@ˆ�
‰
ŒØ�
‰
�‰Õr   c                ó4   — t        | j                  ||d¬«      S )a  Log model information.

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

        Returns:
            (tuple): Model information as a tuple of (layers, parameters, gradients, GFLOPs).
        i€  )Údetailedr)   Úimgsz)r
   r   )r   rD   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.pt)r   r=   ÚreturnÚNoner(   )rA   r=   rK   rL   )FT)rD   Úboolr)   rM   rK   zdict[str, Any])rK   zdict[str, dict[str, Any]])
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rB   rF   ÚpropertyrJ   Ú__classcell__)r   s   @r   r   r      s/   ø„ ñö./ô
 ôD
Uð òRó ôRr   r   )Ú
__future__r   Úpathlibr   Útypingr   r4   Úultralytics.engine.modelr   Úultralytics.utilsr   Úultralytics.utils.downloadsr   Úultralytics.utils.patchesr	   Úultralytics.utils.torch_utilsr
   Úpredictr   Úvalr   r   r-   r   r   ú<module>r^      s8   ðõ #å Ý ã å *Ý .Ý >Ý 0Ý 4å !Ý ôNRˆ%õ NRr   