
    /j                        d dl mZ d dlZd dlmZmZ d dlmZ d dlZ	d dl
Z
d dlmZmZmZmZ d dlmZmZ ddlmZ  G d	 d
e          ZdS )    )annotationsN)OrderedDict
namedtuple)Path)	IS_JETSONLINUXLOGGERPYTHON_VERSION)check_requirementscheck_version   )BaseBackendc                  "    e Zd ZdZddZdd
ZdS )TensorRTBackenda  NVIDIA TensorRT inference backend for GPU-accelerated deployment.

    Loads and runs inference with NVIDIA TensorRT serialized engines (.engine files). Supports both TensorRT 7-9 and
    TensorRT 10+ APIs, dynamic input shapes, FP16 precision, and DLA core offloading.
    weight
str | PathreturnNonec                   t          j        d| d           t          r$t          t          d          rt          d           	 ddl}n*# t          $ r t          rt          d           ddl}Y nw xY wt          |j	        dd	
           t          |j	        dd           | j
        j        dk    rt          j
        d          | _
        t          dd          }|                    |j        j                  }t!          |d          5 }|                    |          5 }	 t$                              |                    d          d          }t+          j        |                    |                              d                    }|                    dd          }	|	t%          |	          |_        n'# t4          $ r |                    d           d}Y nw xY w|                    |                                          }
|                     |           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   	 |
                                | _        n(# t@          $ r}t          j!        d           |d}~ww xY wtE                      | _#        g | _$        d| _%        d| _&        tO          |
d           | _(        | j(        rtS          |
j*                  ntS          |
j+                  }|D ]}| j(        r|
,                    |          }|-                    |
.                    |                    }|
/                    |          |j0        j1        k    }te          |
3                    |                    }|r)te          |
4                    |d          d                   nd}n|
5                    |          }|-                    |
6                    |                    }|
7                    |          }te          |
8                    |                    }|r)te          |
9                    d|          d                   nd}|rad|v rEd	| _&        | j(        r| j        :                    ||           n| j        ;                    ||           |tx          j=        k    rd	| _%        n| j$        >                    |           | j(        r'te          | j        3                    |                    n&te          | j        8                    |                    }t          j?        ty          j@        ||                    A                    | j
                  } |||||t%          |B                                                    | j#        |<   tE          d | j#        C                                D                       | _D        |
| _E        dS ) zLoad an NVIDIA TensorRT engine from a serialized .engine file.

        Args:
            weight (str | Path): Path to the .engine file with optional embedded metadata.
        zLoading z for TensorRT inference...z<=3.8.10znumpy==1.23.5r   Nztensorrt>7.0.0,!=10.1.0z>=7.0.0T)hardz!=10.1.0z5https://github.com/ultralytics/ultralytics/pull/14239)msgcpuzcuda:0Binding)namedtypeshapedataptrrb   little)	byteorderzutf-8dlaz?TensorRT model exported with a different version than expected
