§
    2�ÅjÞ4  ã                  ó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        úRC:\Projects\Historical\venv\Lib\site-packages\onnx/reference/ops/op_grid_sample.pyÚ_gs_denormalizezGridSample._gs_denormalize   sE   € ð ð 	-ð �Q‘˜#‘ ¨!¡Ñ,ˆAˆAð �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   € ÝŒH•S˜‘V”V¥2¤:Ð.Ñ.Ô.ˆÝ$¥S¨¨D¸Ð%?Ñ%?Ô%?Ñ@Ô@ð 	Vð 	V‰KˆA‰x��3Ø×'Ò'¨!°CÀ}Ð'ÑUÔUˆAˆa‰DˆDØˆ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 )z‚Reflect 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·   € ð ˆØ�e‰mˆØ�Š:ˆ:Ø˜‘ˆBÝ�B˜‘H‘”ˆAØ�Q˜‘W‘ˆAØ�1‰u˜ŠzˆzØ˜Q‘Y��à˜Q‘Y��Ø�%ŠZˆZØ�e‘ˆBÝ�B˜‘H‘”ˆAØ�Q˜‘W‘ˆAØ�1‰u˜ŠzˆzØ˜Q‘Y��à˜Q‘Y�Øˆ	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 )
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_coeffszGridSample._gs_get_cubic_coeffsL   s  € ð
 ˆÝ�‰FŒFˆà˜A ™EÑ" Q¨¡_Ñ4¸¸Q¹Ñ?À!ÀkÁ/ÑQØ�‰Uñà˜+‘oñ&ˆˆq‰	ð " A‘o¨Ñ*¨k¸A©oÑ>À!ÑCÀaÑGÈ!ÑKˆˆq‰	Ø! A‘o¨!¨a©%Ñ0°KÀ!±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'   € Ý�‰FŒFˆØ˜‘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•   € ÝŒH�T ¤Ð)Ñ)Ô)ˆÝ”˜$ a¤gÐ.Ñ.Ô.ˆØ×!Ò! ! VÑ,Ô,Ð,Ý�q‘”ð 	$ð 	$ˆAØ˜A˜a   ˜dœGÑ#ˆAˆa‰DˆDØ×!Ò! ! 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&  € ÝŒH�T ¤Ð,Ñ,Ô,ˆÝ”˜$ d¤jÐ1Ñ1Ô1ˆÝ•"”(˜1‘+”+ÑÔˆØ�A‰gˆØ�A‰gˆØ˜!‘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Â   € ÝŒH�T ¤Ð,Ñ,Ô,ˆÝ”˜$ d¤jÐ1Ñ1Ô1ˆÝ•"”(˜1‘+”+ÑÔˆØ�A‰gˆØ×"Ò" 1 s¡7¨FÑ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ˆØ�3˜q™6œ6Ð9Ð9Ò9Ð9¥S­¨V©¬°q©Ñ%9Ô%9Ò9Ð9Ð9Ð9Ð9Ð9Ø�qŠ=ˆ=Ø×:Ò:Ø˜Q˜qœT¨&¸|ð ;ñ ô ð ð ˆÝ�t”z !”}Ñ%Ô%ð 	ð 	ˆAØ×7Ò7Ø˜!”WØ�A�B�B”%Ý˜F 1 X :Ô.Ñ/Ô/Ý�v˜a (™l¨Q°©\Ð9Ô:Ñ;Ô;ñ<à)ð 8ñ ô ˆAð �LŠL˜‰OŒOˆOˆOÝ”˜‘”ˆà×6Ò6ØØ�ŒdØ˜1”I˜v hÔ/Ð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ˆØ�3˜q™6œ6Ð9Ð9Ò9Ð9¥S­¨V©¬°q©Ñ%9Ô%9Ò9Ð9Ð9Ð9Ð9Ð9Ø�qŠ=ˆ=Ø×9Ò9Ø˜Q˜qœT¨&¸|ð :ñ ô ð ð ˆÝ�t”z !”}Ñ%Ô%ð 	ð 	ˆAØ×6Ò6Ø˜!”WØ�A�B�B”%Ý˜F 1 X :Ô.Ñ/Ô/Ý�v˜a (™l¨Q°©\Ð9Ô:Ñ;Ô;ñ<à)ð 7ñ ô ˆAð �LŠL˜‰OŒOˆOˆOÝ”˜‘”ˆà×5Ò5ØØ�ŒdØ˜1”I˜v hÔ/Ð0Ø%ð	 6ñ 
