
    /jq3                    V    d dl mZ d dlZd dlZd dlmZ d dlmZ  G d de          Z	dS )    )annotationsN)OpRun)_get_all_coordsc                  z    e Zd ZddZddZd Zd Zd	 Zd
 Zd Z	d Z
d Zd Zd ZddZddZddZd ZddZdS )
GridSamplelengthintalign_cornersboolc                D    |r|dz   dz  |dz
  z  }n|dz   |z  dz
  dz  }|S )N   g       @ )selfnr   r
   xs        f/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/onnx/reference/ops/op_grid_sample.py_gs_denormalizezGridSample._gs_denormalize   sE      	- Q#!,AA a%6!A%,A    c                    t          j        t          |          t           j                  }t	          t          ||d                    D ]#\  }\  }}|                     |||          ||<   $|S )NdtypeF)strict)r   r   r
   )npzeroslenfloat32	enumeratezipr   )r   r   dimsr
   r   ivdims           r   _gs_denormalize_coordinatesz&GridSample._gs_denormalize_coordinates.   ss    HSVV2:...$SD%?%?%?@@ 	V 	VKAx3''!C}'UUAaDDr   c                    |}||z
  }||k     r4||z
  }t          ||z            }|||z  z
  }|dz  dk    r||z   }n?||z
  }n9||k    r3||z
  }t          ||z            }|||z  z
  }|dz  dk    r||z
  }n||z   }|S )zReflect by the near border till within the borders
        Use float for borders to avoid potential issues with integer T
           r   )r	   )	r   r   x_minx_maxfxrngdxr   rs	            r   _gs_reflectzGridSample._gs_reflect4   s     em::BBHAQWA1uzzQYQY%ZZeBBHAQWA1uzzQYQY	r   c                F   d}t          |          }||dz   z  d|z  z
  |dz   z  d|z  z   |dz   z  d|z  z
  |d<   |dz   |z  |dz   z
  |z  |z  dz   |d<   |dz   d|z
  z  |dz   z
  d|z
  z  d|z
  z  dz   |d<   |d|z
  z  d|z  z
  d|z
  z  d|z  z   d|z
  z  d|z  z
  |d<   d	S )
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_coeffszGridSample._gs_get_cubic_coeffsL   s   
 FFA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                >    t          |          }d|z
  |d<   ||d<   d S )Nr   r   r2   )r   r   r4   s      r   _gs_get_linear_coeffsz GridSample._gs_get_linear_coeffs^   s'    FFEq	q			r   c                   t          j        d|j                  }t          j        d|j                  }|                     ||           t	          d          D ]}|||d d f         z  ||<   |                     ||           ||z  S )Nr0   r   r0   )r   emptyr   r6   range)r   pr   yr!   r4   r    s          r   _gs_bicubic_interpolatez"GridSample._gs_bicubic_interpolatec   s    HT)))$ag...!!!V,,,q 	$ 	$AAadG#AaDD!!!V,,,zr   c                   t          j        d|j                  }t          j        d|j                  }t          t          j        |                    }|dz   }|dz   }	|dz
  }
|                     ||z
  |           |                     ||
||          |d<   |                     ||||          |d<   |                     ||||          |d<   |                     ||	||          |d<   ||z  S )Nr:   r   r   r%   arrayr    borderpadding_moder   r1   )r   r;   r   r	   floorr6   _pixel_at_array)r   datar   rC   rD   r!   r4   x_0x_1x_2	x_minus_1s              r   !_gs_cubic_interpolation_1d_with_xz,GridSample._gs_cubic_interpolation_1d_with_xl   s&   HT,,,$dj111"(1++AgAg!G	!!!c'6222##)F $ 
 
! ###f< $ 
 
! ###f< $ 
 
! ###f< $ 
 
! zr   c                f   t          j        d|j                  }t          j        d|j                  }t          t          j        |                    }|dz   }|                     ||z
  |           |                     ||||          |d<   |                     ||||          |d<   ||z  S )N)r%   r   r   rA   r   )r   r;   r   r	   rE   r8   rF   )	r   rG   r   rC   rD   r!   r4   rH   rI   s	            r   "_gs_linear_interpolation_1d_with_xz-GridSample._gs_linear_interpolation_1d_with_x   s    HT,,,$dj111"(1++Ag""1s7F333###f< $ 
 
! ###f< $ 
 
! zr   c                n   |j         }|t          |          cxk    r#t          t          |          dz            k    sn J |dk    r|                     ||d         ||          S g }t	          |j        d                   D ]q}|                     ||         |dd          t          |d|                   t          |d|z   d|z                     z   |          }|                    |           rt          j
        |          }|                     ||d         |d         ||         g|          S Nr%   r   r   rG   r   rC   rD   )ndimr   r	   rN   r<   shape"_gs_linear_interpolation_nd_with_xlistappendr   rB   	r   rG   r   rC   rD   num_dimsres1dr    r+   s	            r   rT   z-GridSample._gs_linear_interpolation_nd_with_x   s]   93q669999SVq%9%9999999q==::QqT&| ;    tz!}%% 	 	A77!WABB%F1X:.//va(lQ\9:;;<) 8  A LLOOOO66d1Ivh/0%	 7 
 
 	
r   c                n   |j         }|t          |          cxk    r#t          t          |          dz            k    sn J |dk    r|                     ||d         ||          S g }t	          |j        d                   D ]q}|                     ||         |dd          t          |d|                   t          |d|z   d|z                     z   |          }|                    |           rt          j
        |          }|                     ||d         |d         ||         g|          S rP   )rR   r   r	   rL   r<   rS   !_gs_cubic_interpolation_nd_with_xrU   rV   r   rB   rW   s	            r   r[   z,GridSample._gs_cubic_interpolation_nd_with_x   s]   93q669999SVq%9%9999999q==99QqT&| :    tz!}%% 	 	A66!WABB%F1X:.//va(lQ\9:;;<) 7  A LLOOOO55d1Ivh/0%	 6 
 
 	
