
    Siq3                    N    S SK Jr  S SKrS SKrS SKJr  S SKJr   " S S\5      r	g)    )annotationsN)OpRun)_get_all_coordsc                      \ rS rSrSS jrSS jrS rS rS rS r	S r
S	 rS
 rS rS rSS jrSS jrSS jrS rSS jrSrg)
GridSample   c                P    U(       a  US-   S-  US-
  -  nU$ US-   U-  S-
  S-  nU$ )N   g       @ )selfnlengthalign_cornersxs        `/var/www/html/ai-image-ml/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SS95       H  u  nu  pgU R                  XgUS9XE'   M     U$ )NdtypeF)strict)r   r   r   )npzeroslenfloat32	enumeratezipr   )r   r   dimsr   r   ivdims           r   _gs_denormalize_coordinates&GridSample._gs_denormalize_coordinates.   sS    HHSV2::.$S%?@KAx''!}'UAD A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$ )zrReflect 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_reflect4   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	)
zCalculate 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_coeffsL   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   r5   )r   r   r7   s      r   _gs_get_linear_coeffs GridSample._gs_get_linear_coeffs^   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r3   r   r3   )r   emptyr   r9   range)r   pr   yr!   r7   r    s          r   _gs_bicubic_interpolate"GridSample._gs_bicubic_interpolatec   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   r4   )r   r@   r   r'   floorr9   _pixel_at_array)r   datar   rI   rJ   r!   r7   x_0x_1x_2	x_minus_1s              r   !_gs_cubic_interpolation_1d_with_x,GridSample._gs_cubic_interpolation_1d_with_xl   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
   rG   r   )r   r@   r   r'   rK   r<   rL   )	r   rM   r   rI   rJ   r!   r7   rN   rO   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   rM   r   rI   rJ   )ndimr   r'   rU   rA   shape"_gs_linear_interpolation_nd_with_xlistappendr   rH   	r   rM   r   rI   rJ   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$ rX   )rZ   r   r'   rR   rA   r[   !_gs_cubic_interpolation_nd_with_xr]   r^   r   rH   r_   s	            r   rd   ,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   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   rG   r   rI   ndarrayr   rI   rJ   )rZ   r   r'   rL   r[   r   
zeros_likerj   r.   _pixel_at_ndarrayr]   )r   rn   r   rI   rJ   r`   r    ds           r   rp   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   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   rI   )rZ   r[   rj   r'   r.   )r   rH   r    rI   rJ   rq   pixels          r   rL   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   rA   )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      $ )Nc                r    U S:  a  [         R                  " U S-   5      $ [         R                  " U S-
  5      $ )Nrx   rw   )r   rK   ceil)r!   s    r   round_single_value5GridSample._cpp_std_round.<locals>.round_single_value  s/    CxxxC((771s7##r   r
   r   )

isinstancenumbersNumberrZ   r   ro   rA   r[   astypeint32)r   r   r   	x_roundedr    s        r   _cpp_std_roundGridSample._cpp_std_round  s}    	$
 a((%a((vv{{MM!$	qwwqz"A-ad3IL #))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   nearestrI   
reflectionrm   linearrY   cubiczHGridSample interpolation only supports nearest, linear, and cubic modes.)moderJ   r   r[   r   prodrH   r   r@   rA   r   rz   r   tupler#   rintr   rj   r.   r   r   rp   r\   rd   RuntimeError)r   Xgridr   rJ   r   x_dims	grid_dimsNCy_dimsYr   	grid_datacX_datar`   r   rI   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   )r   r'   r   bool)r   r   )r   r]   )r    r'   )NNN)__name__
__module____qualname____firstlineno__r   r#   r.   r9   r<   rD   rR   rU   r\   rd   rj   rp   rL   rz   r   r   __static_attributes__r   r   r   r   r      sS    <0&$
.
6
6
> "*O$r   r   )

__future__r   r   numpyr   onnx.reference.op_runr   onnx.reference.ops.op_resizer   r   r   r   r   <module>r      s$    #   ' 8_$ _$r   