
    ijI                        d dl Z 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 Zd Zd ZddZddZddZddZddZddZddZd Zd Z ddZ!ddZ"ddZ#y)     N)Type)floatx)numpy)OPENVINO_DTYPES)OpenVINOKerasTensor)convert_to_numpy)get_ov_output)SeedGenerator)	draw_seed)make_default_seedc                     | j                   dk(  r,t        j                  | t        d         j	                  d      S t        j                  |       j	                  d      S )a  Create an OV Constant from a numpy array, handling bfloat16 specially.

    OpenVINO's Python binding resolves numpy dtypes via an internal C++ map that
    only covers standard numpy scalar types.  ``ml_dtypes.bfloat16`` is not a
    standard numpy dtype, so passing a bfloat16 array directly to
    ``ov_opset.constant()`` raises ``RuntimeError: Unsupported data type:
    bfloat16``.  Supplying ``Type.bf16`` explicitly routes the call through the
    packed-type constructor path that OpenVINO does support.
    bfloat16r   )dtypeov_opsetconstantr   output)arrs    v/var/www/html/emotional.easysim.app/public_html/venv/lib/python3.12/site-packages/keras/src/backend/openvino/random.py_np_to_ov_constr      sO     yyJ  oj&ABII!LLS!((++    c                    | t         j                  j                         S t        j                  | t         j                        j                  t         j                        }t         j                  j                  |      S )a  Create a NumPy RNG from seed tensor data.

    Seed tensors are stored as int32 and may be negative due to C-style
    wrapping of large user-supplied values.  Reinterpret the bit pattern
    as uint32 so that np.random.default_rng receives non-negative entropy.
    )r   )nprandomdefault_rngasarrayint32viewuint32)	seed_datar   s     r   _rng_from_seed_datar    !   sU     yy$$&&
**Ybhh
/
4
4RYY
?C99  %%r   c                     t        dt        |      dz        }t        dt        |      dz        }t        j                  | |||||      j	                  d      S )a  Wrapper for `ov_opset.random_uniform` that sanitizes seed values.

    Pybind11 will sign-flip values >= 2**31, and int32 wrap-around can
    produce negative values. Masks seeds to 31 bits so they are in the range
    [0, 2**31-1], then clamps to at least 1, as the OpenVINO C++ layer
    requires each seed to be strictly positive (> 0).

    Args:
        shape: The shape of the random tensor.
        minval: The lower bound of the random distribution.
        maxval: The upper bound of the random distribution.
        dtype: The data type of the output tensor.
        seed1: The first part of the seed.
        seed2: The second part of the seed.

    Returns:
        An OpenVINO output tensor with random values.
       ir   )maxintr   random_uniformr   )shapeminvalmaxvalr   seed1seed2
safe_seed1
safe_seed2s           r   _random_uniformr-   .   sW    & QE
Z/0JQE
Z/0J""vvuj*fQir   c                    |xs
 t               }t        |      }t        |t              rt	        |      }n|j
                  }t        |      }|j                  | ||      j                  |      }t        t        |            S )N)sizelocscale)
r   r   
isinstancer   r   datar    normalastyper   )	r&   meanstddevr   seedseed_valr   rngnormal_consts	            r   r4   r4   H   sn    VXEH(/0$X.	MM	
i
(C::5d&:AHHOL|<==r   c                    |xs
 t               }t        |      }t        |t              rt	        |      }n|j
                  }t        |      }|j                  |||       j                  |      }t        t        |            S )N)r/   )
r   r   r2   r   r   r3   r    uniformr5   r   )	r&   r'   r(   r   r8   r9   r   r:   random_valuess	            r   r=   r=   T   sn    VXEH(/0$X.	MM	
i
(CKKUK;BB5IM}=>>r   c                     |xs d}t         |   }t        |       } t        j                  dt        j
                        j                  d      }t        j                  dt        j
                        j                  d      }t        j                  dt        j
                        j                  d      }t        j                  | d      j                  d      }t        j                  ||      j                  d      }	t        j                  | t        j
                        j                  d      }
