o
    bi                     @   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dZd#ddZd$ddZd%ddZd#ddZd&ddZd'ddZd&ddZd&dd Zd&d!d"ZdS )(    N)Type)floatx)OPENVINO_DTYPES)OpenVINOKerasTensor)convert_to_numpy)get_ov_output)SeedGenerator)	draw_seed)make_default_seed              ?c                 C   sJ   |pt  }t|}tj|j}|j| ||d|}tt	
|dS )N)sizelocscaler   )r   r	   nprandomdefault_rngdatanormalastyper   ov_opsetconstantoutput)shapemeanstddevdtypeseedrngnormal_const r    U/home/ubuntu/.local/lib/python3.10/site-packages/keras/src/backend/openvino/random.pyr      s
   
r   c           	      C   sb   |pt  }t|}t|trt|}n|j}tj|}|j	||| d
|}tt|dS )N)r   r   )r   r	   
isinstancer   r   r   r   r   r   uniformr   r   r   r   )	r   minvalmaxvalr   r   seed_val	seed_datar   random_valuesr    r    r!   r#      s   


r#   int64c                 C   s  |pd}t | }t| } tdtjd}tdtjd}tdtjd}tj| ddd}t||d}	t	| tjd}
t	|
tjd}t
||d}t||d}tj|||tjdd}tj|
|ddd}t|gtjd}tj||gddd}t|}t|trt|\}}n|j\}}| }td|d}td|d}t||||||d}t||d}t|	|d}t||d}tt|tjd|d}t||d}t|S )	Nr)   r      )axis)output_typer   r   )r   r   r   r   r   i32r   softmaxcumsumshape_ofsqueezesubtractrangegatherconcatr	   r"   r   r   r   get_element_typerandom_uniform	unsqueezegreater
reduce_sumconvert)logitsnum_samplesr   r   ov_dtype
zero_const	one_constneg_one_constprobscumsum_probslogits_shaperankrank_scalarrank_minus_1batch_indicesbatch_shapenum_samples_constfinal_shapeseed_tensorseed1seed2probs_dtype
zero_float	one_floatrandrand_unsqueezedcumsum_unsqueezedr:   samplesresultr    r    r!   categorical#   s\   


rX   int32c                 C      t d)Nz0`randint` is not supported with openvino backendNotImplementedError)r   r$   r%   r   r   r    r    r!   randint]      r]   c                 C   s   |pt  }t|}tj|j}|d|  }|d|  }t| }td}	|	jd |k rL|j	|||d}
|
|
|k|
|k@  }t
|	|}	|	jd |k s-|	d | || }tt|dS )N   r   )r   r   r   )r   r	   r   r   r   r   prodemptyr   r   appendr   reshaper   r   r   r   )r   r   r   r   r   r   lower_boundupper_bound
flat_shaperandom_numbersbatchvalidnp_array_resr    r    r!   truncated_normalc   s   


rk   c                 C   rZ   )Nz0`dropout` is not supported with openvino backendr[   )inputsratenoise_shaper   r    r    r!   dropout~   r^   ro   c                 C   rZ   )Nz0`shuffle` is not supported with openvino backendr[   )xr,   r   r    r    r!   shuffle   r^   rq   c                 C   rZ   )Nz.`gamma` is not supported with openvino backendr[   )r   alphar   r   r    r    r!   gamma      rs   c                 C   rZ   )Nz1`binomial` is not supported with openvino backendr[   )r   countsprobabilitiesr   r   r    r    r!   binomial   r^   rw   c                 C   rZ   )Nz-`beta` is not supported with openvino backendr[   )r   rr   betar   r   r    r    r!   rx      rt   rx   )r   r   NN)r)   N)rY   N)NN)r   N)numpyr   openvino.opset14opset14r   openvinor   keras.src.backend.configr   keras.src.backend.openvino.corer   r   r   r   keras.src.random.seed_generatorr   r	   r
   r   r#   rX   r]   rk   ro   rq   rs   rw   rx   r    r    r    r!   <module>   s*    



:




