
    bIg                    F    d dl mZ d dlZd dlmZ d Zd Z G d de      Zy)    )annotationsN)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(  rE|r!t        j                  |
|df      |z   }|g|}~t        j                  |
|ddf      |z   }|g|}|dk(  rE|r!t        j                  |
d|f      |z   }|g|}t        j                  |
d|df      |z   }|g|}t        j                  |
d|f      |z   }|g|} t        j                  ||rd      S 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/answerous/venv/lib/python3.12/site-packages/onnx/reference/ops/op_affine_grid.pyconstruct_original_gridr"      s   	NaE)$JWWY'(M"9- 0XA(Q,'DED		%t,A>DMED		%t,A!8JJq8Q-0:=!" 3] 3JJq8Q"23j@!" 3] 3AXJJq1h-0:=!" 3] 3JJq1h"23j@!" 3] 3

1q(m,z9A//M708 88MU::::    c                   | 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      }	|	j                  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      }	|	j                  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_transformr8   .   s    	HGH!#%mm68{x1},,+111h1}}#%<<JJ)AE8+<=$
  -
 zz",,vy9Aq!V;LM{{2::&&!&&!+++%mm68{x1},,.441a1}}#%<<JJ)AEAIx+@A$
  -
 zz",,vy9Aq!Q;OP{{2::&&r#   c                      e Zd ZddZy)
AffineGridNc                b    |xs | j                   }|^}}}t        ||      }t        ||      }|fS N)r   r"   r8   )selfthetasizer   _r   r   r5   s           r!   _runzAffineGrid._runV   s=    %;););1y/	=I%e];wr#   r<   )__name__
__module____qualname__rA    r#   r!   r:   r:   U   s    r#   r:   )	
__future__r   numpyr   onnx.reference.op_runr   r"   r8   r:   rE   r#   r!   <module>rI      s(    #  ' ;F$'N r#   