ô 
ð 	
r   c                ó&   — ||k     r|S ||k    r|S |S )Nr   )r   ÚvalÚloÚhis       r   Ú_clampzGridSample._clampÈ   s#   € Ø�Š8ˆ8ØˆIØ�Š8ˆ8Øˆ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”  € à”<ˆØ�3˜q™6œ6Ð9Ð9Ò9Ð9¥S­¨V©¬°q©Ñ%9Ô%9Ò9Ð9Ð9Ð9Ð9Ð9Ø�qŠ=ˆ=Ø×'Ò'Ø  1¤¨fÀ<ð (ñ ô ð ð ˆaŒDˆØŒM˜!ÔˆØ˜7Ò"Ð"Ø�AŠvˆv˜!˜aš%˜%Ø! !œ*��ð �Ýœ-¨°¬
Ñ3Ô3��Ø˜XÒ%Ð%Ø—’˜A˜q ! a¡%Ñ(Ô(ˆAØ˜a”jˆGˆGå�D×$Ò$ Q¨¨q¬	°6¸(Ô3CÑDÔDÑEÔEˆAØ˜a”jˆGà×%Ò%ØØ���ŒeÝ˜˜q ˜zÔ*Ñ+Ô+­d°6¸!¸h¹,ÈÈXÉÐ:UÔ3VÑ.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®   € ØŒz˜QŠˆˆˆØŒK˜ŒNˆØ˜7Ò"Ð"Ø�AŠvˆv˜!˜aš%˜%Ø˜aœ��à��Ø˜XÒ%Ð%Ø—’˜A˜q ! a¡%Ñ(Ô(ˆAØ˜!”HˆEˆEå�D×$Ò$ Q¨¨q¬	°6¸!´9Ñ=Ô=Ñ>Ô>ˆAØ˜!”HˆEØˆ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�   € å�t‘9”9ˆÝ”(˜8 a™<Ñ(Ô(ˆÝ�x‘”ð 		6ð 		6ˆAàˆG�A‰Jà$(¨¤G¨c¡MˆG�A˜‘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   € Ø�CŠxˆxÝ”x  C¡Ñ(Ô(Ð(Ý”7˜1˜s™7Ñ#Ô#Ð#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 !Ñ$Ô$ˆ	Ý�q”w˜q”zÑ"Ô"ð 	4ð 	4ˆAØ-Ð-¨a°¬dÑ3Ô3ˆI�a‰LˆLØ×Ò¥¤Ñ)Ô)Ð)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  € ð Ð �t”yˆØ#Ð8 tÔ'8ˆØ%Ð;¨Ô);ˆà”ˆØ”Jˆ	Ø�1ŒIˆØ�1ŒIˆØ�QÐ)˜ 1 R 4œÐ)Ð)ˆåŒ7�6‰?Œ?˜aÒÐÝ”8˜B a¤gÐ.Ñ.Ô.Ð.åŒH�V 1¤7Ð+Ñ+Ô+ˆå�q‘”ð ;	ñ ;	ˆAØ˜QœˆIå˜1‘X”Xð 8ñ 8�ð
 ˜1˜a˜4œ�å˜v a b bœz™?œ?�Ø˜a˜b˜b”z�ð ×-Ò-¨dÀ-Ð-ÑPÔP�å)¨!¨A¨q¨D¬'Ñ2Ô2ð +ñ +�Bà"¥5¨¡9¤9Ô-�BØ˜D˜D˜b˜Dœ�Bà×8Ò8Ø 4°}ð 9ñ ô �Að ˜yÒ(Ð(õ œG A™JœJ˜å )¨!¡¤ð Ið I™˜˜1Ø & q¤	˜Ø & q¨8¡|Ô 4˜Ø˜uš9˜9¨¨Eª	¨	Ø+¨xÒ7Ð7Ø'+§{¢{°1°a¸¸a¼À1¹Ñ'EÔ'E  !¡ Ø!-°Ò!=Ð!=Ø'+×'7Ò'7¸¸5À%Ñ'HÔ'H  !¡øà˜yÒ(Ð(ØŸHšH¥R¤XÑ.Ô.˜Ø-1×-CÒ-CØ$*ØØ#)Ø)5ð	 .Dñ .ô .˜˜!œ˜Qœ¥ b¡	¤	Ñ*Ñ*ð  Ò)Ð)Ø-1×-TÒ-TØ!'¨1°VÈ,ð .Uñ .ô .˜˜!œ˜Qœ¥ b¡	¤	Ñ*Ñ*ð  š˜Ø-1×-SÒ-SØ!'¨1°VÈ,ð .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   