o
    oi                     @  sp   d dl mZ d dlmZmZmZ d dlmZ d dlmZ	 d dl
mZmZ ddgZG dd deeZdddZdS )    )annotations)AnyOptionalUnion)onnx)onnxruntime)	ONNXMixinONNXRuntimeMixin
ONNXModuleloadc                      sZ   e Zd ZdZ					d"d#ddZ	d$d% fddZd& fddZd'd( fd d!Z  ZS ))r
   a  ONNXModule to wrap an ONNX operator.

    Args:
        arg: A variable number of ONNX models (either ONNX ModelProto objects or file paths).
            For Hugging Face-hosted models, use the format 'hf://model_name'. Valid `model_name` can be found on
            https://huggingface.co/kornia/ONNX_models. Or a URL to the ONNX model.
        providers: A list of execution providers for ONNXRuntime
            (e.g., ['CUDAExecutionProvider', 'CPUExecutionProvider']).
        session_options: Optional ONNXRuntime session options for optimizing the session.
        cache_dir: The directory where ONNX models are cached locally (only for downloading from HuggingFace).
            Defaults to None, which will use a default `kornia.config.hub_onnx_dir` directory.
        target_ir_version: The target IR version to convert to.
        target_opset_version: The target OPSET version to convert to.

    NopUnion[onnx.ModelProto, str]	providersOptional[list[str]]session_optionsOptional[ort.SessionOptions]	cache_dirOptional[str]target_ir_versionOptional[int]target_opset_versionreturnNonec                 C  sP   |  ||| _|d us|d ur| j| j||d| _| j||d}| j|d d S )N)r   r   )r   r   )session)_load_opr   _onnx_version_conversioncreate_sessionset_session)selfr   r   r   r   r   r   r    r   F/home/ubuntu/.local/lib/python3.10/site-packages/kornia/onnx/module.py__init__.   s   	zONNXModule.__init__list[str] | None
Any | Noneort.InferenceSessionc                   s   t  | j||S N)super_create_sessionr   )r   r   r   	__class__r   r    r   ?   s   zONNXModule.create_session	file_pathstrkwargsr   c                   s   t  j| j|fi |S r%   )r&   _exportr   )r   r*   r,   r(   r   r    exportD   s   zONNXModule.exportadditional_metadataOptional[list[tuple[str, str]]]onnx.ModelProtoc                   s   t  | j|S r%   )r&   _add_metadatar   )r   r/   r(   r   r    add_metadataG   s   zONNXModule.add_metadata)NNNNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )NN)r   r"   r   r#   r   r$   )r*   r+   r,   r   r   r   r%   )r/   r0   r   r1   )	__name__
__module____qualname____doc__r!   r   r.   r3   __classcell__r   r   r(   r    r
      s    
model_namer   r   c                 C  s   t | S )a  Load an ONNX model from either a file path or HuggingFace.

    The loaded model is an ONNXModule object, of which you may run the model with
    the `__call__` method, with less boilerplate.

    Args:
        model_name: The name of the model to load. For Hugging Face-hosted models,
            use the format 'hf://model_name'. Valid `model_name` can be found on
            https://huggingface.co/kornia/ONNX_models. Or a URL to the ONNX model.

    )r
   )r9   r   r   r    r   K   s   N)r9   r   r   r
   )
__future__r   typingr   r   r   kornia.core.externalr   r   ortkornia.core.mixin.onnxr   r	   __all__r
   r   r   r   r   r    <module>   s   .