
    he4                     N    S SK r S SKJr  S SKrS SKJr  S SKJr   " S S\5      r	g)    N)List)OpRun)_get_all_coordsc                       \ rS rSrS\S\4S jrS\4S jrS rS r	S r
S	 rS
 rS rS rS rS rS\4S jrS\4S jrS\4S jrS rSS jrSrg)
GridSample   lengthalign_cornersc                 P    U(       a  US-   S-  US-
  -  nU$ US-   U-  S-
  S-  nU$ )N   g       @ )selfnr	   r
   xs        [/var/www/fran/franai/venv/lib/python3.13/site-packages/onnx/reference/ops/op_grid_sample.py_gs_denormalizeGridSample._gs_denormalize   sE      Q#!,A  a%6!A%,A    c                     [         R                  " [        U5      [         R                  S9n[	        [        X5      5       H  u  nu  pgU R                  XgUS9XE'   M     U$ )Ndtype)r   r	   r
   )npzeroslenfloat32	enumeratezipr   )r   r   dimsr
   r   ivdims           r   _gs_denormalize_coordinates&GridSample._gs_denormalize_coordinates/   sO    HHSV2::.$S\2KAx''!}'UAD 3r   c                     UnX2-
  nXB:  a.  X$-
  n[        Xe-  5      nXgU-  -
  nUS-  S:X  a  X(-   nU$ X8-
  n U$ XC:  a+  XC-
  n[        Xe-  5      nXgU-  -
  nUS-  S:X  a  X8-
  nU$ X(-   nU$ )zs
Reflect by the near border till within the borders
Use float for borders to avoid potential issues with integer T
   r   )int)	r   r   x_minx_maxfxrngdxr   rs	            r   _gs_reflectGridSample._gs_reflect5   s    
 m:BBHAWA1uzY 	 Y 	 ZBBHAWA1uzY 	 Y	r   c                 :   Sn[        U5      nX1S-   -  SU-  -
  US-   -  SU-  -   US-   -  SU-  -
  US'   US-   U-  US-   -
  U-  U-  S-   US'   US-   SU-
  -  US-   -
  SU-
  -  SU-
  -  S-   US'   USU-
  -  SU-  -
  SU-
  -  SU-  -   SU-
  -  SU-  -
  US'   g	)
z
Calculate cubic convolution interpolation coefficients
ROBERT G. KEYS https://ieeexplore.ieee.org/document/1163711
Use float to avoid potential issues with integer.
g      r            r   r%      Nabs)r   r   coeffscubic_alphas       r   _gs_get_cubic_coeffsGridSample._gs_get_cubic_coeffsN   s    FE"Q_4Q?!k/QU+o&q	 "Ao*kAo>!CaG!Kq	!Ao!a%0K!ODQOE
q	 AE"Q_4Q?!k/QU+o&q	r   c                 2    [        U5      nSU-
  US'   XS'   g )Nr   r   r4   )r   r   r6   s      r   _gs_get_linear_coeffs GridSample._gs_get_linear_coeffsa   s    FEq	q	r   c                    [         R                  " SUR                  S9n[         R                  " SUR                  S9nU R                  X%5        [	        S5       H  nXQUS S 24   -  XF'   M     U R                  X55        XT-  $ )Nr2   r   r2   )r   emptyr   r8   range)r   pr   yr    r6   r   s          r   _gs_bicubic_interpolate"GridSample._gs_bicubic_interpolatef   sn    HHT)$agg.!!!,qAadG#AD !!!,zr   c                    [         R                  " SUR                  S9n[         R                  " SUR                  S9n[        [         R                  " U5      5      nUS-   nUS-   n	US-
  n
U R                  X'-
  U5        U R                  XX4S9US'   U R                  XX4S9US'   U R                  XX4S9US'   U R                  XX4S9US'   Xe-  $ )Nr>   r   r   r%   arrayr   borderpadding_moder   r3   )r   r?   r   r&   floorr8   _pixel_at_array)r   datar   rH   rI   r    r6   x_0x_1x_2	x_minus_1s              r   !_gs_cubic_interpolation_1d_with_x,GridSample._gs_cubic_interpolation_1d_with_xo   s    HHT,$djj1"((1+AgAg!G	!!!'62##F $ 
