U
    rhC                     @  sX   d dl mZ d dlZd dlZd dlmZ d dlmZ ddddd	Z	G d
d deZ
dS )    )annotationsN)Base)expectznp.ndarray | Nonez
np.ndarray)optionalreturnc                 C  s    | d krt dS t dS d S )NFT)nparray)r    r	   R/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/optionalhaselement.py-optional_has_element_reference_implementation   s    
r   c                   @  s0   e Zd ZeddddZeddddZdS )OptionalHasElementNone)r   c                  C  s   t ddddgt j} tjjtjjdgd}tj	|}||fD ]N}tjj
ddgdgd	}t| }d
||krtdnd }t|| g|g|g|d qDd S )N            Z	elem_typeshaper   optional_inputoutputinputsoutputstest_optional_has_element_Ztensor_inputr   r   input_type_protosname)r   r   ZastypeZfloat32onnxhelpermake_tensor_type_protoTensorProtoFLOATmake_optional_type_proto	make_noder   r   )r   tensor_type_protooptional_type_protor   noder   	test_namer	   r	   r
   export   s4      zOptionalHasElement.exportc            
   	   C  s   d } t jjt jjg d}t j|}||fD ]}ddd d}| D ]\}}||krZ|rZqDt jjd|d krng n|gdgd}t| }d| ||krd	nd
 }	t	||r| gng |g|r|gng |	d qDq,d S )Nr   r    )emptyZempty_no_input_nameZempty_no_inputr   r   r   r   Z_optional_inputZ_tensor_inputr   )
r   r   r   r    ZINT32r"   itemsr#   r   r   )
r   r$   r%   Zinput_type_protoZinput_name_optionsZtest_name_surfixZ
input_namer&   r   r'   r	   r	   r
   export_empty5   sF     	zOptionalHasElement.export_emptyN)__name__
__module____qualname__staticmethodr(   r,   r	   r	   r	   r
   r      s   r   )
__future__r   Znumpyr   r   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   r   r   r	   r	   r	   r
   <module>   s   	