Fnum_bindings   r   )r   c              3  .   K   | ]\  }}||j         fV  d S )N)r   ).0nds      e/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/ultralytics/nn/backends/tensorrt.py	<genexpr>z-TensorRTBackend.load_model.<locals>.<genexpr>q   s,      (V(V1!QU(V(V(V(V(V(V    )Fr	   infor   r   r
   r   tensorrtImportErrorr   __version__devicetypetorchr   LoggerINFOopenRuntimeint
from_bytesreadjsonloadsdecodegetDLA_coreUnicodeDecodeErrorseekdeserialize_cuda_engineapply_metadatacreate_execution_contextcontext	Exceptionerrorr   bindingsoutput_namesfp16dynamichasattris_trt10rangenum_io_tensorsr$   get_tensor_namenptypeget_tensor_dtypeget_tensor_modeTensorIOModeINPUTtupleget_tensor_shapeget_tensor_profile_shapeget_binding_nameget_binding_dtypebinding_is_inputget_binding_shapeget_profile_shapeset_input_shapeset_binding_shapenpfloat16append
from_numpyemptytodata_ptritemsbinding_addrsmodel)selfr   trtr   loggerfruntimemeta_lenmetadatar#   engineenumir   r   is_inputr   profile_shapeims                       r+   
load_modelzTensorRTBackend.load_model   s
    	AvAAABBB 	0~zBB 	0///	#""""" 	# 	# 	# >"#<===""""""	#
 	coyt<<<<coz7noooo;u$$,x00DKY(QRRCJO,, &$ 	*1ckk&&9&9 	*W >>!&&))x>HH:affX&6&6&=&=g&F&FGGll5$//?'*3xxG$%      q			  44QVVXX>>F)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*	!::<<DLL 	 	 	L[\\\G	
 $	#FN;;;.2m[eF)***vGZA[A[  	V  	VA} _--a00

6#:#:4#@#@AA!11$773;K;QQf55d;;<<V^ hf&E&EdA&N&Nq&Q R R Rdh..q11

6#;#;A#>#>??!22155f66q99::LT ^f&>&>q!&D&DQ&G H H HZ^ 
/;;#'DL} I44T=IIII66q-HHHBJ&& $DI!((... =>dl33D99:::4<99!<<== 
 !"(5">">">??BB4;OOB")'$ub#bkkmmBTBT"U"UDM$((V(V@S@S@U@U(V(V(VVV


s   A
 
$A10A1
H> H'"BF87H'8!GH'G?H'H>'H+	+H>.H+	/H>>II
I$ $
J	.JJ	rx   torch.Tensorlist[torch.Tensor]c                     j         r|j         j        d         j        k    r j        r j                            d|j                    j        d                             |j                   j        d<    j        D ]L} j        |         j        	                    t           j                            |                               Mn։ j                            d          } j                            ||j                    j        d                             |j                   j        d<    j        D ]f} j                            |          } j        |         j        	                    t           j                            |                               g j        d         j        }|j        |k    s!J d|j         d j         rdnd d|             t!          |                                           j        d<    j                            t)           j                                                              fdt-           j                  D             S )	a  Run NVIDIA TensorRT inference with dynamic shape handling.

        Args:
            im (torch.Tensor): Input image tensor in BCHW format on the CUDA device.

        Returns:
            (list[torch.Tensor]): Model predictions as a list of tensors on the CUDA device.
        images)r   zinput size  >znot equal toz max model size c                4    g | ]}j         |         j        S  )rI   r   )r(   xrk   s     r+   
<listcomp>z+TensorRTBackend.forward.<locals>.<listcomp>   s#    III!a %IIIr-   )rL   r   rI   rN   rF   r_   _replacerJ   r   resize_rW   rX   rj   get_binding_indexr`   r]   r9   rg   ri   
execute_v2listvaluessorted)rk   rx   r   ru   ss   `    r+   forwardzTensorRTBackend.forwardt   s>    < 	_BHh(?(EEE} _,,Xrx@@@*.-*A*J*JQSQY*J*Z*Zh' - a aDM$',44U4<;X;XY];^;^5_5_````a J00::..q"(;;;*.-*A*J*JQSQY*J*Z*Zh' - _ _D
44T::AM$',44U4<;Y;YZ[;\;\5]5]^^^^M(#)x1}}}sBHssdl7^ssP^sspqss}}}'*2;;=='9'98$T%7%>%>%@%@ A ABBBIIIIvd6G/H/HIIIIr-   N)r   r   r   r   )rx   rz   r   r{   )__name__
__module____qualname____doc__ry   r   r   r-   r+   r   r      sQ         Y Y Y YvJ J J J J Jr-   r   )
__future__r   r<   collectionsr   r   pathlibr   numpyra   r4   ultralytics.utilsr   r   r	   r
   ultralytics.utils.checksr   r   baser   r   r   r-   r+   <module>r      s    # " " " " "  / / / / / / / /            F F F F F F F F F F F F F F F F F F F F      ~J ~J ~J ~J ~Jk ~J ~J ~J ~J ~Jr-   