o
    b¦µiÄA ã                   @   sÞ  d dl Zd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdodd„Zdpdd„Zdpdd„Zdqdd „Zdqd!d"„Z d#d$„ Z!d%d&„ Z"dod'd(„Z#d)d*„ Z$dod+d,„Z%dod-d.„Z&dod/d0„Z'd1d2„ Z(d3d4„ Z)dqd5d6„Z*drd7d8„Z+d9d:„ Z,d;d<„ Z-d=d>„ Z.d?d@„ Z/dAdB„ Z0dCdD„ Z1dEdF„ Z2dodGdH„Z3dodIdJ„Z4dsdLdM„Z5dqdNdO„Z6dqdPdQ„Z7dtdRdS„Z8dTdU„ Z9dVdW„ Z:dXdY„ Z;dZd[„ Z<dud\d]„Z=d^d_„ Z>d`da„ Z?dbdc„ Z@ddde„ ZAdfdg„ ZBdvdhdi„ZCdjdk„ ZDdldm„ ZEdndo„ ZFdpdq„ ZGdrds„ ZHdqdtdu„ZIdwdvdw„ZJdtdxdy„ZKdtdzd{„ZLd|d}„ ZMdvd~d„ZNdxdd‚„ZOdydƒd„„ZPd…d†„ ZQd‡dˆ„ ZRdqd‰dŠ„ZSd‹dŒ„ ZTddŽ„ ZUdd„ ZVd‘d’„ ZWdqd“d”„ZXd•d–„ ZYdqd—d˜„ZZdqd™dš„Z[d›dœ„ Z\ddž„ Z]dŸd „ Z^d¡d¢„ Z_d£d¤„ Z`dqd¥d¦„Zad§d¨„ Zbdzd«d¬„Zcd­d®„ Zdd{d¯d°„Zed±d²„ Zfd³d´„ Zgdµd¶„ Zhd·d¸„ Zid|dºd»„Zjd¼d½„ Zkd¾d¿„ ZldÀdÁ„ ZmdÂdÃ„ ZndÄdÅ„ Zo	 d}dÇdÈ„ZpdÉdÊ„ ZqdËdÌ„ ZrdÍdÎ„ ZsdÏdÐ„ ZtdÑdÒ„ ZudÓdÔ„ ZvdÕdÖ„ Zwd×dØ„ ZxdÙdÚ„ Zyd~dÜdÝ„ZzdÞdß„ Z{dodàdá„Z|dâdãœdädå„Z}dpdædç„Z~dèdé„ Zdêdë„ Z€dìdí„ Zddïdð„Z‚dñdò„ Zƒdódô„ Z„dõdö„ Z…dqd÷dø„Z†dqdùdú„Z‡dûdü„ Zˆd€dþdÿ„Z‰dpd d„ZŠddd„Z‹dd„ ZŒdd„ Zd	d
„ ZŽdqdd„Zdd„ Zdqdd„Z‘dd„ Z’dd„ Z“dd„ Z”dd„ Z•dd„ Z–dsdd„Z—dvdd„Z˜dvdd „Z™dod!d"„Zšd#d$„ Z›dqd%d&„Zœdqd'd(„Zd)d*„ Zžd+d,„ ZŸd‚d.d/„Z dvd0d1„Z¡d2d3„ Z¢dxd4d5„Z£dƒd6d7„Z¤dvd8d9„Z¥dvd:d;„Z¦d<d=„ Z§d>d?„ Z¨ddd@œdAdB„Z©dtdCdD„ZªdEdF„ Z«dGdH„ Z¬dIdJ„ Z­dKdL„ Z®dMdN„ Z¯dOdP„ Z°dQdR„ Z±dqdSdT„Z²dqdUdV„Z³d„dXdY„Z´dodZd[„Zµdod\d]„Z¶dƒd^d_„Z·d`da„ Z¸dbdc„ Z¹ddde„ Zºd…dgdh„Z»dvdidj„Z¼dkdl„ Z½dsdmdn„Z¾dS (†  é    N)ÚType)Úconfig)Údtypes)Ústandardize_dtype)Ú
DTYPES_MAX)Ú
DTYPES_MIN)ÚOPENVINO_DTYPES)ÚOpenVINOKerasTensor)Úalign_operand_types©Úconvert_to_tensor©Úget_ov_output)Úov_to_keras_typec                 C   óf   d }t | tƒr| j ¡ }t |tƒr|j ¡ }t| |ƒ} t||ƒ}t| |dƒ\} }tt | |¡ d¡ƒS )Nzadd()r   )Ú
isinstancer	   ÚoutputÚget_element_typer   Ú_align_operand_typesÚov_opsetÚadd©Úx1Úx2Úelement_type© r   úT/home/ubuntu/.local/lib/python3.10/site-packages/keras/src/backend/openvino/numpy.pyr      ó   





r   c                 O   s6   g }|D ]}t |ƒ}| |¡ qtt || ¡ d¡ƒS ©Nr   )r   Úappendr	   r   Úeinsumr   )Ú
subscriptsÚoperandsÚkwargsÚinputsÚoperandr   r   r   r        s
   r    c                 C   sŠ   d }t | tƒr| j ¡ }t |tƒr|j ¡ }t| |ƒ} t||ƒ}t| |dƒ\} }|  ¡ tjkr:tt 	| |¡ d¡ƒS tt 
| |¡ d¡ƒS )Nz
subtract()r   )r   r	   r   r   r   r   r   Úbooleanr   Úlogical_xorÚsubtractr   r   r   r   r(   (   s   





r(   c                 C   sj   d }t | tƒr| j ¡ }t |tƒr|j ¡ }t| |ƒ} t||ƒ}t| |dƒ\} }tt | |dd¡ d¡ƒS )Nzmatmul()Fr   )r   r	   r   r   r   r   r   Úmatmulr   r   r   r   r)   6   s   





r)   c                 C   r   )Nú
multiply()r   )r   r	   r   r   r   r   r   Úmultiplyr   r   r   r   r+   B   r   r+   Fc                 C   s¾   t | ƒ}| ¡  ¡ }| ¡ }|d u }t||ƒ\}}|d u r!t|ƒS | ¡ r4tt 	¡  }	t
 ||	¡ d¡}t
 |||¡ d¡}
|r[|r[dgt|ƒ }t
 |
t
 |tj¡ d¡d¡ d¡}
t|
ƒS )Nr   é   F)r   Úget_partial_shapeÚto_shaper   Ú_resolve_axisr	   Úis_integralr   r   Úfloatxr   Úconvertr   Úreduce_meanÚlenÚreshapeÚconstantr   Úi32)ÚxÚaxisÚkeepdimsÚx_ovÚx_shapeÚx_typeÚwas_axis_noneÚ
x_resolvedÚaxis_resolvedÚov_typeÚresultÚresult_shaper   r   r   ÚmeanN   s*   ýürD   c                 C   ó   t | d|||ƒS )NÚmax©Ú_compute_extrema©r8   r9   r:   Úinitialr   r   r   rF   j   ó   rF   c                 C   sp  |dkrt j}t j}n|dkrt j}t j}ntd|› ƒ‚t| ƒ} |  ¡ }| }|tj	k}	|	r;t  
| tj¡ d¡} tj}t|tƒrJt|ƒdkrJt| ƒS |d u }
t| |ƒ\} }|| ||ƒ d¡}|d urst  ||¡ d¡}|||ƒ d¡}|r¨|
r¨t  |tj¡ d¡}t  |tj¡ d¡}t  dtj¡ d¡}t  ||¡ d¡}t  ||d¡ d¡}|	r´t  
|tj	¡ d¡}t|ƒS )NÚminrF   z+Operation must be 'min' or 'max', received r   r,   F)r   Ú
reduce_minÚminimumÚ
reduce_maxÚmaximumÚ
ValueErrorr   r   r   r&   r2   r7   r   r   Útupler4   r	   r/   r6   Úshape_ofÚ	broadcastr5   )r8   Ú	operationr9   r:   rJ   Úreduction_opÚelementwise_opr=   Ú
x_for_rankÚis_boolr>   rB   Úinitial_tensorÚ
orig_shapeÚorig_rank_shapeÚonerC   r   r   r   rH   n   sB   ÿ
rH   c                 C   s~   t |ƒpt ¡ }t| }t d|¡ d¡}t| tƒrt	| ƒ} nt| t
ƒr'| g} tj| tjd d¡}t ||¡}t| d¡ƒS )Nr,   r   ©Údtype©r   r   r1   r   r   r6   r   r   rR   ÚlistÚintr   r7   rT   r	   )Úshaper_   rA   Ú	const_oneÚoutput_shapeÚonesr   r   r   rf   œ   s   


