U
    <cp                     @   s   d dl Z d dlZd dlZd dlmZmZmZmZmZ d dl	m
Z
 ee
je
je
je
jf ZeedddZeedddZeeeef ef eegef eeeef ef d	d
dZeedddZdS )    N)AnyCallableDictListUnion)sarif)sreturnc                 C   s   t dd|  S )Nz([A-Z])z_\1)resublowerr    r   T/tmp/pip-unpacked-wheel-gikjz4vx/torch/onnx/_internal/diagnostics/infra/formatter.py_camel_case_to_snake_case   s    r   c                 C   s   |  ddS )N-_)replacer   r   r   r   kebab_case_to_snake_case   s    r   )objectconvertr	   c                    sp   t | ts| S i }|  D ]P\}} |}t |tr@t| }n"t |tr^ fdd|D }n|}|||< q|S )ag  Convert and update keys in a dictionary with "convert".

    Any value that is a dictionary will be recursively updated.
    Any value that is a list will be recursively searched.

    Args:
        object: The object to update.
        convert: The function to convert the keys, e.g. `kebab_case_to_snake_case`.

    Returns:
        The updated object.
    c                    s   g | ]}t | qS r   )_convert_key).0elemr   r   r   
<listcomp>1   s     z _convert_key.<locals>.<listcomp>)
isinstancer   itemsr   r   )r   r   Znew_dictkvZnew_kZnew_vr   r   r   r      s    



r   )attr_cls_objr	   c                 C   s"   t | }t|t}tj|ddS )N   )indent)dataclassesZasdictr   r   jsondumps)r    dictr   r   r   sarif_to_json8   s    

r'   )r#   r$   r
   typingr   r   r   r   r   Z&torch.onnx._internal.diagnostics.infrar   ZSarifLogZRunZReportingDescriptorZResultZ_SarifClassstrr   r   r   r'   r   r   r   r   <module>   s$    