§
    3�Åjƒ+  ã                  ó\   — d dl mZ d dlZd dlmZ  G d„ d¦  «        Z G d„ de¦  «        ZdS )é    )ÚannotationsN)ÚOpRunc                  ó   — e Zd Zdd„Zdd„ZdS )	ÚPreCalcr   c	                óv   — || _         || _        || _        || _        || _        || _        || _        || _        d S )N©Úpos1Úpos2Úpos3Úpos4Úw1Úw2Úw3Úw4)	Úselfr	   r
   r   r   r   r   r   r   s	            úPC:\Projects\Historical\venv\Lib\site-packages\onnx/reference/ops/op_roi_align.pyÚ__init__zPreCalc.__init__   s>   € ØˆŒ	ØˆŒ	ØˆŒ	ØˆŒ	ØˆŒØˆŒØˆŒØˆŒˆˆó    ÚreturnÚstrc                óˆ   — d| j         › d| j        › d| j        › d| j        › d| j        › d| j        › d| j        › d| j        › d�S )NzPreCalc(ú,ú)r   )r   s    r   Ú__repr__zPreCalc.__repr__   sa   € Ør˜$œ)ÐrÐr d¤iÐrÐr°$´)ÐrÐr¸d¼iÐrÐrÈ$Ì'ÐrÐrÐTXÔT[ÐrÐrÐ^bÔ^eÐrÐrÐhlÔhoÐrÐrÐrÐrr   N)r   r   r   r   r   r   r   r   )r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      sB   € € € € € ðð ð ð ðsð sð sð sð sð sr   r   c                  óR   — e Zd Zedd
„¦   «         Zedd„¦   «         Z	 	 	 	 	 	 dd„ZdS )ÚRoiAlignÚheightÚintÚwidthÚpooled_heightÚpooled_widthÚiy_upperÚix_upperÚroi_bin_grid_hÚroi_bin_grid_wc                óº  — d}t          |¦  «        D �]Ç}t          |¦  «        D �]³}t          |¦  «        D �]Ÿ}|||z  z   |dz   |z  |
z  z   }t          |¦  «        D �]w}|||	z  z   |dz   |	z  |z  z   }|}|}|dk     s|| k    s|dk     s||k    rF||         }d|_        d|_        d|_        d|_        d|_        d|_        d|_        d|_        |dz  }Œyt          |d¦  «        }t          |d¦  «        }t          |¦  «        }t          |¦  «        }|| dz
  k    r
| dz
  x}}|}n|dz   }||dz
  k    r
|dz
  x}}|}n|dz   }||z
  }||z
  }d|z
  }d|z
  }||z  }||z  } ||z  }!||z  }"t          ¦   «         }||z  |z   |_        ||z  |z   |_        ||z  |z   |_        ||z  |z   |_        ||_        | |_        |!|_        |"|_        |||<   |dz  }�Œy�Œ¡�Œµ�ŒÉd S )Nr   ç      à?g      ð¿é   ç      ð?)Úranger	   r
   r   r   r   r   r   r   Úmaxr"   r   )#r!   r#   r$   r%   r&   r'   Úroi_start_hÚroi_start_wÚ
bin_size_hÚ
bin_size_wr(   r)   Úpre_calcÚpre_calc_indexÚphÚpwÚiyÚyyÚixÚxxÚxÚyÚpcÚy_lowÚx_lowÚy_highÚx_highÚlyÚlxÚhyÚhxr   r   r   r   s#                                      r   Ú!pre_calc_for_bilinear_interpolatez*RoiAlign.pre_calc_for_bilinear_interpolate   s¨  € ð  ˆÝ˜Ñ&Ô&ð F	,ñ F	,ˆBÝ˜LÑ)Ô)ð E,ñ E,�Ý ™/œ/ð D,ñ D,�Bà#Ø˜z™/ñ*à ™8 zÑ1°NÑBñCð õ
 $ H™oœoð >,ñ >,˜à'Ø  :™oñ.à! C™x¨:Ñ5¸ÑFñGð ð ˜Ø˜à˜tš8˜8 q¨6¢z z°Q¸²X°XÀÀUÂÀØ!)¨.Ô!9˜BØ&'˜BœGØ&'˜BœGØ&'˜BœGØ&'˜BœGØ$%˜BœEØ$%˜BœEØ$%˜BœEØ$%˜BœEØ*¨aÑ/˜NØ$å  1™IœI˜Ý  1™IœI˜å # A¡¤˜Ý # A¡¤˜à  F¨Q¡JÒ.Ð.Ø-3°a©ZÐ7˜F UØ %˜A˜Aà%*¨Q¡Y˜Fà  E¨A¡IÒ-Ð-Ø-2°Q©YÐ6˜F UØ %˜A˜Aà%*¨Q¡Y˜Fà ™Y˜Ø ™Y˜Ø  2™X˜Ø  2™X˜Ø "™W˜Ø "™W˜Ø "™W˜Ø "™W˜õ %™YœY˜Ø"'¨%¡-°%Ñ"7˜œØ"'¨%¡-°&Ñ"8˜œØ"(¨5¡.°5Ñ"8˜œØ"(¨5¡.°6Ñ"9˜œØ "˜œØ "˜œØ "˜œØ "˜œØ35˜ Ñ0à&¨!Ñ+˜™ñ}>,ñD,ñE,ðF	,ð F	,r   Úoutput_shapeútuple[int, int, int, int]Únum_roi_colsÚ
