
    
Ng                     B    d dl Zd dlmZ d Zd Z G d de          ZdS )    N)OpRunc                    t          |           dk    }t          j        |           }t          j        |           g}t	          |           D ]\  }}|dk    r#d|dz
  z  }d}d}	t          j        ||	|          }
n%d|z  }d|dz  z   }d}	t          j        ||	|          }
|dk    rC|r t          j        |
|df          |z   }|g|}|t          j        |
|ddf          |z   }|g|}|dk    rC|r t          j        |
d|f          |z   }|g|}t          j        |
d|df          |z   }|g|}t          j        |
d|f          |z   }|g|}t          j        ||rdnd          S )	N      g       @gqh ?r      )axis)lennpzerosones	enumeratearangereshapestack)	data_sizealign_cornersis_2d
size_zerosoriginal_griddimdim_sizestepstartstopayzxs                 ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/reference/ops/op_affine_grid.pyconstruct_original_gridr!      s   	NNaE)$$JWY''(M"9-- 0 0XA(Q,'DED	%t,,AA>DMED	%t,,A!88 4Jq8Q-00:=!" 3] 3Jq8Q"233j@!" 3] 3AXX 4Jq1h-00:=!" 3] 3Jq1h"233j@!" 3] 3
1q(m,,z9A//MM8MU(9::::    c                 F   | j         dk    s
J d            |j         dk    r| j        \  }}}|dk    r|dk    sJ |j        \  }}}|dk    sJ t          j        t          j        |||z  |f                    }t          j        | |          }t          j        t          j        |d          ||||f          }	|	                    t          j                  S |j         dk    sJ | j        \  }}
}|
dk    r|dk    sJ |j        \  }}}}|dk    sJ t          j        t          j        |||z  |z  |f                    }t          j        | |          }t          j        t          j        |d          |||||
f          }	|	                    t          j                  S )Nr   z>theta_n shall have shape of (N, 2, 3) for 2D, (N, 3, 4) for 3Dr   )r   r   r      )ndimshaper   	transposer   matmulastypefloat32)theta_noriginal_grid_homoNdim_2ddim_homoHWoriginal_grid_transposedgrid_ngriddim_3dDs               r    apply_affine_transformr7   .   s    	G 	!##%m68{{x1}}}}+11h1}}}}#%<J)AE8+<==$
 $
  -
 
 z",vy99Aq!V;LMM{{2:&&&!&!++++%m68{{x1}}}}.41a1}}}}#%<J)AEAIx+@AA$
 $
  -
 
 z",vy99Aq!Q;OPP{{2:&&&r"   c                       e Zd ZddZdS )
AffineGridNc                 d    |p| j         }|^}}}t          ||          }t          ||          }|fS N)r   r!   r7   )selfthetasizer   _r   r   r4   s           r    _runzAffineGrid._runV   s@    %;);1y/	=II%e];;wr"   r;   )__name__
__module____qualname__r@    r"   r    r9   r9   U   s(             r"   r9   )numpyr   onnx.reference.op_runr   r!   r7   r9   rD   r"   r    <module>rG      sy        ' ' ' ' ' ' ;  ;  ;F$' $' $'N         r"   