o
    Xi
                     @  sj   d dl mZ d dlmZ d dlZd!ddZd"d
dZd#ddZd$ddZd%ddZ	d&ddZ
d'dd ZdS )(    )annotations)AnyNdstrreturnc                 C  s   | dkrdS | S )Nai.onnx  r   r	   r	   J/home/ubuntu/.local/lib/python3.10/site-packages/onnxscript/utils/utils.pynormalize_domain
   s   r   boolc                 C  s   t | dkS )Nr   )r   r
   r	   r	   r   is_onnx_domain   s   r   nodeonnx.NodeProtoop_typec                 C  s   t | jo	| j|kS N)r   domainr   )r   r   r	   r	   r   
is_onnx_op      r   c                 C  s   t dd | jD S )Nc                 s  s(    | ]}| d pt|jdkV  qdS )gr   N)HasFieldlengraphs).0attrr	   r	   r   	<genexpr>   s   & z%is_control_flow_op.<locals>.<genexpr>)any	attribute)r   r	   r	   r   is_control_flow_op   r   r   	attr_namedefaultr   c                   sN    fdd| j D }t|dkrtd  t|dk r|S tj|d S )Nc                   s   g | ]	}|j  kr|qS r	   )name)r   xr    r	   r   
<listcomp>   s    z'get_node_attr_value.<locals>.<listcomp>   z'Node has multiple attributes with name r   )r   r   
ValueErroronnxhelperget_attribute_value)r   r    r!   matchingr	   r$   r   get_node_attr_value   s   r,   initializeronnx.TensorProtoonnx.TypeProtoc                 C  s6   t  }| j|j_|jjj}| jD ]}|| _	q|S r   )
r(   	TypeProto	data_typetensor_type	elem_typeshapedimdimsadd	dim_value)r-   typer6   r5   r	   r	   r   get_initializer_type#   s   


r:   r"   onnx.TensorProto | Nonec                 C  s  | j dks| jdvst| jdkrd S | jd }|jrd S |j}tj|}t	|tj
r.|S |dkr<tj
j}g }|g}nH|dkrJtj
j}g }|g}n:|dkrXtj
j}g }|g}n,|dkrftj
j}t|g}n|d	krttj
j}t|g}n|d
krtj
j}t|g}nd S tj||||S )NConstant>   r   r   r&   r   	value_intvalue_floatvalue_string
value_intsvalue_floatsvalue_strings)r   r   r   r   ref_attr_namer"   r(   r)   r*   
isinstanceTensorProtoINT64FLOATSTRINGmake_tensor)r   r"   r   r    valuedtyper4   r	   r	   r   get_constant_node_value,   sD   


rL   )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.   r   r/   )r   r   r"   r   r   r;   )
__future__r   typingr   r(   r   r   r   r   r,   r:   rL   r	   r	   r	   r   <module>   s   





		