half_pixelÚboolc                óì  — | d         }| d         }| d         }| d         }t          |¦  «        D �]B}||z  |z  |z  }||z  }||         }|
rdnd}||dz            |z  |z
  }||dz            |z  |z
  }||dz            |z  |z
  }||dz            |z  |z
  }||z
  }||z
  }|
s t          |d¦  «        }t          |d¦  «        }||z  }||z  }|dk    rt          |¦  «        n#t          t          j        ||z  ¦  «        ¦  «        }|dk    rt          |¦  «        n#t          t          j        ||z  ¦  «        ¦  «        }t          t          ||z  d¦  «        ¦  «        }d„ t          ||z  |z  |z  ¦  «        D ¦   «         } t
                               ||||||||||||| ¦  «         t          |¦  «        D �]¼}!||!|z  |z  z   }"t          ||z  |!z   |z  |z  ¦  «        }#d}$t          |¦  «        D �]€}%t          |¦  «        D �]l}&|"|%|z  z   |&z   }'d}(|	d	k    r�t          |¦  «        D ]‡})t          |¦  «        D ]u}*| |$         }+|(|+j        ||#|+j        z            z  |+j	        ||#|+j
        z            z  z   |+j        ||#|+j        z            z  z   |+j        ||#|+j        z            z  z   z  }(|$dz  }$ŒvŒˆ|(|z  }(n´d
},t          |¦  «        D ]¢})t          |¦  «        D ]�}*| |$         }+t          |+j        ||#|+j        z            z  |+j	        ||#|+j
        z            z  |+j        ||#|+j        z            z  |+j        ||#|+j        z            z  ¦  «        }-|,s|-}(d},nt          |(|-¦  «        }(|$dz  }$Œ‘Œ£|(||'<   �Œn�Œ‚�Œ¾�ŒDd S )Nr   r,   é   é   r+   g        r-   c                ó*   — g | ]}t          ¦   «         ‘ŒS r   )r   )Ú.0Úis     r   ú
<listcomp>z.RoiAlign.roi_align_forward.<locals>.<listcomp>²   s,   € ð ð ð àõ ‘	”	ðð ð r   ÚavgFT)r.   r/   r"   ÚnpÚceilr    rG   r   r	   r   r
   r   r   r   r   ).rH   Úbottom_dataÚspatial_scaler!   r#   Úsampling_ratioÚbottom_roisrJ   Útop_dataÚmoderK   Úbatch_indices_ptrÚn_roisÚchannelsr$   r%   ÚnÚindex_nÚoffset_bottom_roisÚroi_batch_indÚoffsetr1   r0   Ú	roi_end_wÚ	roi_end_hÚ	roi_widthÚ
roi_heightr2   r3   r(   r)   Úcountr4   ÚcÚ	index_n_cÚoffset_bottom_datar5   r6   r7   ÚindexÚ
output_valÚ_iyÚ_ixr>   Úmax_flagÚvals.                                                 r   Úroi_align_forwardzRoiAlign.roi_align_forwardt   së  € ð ˜a”ˆØ ”?ˆØ$ QœˆØ# A”ˆõ �v‘”ð s	5ñ s	5ˆAØ˜(‘l \Ñ1°MÑAˆGð "# \Ñ!1ÐØ-¨aÔ0ˆMð 'Ð/�S�S¨CˆFØ%Ð&8¸1Ñ&<Ô=ÀÑMÐPVÑVˆKØ%Ð&8¸1Ñ&<Ô=ÀÑMÐPVÑVˆKØ#Ð$6¸Ñ$:Ô;¸mÑKÈfÑTˆIØ#Ð$6¸Ñ$:Ô;¸mÑKÈfÑTˆIà! KÑ/ˆIØ" [Ñ0ˆJØð 2å 	¨3Ñ/Ô/�	Ý  ¨SÑ1Ô1�
à# mÑ3ˆJØ" \Ñ1ˆJð
 " AÒ%Ð%õ �NÑ#Ô#Ð#å�œ ¨mÑ!;Ñ<Ô<Ñ=Ô=ð ð " AÒ%Ð%õ �NÑ#Ô#Ð#å�œ ¨\Ñ!9Ñ:Ô:Ñ;Ô;ð õ �˜N¨^Ñ;¸QÑ?Ô?Ñ@Ô@ˆEðð åØ" ^Ñ3°lÑBÀ]ÑRñô ðñ ô ˆHõ ×6Ò6ØØØØØØØØØØØØØñô ð õ  ˜8‘_”_ð 45ñ 45�Ø# a¨,Ñ&6¸Ñ&FÑF�	å%(Ø" XÑ-°Ñ1°VÑ;¸eÑCñ&ô &Ð"ð "#�å Ñ.Ô.ð ,5ñ ,5�BÝ# LÑ1Ô1ð +5ñ +5˜Ø )¨B°Ñ,=Ñ =ÀÑ B˜à%(˜