rf   c                 C   s€   t |ƒpt ¡ }t| }tjd|d d¡}t| tƒr t	| ƒ} nt| t
ƒr(| g} tj| tjd d¡}t ||¡}t| d¡ƒS ©Nr   r^   r`   )rc   r_   rA   Ú
const_zerore   Úzerosr   r   r   ri   ©   s   


ri   c                 C   s6   t | ƒ} |  ¡ }|tjkrt| ƒS tt | ¡ d¡ƒS r   )r   r   r   r&   r	   r   Úabsoluter   ©r8   r=   r   r   r   rj   ¶   s
   
rj   c                 C   ó   t | ƒ} tt | ¡ d¡ƒS r   )r   r	   r   rj   r   ©r8   r   r   r   Úabs¾   ó   rn   c                 C   óR   t | ƒ} t| |ƒ\} }|d u rt| ƒS t | tj¡ d¡} tt | ||¡ d¡ƒS r   )	r   r/   r	   r   r2   r   r&   r   Úreduce_logical_and©r8   r9   r:   r   r   r   ÚallÃ   ó   ÿrs   c                 C   ó   t dƒ‚)Nz.`angle` is not supported with openvino backend©ÚNotImplementedErrorrm   r   r   r   ÚangleÎ   ó   rx   c                 C   rp   r   )	r   r/   r	   r   r2   r   r&   r   Úreduce_logical_orrr   r   r   r   ÚanyÒ   rt   r{   c                 C   óh   t | ƒ} |  ¡ }t| |ƒ\} }|d u rt| ƒS |tjkr(tt | ||¡ d¡ƒS tt 	| ||¡ d¡ƒS r   )
r   r   r/   r	   r   r&   r   rz   r   rO   ©r8   r9   r:   r=   r   r   r   ÚamaxÝ   ó   
ÿr~   c                 C   r|   r   )
r   r   r/   r	   r   r&   r   rq   r   rM   r}   r   r   r   Úaminê   r   r€   c                 C   s|   |dks|g kr| d fS |d u r't  dgtj¡ d¡}t  | |d¡ d¡} d}t|tƒr0t|ƒ}t  |tj¡ d¡}| |fS )Nr   éÿÿÿÿr   F)	r   r6   r   r7   r   r5   r   rR   ra   )r8   r9   Úflatten_shaper   r   r   r/   ÷   s   
r/   c                 C   sz   |   ¡ }|tjkrt | tj¡ d¡} | S |tjtjfv r)t | tj¡ d¡} | S |tj	tj
fv r;t | tj¡ d¡} | S r   )r   r   r&   r   r2   r7   r   Úi8Úi16Úu8Úu16Úu32rk   r   r   r   Ú_upcast_type_if_needed  s   
üþrˆ   c                 C   s†   t | ƒt |ƒ} }t| |dƒ\} }|d u r6t dgtj¡ d¡}t | |d¡ d¡} t ||d¡ d¡}d}tt 	| |g|¡ d¡ƒS )Nzappend()r   r   F)
r   r   r   r6   r   r7   r   r5   r	   Úconcat)r   r   r9   r‚   r   r   r   r     s   r   c                 C   sÊ   |d u rt dƒt | ƒ} }n	t | ƒt |ƒ} }|d u rt dƒnt |ƒ}d }|d ur0tt|ƒ }ntt t|  ¡ ƒt| ¡ ƒt| ¡ ƒd¡ }t | |¡}t ||¡}t ||¡}t	t 
||||¡ d¡ƒS )Nr   r,   Úint32)r   r   r   r   Úresult_typer   r   r   r2   r	   Úranger   )ÚstartÚstopÚstepr_   rA   Ú
start_nodeÚ	stop_nodeÚ	step_noder   r   r   Úarange  s*   


üÿ	ÿr“   c                 C   óD   t | ƒ} |  ¡ }| ¡ rtt ¡  }t | |¡} tt 	| ¡ 
d¡ƒS r   )r   r   r0   r   r   r1   r   r2   r	   Úacosr   ©r8   r=   rA   r   r   r   Úarccos8  ó   r—   c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Úacoshr   r–   r   r   r   ÚarccoshA  r˜   rš   c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Úasinr   r–   r   r   r   ÚarcsinJ  r˜   rœ   c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Úasinhr   r–   r   r   r   ÚarcsinhS  r˜   rž   c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Úatanr   r–   r   r   r   Úarctan\  r˜   r    c                 C   s~  t | ƒ} t |ƒ}t|  ¡ ƒ}t| ¡ ƒ}t ||t¡}t| }t | |¡} t ||¡}t 	| |¡}t 
|¡}|  ¡ }t ttjƒ|¡}t ttjd ƒ|¡}	t ttjd ƒ |¡}
t d|¡}t ||¡ d¡}t ||¡ d¡}t | |¡ d¡}t | |¡ d¡}t | |¡ d¡}t |t ||¡t ||¡¡}t |||
¡}t ||	|¡}t |||¡}t |||¡}t| d¡ƒS )Né   ç        r   )r   r   r   r   r‹   Úfloatr   r   r2   ÚdividerŸ   r6   ÚnpÚpiÚgreaterr   ÚlessÚgreater_equalÚequalÚselectr   r(   r	   )r   r   Úx1_typeÚx2_typer‹   r8   ÚyrA   r¦   Úhalf_piÚneg_half_piÚ
zero_constÚcond_x2_gt0Úcond_x2_lt0Úcond_x1_ge0Úcond_x1_gt0Úcond_x1_eq0Ú
out_x2_lt0Úout_x1_zeroÚout_x2_zeroÚout_not_posÚ	final_outr   r   r   Úarctan2e  s<   


ýr¼   c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Úatanhr   r–   r   r   r   Úarctanh  r˜   r¾   c           	   	   C   óþ   t | ƒ} |  ¡ }|j ¡ }|dkrtt dgtj¡ 	d¡ƒS |d u rKt dgdg|d   tj¡ 	d¡}t 
| |d¡ 	d¡} d}t dtj¡ 	d¡}n|dk rS|| }t dtj¡ 	d¡}tj| ||dddtjd}| 	d¡}|s{t ||g¡ 	d¡}t|ƒS )	Nr   r   r,   FrF   ÚvalueT©Úkr9   ÚmodeÚsortÚstableÚindex_element_type©r   r-   ÚrankÚ
get_lengthr	   r   r6   r   r7   r   r5   ÚtopkÚsqueeze©	r8   r9   r:   r<   rÈ   r‚   rÂ   Útopk_outputsÚtopk_indicesr   r   r   Úargmax˜  ó<   
ÿþù
	rÏ   c           	   	   C   r¿   )	Nr   r   r,   FrL   rÀ   TrÁ   rÇ   rÌ   r   r   r   Úargmin¸  rÐ   rÑ   r   c                 C   s  t | ƒ} |  ¡ }|j ¡ }|dkrtt dgtj¡ 	d¡ƒS |d u rRt dgtj¡ 	d¡}t 
| |d¡ 	d¡} t | tj¡ 	d¡}tj|t dgtj¡dd}d}n,|dk rZ|| }t | tj¡ 	d¡}t |t |tj¡ 	d¡t dtj¡ 	d¡¡ 	d¡}tj| ||ddd 	d¡}t|ƒS )	Nr   r   F©Ú	keep_dimsrL   rÀ   )rÂ   r9   rÃ   rÄ   r,   )r   r-   rÈ   rÉ   r	   r   r6   r   r7   r   r5   rS   Úreduce_prodÚgatherrÊ   )r8   r9   r<   rÈ   r‚   Úx_shape_tensorrÂ   Úsorted_indicesr   r   r   ÚargsortØ  sB   
ÿýüûúrØ   c                 C   s    |d urt j| |dS t  | ¡S )Nr^   )r¥   Úarray©r8   r_   r   r   r   rÙ   ù  s   
rÙ   c                 C   ru   )Nz-`view` is not supported with openvino backendrv   rÚ   r   r   r   Úviewÿ  ry   rÛ   c                 C   s>  t | ƒ} |d urt |ƒ}|d u r5t dgtj¡ d¡}t | |d¡ d¡} |d ur3t ||d¡ d¡}d}|d uru|  ¡ }| ¡ }| ¡ sJ|tj	krg| ¡ sS|tj	krgt 
| tj¡ d¡} t 
|tj¡ d¡}t| |dƒ\} }t | |¡} t|tƒr~t|ƒ}|g kr†t| ƒS tj|tjd d¡}t | |d¡}t| d¡ƒS )Nr   r   Fr*   r^   )r   r   r6   r   r7   r   r5   r   r0   r&   r2   Úf32r   r+   r   rR   ra   r	   r3   )r8   r9   Úweightsr‚   r=   Úweights_typeÚ
axis_constÚmean_opsr   r   r   Úaverage  s6   ÿ

rá   c                 C   ru   )Nz1`bartlett` is not supported with openvino backendrv   rm   r   r   r   Úbartlett#  ó   ÿrâ   c                 C   ru   )Nz0`hamming` is not supported with openvino backendrv   rm   r   r   r   Úhamming)  rã   rä   c                 C   ru   )Nz2`heaviside` is not supported with openvino backendrv   ©r   r   r   r   r   Ú	heaviside/  rã   ræ   c                 C   ru   )Nz/`kaiser` is not supported with openvino backendrv   )r8   Úbetar   r   r   Úkaiser5  ry   rè   c                 C   sø  | d u rt dƒ‚|rt dƒ‚t| ƒ} |  ¡ }t | d¡ d¡}t |d¡ d¡}t ||¡ d¡}t g |¡ d¡}t ||d¡ d¡}t d|¡ d¡}t 	||¡ d¡}	t|ƒ}t ||¡ d¡}t d|¡ d¡}
t d|¡ d¡}tj
| |dd d¡}t 	||
¡ d¡}t ||¡ d¡}tj
||dd d¡}tj| ||
|dd	 d¡}|d urãt|ƒ}| ¡ }t |ddgd¡ d¡}t ||¡ d¡}t ||¡ d¡}tj||	dd d¡}t|ƒS tj||	dd d¡}t |tj¡ d¡}t|ƒS )
Nzinput x is NonezUnsupported value `sparse=True`Úi64r   Fr   r,   rÒ   ©r9   )rQ   r   r   r   rS   r   r2   r6   r5   r   rO   rP   Úone_hotr+   Ú
reduce_sumr	   r   r7   )r8   rÝ   Ú	minlengthÚsparser=   Úshape_xÚrank_xÚscalar_shapeÚconst_minus_oneÚrank_minus_onerd   rh   Úmax_elementÚdepthÚdepth_scalarrë   rÞ   Úweights_newÚfinal_one_hotÚfinal_outputr   r   r   Úbincount9  sb   ÿþ
ÿþÿþÿþrú   c                 C   ru   )Nz1`blackman` is not supported with openvino backendrv   rm   r   r   r   Úblackmanf  rã   rû   c                 C   sL   t |ttfƒsJ dƒ‚t t|ƒtj¡ d¡}t| ƒ} t	t 
| |¡ d¡ƒS )Nz;`broadcast_to` is supported only for tuple and list `shape`r   )r   rR   ra   r   r6   r   r7   r   r   r	   rT   )r8   rc   Útarget_shaper   r   r   Úbroadcast_tol  s   ÿrý   c                 C   ru   )Nz-`cbrt` is not supported with openvino backendrv   rm   r   r   r   Úcbrtu  ry   rþ   c                 C   sJ   t | ƒ} |  ¡ }| ¡ rt | tt ¡  ¡ d¡} t 	| ¡ d¡}t
|ƒS r   )r   r   r0   r   r2   r   r   r1   r   Úceilr	   )r8   r=   Úceilingr   r   r   rÿ   y  s   rÿ   c                 C   sv   t | ƒ} |  ¡ }|tjkrt | tj¡ d¡} t ||  ¡ ƒ}t ||  ¡ ƒ}t | |¡ d¡}t 	||¡ d¡}t
|ƒS r   )r   r   r   r&   r   r2   r7   r   rP   rN   r	   )r8   Úx_minÚx_maxr=   Úclip_by_minÚclip_by_maxr   r   r   Úclip‚  s   
r  c                 C   sL   t | tƒs	J dƒ‚g }| D ]}t|ƒ}| |¡ qt ||¡ d¡}t|ƒS )Nz,`concatenate` is supported only for `x` listr   )r   ra   r   r   r   r‰   r   r	   )Úxsr9   ÚelemsÚelemÚresr   r   r   ÚconcatenateŽ  s   r
  c                 C   ru   )Nz2`conjugate` is not supported with openvino backendrv   rm   r   r   r   Ú	conjugate˜  rã   r  c                 C   ru   )Nz-`conj` is not supported with openvino backendrv   rm   r   r   r   Úconjž  ry   r  c                 C   s   | S ©Nr   rm   r   r   r   Úcopy¢  s   r  c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Úcosr   r–   r   r   r   r  ¦  r˜   r  c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Úcoshr   r–   r   r   r   r  ¯  r˜   r  c                 C   sÔ   t | ƒ} tjdtjd d¡}t || ¡}t | |¡ d¡} t | tj¡ d¡} |d u rCt dgtj¡ d¡}t 	| |d¡ d¡} d}t
|tƒrLt|ƒ}|g krTt| ƒS t |tj¡ d¡}tt | |d¡ d¡ƒS )Nr   r^   r   F)r   r   r6   r   r7   r   Úconvert_likeÚ	not_equalr2   r5   r   rR   ra   r	   rì   )r8   r9   Úzero_constantr‚   r   r   r   Úcount_nonzero¸  s   
r  c                 C   ru   )Nz.`cross` is not supported with openvino backendrv   )r   r   ÚaxisaÚaxisbÚaxiscr9   r   r   r   ÚcrossÊ  ry   r  c                 C   ru   )Nz0`cumprod` is not supported with openvino backendrv   )r8   r9   r_   r   r   r   ÚcumprodÎ  rã   r  c                 C   s°   t | ƒ} |d urtt|ƒ }t | |¡ d¡} |d u r2t dgtj¡ d¡}t 	| |d¡ d¡} d}t |tj¡ d¡}|  
¡ tjkrMt | tj¡ d¡} tt | |¡ d¡ƒS )Nr   r   F)r   r   r   r   r2   r   r6   r   r7   r5   r   r&   r	   Úcumsum)r8   r9   r_   rA   r‚   r   r   r   r  Ô  s   r  c                 C   s†   t | ƒ} |  ¡ }tjd }|tjkrtj}n| ¡ r!tt	 
¡  }n|}||kr-t | |¡} t ||¡ d¡}t | |¡ d¡}t|ƒS )Ng     €f@r   )r   r   r¥   r¦   r   ré   Úf64r0   r   r   r1   r   r2   r6   r   r+   r	   )r8   r=   Úpi_over_180Úoutput_typeÚconst_pi_over_180rB   r   r   r   Údeg2radã  s   

r  c                 C   ru   )Nz-`diag` is not supported with openvino backendrv   )r8   rÂ   r   r   r   Údiagø  ry   r   r,   c                 C   ru   )Nz1`diagonal` is not supported with openvino backendrv   ©r8   ÚoffsetÚaxis1Úaxis2r   r   r   Údiagonalü  rã   r%  c                 C   s  |dkr
t t| ƒƒS |dk rtdt|ƒ› ƒ‚t| ƒ} |  ¡ }t| tjƒr)| j}n|  	¡ j
 ¡ }|dk r8|| }| }t|ƒD ]Ê}| 	¡ j
 ¡ }t tjdg| tjdtj¡ d¡}dg| }d||< t tj|tjdtj¡ d¡}	t tjdg| tjdtj¡ d¡}
dg| }d||< dg| }tj||	|
|||g g g d	 d¡}t tjdg| tjdtj¡ d¡}dg| }d||< t tj|tjdtj¡ d¡}dg| }dg| }d||< tj||||||g g g d	 d¡}|tjkrÿt ||¡ d¡}q>t ||¡ d¡}q>t |ƒS )Nr   z#order must be non-negative but got r,   r^   )	ÚdataÚbeginÚendÚstridesÚ
begin_maskÚend_maskÚnew_axis_maskÚshrink_axis_maskÚellipsis_maskr   )r	   r   rQ   Úreprr   r   r¥   ÚndarrayÚndimr-   rÈ   rÉ   rŒ   r   r6   rÙ   Úint64r   ré   r   Ústrided_slicer&   r  r(   )ÚaÚnr9   Úa_typerÈ   rB   Ú_r)  Úbegin_upper_listÚbegin_upperÚ	end_upperÚbegin_mask_upperÚend_mask_upperÚupperÚbegin_lowerÚend_lower_listÚ	end_lowerÚbegin_mask_lowerÚend_mask_lowerÚlowerr   r   r   Údiff  sž   ÿþ
ÿþÿþ

÷
öÿþ
ÿþ

÷
ö
rD  c                 C   ru   )Nz1`digitize` is not supported with openvino backendrv   )r8   Úbinsr   r   r   ÚdigitizeK  rã   rF  c                 C   sœ   d }t | tƒr| j ¡ }t |tƒr|j ¡ }t| |ƒ} t||ƒ}t| |dƒ\} }|  ¡ jdks6| ¡ jdkrAtt 	| |¡ d¡ƒS tt 
| |dd¡ d¡ƒS )Nzdot()r   F)r   r	   r   r   r   r   r-   rÈ   r   r+   r)   r   r   r   r   ÚdotQ  s   





rG  c                 C   s~   t |ƒpt ¡ }t| }t| tƒrt| ƒ} nt| tƒr| g} t 	| t
j¡ d¡}tj	d|d d¡}t ||¡ d¡}t|ƒS rg   )r   r   r1   r   r   rR   ra   rb   r   r6   r   r7   r   rT   r	   )rc   r_   rA   Ú
shape_noderh   Úempty_tensorr   r   r   Úempty_  s   


rJ  c                 C   r   )Nzequal()r   )r   r	   r   r   r   r   r   rª   r   r   r   r   rª   l  r   rª   c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Úexpr   r–   r   r   r   rK  x  r˜   rK  c                 C   sD   t | ƒ} t|tƒrt|ƒ}t |tj¡ d¡}t	t 
| |¡ d¡ƒS r   )r   r   rR   ra   r   r6   r   r7   r   r	   Ú	unsqueeze©r8   r9   r   r   r   Úexpand_dims  s
   
rN  c                 C   sj   t | ƒ} |  ¡ }| ¡ rtt ¡  }t | |¡} t | ¡ 	d¡}t 
d| ¡ ¡}t ||¡ 	d¡}t|ƒS )Nr   r,   )r   r   r0   r   r   r1   r   r2   rK  r   r6   r(   r	   )r8   r=   rA   Úexp_xrd   rB   r   r   r   Úexpm1‰  s   rP  c                 C   ru   )Nz-`flip` is not supported with openvino backendrv   rM  r   r   r   Úflip•  ry   rQ  c                 C   ó@   t | ƒ} |  ¡ }| ¡ rt | tt ¡  ¡} tt 	| ¡ 
d¡ƒS r   )r   r   r0   r   r2   r   r   r1   r	   Úfloorr   rk   r   r   r   rS  ™  ó
   rS  c                 C   sX   t |ƒpt ¡ }t| }t||ƒ}t| tƒrt| ƒ} t 	| t
j¡}tt ||¡ d¡ƒS r   )r   r   r1   r   r   r   rR   ra   r   r6   r   r7   r	   rT   r   )rc   Ú
fill_valuer_   rA   rü   r   r   r   Úfull¡  s   

ÿrV  c                 C   s\   t | ƒ} t | ¡}|d urtt|ƒ }n|  ¡ }t ||¡ d¡}t ||¡ d¡}t	|ƒS r   )
r   r   rS   r   r   r   r6   r   rT   r	   )r8   rU  r_   rï   rA   Úconst_valuer	  r   r   r   Ú	full_like­  s   
rX  c                 C   ru   )Nz,`gcd` is not supported with openvino backendrv   rå   r   r   r   Úgcd¹  ry   rY  c                 C   r   )Nz	greater()r   )r   r	   r   r   r   r   r   r§   r   r   r   r   r§   ½  r   r§   c                 C   r   )Nzgreater_equal()r   )r   r	   r   r   r   r   r   r©   r   r   r   r   r©   É  r   r©   c                    s´   t | ttfƒs
| f} dd„ | D ƒ}|d j ¡ ‰ ‡ fdd„|D ƒ}|o.t|d  ¡  ¡ ƒdk}|r3dnd}tdt|ƒƒD ]}t	|d || dƒ\|d< ||< q<t
t ||¡ d¡ƒS )Nc                 S   ó   g | ]}t |ƒ‘qS r   r   ©Ú.0r  r   r   r   Ú
<listcomp>Ø  ó    zhstack.<locals>.<listcomp>r   c                    s   g | ]}t |ˆ ƒ‘qS r   r   r[  ©r   r   r   r]  Ú  s    r,   zhstack())r   ra   rR   r   r   r4   r-   r.   rŒ   r   r	   r   r‰   )r  r  Úis_1dr9   Úir   r_  r   ÚhstackÕ  s   ÿrb  c                 C   ru   )Nz.`hypot` is not supported with openvino backendrv   rå   r   r   r   Úhypotä  ry   rc  c                 C   sf   t | ƒ} |d u rtjn|}t|tƒrt| }n|}t | tj¡ 	d¡}tj
||d|d}t| 	d¡ƒS )Nr   )Únum_rowsÚnum_columnsÚdiagonal_indexr  )r   r   rÜ   r   Ústrr   r   r2   r7   r   Úeyer	   )r5  r_   Úov_dtypeÚn32Úidentity_matrixr   r   r   Úidentityè  s   

ÿrl  c                 C   ru   )Nz-`imag` is not supported with openvino backendrv   rm   r   r   r   Úimagö  ry   rm  çñhãˆµøä>ç:Œ0âŽyE>c                 C   s²   t t ¡  }t t| ƒ|¡} t t|ƒ|¡}t t|ƒ|¡}t t|ƒ|¡}t | | ¡}t |¡}|||  }t ||¡}	|rRt t 	| ¡t 	|¡¡}
t 
|	|
¡}	t|	 d¡ƒS r   )r   r   r1   r   r2   r   rn   Ú
less_equalÚlogical_andÚisnanÚ
logical_orr	   r   )r   r   ÚrtolÚatolÚ	equal_nanr_   Úabs_diffÚabs_x2Útotal_toleranceÚis_closeÚboth_nanr   r   r   Úiscloseú  s   
r|  c                 C   sB   t t| ƒƒ}t t| ƒƒ}t ||¡ d¡}t |¡ d¡}t|ƒS r   )r   Úisinfrr  r   rs  r   Úlogical_notr	   )r8   Ú
inf_valuesÚ
nan_valuesÚall_non_finite_valuesÚ	is_finiter   r   r   Úisfinite  s   ÿrƒ  c                 C   ru   )Nz-`isin` is not supported with openvino backendrv   )r   r   Úassume_uniqueÚinvertr   r   r   Úisin  ry   r†  c                 C   s2   t t| ƒƒ}t t| ƒƒ}t ||¡ d¡}t|ƒS r   )r   ÚisposinfÚisneginfr   rs  r   r	   )r8   Úpos_infÚneg_infÚinfr   r   r   r}    s   r}  c                 C   rR  r   )r   r   r0   r   r2   r   r   r1   r	   Úis_nanr   rk   r   r   r   rr  %  rT  rr  c                 C   s   t | ddS )NF)Úpos©Ú_is_infrm   r   r   r   rˆ  -  s   rˆ  c                 C   s   t | ƒS r  rŽ  rm   r   r   r   r‡  1  ry   r‡  Tc           	      C   sJ  |rt jnt j }t| ƒ} |  ¡ }| ¡ s|tjkr8t | d¡ 	d¡}t 
dtj¡ 	d¡}tt ||¡ 	d¡ƒS |tjkr^t | tj¡ 	d¡}t 
|tj¡ 	d¡}t ||¡ 	d¡}t|ƒS |tjkrnt 
|tj¡ 	d¡}n*|tjkr~t 
|tj¡ 	d¡}n|tjkrŽt 
|tj¡ 	d¡}n
t 
|tj¡ 	d¡}t | |¡ 	d¡}t|ƒS )Nr7   r   F)r¥   r‹  r   r   r0   r   r&   r   rS   r   r6   r	   rT   Úbf16r2   rÜ   rª   Úf16r  )	r8   r  Ú	inf_valuer=   rc   Úfalse_constÚx_f32r‹  Úis_infr   r   r   r  5  s.   ÿ

÷

r  c                 C   ru   )Nz/`isreal` is not supported with openvino backendrv   rm   r   r   r   ÚisrealW  ry   r–  c                 C   ru   )Nz-`kron` is not supported with openvino backendrv   rå   r   r   r   Úkron[  ry   r—  c                 C   ru   )Nz,`lcm` is not supported with openvino backendrv   rå   r   r   r   Úlcm_  ry   r˜  c                 C   r   )Nzless()r   )r   r	   r   r   r   r   r   r¨   r   r   r   r   r¨   c  r   r¨   c                 C   r   )Nzless_equal()r   )r   r	   r   r   r   r   r   rp  r   r   r   r   rp  o  r   rp  é2   c           !   
   C   sÈ  t | ƒ} t |ƒ}t|dƒst|tƒrCt |ƒ}z| ¡  ¡ dkr,| ¡  ¡ d }t|ƒ}ntdƒ‚W n t	yB }	 ztdƒ|	‚d}	~	ww t|ƒ}|du rRt
t ¡  }
nt
| }
t | |
¡ d¡} t ||
¡ d¡}|dk rptdƒ‚|dkr§t dgtj¡ d¡}t t d|
¡ d¡|¡ d¡}|r£t tj|
¡ d¡}t|ƒt|ƒfS t|ƒS |d	krá| }t |gtj¡ d¡}t ||¡ d¡}|rá|rÐt tj|
¡ d¡}n	t || ¡ d¡}t|ƒt|ƒfS t dtj¡ d¡}t d	tj¡ d¡}t d	gtj¡ d¡}t ||
¡ d¡}|rt |t d	|
¡ d¡¡ d¡}n|}t t || ¡ d¡|¡ d¡}t |t |tj¡ d¡||
¡ d¡}t t | ¡ d¡tj¡ d¡}t t |¡ d¡tj¡ d¡}t |¡ d¡}t ||¡ d¡}|dkrt ||gd¡ d¡}t ||gd¡ d¡}nt ||gd¡ d¡}t ||gd¡ d¡}t ||d
¡ d¡}t | |d
¡ d¡}t ||d
¡ d¡}t ||¡ d¡} t || ¡ d¡}|ràt|ƒt|ƒfS t|ƒS )zíReturn evenly spaced numbers over a specified interval.

    Supports axis=0 (prepend) and axis=-1 (append). Intermediate axis values are
    treated as axis=-1.

    If `retstep` is True, also returns the step size between values.

    r   ÚConstantr   z&Dynamic num values not fully supportedz'Could not extract num value from tensorNz/Number of samples, `num`, must be non-negative.r¢   r,   F) r   Úhasattrr   r	   Úget_nodeÚget_type_nameÚ
get_vectorrb   rw   Ú	Exceptionr   r   r1   r   r2   r   rQ   r6   r   r7   rT   r¥   ÚnanrL  r(   r¤   rŒ   rS   r‰   r5   r+   r   )!r   rŽ   ÚnumÚendpointÚretstepr_   r9   Ú
num_tensorÚ	num_valueÚer  Úempty_shaperB   Únan_stepÚ
result_valrß   r   Úzero_i32Úone_i32Úone_i32_arrayÚ	num_constÚdivisorÚindicesÚstart_shapeÚindices_shapeÚ
start_rankÚones_for_startÚindices_target_shapeÚstart_target_shapeÚindices_reshapedÚstart_reshapedÚstep_reshapedÚscaled_indicesr   r   r   Úlinspace{  sò   
ÿþÿþ€ÿÿþÿþÿþüûÿþÿþ
ÿþÿþÿþÿþÿþÿÿrº  c                 C   sD   t | ƒ} |  ¡ }| ¡ rtt ¡  }t | |¡} tt 	| ¡ 
d¡ƒS r   )r   r   r0   r   r   r1   r   r2   r	   Úlogr   rk   r   r   r   r»  ý  r˜   r»  c                 C   ó|   t | ƒ} |  ¡ }| ¡ rtt ¡  }t | |¡} t | ¡ 	d¡}t 
d|¡ 	d¡}t |¡ 	d¡}t ||¡ 	d¡}t|ƒS )Nr   é
   ©r   r   r0   r   r   r1   r   r2   r»  r   r6   r¤   r	   )r8   r=   Úlog_xÚconst_10Úlog_10rB   r   r   r   Úlog10  ó   rÂ  c                 C   sl   t | ƒ} |  ¡ }| ¡ rtt ¡  }t | |¡} t d|¡ 	d¡}t 
| |¡ 	d¡}t |¡ 	d¡}t|ƒS ©Nr,   r   )r   r   r0   r   r   r1   r   r2   r6   r   r   r»  r	   )r8   r=   Ú	one_constÚaddedrB   r   r   r   Úlog1p  s   rÇ  c                 C   r¼  ©Nr   r¡   r¾  )r8   r=   r¿  Úconst_2Úlog_2rB   r   r   r   Úlog2!  rÃ  rË  c                 C   sf  d }t | tƒr| j ¡ }t |tƒr|j ¡ }t| |ƒ} t||ƒ}t| |dƒ\} }| j ¡ s2|j ¡ rNtt	 
¡  }| j ¡ rCt | |¡} |j ¡ rNt ||¡}t | |¡}| d¡}t | |¡}t | d¡¡}| d¡}t |¡}	|	 d¡}
t |
¡}| d¡}| ¡ }t d|¡}| d¡}t ||¡}| d¡}t |¡}| d¡}t ||¡}| d¡}t|ƒS )Nzlogaddexp()r   r,   )r   r	   r   r   r   r   r   r0   r   r   r1   r   r2   rP   r(   rn   ÚnegativerK  r6   r   r»  )r   r   r   Úfloat_dtypeÚmax_val_nodeÚmax_valÚsub_nodeÚabs_diff_noderw  Úneg_abs_diff_nodeÚneg_abs_diffÚexp_neg_abs_nodeÚexp_neg_absÚone_noder]   Úone_plus_exp_nodeÚone_plus_expÚlog_term_nodeÚlog_termÚresult_noderB   r   r   r   Ú	logaddexp.  sB   


















rÜ  c                 C   ru   )Nz3`logaddexp2` is not supported with openvino backendrv   rå   r   r   r   Ú
logaddexp2`  rã   rÝ  c                 C   óN   t | ƒ} t |ƒ}t | tj¡ d¡} t |tj¡ d¡}tt | |¡ d¡ƒS r   )r   r   r2   r   r&   r   r	   rq  rå   r   r   r   rq  f  ó
   rq  c                 C   s0   t | ƒ} t | tj¡ d¡} tt | ¡ d¡ƒS r   )r   r   r2   r   r&   r   r	   r~  rm   r   r   r   r~  n  s   r~  c                 C   rÞ  r   )r   r   r2   r   r&   r   r	   rs  rå   r   r   r   rs  t  rß  rs  r½  c              	   C   sp   t | |||d||d}|d u rtt ¡  }nt| }t|ƒ}	t|ƒ}
