
    -ji&                        S SK Jr  S SKJr  S SKJr  S SKrS SKJr   " S S\5      r	 " S S	\5      r
 " S
 S\5      r " S S\5      r " S S\5      r\\	\
\\\4   rSS jrSS jr " S S\5      rg)    )annotations)
NamedTuple)UnionN)
_truncnormc                       \ rS rSr% S\S'   Srg) _BatchedCategoricalDistributions   
np.ndarrayweights N__name__
__module____qualname____firstlineno____annotations____static_attributes__r       h/home/james-whalen/.local/lib/python3.13/site-packages/optuna/samplers/_tpe/probability_distributions.pyr   r      s    r   r   c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg	)
_BatchedTruncNormDistributions   r
   musigmafloatlowhighr   Nr   r   r   r   r   r          N	J
Kr   r   c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg	)
!_BatchedTruncLogNormDistributions   r
   r   r   r   r   r   r   Nr   r   r   r   r    r       r   r   r    c                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	rg
)&_BatchedDiscreteTruncNormDistributions   r
   r   r   r   r   r   stepr   Nr   r   r   r   r#   r#          N	J
K
Kr   r#   c                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	rg
))_BatchedDiscreteTruncLogNormDistributions%   r
   r   r   r   r   r   r%   r   Nr   r   r   r   r(   r(   %   r&   r   r(   c                   U R                   UR                   :X  a  [        U R                   5      S:X  d   e[        R                  " U5      nU[        R                  " X   SS9   nX   nX   n[        R                  " U [
        S9nSUS'   USS USS :g  USS USS :g  -  USS& [        R                  " UR                  [        S9n[        R                  " U5      S-
  Xb'   X5   XE   U4$ )	z
This function is a quicker version of:
    np.unique(np.concatenate([a[:, None], b[:, None]], axis=-1), return_inverse=True).
   stable)kinddtypeTr   N)
shapelennpargsort
empty_likeboolemptysizeintcumsum)abordera_orderb_orderis_first_occurrenceinvs          r   _unique_inverse_2drB   6   s    
 77agg#agg,!"333JJqME"**QXH56EhGhG--6!&qr{gcrl:wqr{gVYWYl?Z[
((7<<s
+C./!3CJ')EsJJr   c                    [        U R                  5       UR                  5       5      u  p#n[        R                  " X#5      U   R	                  U R
                  5      $ )z
This function reduces the log Gaussian probability mass computation by avoiding the
duplicated evaluations using the np.unique_inverse(...) equivalent operation.
)rB   ravelr   _log_gauss_massreshaper1   )r;   r<   a_uniqb_uniqrA   s        r   _log_gauss_mass_uniquerI   I   sF    
 -QWWY	BFC%%f5c:BB177KKr   c                  >    \ rS rSr% S\S'   S\S'   S
S jrSS jrSrg	)_MixtureOfProductDistributionR   r
   r   zlist[_BatchedDistributions]distributionsc           
     2   UR                  [        U R                  5      U R                  US9n[        R                  " U[        U R
                  5      4[        S9n/ / / pvn/ n/ / p[        U R
                  5       GHX  u  p[        U[        5      (       a  UR                  US S 24   nUR                  U5      n[        R                  " USS9n[        R                  " US S 2S4   S5      R                  5       (       d   eSUS S 2S4'   [        R                  " XS S 2[        R                  4   :  SS9US S 2U4'   M  [        U[         5      (       a[  UR#                  U5        UR#                  U5        U	R#                  UR$                  5        U
R#                  UR&                  5        GM5  [        U[(        5      (       a  UR#                  U5        UR#                  U5        UR#                  U5        U	R#                  [        R*                  " UR$                  5      5        U
R#                  [        R*                  " UR&                  5      5        GM  [        U[,        5      (       a  UR#                  U5        UR#                  U5        UR#                  U5        U	R#                  UR$                  UR.                  S-  -
  5        U
R#                  UR&                  UR.                  S-  -   5        GM  [        U[0        5      (       a  UR#                  U5        UR#                  U5        UR#                  U5        UR#                  U5        U	R#                  [        R*                  " UR$                  UR.                  S-  -
  5      5        U
R#                  [        R*                  " UR&                  UR.                  S-  -   5      5        GMY   e   [        U5      (       Ga  [        R2                  " U Vs/ s H  oR4                  U   PM     sn5      n[        R2                  " U Vs/ s H  oR6                  U   PM     sn5      n[        R8                  " U Vs/ s H  oR$                  PM     sn5      n[        R8                  " U Vs/ s H  oR&                  PM     sn5      n[        R8                  " U Vs/ s H  n[;        USS5      PM     sn5      n[<        R>                  " [        R2                  " U	5      S S 2[        R                  4   U-
  U-  [        R2                  " U
5      S S 2[        R                  4   U-
  U-  UUUS	9R@                  US S 2U4'   [        RB                  " US S 2U4   5      US S 2U4'   [        RD                  " US:g  5      S
   nUU   UU   UU   nnn[        RF                  " U[        RH                  " US S 2U4   U-
  U-  5      U-  -   UU5      US S 2U4'   U$ s  snf s  snf s  snf s  snf s  snf )N)pr8   r.   r0   axisr+      r%   g        )r;   r<   locscalerandom_stater   )%choicer2   r   r3   r7   rM   r   	enumerate
isinstancer   randr:   iscloseallsumnewaxisr   appendr   r   r    logr#   r%   r(   asarrayr   r   arraygetattrr   rvsTexpnonzeroclipround)selfrng
batch_sizeactive_indicesret	disc_indsnumerical_indslog_indsnumerical_distslows_numerichighs_numericidactive_weightsrnd_quantile	cum_probs
active_musactive_sigmaslowshighsstepssteps_not_0low_dstep_dhigh_ds                            r   sample$_MixtureOfProductDistribution.sampleV   s   C$5JWhh
C(:(:$;<EJ.0"b8	  	 ')"md001DA!=>>!">1+<!="xx
3IIn2>	zz)ArE"2A6::<<<<#$	!R% FF9ArzzM/J#JQSTAqD	A=>>&&q)%%a(##AEE*$$QVV,A@AA&&q)%%a("##BFF155M2$$RVVAFF^4AEFF  #&&q)%%a(##AEEAFFQJ$67$$QVVaffqj%89AHII  #&&q)%%a("##BFF155166A:+=$>?$$RVVAFFQVVaZ,?%@AuC 2F ?$S?aTT.%9?$STJJJ'YA(?'YZM88O<OqUUO<=DHHo>offo>?EHHO!ga5OPE%/^^::l+ArzzM:ZG=X::m,Q

];jHMY# & a >!"  "vvc!X+&67C8**Uc\215K$($5u[7I5Q\K]66E "#al"3e";v!EFOOQVX^!C9 
' %T'Y<>Os   >X 1X$X
XXc           
        [         R                  " [        U5      [        U R                  5      4[         R                  S9n/ n/ n/ n/ n[        U R                  5       GH  u  px[        U[        5      (       a  US S 2U[         R                  [         R                  4   R                  [         R                  5      n	U[         R                  " [         R                  " UR                  [         R                     U	SS95      S   -  nM  [        U[        5      (       ab  UR                  U5        UR                  US S 2U4   5        UR                  UR                   5        UR                  UR"                  5        GM#  [        U[$        5      (       a  UR                  U5        UR                  [         R                  " US S 2U4   5      5        UR                  [         R                  " UR                   5      5        UR                  [         R                  " UR"                  5      5        GM  [        U[&        5      (       Ga  [         R(                  " US S 2U4   SS9u  p[+        UR,                  UR.                  5      u  pnU[1        XR2                  S-  -
  S S 2[         R                  4   U-
  U-  XR2                  S-  -   S S 2[         R                  4   U-
  U-  5      [         R4                  " X5         -  nU[6        R8                  " UR                   UR2                  S-  -
  U-
  U-  UR"                  UR2                  S-  -   U-
  U-  5      U   -  nGM  [        U[:        5      (       Gak  [         R(                  " US S 2U4   SS9u  p[+        UR,                  UR.                  5      u  pnU[1        [         R                  " XR2                  S-  -
  5      S S 2[         R                  4   U-
  U-  [         R                  " XR2                  S-  -   5      S S 2[         R                  4   U-
  U-  5      [         R4                  " X5         -  nU[6        R8                  " [         R                  " UR                   UR2                  S-  -
  5      U-
  U-  [         R                  " UR"                  UR2                  S-  -   5      U-
  U-  5      U   -  nGM   e   [        U5      (       Ga  [         R<                  " U Vs/ s H  oR,                  PM     sn5      R>                  n[         R<                  " U Vs/ s H  oR.                  PM     sn5      R>                  nU[6        R@                  " [         R<                  " U5      R>                  S S 2[         R                  S S 24   [         R<                  " U5      U-
  U-  [         R<                  " U5      U-
  U-  UUS9RC                  SS9-  nU[         R                  " U R                  [         R                     5      -  nURE                  S	S9nS
U[         RF                  " U5      '   [         RH                  " SS9   [         R                  " [         RJ                  " UUS S 2S 4   -
  5      RC                  S	S95      U-   sS S S 5        $ s  snf s  snf ! , (       d  f       g = f)Nr.   r0   rP   ).r   T)return_inverserR   )r;   r<   rS   rT   r+   r   ignore)divide)&r3   zerosr2   r   float64rW   rM   rX   r   r]   astypeint64r_   take_along_axisr   r^   r   r   r    r#   uniquerB   r   r   rI   r%   ix_r   rE   r(   r`   rd   logpdfr\   maxisneginferrstatere   )ri   xweighted_log_pdf
cont_distsx_cont	lows_cont
highs_contrt   ru   xixi_uniqxi_invmu_uniq
sigma_uniqmu_sigma_invmus_contsigmas_contmax_s                     r   log_pdf%_MixtureOfProductDistribution.log_pdf   sU   88SVS->$?rzzR
 	 	
 	
d001DA!=>>q!RZZ34;;BHHE BFF2+=+=aii

>SUW^`+a$b%   A=>>!!!$a1g&  '!!!&&)A@AA!!!$bffQq!tWo.  /!!"&&.1AEFF"$))AadGD"I4FqttQWW4U1\ $:
*ArzzM:WD
R
*ArzzM:WD
R% &&.%0 0 
 !J$>$>UUQVVaZ''1Z?VVaffqj(72j@% %     AHII"$))AadGD"I4FqttQWW4U1\ $:VVGffqj01!RZZ-@7JjXVVGffqj01!RZZ-@7JjX% &&.%0 0 
 !J$>$>VVAEEAFFQJ./'9ZGVVAFFQVVaZ/07:jH% %    
 uS 2V v;;zz"<A44"<=??H**z%Bz!ggz%BCEEK
 1 1

6"$$Q

A%56::i(83{B::j)H4C!! crcl 	BFF4<<

#;<<###+"#R[[[[)66"&&!1DDM!ABFFAFNORVV *) #=%B *)s   [ 
[2A[


[r   N)rj   znp.random.RandomStaterk   r9   returnr
   )r   r
   r   r
   )r   r   r   r   r   r   r   r   r   r   r   rK   rK   R   s    ..BHEWr   rK   )r;   r
   r<   r
   r   z)tuple[np.ndarray, np.ndarray, np.ndarray])r;   r
   r<   r
   r   r
   )
__future__r   typingr   r   numpyr3   optuna.samplers._tper   r   r   r    r#   r(   _BatchedDistributionsrB   rI   rK   r   r   r   <module>r      s    "    +z Z 
 Z 
  $"%*-	/ K&LMWJ MWr   