r   c                &    ||k     r|S ||k    r|S |S )Nr   )r   vallohis       r   _clampzGridSample._clamp   s#    88I88I
r   r   rU   c                   |j         }|t          |          cxk    r#t          t          |          dz            k    sn J |dk    r|                     ||d         ||          S |d         }|j        d         }|dk    r2|dk    r||k     r	||         }n~d}t          j        ||                   }na|dk    r#|                     |d|dz
            }||         }n8t          |                     ||d         ||                             }||         }| 	                    ||dd          t          |d|                   t          |d|z   d|z                     z   |          S )Nr%   r   r   rA   r   rC   ndarrayr   rC   rD   )rR   r   r	   rF   rS   r   
zeros_liker`   r,   _pixel_at_ndarrayrU   )r   rc   r   rC   rD   rX   r    ds           r   re   zGridSample._pixel_at_ndarray   s   <3q669999SVq%9%9999999q==''1f< (    aDM!7""Avv!a%%!!* -
33X%%Aq!a%((AajGGD$$Qq	6(3CDDEEAajG%%eqz*++d6!h,X:U3V.W.WW%	 & 
 
 	
r   r    c                8   |j         dk    sJ |j        d         }|dk    r|dk    r||k     r	||         }ndd}na|dk    r#|                     |d|dz
            }||         }n8t          |                     ||d         |d                             }||         }|S )Nr   r   r   rC   )rR   rS   r`   r	   r,   )r   rB   r    rC   rD   rf   pixels          r   rF   zGridSample._pixel_at_array   s    zQKN7""Avv!a%%aX%%Aq!a%((A!HEED$$Qq	6!9==>>A!HEr   c                    t          |          }t          j        |dz            }t          |          D ]0}d||<   ||         dz
  |||z   <   |rd||<   ||         dz
  |||z   <   1|S )Nr%   g            ?        g      ?)r   r   r   r<   )r   r   r
   rX   bordersr    s         r   _prepare_borderzGridSample._prepare_border   s    t99(8a<((x 		6 		6AGAJ$(GcMGAL! 6 
(,Q#H%r   c                4   d }t          |t          j                  r ||          S |j        dk    sJ t	          j        |          }t          |j        d                   D ]} |||                   ||<   |                    t          j	                  S )Nc                j    | dk    rt          j        | dz             S t          j        | dz
            S )Nrk   rj   )r   rE   ceil)r!   s    r   round_single_valuez5GridSample._cpp_std_round.<locals>.round_single_value  s3    CxxxC(((71s7###r   r   r   )

isinstancenumbersNumberrR   r   rd   r<   rS   astypeint32)r   r   rq   	x_roundedr    s        r   _cpp_std_roundzGridSample._cpp_std_round  s    	$ 	$ 	$
 a(( 	)%%a(((v{{{{M!$$	qwqz"" 	4 	4A--ad33IaLL)))r   Nc           
        |p| j         }|p| j        }|p| j        }|j        }|j        }|d         }|d         }	||	g|dd         R }
t	          j        |
          dk    rt	          j        g |j                  S t	          j        |
|j                  }t          |          D ]0}||         }t          |	          D ]}|||f         }t          |dd                    }|dd          }|                     ||          }t          |||f                   D ]}|t          |                   }|d d d         }|                     |||          }|dk    rt	          j        |          }t!          |          D ]n\  }}||         }|||z            }||k     s||k    rJ|d	k    r$|                     |d||         dz
            ||<   N|d
k    r|                     |||          ||<   o|dk    rV|                    t          j                  }|                     ||||          ||         |         t          |          <   /|dk    r7|                     ||||          ||         |         t          |          <   l|dk    r7|                     ||||          ||         |         t          |          <   t1          d          2|                    |j                  fS )Nr   r   r   r%   )r
   )r   r   r
   nearestrC   
reflectionrb   linearrQ   cubiczHGridSample interpolation only supports nearest, linear, and cubic modes.)moderD   r
   rS   r   prodrB   r   r;   r<   r   rm   r   tupler#   rintr   r`   r,   ru   rv   re   rT   r[   RuntimeError)r   Xgridr   rD   r
   x_dims	grid_dimsNCy_dimsYr   	grid_datacX_datarX   r   rC   oxnxr   r    r!   r&   r'   s                             r   _runzGridSample._run  sV     ty#8t'8%;);J	1I1IQ)1R4))76??a8Bag....HV17+++q ;	 ;	AQI1XX 8 8
 1a4vabbz??abbz --d--PP)!AqD'22 + +B"599-BDDbDB884} 9  A y(( GAJJ )! I I1 &q	 &q8| 4u99E		+x77'+{{1aa1'E'E!!-!=!='+'7'75%'H'H!y((HHRX..-1-C-C$*#))5	 .D . .!Qb		** ))-1-T-T!'1V, .U . .!Qb		** -1-S-S!'1V, .T . .!Qb		** +f  S+8t !!##r   )r   r	   r
   r   )r
   r   )r   rU   )r    r	   )NNN)__name__
__module____qualname__r   r#   r,   r6   r8   r?   rL   rN   rT   r[   r`   re   rF   rm   rx   r   r   r   r   r   r      s(          <     0& & &$  
    .  
 
 
6
 
 
6  
 
 
 
>       "* * *O$ O$ O$ O$ O$ O$r   r   )

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