t |
|¡ d¡}
t |
|	¡ d¡}t	|ƒS )NF)r   rŽ   r¡  r¢  r£  r_   r9   r   )
rº  r   r   r1   r   r   r2   r   Úpowerr	   )r   rŽ   r¡  r¢  Úbaser_   r9   Úlinear_samplesr  Úlinear_outputÚbase_tensorrB   r   r   r   Úlogspace|  s"   ù
rå  c                 C   ó6   t | ƒ} t |ƒ}t| |dƒ\} }tt | |¡ d¡ƒS )Nz	maximum()r   )r   r   r	   r   rP   r   rå   r   r   r   rP   –  ó   rP   c                  C   s‚  t | ƒ} |  ¡ }|j ¡ }|dkrt| ƒS d}|d u r/t | dgd¡ d¡} d}|}d}d}nt|t	t
fƒrDt|ƒdkr@tdƒ‚|d }|dk rL|| }|}tj| tjd d¡}t |t |gtj¡ d¡t dtj¡ d¡¡ d¡}t |dg¡ d¡}	tj| |	|dd	dd
}
|
 d¡}t| ¡ ƒ}t |t¡}t| }t ||¡ d¡}t |	t dtj¡ d¡¡ d¡}t |	t dtj¡ d¡¡ d¡}t |t dtj¡ d¡¡ d¡}t |	t dtj¡ d¡¡ d¡}t |t dtj¡ d¡¡ d¡}|}t |t dtj¡ d¡¡ d¡}|}t |dg¡ d¡}t |dg¡ d¡}t |dg¡ d¡}t ||t |tj¡ d¡¡ d¡}t ||t |tj¡ d¡¡ d¡}t ||t |tj¡ d¡¡ d¡}t  ||¡ d¡}t |t d|¡ d¡¡ d¡}t !|||¡ d¡}t ||g¡ d¡}|r½|r³t dg| tj¡ d¡}t ||d¡ d¡}t|ƒS t ||g¡ d¡}t|ƒS )Nr   Fr   r,   Tz*median only supports single axis reduction©r  rL   rÀ   ©rÂ   r9   rÃ   rÄ   rÅ   r¡   g       @)"r   r-   rÈ   rÉ   r	   r   r5   r   r   rR   ra   r4   rQ   rS   r   r7   rÕ   r6   rË   rÊ   r   r   r   r‹   r£   r   r2   r(   r¤   Úmodrª   rL  r   r«   ) r8   r9   r:   r<   rÈ   Úflattened_allÚoriginal_rankÚshape_tensorrÂ   Úk_scalarrÍ   Úsorted_valuesr¬   r‹   Ú	k_minus_1Úk_div_2Úk_minus_1_div_2Úk_mod_2Úis_oddÚodd_idxÚ	even_idx1Ú	even_idx2Úgather_indices_oddÚgather_indices_even1Úgather_indices_even2Ú