t        j                  |
t        j
                        j                  d      }t        j                  ||      j                  d      }t        j                  ||      j                  d      }t        j                  |||t        j
                        j                  d      }t        j                  |
|d      j                  d      }t        j                  |gt        j
                        j                  d      }t        j                  ||gd      j                  d      }t        |      }t!        |t"              rt%        |      \  }}n|j&                  \  }}|j)                         }t        j                  d|      j                  d      }t        j                  d|      j                  d      }t+        ||||||      }t        j,                  ||      j                  d      }t        j,                  |	|      j                  d      }t        j.                  ||      j                  d      }t        j0                  t        j2                  |t        j
                        j                  d      |      j                  d      }t        j2                  ||      j                  d      }t#        |      S )	Nint64r   r"   axis)output_type              ?)r   r	   r   r   r   i32r   softmaxcumsumshape_ofsqueezesubtractrangegatherconcatr   r2   r   r   r3   get_element_typer-   	unsqueezegreater
reduce_sumconvert)logitsnum_samplesr   r8   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_tensorr)   r*   probs_dtype
zero_float	one_floatrandrand_unsqueezedcumsum_unsqueezedrR   samplesresults                                 r   categoricalrn   `   s$   WEu%H6"F""1dhh/66q9J!!!TXX.55a8I%%b$((3::1=M V"-44Q7E??5-8??BL $$VTXX6==a@L\4884;;A>D""44;;A>K$$[)<CCAFL NNL)fQi  //,AFMMaPK !));-BII!L//	'(qfQi  D/K+23'4u"''u((*K""34;;A>J!!#{3::1=IZKD ((}=DDQGO **<CJJ1M 0ABII!LG!!$((+2215}fQi  gx077:Fv&&r   c                    |xs d}t         |   }t        |      }t        |t              rt	        |      \  }}n|j
                  \  }}|t        j                  t        j                  t        j                  fv rt        j                  }	nt        j                  }	t        | t        t        f      r=t        j                  t        |       t        j                        j                  d      } n|t        | t              r| j                  } n_t        | t               r5t        j                  | gt        j                        j                  d      } nt#        | t        j                        } t#        ||	      }t#        ||	      }|j%                         |	k7  r%t        j&                  ||	      j                  d      }|j%                         |	k7  r%t        j&                  ||	      j                  d      }t)        | |||	||      }
||	k7  r0t        j&                  |
|      j                  d      }t        |      S |
}t        |      S )Nr   r   )r   r   r2   r   r   r3   r   i64u64u32rG   listtupler   r   r   r$   r	   rP   rT   r-   )r&   r'   r(   r   r8   rW   r9   r)   r*   	gen_dtyperi   rm   s               r   randintrv      s   WEu%HH(/0'1u}}uDHHdhh11HH	HH	%$'!!$u+txx8??B	E.	/	E3	!!5'4884;;A>eTXX.69-F69-F I-!!&)4;;A> I-!!&)4;;A>5&&)UEJD9!!$188; v&& v&&r   c                    |xs
 t               }t        |      }t        |j                        }|d|z  z
  }|d|z  z   }t	        j
                  |       }t        j                  d      }	|	j                  d   |k  rK|j                  |||      }
|
|
|k\  |
|k  z     }t        j                  |	|      }	|	j                  d   |k  rK|	d | j                  |      j                  |       }t        t        |            S )N   r   )r0   r1   r/   )r   r   r    r3   mathprodr   emptyr&   r4   appendr5   reshaper   r   )r&   r6   r7   r   r8   r:   lower_boundupper_bound
flat_shaperandom_numbersbatchvalidnp_array_ress                r   truncated_normalr      s    VXET?D
dii
(CV#KV#K5!JXXa[N 

q
!J
.

t6

C u+0DEF >59 

q
!J
. "+:.55e<DDUKL|<==r   c                 	   t        |       }|j                         }t        |      }t        |t              rt        |      \  }}n|j                  \  }}t        |t        t        f      st        ||      }n%t        j                  ||      j                  d      }t        j                  d|      j                  d      }	t        j                  |	|      j                  d      }
|5t        j                  |t        j                        j                  d      }nQg }t        j                  |t        j                        j                  d      }t        j                  dt        j                        j                  d      }t!        |      D ]  \  }}|lt        j                  |gt        j                        j                  d      }t        j"                  |||      j                  d      }|j%                  |       t|j%                  t        j                  |gt        j                        j                  d              t        j&                  |d      j                  d      }|}|t        j(                  t        j*                  fv rt        j,                  }t        j                  d|      j                  d      }t        j                  d|      j                  d      }t/        ||||||      }||k7  rKt        j0                  |
|      j                  d      }t        j2                  ||      j                  d      }n%t        j2                  ||
      j                  d      }t        j                  d|      j                  d      }t        j                  d|      j                  d      }t        j4                  |
|      j                  d      }t        j6                  |||
      j                  d      }t        j8                  ||      j                  d      }t        j6                  |||      j                  d      }t        j0                  ||      j                  d      }t        j:                  ||      j                  d      } t        j:                  | |      j                  d      }!t	        |!      S )Nr   rF   rE   )r	   rP   r   r2   r   r   r3   r$   floatr   r   r   rL   rJ   r   rG   	enumeraterN   r|   rO   bf16f16f32r-   rT   lessequalselectdividemultiply)"inputsratenoise_shaper8   	inputs_ovr   r9   r)   r*   one	keep_probnoise_shape_nodeshape_elementsinput_shape_node
zero_indexidimindicesdim_noderu   min_valmax_valri   keep_prob_genmaskzero	one_dtypeis_zero_prob	safe_probinv_probr1   mask_castedmasked_inputsrm   s"                                     r   dropoutr      s   f%I&&(EH(/0'1u}}udS%L)T5)  u-44Q7


C
'
.
.q
1C!!#t,33A6I#,,YAHHK#,,YAHHK&&q$((3::1=
, 
	FAs{"++QC:AA!D#??$gz&)  %%h/%%%%seTXX6==a@
	 $??>1=DDQGIDHH%%HH	Y/66q9GY/66q9G'7IueD E ((I>EEaH}}T=188;}}T9-44Q7S%(//2D!!#u-44Q7I>>)T299!<LiCJJ1MIy)4;;A>HOOL$9@@CE""4/66q9K%%i=DDQGM}e4;;A>Fv&&r   c                    t        |      }t        |t              rt        |      \  }}n|j                  \  }}t        |       }|j                         }|j                  j                         }|dk  r||z  }t        j                  |t        j                        j                  d      }	t        j                  |	t        j                  |gt        j                        j                  d      t        j                  dt        j                        j                  d            j                  d      }
t        j                  dt        j                         j                  d      }t        j                  dt        j                         j                  d      }t        j"                  |
t        j                  dgt        j                        j                  d      d      j                  d      }t%        |||t        j                   ||      }t'        j(                  t        |      d      }t'        j*                  | ||      S )Nr   rE   rF   r"   FrB   )r   r2   r   r   r3   r	   get_partial_shaper^   
get_lengthr   rJ   r   rG   r   rN   r   r   r}   r-   ov_numpyargsorttake)xrC   r8   re   r)   r*   x_ovx_shaper^   shape_tensordim_sizer   r   
rand_shaperand_valuesr   s                   r   shuffler     s   D/K+23'4u"''uD$$&G<<""$Dax$$T4884;;A>L4&$((+2215!TXX&--a0 fQi	 
 TXX.55a8GTXX.55a8G!!(##QC299!<efQi  "GWdhhuK 2;?aHG==G$//r   c                    |t         j                  k(  rUt        j                  t        j                  | t         j
                        t         j                        j                  d      S t        j                  | |      j                  d      S )Nr   )r   r   r   rT   r   r   r   )valr   s     r   _constr   <  sd    		c488,dii

&)	 S%(//22r   c                    t        d|      }t        d|      }t        dt        j                  z  |      }t        d|      }t        d|      }t        | |||||      }	t        | ||||dz   |      }
t	        j
                  |	|      j                  d      }	t	        j                  t	        j                  |t	        j                  |	                  j                  d      }t	        j                  ||
      j                  d      }t	        j                  |t	        j                  |            j                  d      }|S )NrE   rF   rx          Hz>{   r   )r   r   pir-   r   addr   sqrtr   logcos)r&   r   r)   r*   r   r   two_pi	minus_twoepsilonu1u2maganglez0s                 r   _random_normalr   D  s	   #uD
e
CAIu%FtU#IT5!G	c5%	?B	c5%#+u	EB	b'	"	)	)!	,B
--)))X\\"5EF
G
N
N	C fb)003E			3U 3	4	;	;A	>BIr   c                 x   |xs
 t               }t        |   }t        |      }t        |t              rt        |      \  }}n|j                  \  }}t        |      }t        |      }t        | t        t        f      r=t        j                  t        |       t        j                        j                  d      } n7t        | t              r| j                  } nt        | t        j                        } t        ||      }t!        d|      }t!        d|      }	t!        d|      }
t        j"                  ||      j                  d      }t        j$                  |t        j&                  ||      |      j                  d      }t        j(                  ||	      j                  d      }t        j*                  |t        j,                  t        j.                  t!        d|      |                  j                  d      }t        j0                  |
|       j                  d      }t        j0                  t        j                  dt        j2                        |       j                  d      }d}t5        |      D ]  }||dz  z   }t7        | |||      }t        j.                  ||      j                  d      }t        j&                  ||      j                  d      }t        j8                  |t!        d	|            j                  d      }t        j:                  ||
      j                  d      }t=        | |
|||d
z   |      }t        j.                  ||      j                  d      }t        j.                  ||      j                  d      }t        j(                  |t        j.                  t!        d|      |            j                  d      }t        j"                  ||      j                  d      }t        j$                  |||      j                  d      }t        j>                  |      j                  d      }t        j>                  |      j                  d      } t        j.                  |t        j&                  t        j(                  ||      |             j                  d      }!t        j&                  t        j.                  t!        d|      |      |!      j                  d      }"t        j"                  ||"      j                  d      }#t        j@                  ||#      j                  d      }$t        jB                  |$|      j                  d      }$t        j.                  ||      j                  d      }%t        jB                  t        jD                  |      |$      j                  d      }&t        j$                  |&|%|      j                  d      }t        j@                  ||$      j                  d      } t=        | |
|||dz   |      }'t        j*                  ||      j                  d      }(t        j8                  |'|(      j                  d      })t        j.                  ||)      j                  d      }*t        j$                  ||*|      j                  d      }+t	        |+      S )Nr   rF   gUUUUUU?rE   g      "@F
   i  g      @i  gm{?g      ?i'  )#r   r   r   r2   r   r   r3   r$   rs   rt   r   r   r   rG   r   r	   r   r   r   r   rL   r   r   r   	broadcastbooleanrM   r   powerrR   r-   r   
logical_orlogical_andlogical_not),r&   alphar   r8   rW   r9   r)   r*   r   	one_thirdr   is_small_alphaalpha_boosteddcrl   r   	num_itersr   	iter_seedr   cxv_basevv_posux2x4c1_valaccept1v_safelog_ulog_vterm2rhsaccept2accepteddvupdate_masku_finalpow_expu_powadjusted_samplesfinal_sampless,                                               r   gammar   U  s`   VXEu%HH(/0'1u}}uJEJE%$'!!$u+txx8??B	E.	/eTXX.%*E
h
Cy(+I#x D]]5#.55a8NOOUC0%fQi  	-3::1=Ah''sH(=qAB	 fQi    u-44Q7G%.fQi 	 I9 =AH$	5(Iu=q!$++A.c2&--a0NN66#x#89@@C  D)003E4h	COq!$++A.r2&--a0""""6&(#;R@

&) 	 --6*11!43/66q9Q&&q)V$++A.!!x||H--c15u=

