# Module: tensorrt_engine

## Purpose

TensorRT-based inference engine — high-performance GPU inference with CUDA memory management and ONNX-to-TensorRT model conversion.

## Public Interface

### Class: TensorRTEngine (extends InferenceEngine)

| Method | Signature | Description |
|--------|-----------|-------------|
| `__init__` | `(bytes model_bytes, int batch_size=4, **kwargs)` | Deserializes TensorRT engine from bytes, allocates CUDA input/output memory, creates execution context and stream |
| `get_input_shape` | `() -> tuple` | Returns `(height, width)` from input tensor shape |
| `get_batch_size` | `() -> int` | Returns batch size |
| `run` | `(input_data) -> list` | Async H2D copy → execute → D2H copy, returns output as numpy array |
| `get_gpu_memory_bytes` | `(int device_id) -> int` | Static. Returns total GPU memory in bytes (default 2GB if unavailable) |
| `get_engine_filename` | `(int device_id) -> str` | Static. Returns engine filename with compute capability and SM count: `azaion.cc_{major}.{minor}_sm_{count}.engine` |
| `convert_from_onnx` | `(bytes onnx_model) -> bytes or None` | Static. Converts ONNX model to TensorRT serialized engine. Uses 90% of GPU memory as workspace. Enables FP16 if supported. |

## Internal Logic

- Input shape defaults to 1280×1280 for dynamic dimensions.
- Output shape defaults to 300 max detections × 6 values (x1, y1, x2, y2, conf, cls) for dynamic dimensions.
- `run` uses async CUDA memory transfers with stream synchronization.
- `convert_from_onnx` uses explicit batch mode, configures FP16 precision when GPU supports it.
- Default batch size is 4 (vs OnnxEngine's 1).

## Dependencies

- **External**: `tensorrt`, `pycuda.driver`, `pycuda.autoinit`, `pynvml`, `numpy`
- **Internal**: `inference_engine` (base class), `constants_inf` (logging)

## Consumers

- `inference` — instantiated when compatible NVIDIA GPU is found; also calls `convert_from_onnx` and `get_engine_filename`

## Data Models

None (wraps TensorRT runtime objects).

## Configuration

- Engine filename is GPU-specific (compute capability + SM count).
- Workspace memory is 90% of available GPU memory.

## External Integrations

None directly — model bytes provided by caller.

## Security

None.

## Tests

None found.