odd_resultÚeven_result1Úeven_result2Úeven_sumÚeven_resultÚmedian_resultÚ
ones_shaper   r   r   Úmedian  sæ   
ýüÿ
ÿþÿþÿþÿþÿþÿþýüýüýüÿþÿþÿþþr  Úxy)Úindexingc                 G   sr  t |ƒdk rtdt |ƒ› dƒ‚| dvrtdƒ‚dd„ |D ƒ}t |ƒ}dd„ |D ƒ}t d	gtj¡ d
¡}| dkrR|d	 |d
 g|dd …  }tj|d
d d
¡}n
tj|d
d d
¡}g }t|ƒD ]T\}	}
|g| }| dkrŒ|	d
krz|d
 |d	< n|	d	kr…|d	 |d
< n||	 ||	< n||	 ||	< tj|d
d d
¡}t 	|
|d¡ d
¡}t 
||¡ d
¡}| t|ƒ¡ qb|S )Nr¡   z5meshgrid requires at least 2 input arrays. Received: z input array(s).)r  Úijz$indexing must be either 'xy' or 'ij'c                 S   rZ  r   r   )r\  Úxir   r   r   r]  -  r^  zmeshgrid.<locals>.<listcomp>c                 S   s    g | ]}t  |tj¡ d ¡‘qS ©r   )r   rS   r   ré   r   )r\  Útr   r   r   r]  0  s    ÿr,   r   r  rê   F)r4   rQ   r   r6   r   ré   r   r‰   Ú	enumerater5   rT   r   r	   )r  r8   Útensorsr5  Úshapesr]   Ú
shape_listÚ	out_shapeÚoutputsra  r  Úreshape_partsÚreshape_shapeÚreshapedÚbroadcastedr   r   r   Úmeshgrid$  sB   ÿÿÿ
r  c                 C   rE   )NrL   rG   rI   r   r   r   rL   P  rK   rL   c                 C   ræ  )Nz	minimum()r   )r   r   r	   r   rN   r   rå   r   r   r   rN   T  rç  rN   c                 C   ræ  )Nzmod()r   )r   r   r	   r   Ú	floor_modr   rå   r   r   r   rê  [  rç  rê  c                    sº   t | ƒ} t|tƒr|g}t|tƒr|g}|  ¡ j ¡ ‰ ‡ fdd„|D ƒ}‡ fdd„|D ƒ}ttˆ ƒƒ}t||ƒD ]\}}| 	|¡ | 
||¡ q8t |tj¡ d¡}tt | |¡ d¡ƒS )Nc                    ó    g | ]}|d kr
|n|ˆ  ‘qS r  r   ©r\  r9   ©r1  r   r   r]  j  ó     zmoveaxis.<locals>.<listcomp>c                    r  r  r   r  r  r   r   r]  k  r  r   )r   r   rb   r-   rÈ   rÉ   ra   rŒ   ÚzipÚremoveÚinsertr   r6   r   r7   r   r	   Ú	transpose)r8   ÚsourceÚdestinationÚaxesÚsrcÚdstÚ
axes_constr   r  r   Úmoveaxisb  s   


r#  r¢   c                 C   sB  t | ƒ} |  ¡ }| ¡ rt| ƒS |tjkrdnd}|r(t | tj¡ 	d¡} tj}t 
||¡ 	d¡}t 
|d ur9|nt| |¡ 	d¡}t 
|d urJ|nt| |¡ 	d¡}t | dddœ¡ 	d¡}	t | dddœ¡ 	d¡}
t | ¡ 	d¡}t ||| ¡ 	d¡} t |	|| ¡ 	d¡} t |
|| ¡ 	d¡} |rt | tj¡ 	d¡} t| ƒS )NTFr   )Údetect_positiveÚdetect_negative)r   r   r0   r	   r   r  r   r2   rÜ   r   r6   r   r   r•  rŒ  r«   )r8   r   ÚposinfÚneginfr_   Ú	isfloat64Únan_valÚ
posinf_valÚ
neginf_valÚposinf_maskÚneginf_maskÚnan_maskr   r   r   Ú
nan_to_numv  sL   ÿþÿþþýþýr/  c                 C   s8   t | ƒ} t | tj¡ d¡}t |tj¡ d¡}t|ƒS r   )r   r   rS   r   ré   r   r	   )r8   rí  Úrank_tensorr   r   r   r1  —  s   r1  c                 C   s$   t | ƒ} tj| dd d¡}t|ƒS )Nr7   )r&  r  r   )r   r   Únon_zeror   r	   )r8   r	  r   r   r   Únonzerož  s   r2  c                 C   r   )Nznot_equal()r   )r   r	   r   r   r   r   r   r  r   r   r   r   r  ¤  r   r  c                 C   sj   t | ƒ} t | ¡}|d urtt|ƒ }t d|¡ d¡}nt d|  ¡ ¡ d¡}t ||¡ d¡}t	|ƒS r   ©
r   r   rS   r   r   r6   r   r   rT   r	   )r8   r_   rï   rA   rh   r	  r   r   r   Ú
zeros_like°  ó   
r4  c                 C   sj   t | ƒ} t | ¡}|d urtt|ƒ }t d|¡ d¡}nt d|  ¡ ¡ d¡}t ||¡ d¡}t	|ƒS rÄ  r3  )r8   r_   rï   rA   rd   r	  r   r   r   Ú	ones_like¼  r5  r6  c                 C   s’   t | ƒ} t |ƒ}t| |dƒ\} }t ddgtj¡ d¡}t ddgtj¡ d¡}t | |d¡ d¡}t ||d¡ d¡}t ||¡ d¡}t	|ƒS )Nzouter()r   r,   r   F)
r   r   r   r6   r   r7   r   r5   r+   r	   )r   r   Únew_shape_x1Únew_shape_x2Úx1_reshapedÚx2_reshapedrB   r   r   r   ÚouterÈ  s   r;  r6   c                 C   s²   t | ƒ} d }|d ur |dkrtd|› ƒ‚t|tƒsJ dƒ‚|}g }g }|D ]}| |d ¡ | |d ¡ q&t |tj¡ 	d¡}t |tj¡ 	d¡}t
t | ||||¡ 	d¡ƒS )Nr6   zZArgument `constant_values` can only be provided when `mode == 'constant'`. Received: mode=zS`pad` operation supports only scalar pad value in constant mode by openvino backendr   r,   )r   rQ   r   rb   r   r   r6   r   r7   r   r	   Úpad)r8   Ú	pad_widthrÃ   Úconstant_valuesÚ	pad_valueÚ
pads_beginÚpads_endÚ	pads_pairr   r   r   r<  Ú  s.   þÿÿÿr<  c                 C   sr   t | ƒ} |d urtt|ƒ }t | |¡ d¡} nt| ƒ} t| |ƒ\} }|d u r+t| ƒS t 	| ||¡ d¡}t|ƒS r   )
r   r   r   r   r2   r   rˆ   r/   r	   rÔ   )r8   r9   r:   r_   ri  rB   r   r   r   Úprod÷  s   rC  Úlinearc                 C   ru   )Nz1`quantile` is not supported with openvino backendrv   )r8   Úqr9   Úmethodr:   r   r   r   Úquantile
  rã   rG  c                 C   s:   t | ƒ} tjdgtjd d¡}ttj| |dd d¡ƒS )Nr   r^   r   F©Úspecial_zero)r   r   r6   r   r7   r   r	   r5   )r8   rü   r   r   r   Úravel  s
   ÿrJ  c                 C   ru   )Nz-`real` is not supported with openvino backendrv   rm   r   r   r   Úreal  ry   rK  c                 C   s:   t | ƒ} tjd|  ¡ d d¡}t || ¡ d¡} t| ƒS )Nr,   r^   r   )r   r   r6   r   r   r¤   r	   )r8   Úone_constantr   r   r   Ú
