U
    qhB                     @  s4   d dl mZ d dlZd dlmZ G dd deZdS )    )annotationsN)OpRunc                   @  s   e Zd ZdddZdS )	MaxUnpoolNc                 C  s  t |jd }|dkr&td| d|p.| j}|p8| j}|pB| j}|d krZdd |D }|d kr|dd tt |d D }tjt |jftj	d}|jd	 |d	< |jd
 |d
< tt |D ]F}	|j|	d  d
 ||	  ||	 |t ||	    ||	  ||	d < q|d kr|}
n|}
t
|j}tjt
|f|jd}| }| }t|D ]}|| ||| < qT|t|}tj|
|jd}tdd |D }|||< |fS )N      zUnsupported pooling size z for operator MaxUnpool.c                 S  s   g | ]}d qS )    .0dr   r   D/tmp/pip-unpacked-wheel-xnis5xre/onnx/reference/ops/op_max_unpool.py
<listcomp>   s     z"MaxUnpool._run.<locals>.<listcomp>c                 S  s   g | ]}d qS )r   r   r	   r   r   r   r      s     )dtyper   r   c                 s  s   | ]}t d |V  qdS )r   N)slice)r
   ir   r   r   	<genexpr>8   s     z!MaxUnpool._run.<locals>.<genexpr>)lenshapeNotImplementedErrorkernel_shapepadsstridesrangenpemptyZint64prodzerosr   flattenZreshapetuple)selfXindicesZoutput_shaper   r   r   Zpooling_dimsZinferred_shapeZdimr   Ztotal_elementsYZI_dataZX_dataZcur_elemresZslicesr   r   r   _run   sH    




zMaxUnpool._run)NNNN)__name__
__module____qualname__r$   r   r   r   r   r      s
          r   )
__future__r   Znumpyr   Zonnx.reference.op_runr   r   r   r   r   r   <module>   s   