o
    2hU                     @   s   d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	 G dd dej
Zedd	d
gZG dd deej
ZG dd deZejfddZdS )z(Utilities for collecting TFLite metrics.    N)Text)converter_error_data_pb2)metricsc                   @   s   e Zd ZdZdZdZdZdS )	Componentz5Enum class defining name of the converter components.PREPARE_TF_MODELCONVERT_TF_TO_TFLITE_MODELOPTIMIZE_TFLITE_MODELN)__name__
__module____qualname____doc__r   r   r    r   r   _/var/www/html/chatgem/venv/lib/python3.10/site-packages/tensorflow/lite/python/convert_phase.pyr      s
    r   SubComponentItemname	componentc                   @   s   e Zd ZdZdd Zedd Zedd Zedd	Z	ed
e
jZede
jZede
jZede
jZede
jZede
jZede
jZede
jZede
jZede
jZede
jZede
jZede
jZede
jZede
jZede
jZd	S )SubComponentzEnum class defining name of the converter subcomponents.

  This enum only defines the subcomponents in Python, there might be more
  subcomponents defined in C++.
  c                 C      | j jS Nvaluer   selfr   r   r   __str__1   s   zSubComponent.__str__c                 C   r   r   r   r   r   r   r   r   4      zSubComponent.namec                 C   r   r   )r   r   r   r   r   r   r   8   r   zSubComponent.componentUNSPECIFIEDNVALIDATE_INPUTSLOAD_SAVED_MODELFREEZE_SAVED_MODELCONVERT_KERAS_TO_SAVED_MODEL)CONVERT_CONCRETE_FUNCTIONS_TO_SAVED_MODELFREEZE_KERAS_MODELFREEZE_CONCRETE_FUNCTIONOPTIMIZE_TF_MODEL+CONVERT_GRAPHDEF_USING_DEPRECATED_CONVERTERCONVERT_GRAPHDEFCONVERT_SAVED_MODELCONVERT_JAX_HLO#QUANTIZE_USING_DEPRECATED_QUANTIZER	CALIBRATEQUANTIZESPARSIFY)r	   r
   r   r   r   propertyr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r   r$   r%   r&   r'   r   r(   r)   r*   r+   r   r   r   r   r   *   sf    


r   c                       s8   e Zd ZdZ fddZdejfddZdd Z  Z	S )	ConverterErrorz4Raised when an error occurs during model conversion.c                    s$   t t| | g | _| | d S r   )superr-   __init__errors_parse_error_message)r   message	__class__r   r   r/      s   zConverterError.__init__
error_datac                 C   s   | j | d S r   )r0   append)r   r5   r   r   r   append_error   s   zConverterError.append_errorc                 C   sN   dt jji}| D ]\}}||v r$t  }||_||_| |  dS q
dS )a  If the message matches a pattern, assigns the associated error code.

    It is difficult to assign an error code to some errrors in MLIR side, Ex:
    errors thrown by other components than TFLite or not using mlir::emitError.
    This function try to detect them by the error message and assign the
    corresponding error code.

    Args:
      message: The error message of this exception.
    zFailed to functionalize Control Flow V1 ops. Consider using Control Flow V2 ops instead. See https://www.tensorflow.org/api_docs/python/tf/compat/v1/enable_control_flow_v2.N)r   ConverterErrorData!ERROR_UNSUPPORTED_CONTROL_FLOW_V1itemserror_message
error_coder7   )r   r2   error_code_mappingpatternr<   r5   r   r   r   r1      s   
z#ConverterError._parse_error_message)
r	   r
   r   r   r/   r   r8   r7   r1   __classcell__r   r   r3   r   r-   ~   s    
r-   c                    sv    t vrtdtvrtdtjkrj krtddtjf fdddtffdd	fd
d}|S )a-  The decorator to identify converter component and subcomponent.

  Args:
    component: Converter component name.
    subcomponent: Converter subcomponent name.

  Returns:
    Forward the result from the wrapped function.

  Raises:
    ValueError: if component and subcomponent name is not valid.
  zGiven component name not foundz!Given subcomponent name not foundz+component and subcomponent name don't matchr5   c                    s,    j | _| jsj| _t }||  d S r   )r   r   subcomponentr   r   TFLiteConverterMetricsset_converter_error)r5   tflite_metrics)r   r@   r   r   report_error   s
   z#convert_phase.<locals>.report_errorr;   c                    s   t  }| |_ | d S r   )r   r8   r;   )r;   r5   )rD   r   r   report_error_message   s   z+convert_phase.<locals>.report_error_messagec                    s   t   fdd}|S )Nc               
      s   z | i |W S  t y- } z|jr |jD ]}| q|d t| |d d }~w tyA } z	t| |d d }~ww r   )r-   r0   str	Exception)argskwargsconverter_errorr5   error)funcrD   rE   r   r   wrapper   s   

z8convert_phase.<locals>.actual_decorator.<locals>.wrapper)	functoolswraps)rL   rM   )rD   rE   )rL   r   actual_decorator   s   z'convert_phase.<locals>.actual_decorator)r   
ValueErrorr   r   r   r   r8   r   )r   r@   rP   r   )r   rD   rE   r@   r   convert_phase   s   

	rR   )r   collectionsenumrN   typingr   %tensorflow.compiler.mlir.lite.metricsr   tensorflow.lite.python.metricsr   Enumr   
namedtupler   r   rG   r-   r   rR   r   r   r   r   <module>   s   T'