reciprocal  s   rM  c                 C   s6  t | ƒ} t dtj¡}t dtj¡}t dgtj¡}|d ur*|dk r*|t|  ¡ ƒ7 }|d u r8tj| |dd} d}t|t	t
jfƒsPt|t
jƒrµ|jdkrµ|jdkrµt|t
jt
jfƒr]t	|ƒn|}t t | tj¡t |gtj¡|¡}t |t dgtj¡¡}tj|||tjd}t ||¡}t |t d|gtj¡¡}	tj|	|dd}
t | |
t |tj¡¡}t| d¡ƒS t |ƒ}t ||¡}tj|t dgtj¡dd}t |tj¡}tj|||tjd}t ||¡}t ||¡}t |tj¡}t ||¡}t t |tj¡t dgtj¡¡}t | |t |tj¡¡}t| d¡ƒS )Nr   r,   r   FrH  rè  rÒ   )r   r   r6   r   r7   r4   r-   r5   r   rb   r¥   Úintegerr0  r1  ÚsizerÕ   rS   rË   rŒ   rL  Útiler	   r   r  rì   r2   r©   )r8   Úrepeatsr9   Úconst_0Úconst_1Úconst_neg_1Úrepeats_valÚdim_lenÚ	idx_rangeÚtiledÚidxrB   Úrepeats_tensorr  ÚtotalÚout_indicesÚcumsum_unsqÚout_indices_unsqÚmaskÚgather_indicesr   r   r   Úrepeat#  sh   
ÿ


ÿýý
ÿÿÿÿÿra  c                 C   sF   t | ƒ} t|tƒrt|ƒ}t |tj¡ d¡}t	t 
| |d¡ d¡ƒS ©Nr   F)r   r   rR   ra   r   r6   r   r7   r   r	   r5   )r8   Únewshaper   r   r   r5   ^  s
   
