o
    Xi                     @  sj   d Z ddlmZ ddlmZmZmZmZ ddlm	Z	 er ddlZ
eeeee f  ZG dd de	jZdS )z,Convenience methods for constructing the IR.    )annotations)TYPE_CHECKINGAnyOptionalSequence)tapeNc                      s,   e Zd ZdZdddZd fddZ  ZS )Buildera  An extension of the tape that provides a more convenient API for constructing the IR.

    Example:
        >>> from onnxscript import ir
        >>> from onnxscript.ir import _tape
        >>> op = _tape.Builder()
        >>> input = ir.Value(name="input", type=ir.TensorType(ir.DataType.FLOAT), shape=ir.Shape((1, 2)))
        >>> relu_val = op.Relu(input, _name="relu_node", _domain="", _version=18, _outputs=["relu_out"])

    Note: When passing `_name`, ensure it is unique to avoid duplicate node names.
    op_typestrreturnr   c                   s    fddS )Nc                    s     | |S )N)
_make_node)argskwargsr	   self G/home/ubuntu/.local/lib/python3.10/site-packages/onnxscript/ir/_tape.py<lambda>!   s    z%Builder.__getattr__.<locals>.<lambda>r   )r   r	   r   r   r   __getattr__    s   zBuilder.__getattr__inputsSequence[ir.Value]r   dict[str, Any]c              	     s   | dd}| dd }| dd}| dd }t|tr"t|}n	t|ts)J |}|dkrGt j||||||d}	t|trE|d |	_|	S t j|||||||d	}
t|trft	|
|D ]\}	}||	_q^|
S )
N_domain _version_outputs   _name)r   
attributesdomainversionnamer   )r   r   r   r    r!   num_outputs)
pop
isinstancer   lenintsuperopr!   op_multi_outzip)r   r	   r   r   r   r    outputsr!   r"   valuevalues	__class__r   r   r   #   sB   




	zBuilder._make_node)r	   r
   r   r   )r	   r
   r   r   r   r   )__name__
__module____qualname____doc__r   r   __classcell__r   r   r.   r   r      s    
r   )r3   
__future__r   typingr   r   r   r   onnx_irr   irsettupler
   r&   
UsedOpsetsTaper   r   r   r   r   <module>   s   