! ##f $ 
! ##f $ 
! ##f $ 
! zr   c                 B   [         R                  " SUR                  S9n[         R                  " SUR                  S9n[        [         R                  " U5      5      nUS-   nU R                  X'-
  U5        U R                  XX4S9US'   U R                  XX4S9US'   Xe-  $ )N)r%   r   r   rF   r   )r   r?   r   r&   rJ   r;   rK   )	r   rL   r   rH   rI   r    r6   rM   rN   s	            r   "_gs_linear_interpolation_1d_with_x-GridSample._gs_linear_interpolation_1d_with_x   s    HHT,$djj1"((1+Ag""17F3##f $ 
! ##f $ 
! zr   c                    UR                   nU[        U5      s=:X  a  [        [        U5      S-  5      :X  d   e   eUS:X  a  U R                  XS   X4S9$ / n[	        UR
                  S   5       HL  nU R                  X   USS  [        USU 5      [        USU-   SU-   5      -   US9nUR                  U5        MN     [        R                  " U5      nU R                  UUS   US   X5   /US9$ Nr%   r   r   rL   r   rH   rI   )ndimr   r&   rT   r@   shape"_gs_linear_interpolation_nd_with_xlistappendr   rG   	r   rL   r   rH   rI   num_dimsres1dr   r,   s	            r   r[   -GridSample._gs_linear_interpolation_nd_with_x   s   993q69SVq%999999q=::qT& ;   tzz!}%A77WAB%F1X./va(lQ\:;<) 8 A LLO & 66d1Iv/0%	 7 
 	
r   c                    UR                   nU[        U5      s=:X  a  [        [        U5      S-  5      :X  d   e   eUS:X  a  U R                  XS   X4S9$ / n[	        UR
                  S   5       HL  nU R                  X   USS  [        USU 5      [        USU-   SU-   5      -   US9nUR                  U5        MN     [        R                  " U5      nU R                  UUS   US   X5   /US9$ rW   )rY   r   r&   rQ   r@   rZ   !_gs_cubic_interpolation_nd_with_xr\   r]   r   rG   r^   s	            r   rc   ,GridSample._gs_cubic_interpolation_nd_with_x   s   993q69SVq%999999q=99qT& :   tzz!}%A66WAB%F1X./va(lQ\:;<) 7 A LLO & 55d1Iv/0%	 6 
 	
r   c                 "    X:  a  U$ X:  a  U$ U$ )Nr   )r   vallohis       r   _clampGridSample._clamp   s    8I8I
r   r   c                 ,   UR                   nU[        U5      s=:X  a  [        [        U5      S-  5      :X  d   e   eUS:X  a  U R                  XS   X4S9$ US   nUR                  S   nUS:X  a+  US:  a
  Xg:  a  X   nO`Sn[
        R                  " X   5      nOEUS:X  a  U R                  USUS-
  5      nX   nO$[        U R                  XcS   X5   5      5      nX   nU R                  UUSS  [        USU 5      [        USU-   SU-   5      -   US9$ )Nr%   r   r   rF   r   rH   ndarrayr   rH   rI   )rY   r   r&   rK   rZ   r   
zeros_likeri   r-   _pixel_at_ndarrayr\   )r   rm   r   rH   rI   r_   r   ds           r   ro   GridSample._pixel_at_ndarray   s@   <<3q69SVq%999999q=''1f (   aDMM!7"Av!%!* --
3X%Aq!a%(AjGD$$Qq	63CDEAjG%%eq*+d6!h,X3V.WW%	 & 
 	
r   r   c                    UR                   S:X  d   eUR                  S   nUS:X  a  US:  a  X%:  a  X   nU$ Sn U$ US:X  a  U R                  USUS-
  5      nX   nU$ [        U R	                  X#S   US   5      5      nX   nU$ )Nr   r   r   rH   )rY   rZ   ri   r&   r-   )r   rG   r   rH   rI   rp   pixels          r   rK   GridSample._pixel_at_array   s    zzQKKN7"Av!%    X%Aq!a%(AHE  D$$Qq	6!9=>AHEr   c                     [        U5      n[        R                  " US-  5      n[        U5       H,  nSXE'   X   S-
  XEU-   '   U(       d  M  SXE'   X   S-
  XEU-   '   M.     U$ )Nr%   g            ?        g      ?)r   r   r   r@   )r   r   r
   r_   bordersr   s         r   _prepare_borderGridSample._prepare_border  si    t9((8a<(xAGJ$(GcMGL!} 
(,#H% ! r   c                 >   S n[        U[        R                  5      (       a  U" U5      $ UR                  S:X  d   e[        R
                  " U5      n[        UR                  S   5       H  nU" X   5      X4'   M     UR                  [        R                  5      nU$ )Nc                 r    U S:  a  [         R                  " U S-   5      $ [         R                  " U S-
  5      $ )Nrw   rv   )r   rJ   ceil)r    s    r   round_single_value5GridSample._cpp_std_round.<locals>.round_single_value  s/    CxxxC((wwq3w''r   r   r   )

isinstancenumbersNumberrY   r   rn   r@   rZ   astypeint32)r   r   r~   	x_roundedr   s        r   _cpp_std_roundGridSample._cpp_std_round  s    	( a((%a((66Q;;a(I1771:&1!$7	 '!((2Ir   Nc           
      V   U=(       d    U R                   nU=(       d    U R                  nU=(       d    U R                  nUR                  nUR                  nUS   nUS   n	X/USS Q7n
[        R
                  " U
5      S:X  a  [        R                  " / UR                  S9$ [        R                  " XR                  S9n[        U5       GH  nX,   n[        U	5       GH  nXU4   n[        USS  5      nUSS  nU R                  UUS9n[        XU4   5       GHd  nU[        U5         nUS S S2   nU R                  UUUS9nUS:X  a  [        R                  " U5      n[!        U5       Hc  u  nnUU   nUUU-      nUU:  d  UU:  d  M!  US	:X  a  U R#                  USUU   S-
  5      UU'   ME  US
:X  d  MM  U R%                  UUU5      UU'   Me     US:X  aE  UR'                  [        R(                  5      nU R+                  UUUUS9X   U   [        U5      '   GM  US:X  a&  U R-                  UUUUS9X   U   [        U5      '   GM0  US:X  a&  U R/                  UUUUS9X   U   [        U5      '   GM\  [1        S5      e   GM     GM     UR'                  UR                  5      4$ )Nr   r   r   r%   )r
   )r   r   r
   nearestrH   
reflectionrl   linearrX   cubiczHGridSample interpolation only supports nearest, linear, and cubic modes.)moderI   r
   rZ   r   prodrG   r   r?   r@   r   ry   r   tupler"   rintr   ri   r-   r   r   ro   r[   rc   RuntimeError)r   Xgridr   rI   r
   x_dims	grid_dimsNCy_dimsYr   	grid_datacX_datar_   r   rH   oxnxr   r   r    r'   r(   s                             r   _runGridSample._run$  s     tyy#8t'8'8%;););JJ	1I1I)1R)776?a88Bagg..HHV77+qAI1X
 a4vabz?abz --d--P)!qD'2B"59-BDbDB884} 9 A y( GGAJ )!1 &q	 &q8| 4u9E	+x7'+{{1aa1'E!!-!='+'7'75%'H! !- y(HHRXX.-1-C-C$*#))5	 .D .Qb	* )-1-T-T!'1V, .U .Qb	* -1-S-S!'1V, .T .Qb	* +f S 3  z !##r   r   )NNN)__name__
__module____qualname____firstlineno__r&   boolr   r"   r-   r8   r;   rC   rQ   rT   r[   rc   ri   r   ro   rK   ry   r   r   __static_attributes__r   r   r   r   r      s}     T <$ 2&&
.
6
6
D 
>  4 "$O$r   r   )
r   typingr   numpyr   onnx.reference.op_runr   onnx.reference.ops.op_resizer   r   r   r   r   <module>r      s$       ' 8d$ d$r   