r5   c                 C   ru   )Nz-`roll` is not supported with openvino backendrv   )r8   Úshiftr9   r   r   r   Úrollf  ry   re  c                 C   rl   r   )r   r	   r   Úsignr   rm   r   r   r   rf  j  ro   rf  c                 C   ru   )Nz0`signbit` is not supported with openvino backendrv   rm   r   r   r   Úsignbito  rã   rg  c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Úsinr   r–   r   r   r   rh  u  r˜   rh  c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Úsinhr   r–   r   r   r   ri  ~  r˜   ri  c                 C   ru   )Nz-`size` is not supported with openvino backendrv   rm   r   r   r   rO  ‡  ry   rO  c           	      C   sú   t | ƒ} |  ¡ }|j ¡ }|dkrt| ƒS |d u r,t | t dgtj	¡d¡ 
d¡} d}n|dk r4|| }tj| tj	d 
d¡}t |t |gtj	¡ 
d¡t dtj	¡ 
d¡¡ 
d¡}t |t dgtj	¡¡ 
d¡}tj| ||dddd}| 
d¡}t|ƒS )	Nr   r   Frè  rL   rÀ   Tré  )r   r-   rÈ   rÉ   r	   r   r5   r6   r   r7   r   rS   rÕ   rË   rÊ   )	r8   r9   r<   rÈ   rí  rÂ   rî  rÍ   rï  r   r   r   rÄ   ‹  s8   
ÿþýüÿ
rÄ   c                 C   sš  t | ƒ} tj|tjd d¡}t | ¡}tj|gtjd}t ||tjdtjd¡}t|t	ƒrN|}tj
| ||d}g }	t|ƒD ]}
|	 t| |
¡ƒ¡ q?|	S t|tttjfƒrÄt|ƒ}g }| |d ¡ tdt|ƒƒD ]}
| ||
 ||
d   ¡ qktj|d tjd}t ||¡}g }| tj|tjd¡ | |¡ tj|dd}t | ||¡}g }	tt|ƒd ƒD ]}
|	 t| |
¡ƒ¡ qµ|	S tdt|ƒ› ƒ‚)Nr^   r   )Ú
num_splitsr,   r   rê   z)unsupported type of indices_or_sections: )r   r   r6   r   r7   r   rS   rÕ   r   rb   ÚsplitrŒ   r   r	   ra   rR   r¥   r0  r4   ré   r(   r‰   Úvariadic_splitÚ	TypeErrorÚtype)r8   Úindices_or_sectionsr9   Úaxis_tensorrí  Úaxis_i32Údim_at_axis_tensorrj  ÚsplitsrB   ra  r¯  Úsplit_lengthsÚlast_index_tensorÚremaining_length_tensorÚlength_partsÚlength_tensorr   r   r   rk  ³  sH   
ÿ
ÿ
ÿrk  c                    s®   t | tƒr	t| ƒ} t | tƒsJ dƒ‚dd„ | D ƒ}|d }tdt|ƒƒD ]}t||| dƒ\}||< q$||d< t |tj	¡ 
d¡‰ ‡ fdd„|D ƒ}t ||¡ 
d¡}t|ƒS )Nz*`stack` supports only `x` as list or tuplec                 S   rZ  r   r   ©r\  r¦  r   r   r   r]  å  r^  zstack.<locals>.<listcomp>r   r,   zstack()c                    s   g | ]}t  |ˆ ¡ d ¡‘qS r  )r   rL  r   ry  ©Ú
const_axisr   r   r]  ë  s    )r   rR   ra   rŒ   r4   r   r   r6   r   r7   r   r‰   r	   )r8   r9   r  Úrefra  r	  r   rz  r   Ústacká  s   
r}  c                 C   sØ   t | ƒ} |d u rt dgtj¡ d¡}t | |d¡ d¡} d}t |tj¡ d¡}t | ||¡ d¡}t d|  ¡ ¡ d¡}t 	| |¡ d¡}t 	||¡ d¡}t |||¡}t 
||¡ d¡}	tt |	¡ d¡ƒ}
|
S ©Nr   r   Fr¡   )r   r   r6   r   r7   r   r5   r3   r   rà  r(   r	   Úsqrt)r8   r9   r:   r‚   rD   Ú	const_twoÚ	squared_xÚsquared_meanÚsquared_x_meanÚvarianceÚstd_varr   r   r   Ústdð  s   r†  c                 C   ru   )Nz1`swapaxes` is not supported with openvino backendrv   )r8   r#  r$  r   r   r   Úswapaxes  rã   r‡  c                 C   sŠ   t | ƒ} t |ƒ}|d u r.tjdgtjd d¡}t | |d¡ d¡} tjdtjd d¡}ntj|tjd d¡}tt | ||¡ d¡ƒS )Nr   r^   r   F)	r   r   r6   r   r7   r   r5   r	   rÕ   )r8   r¯  r9   rü   r   r   r   Útake	  s   rˆ  c                 C   s€  t | ƒ} t |ƒ}|d u r:tjdgtjd d¡}t | |d¡ d¡}t ||d¡ d¡}t ||d¡ d¡}t|ƒS t	|  
¡ ƒ}|dk rH||7 }t | tj¡ d¡}t |tj¡ d¡}	tjdtjd d¡}
tj|gtjd d¡}t t |||
¡ d¡|
¡ d¡}t d| ¡ ¡ d¡}t ||¡ d¡}t || ¡ ¡ d¡}t |t ||¡ d¡|¡ d¡}t |tj¡ d¡}g g }}t|ƒD ]D}tj|gtjd d¡}t |||
¡ d¡}t |	||
¡ d¡}||krø| |¡ | |¡ qÇt ||¡ d¡}| |¡ | |¡ qÇtj|dd d¡}tj|dd d¡}t | |¡ d¡}t ||¡ d¡}t |||¡ d¡}t|ƒS )Nr   r^   r   Frê   )r   r   r6   r   r7   r   r5   Úgather_elementsr	   r4   r-   rS   rË   rÕ   r   r¨   r2   r«   r   rŒ   r   rP   r‰   rT   )r8   r¯  r9   rü   Úx_flatÚindices_flatrB   Úx_rankr<   r±  r±   Ú
axis_indexÚdim_sizeÚzero_scalarÚis_negÚdim_size_castÚx_target_partsÚindices_target_partsra  Údim_idxÚx_dimÚindices_dimÚmax_dimÚx_target_shaper´  Úx_broadcastedÚindices_broadcastedr   r   r   Útake_along_axis  s€   ÿþÿþÿþ
ÿþ

ÿÿþÿþr›  c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Útanr   r–   r   r   r   rœ  \  r˜   rœ  c                 C   r”   r   )r   r   r0   r   r   r1   r   r2   r	   Útanhr   r–   r   r   r   r  e  r˜   r  r¡   c                 C   ru   )Nz2`tensordot` is not supported with openvino backendrv   )r   r   r  r   r   r   Ú	tensordotn  rã   rž  c                 C   ru   )Nz.`round` is not supported with openvino backendrv   )r8   Údecimalsr   r   r   Úroundt  ry   r   c                 C   ru   )Nz-`tile` is not supported with openvino backendrv   )r8   rQ  r   r   r   rP  x  ry   rP  c                 C   ru   )Nz.`trace` is not supported with openvino backendrv   r!  r   r   r   Útrace|  ry   r¡  c                 C   s  |d u r| }|d u rd}t | }tjfdd„}|| ƒ}||ƒ}||ƒ}tjt dtj¡|t dtj¡tjd}	tjt dtj¡|t dtj¡tjd}
t |	t dgtj¡¡}t |
t dgtj¡¡}t |t ||¡¡}|tj	kru|}nt 
||¡}t| d¡ƒS )NÚfloat32c                 S   sd   t | ttfƒrt | |¡S t| dƒr,|  ¡ tjkr t 	| tj¡} t 
| t dgtj¡¡S t | |¡S )Nr   r   )r   rb   r£   r   r6   r›  r   r   r7   r2   rË   )rÀ   Údefault_typer   r   r   Úensure_constantˆ  s   
ztri.<locals>.ensure_constantr   r,   rè  )r   r   r7   r   rŒ   r6   rL  rp  r   r&   r2   r	   r   )ÚNÚMrÂ   r_   ri  r¤  ÚN_constÚM_constÚk_constÚ	row_rangeÚ	col_rangeÚrow_idxÚcol_idxr_  rB   r   r   r   Útri€  s8   
üü
r®  c                 C   sÈ   t | ƒ} |  ¡ }t | tj¡}t dtj¡}t dgtj¡}t dgtj¡}t t |||¡|¡}t t |||¡|¡}t	|||ddj
}	t |	|¡}
|tjkrWt | |
¡}nt | |
¡}t| 
d¡ƒS )Nr   éþÿÿÿr   Úbool©rÂ   r_   )r   r   r   rS   r   r7   r6   rË   rÕ   r®  r   r2   r&   rq  r+   r	   )r8   rÂ   rA   rc   r±   Úminus2Úminus1r¦  r¥  Útri_maskr_  Úoutr   r   r   Útril²  s   
r¶  c                 C   sú   t | ƒ} |  ¡ }t | tj¡}t dtj¡}t dgtj¡}t dgtj¡}t t |||¡|¡}t t |||¡|¡}t	|||d ddj
}	|tjkrRt |	¡}
nt d|¡}t |	|¡}t ||¡}
|tjkrpt | |
¡}nt | |
¡}t| 
d¡ƒS )Nr   r¯  r   r,   r°  r±  )r   r   r   rS   r   r7   r6   rË   rÕ   r®  r   r&   r~  r2   r(   rq  r+   r	   )r8   rÂ   rA   rc   r±   r²  r³  r¦  r¥  r´  r_  rd   Úconverted_maskrµ  r   r   r   ÚtriuÄ  s$   