&) 	 llfS(3R8%

&) 	 --s+2215&&w8??B''%8??Bq!$++A.**  &

&) 	 //+r7;BB1E""4299!<?=@ eT3%$,NGooc5)003GNN7G,33A6E((%8??BOO('fQi  }--r   c           	      <
   |xs
 t               }t        |   }t        |      }t        |t              rt        |      \  }}n|j                  \  }}t        |      }t        |      }t        j                  }	t        j                  ||	      j                  d      }
t        j                  ||	      j                  d      }t        | t        t        f      r=t        j                  t        |       t        j                         j                  d      }n7t        | t              r| j                  }nt        | t        j                         }t        j                  d|	      j                  d      }t        j                  d|	      j                  d      }t#        ||||	||      }t#        ||||	||dz         }d}t        j                  ||	      j                  d      }t        j$                  ||      j                  d      }t        j&                  |      j                  d      }t        j                  d|	      j                  d      }t        j                  dt(        j*                  z  |	      j                  d      }t        j,                  t        j.                  ||            j                  d      }t        j.                  ||      j                  d      }t        j.                  |t        j0                  |            j                  d      }t        j.                  |
|      j                  d      }t        j2                  ||      j                  d      }t        j.                  ||      j                  d      }t        j,                  |      j                  d      }t        j4                  |t        j.                  ||            j                  d      }t        j6                  |d	      j                  d      }t        j$                  ||      j                  d      }t        j8                  ||
      j                  d      }t        j:                  |