Ø 5š=˜=Ý',¨^Ñ'<Ô'<ð 8ð 8 Ý+0°Ñ+@Ô+@ð !8ð !8 CØ)1°.Ô)A BØ$.Ø(*¬Ø*5Ð6HÈ2Ì7Ñ6RÔ*Sñ)Tà*,¬%Ø*5Ð6HÈ2Ì7Ñ6RÔ*Sñ+Tñ)Tð +-¬%Ø*5Ð6HÈ2Ì7Ñ6RÔ*Sñ+Tñ	)Tð +-¬%Ø*5Ð6HÈ2Ì7Ñ6RÔ*Sñ+Tñ)Tñ	%& Jð %3°aÑ$7 N Nð!8ð '¨%Ñ/˜J˜Jà',˜HÝ',¨^Ñ'<Ô'<ð 8ð 8 Ý+0°Ñ+@Ô+@ð !8ð !8 CØ)1°.Ô)A BÝ*-Ø(*¬Ø*5Ð6HÈ2Ì7Ñ6RÔ*Sñ)Tà(*¬Ø*5Ð6HÈ2Ì7Ñ6RÔ*Sñ)Tà(*¬Ø*5Ð6HÈ2Ì7Ñ6RÔ*Sñ)Tà(*¬Ø*5Ð6HÈ2Ì7Ñ6RÔ*Sñ)Tñ	+&ô 	+& Cð ,4ð %JØ58¨
Ø37¨¨å58¸ÀSÑ5IÔ5I¨
Ø$2°aÑ$7 N Nð#!8ð& +5˜ ™™ñW+5ñ,5ñ45ðs	5ð s	5r   Nc
                ó¦  — |p| j         }|p| j        }|p| j        }|p| j        }|p| j        }|	p| j        }	|j        d         }
|j        d         }|j        d         }||
||f}t          j        ||j	        ¬¦  «         
                    ¦   «         }|                      || 
                    ¦   «         |	|j        d         |j        d         || 
                    ¦   «         |||                     ¦   «         |                     ¦   «         dk    | 
                    ¦   «         ¦  «         |                     |¦  «                             |j	        ¦  «        fS )Nr,   r   )ÚdtyperN   rO   rK   )Úcoordinate_transformation_moder\   Úoutput_heightÚoutput_widthrY   rX   ÚshaperU   Úemptyru   Úflattenrs   ÚlowerÚreshapeÚastype)r   ÚXÚroisÚbatch_indicesrv   r\   rw   rx   rY   rX   Únum_channelsÚnum_roisrJ   Úy_dimsÚYs                  r   Ú_runzRoiAlign._runþ   sM  € ð +ÐQ¨dÔ.Qð 	'ð Ð �t”yˆØ%Ð;¨Ô);ˆØ#Ð8 tÔ'8ˆØ'Ð>¨4Ô+>ˆØ%Ð;¨Ô);ˆà”w˜q”zˆØ Ô& qÔ)ˆØ”z !”}ˆà˜L¨-¸ÐFˆÝŒH�V 1¤7Ð+Ñ+Ô+×3Ò3Ñ5Ô5ˆà×ÒØØ�IŠI‰KŒKØØŒG�AŒJØŒG�AŒJØØ�LŠL‰NŒNØØØ�JŠJ‰LŒLØ*×0Ò0Ñ2Ô2°lÒBØ×!Ò!Ñ#Ô#ñ	
ô 	
ð 	
ð —	’	˜&Ñ!Ô!×(Ò(¨¬Ñ1Ô1Ð3Ð3r   )r!   r"   r#   r"   r$   r"   r%   r"   r&   r"   r'   r"   r(   r"   r)   r"   )
rH   rI   r!   r"   r#   r"   rJ   r"   rK   rL   )NNNNNN)r   r   r   ÚstaticmethodrG   rs   r†   r   r   r   r    r       s„   € € € € € ØðV,ð V,ð V,ñ „\ðV,ðp ðG5ð G5ð G5ñ „\ðG5ð\ (,ØØØØØð*4ð *4ð *4ð *4ð *4ð *4r   r    )Ú
__future__r   ÚnumpyrU   Úonnx.reference.op_runr   r   r    r   r   r   ú<module>r‹      s¥   ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'ðsð sð sð sð sñ sô sð sðN4ð N4ð N4ð N4ð N4ˆuñ N4ô N4ð N4ð N4ð N4r   