r¸  c                 C   ru   )Nz-`vdot` is not supported with openvino backendrv   rå   r   r   r   ÚvdotÛ  ry   r¹  c                 C   ru   )Nz/`vstack` is not supported with openvino backendrv   )r  r   r   r   Úvstackß  ry   rº  )ÚexcludedÚ	signaturec                C   ru   )Nz2`vectorize` is not supported with openvino backendrv   )Úpyfuncr»  r¼  r   r   r   Ú	vectorizeã  rã   r¾  c                 C   sÌ   t | ƒ} |d u r|d u rt | ¡}t| d¡ƒS |d u r t| ƒS |d u r(tdƒ‚dd„ }t|ttfƒr;|||ƒ\}}nt|ttfƒrJ|||ƒ\}}nt |ƒ}t |ƒ}t	||dƒ\}}tt 
| ||¡ d¡ƒS )Nr   z'x2 must be provided if x1 is specified.c                 S   sR   t |ƒ ¡ }|tjk}t| tƒo| ¡ }|s|r t | ƒt |ƒfS t | |ƒt |ƒfS r  )r   r   r   r&   r   r£   r0   )Úliteralr8   rA   rY   Úis_float_to_intr   r   r   Úcast_literal_like_tensoró  s   
z'where.<locals>.cast_literal_like_tensorzselect())r   r   r1  r	   r   rQ   r   rb   r£   r   r«   )Ú	conditionr   r   Únonzero_indicesrÁ  r   r   r   Úwhereé  s"   
rÄ  c                 C   s¨   d }t | tƒr| j ¡ }t |tƒr|j ¡ }t| |ƒ} t||ƒ}t|  ¡ ƒ}t| ¡ ƒ}t ||t¡}t	| }t
 | |¡ d¡} t
 ||¡ d¡}tt
 | |¡ d¡ƒS r   )r   r	   r   r   r   r   r   r‹   r£   r   r   r2   r¤   )r   r   r   r¬   r­   r‹   r   r   r   r¤   	  s   





r¤   c                 C   ru   )Nz6`divide_no_nan` is not supported with openvino backendrv   rå   r   r   r   Údivide_no_nan	  rã   rÅ  c                 C   s
   t | |ƒS r  )r¤   rå   r   r   r   Útrue_divide	  s   
rÆ  c                 C   r   )Nzpower()r   )r   r	   r   r   r   r   r   rà  r   r   r   r   rà  !	  r   rà  c                 C   rl   r   )r   r	   r   rÌ  r   rm   r   r   r   rÌ  -	  ro   rÌ  c                 C   sZ   t | ƒ} |  ¡ }|tjkrt | tj¡ d¡} t d|  ¡ ¡ d¡}t	t 
| |¡ d¡ƒS rÈ  )r   r   r   r&   r   r2   r7   r   r6   r	   rà  )r8   r=   r€  r   r   r   Úsquare2	  s   
rÇ  c                 C   sJ   t | ƒ} |  ¡ }| ¡ rtt ¡  }t | |¡ d¡} t	t 
| ¡ d¡ƒS r   )r   r   r0   r   r   r1   r   r2   r   r	   r  r–   r   r   r   r  ;	  s   r  c                 C   sx   t | ƒ} |d u rg }t|  ¡ ƒD ]\}}|dkr| |¡ qt|tƒr't|ƒ}t |t	j
¡ d¡}tt | |¡ d¡ƒS rÄ  )r   r	  r-   r   r   rR   ra   r   r6   r   r7   r   r	   rË   )r8   r9   rY  Údimr   r   r   rË   D	  s   
€
rË   c                 C   sÖ   t | ƒ} |d u rMt | d¡ d¡}t |d¡ d¡}t g tj¡ d¡}t ||d¡ d¡}t dtj¡ d¡}t 	||¡ d¡}t 
|||d¡ d¡}nt|tƒrVt|ƒ}t |tj¡ d¡}tt | |¡ d¡ƒS )Nré   r   Fr   )r   r   rS   r   r6   r   r7   r5   ré   r   rŒ   r   rR   ra   r	   r  )r8   r  rï   rð   rñ   rò   ró   r   r   r   r  Q	  s"   ÿþ
r  ç      ð?c                 C   ru   )Nz2`trapezoid` is not supported with openvino backendrv   )r®   r8   Údxr9   r   r   r   Ú	trapezoide	  rã   rË  c           
      C   sÈ   t | ƒ} |d u rt dgtj¡ d¡}t | |d¡ d¡} d}t |tj¡ d¡}t | ||¡ d¡}t d|  ¡ ¡ d¡}t 	| |¡ d¡}t 	||¡ d¡}t |||¡}t
t ||¡ d¡ƒ}	|	S r~  )r   r   r6   r   r7   r   r5   r3   r   rà  r	   r(   )
r8   r9   r:   r‚   rD   r€  r  r‚  rƒ  r„  r   r   r   Úvark	  s   ÿrÌ  c                 C   sJ   t | ƒ} t| |ƒ\} }|d u rt| ƒS t| ƒ} t | ||¡ d¡}t|ƒS r   )r   r/   r	   rˆ   r   rì   r   )r8   r9   r:   Úsummed_valuer   r   r   Úsum	  s   rÎ  c                 C   s^   t |ƒpt ¡ }t| }|d u r| }ttjt | tj	¡t |tj	¡t |tj	¡|d 
d¡ƒS )Nrè  r   )r   r   r1   r   r	   r   rh  r6   r   r7   r   )r¥  r¦  rÂ   r_   rA   r   r   r   rh  ‰	  s   üúrh  c                 C   ru   )Nz5`floor_divide` is not supported with openvino backendrv   rå   r   r   r   Úfloor_divide˜	  rã   rÏ  c                 C   rÞ  r   )r   r   r2   r   r&   r   r	   r'   rå   r   r   r   r'   ž	  rß  r'   c                 C   ru   )Nz1`corrcoef` is not supported with openvino backendrv   rm   r   r   r   Úcorrcoef¦	  rã   rÐ  Úvalidc                 C   ru   )Nz2`correlate` is not supported with openvino backendrv   )r   r   rÃ   r   r   r   Ú	correlate¬	  rã   rÒ  c                 C   ru   )Nz/`select` is not supported with openvino backendrv   )ÚcondlistÚ
choicelistÚdefaultr   r   r   r«   ²	  ry   r«   c                 C   ru   )Nz0`slogdet` is not supported with openvino backendrv   rm   r   r   r   Úslogdet¶	  rã   rÖ  c                 C   ru   )Nz5`argpartition` is not supported with openvino backendrv   )r8   Úkthr9   r   r   r   Úargpartition¼	  rã   rØ  )NF)NFNr  )NNN)r   )NNrb  r  )r   r   r   N)r   r   r,   )r,   r   )rn  ro  F)FF)T)r™  TFNr   )r™  Tr½  Nr   )r¢   NN)r6   N)NrD  F)r¡   )Nr   N)NrÉ  r   )rÑ  )¿Únumpyr¥   Úopenvino.opset14Úopset14r   Úopenvinor   Úkeras.src.backendr   Úkeras.src.backend.commonr   Ú"keras.src.backend.common.variablesr   Úkeras.src.backend.openvino.corer   r   r   r	   r
   r   r   r   r   r   r    r(   r)   r+   rD   rF   rH   rf   ri   rj   rn   rs   rx   r{   r~   r€   r/   rˆ   r   r“   r—   rš   rœ   rž   r    r¼   r¾   rÏ   rÑ   rØ   rÙ   rÛ   rá   râ   rä   ræ   rè   rú   rû   rý   rþ   rÿ   r  r
  r  r  r  r  r  r  r  r  r  r  r   r%  rD  rF  rG  rJ  rª   rK  rN  rP  rQ  rS  rV  rX  rY  r§   r©   rb  rc  rl  rm  r|  rƒ  r†  r}  rr  rˆ  r‡  r  r–  r—  r˜  r¨   rp  rº  r»  rÂ  rÇ  rË  rÜ  rÝ  rq  r~  rs  rå  rP   r  r  rL   rN   rê  r#  r/  r1  r2  r  r4  r6  r;  r<  rC  rG  rJ  rK  rM  ra  r5   re  rf  rg  rh  ri  rO  rÄ   rk  r}  r†  r‡  rˆ  r›  rœ  r  rž  r   rP  r¡  r®  r¶  r¸  r¹  rº  r¾  rÄ  r¤   rÅ  rÆ  rà  rÌ  rÇ  r  rË   r  rË  rÌ  rÎ  rh  rÏ  r'   rÐ  rÒ  r«   rÖ  rØ  r   r   r   r   Ú<module>   sr   .					*	  ! -		
		I	"ÿ 	2 ,!;		(.G		2		
