U
    q±Ëh¦  ã                   @  sJ   d dl mZ d dlZd dlmZmZ G dd„ dejƒZedkrFe 	¡  dS )é    )ÚannotationsN)ÚinlinerÚparserc                   @  s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚInlinerTestc                 C  sT   t  d¡}t |¡}|jj}|  t|ƒd¡ |  |d jd¡ |  |d jd¡ d S )Naö  
            <ir_version: 8, opset_import: [ "" : 17, "local" : 1 ]>
            agraph (float[N] X) => (float[N] Y)
            {
                Y = local.foo (X)
            }

            <opset_import: [ "" : 17, "local" : 1 ], domain: "local">
            foo (x) => (y) {
                temp = Add(x, x)
                y = local.bar(temp)
            }

            <opset_import: [ "" : 17 ], domain: "local">
            bar (x) => (y) {
                y = Mul (x, x)
            }
        é   r   ÚAddé   ÚMul)	r   Úparse_modelr   Zinline_local_functionsÚgraphÚnodeÚassertEqualÚlenÚop_type)ÚselfÚmodelÚinlinedÚinlined_nodes© r   ú:/tmp/pip-unpacked-wheel-xnis5xre/onnx/test/inliner_test.pyÚ
test_basic   s    ÿ
zInlinerTest.test_basicc                 C  sœ   t  d¡}tj|dgdd}|jj}|  t|ƒd¡ |  |d jd¡ |  |d jd	¡ |j	d j}|  t|ƒd¡ |  |d jd
¡ |  |d jd¡ d S )NáA  
            <ir_version: 8, opset_import: [ "" : 17, "local" : 1 ]>
            agraph (float[N] X) => (float[N] Y)
            {
                T = local.square (X)
                Y = local.double_and_square (T)
            }

            <opset_import: [ "" : 17, "local" : 1 ], domain: "local">
            double_and_square (x) => (y) {
                double = Add(x, x)
                y = local.square(double)
            }

            <opset_import: [ "" : 17 ], domain: "local">
            square (x) => (y) {
                y = Mul (x, x)
            }
        )ÚlocalZsquareF©Úexcluder   r   r	   r   Údouble_and_squarer   ©
r   r
   r   Zinline_selected_functionsr   r   r   r   r   Z	functions©r   r   r   r   Zfunction_nodesr   r   r   Útest_selective_inlining(   s     ÿ  ÿz#InlinerTest.test_selective_inliningc                 C  sœ   t  d¡}tj|dgdd}|jj}|  t|ƒd¡ |  |d jd¡ |  |d jd	¡ |j	d j}|  t|ƒd¡ |  |d jd
¡ |  |d jd¡ d S )Nr   )r   r   Tr   r   r   r	   r   r   r   r   r   r   r   r   Útest_selective_exclusionM   s     ÿ  ÿz$InlinerTest.test_selective_exclusionN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s   %r   Ú__main__)
Ú
__future__r   ZunittestZonnxr   r   ZTestCaser   r    Úmainr   r   r   r   Ú<module>   s
   h