|      j                  d      }t        j<                  ||      j                  d      } t        j                  | |	      j                  d      }!t        j>                  ||!|      j                  d      }"||	k7  r%t        j                  |"|      j                  d      }"t	        |"      S )
Nr   rE   rF   r"   r   r   rx   half_to_even)mode) r   r   r   r2   r   r   r3   r	   r   r   r   rT   r   rs   rt   r   rG   r-   maximumr   r   r   r   r   r   rL   r   roundminimumr   r   r   )#r&   countsprobabilitiesr   r8   rW   r9   r)   r*   
calc_dtypecounts_fprobs_fr   r   r   r   r   r   epsilon_constu1_safelog_u1neg_twor   rthetazr6   one_minus_pvarstd
res_normalis_one	bernoullibernoulli_fress#                                      r   binomialr    s   VXEu%HH(/0'1u}}u6"F!-0MJ
3::1=H}j9@@CG%$'((edhh?FFqI	E.	/||$UDHH5S*-44Q7D


C
,
3
3A
6C	tS*eU	KB	tS*eUQY	OBG%%gz:AA!DMr=188;G\\'"))!,Fj188;Gq255y*5<<Q?Fh''89@@CAfb)003E!X\\%0188;AXw/66q9D##C188;K


D+
.
5
5a
8C
--

#
#A
&CdH$5$5c1$=>EEaHJ
@GGJJ!!*d3::1=J!!*h7>>qAJ^^Hc*11!4Fb'*11!4I""9j9@@CK
//&+z
:
A
A!
DC:sH-44Q7s##r   c                 >   |}|}t        |t              r|dz  }t        t        | |||            }t        t        | |||            }t	        j
                  ||      j                  d      }	t	        j                  ||	      j                  d      }
t        |
      S )Nr   )r   r8   r   )	r2   r$   r	   r   r   r   r   r   r   )r&   r   betar   r8   r)   r*   gamma_agamma_bsum_abr  s              r   r  r    s    EE$E%e%HIGE%UGHG\\'7+2215F(//2Aq!!r   )rE   rF   NN)r@   N)r   N)NN)r   N)$ry   r   r   openvino.opset16opset16r   openvinor   keras.src.backend.configr   keras.src.backend.openvinor   keras.src.backend.openvino.corer   r   r   r	   keras.src.random.seed_generatorr
   r   r   r   r    r-   r4   r=   rn   rv   r   r   r   r   r   r   r  r   r   r   <module>r     s~      #  + 8 ; ? < 9 9 5 =,
&4	>	?7't'D>6E'P0:3"I.X.$b"r   