
    Di&                        d dl mZ d dlmZ d dlmZ d dlZd dlmZ  G d de      Z	 G d d	e      Z
 G d
 de      Z G d de      Z G d de      Zee	e
eeef   ZddZddZ G d de      Zy)    )annotations)
NamedTuple)UnionN)
_truncnormc                      e Zd ZU ded<   y) _BatchedCategoricalDistributions
np.ndarrayweightsN__name__
__module____qualname____annotations__     t/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/optuna/samplers/_tpe/probability_distributions.pyr   r      s    r   r   c                  6    e Zd ZU ded<   ded<   ded<   ded<   y)_BatchedTruncNormDistributionsr	   musigmafloatlowhighNr   r   r   r   r   r          N	J
Kr   r   c                  6    e Zd ZU ded<   ded<   ded<   ded<   y)!_BatchedTruncLogNormDistributionsr	   r   r   r   r   r   Nr   r   r   r   r   r      r   r   r   c                  @    e Zd ZU ded<   ded<   ded<   ded<   ded<   y)	&_BatchedDiscreteTruncNormDistributionsr	   r   r   r   r   r   stepNr   r   r   r   r   r          N	J
K
Kr   r   c                  @    e Zd ZU ded<   ded<   ded<   ded<   ded<   y)	)_BatchedDiscreteTruncLogNormDistributionsr	   r   r   r   r   r   r   Nr   r   r   r   r"   r"   %   r    r   r"   c                   | j                   |j                   k(  rt        | j                         dk(  sJ t        j                  |      }|t        j                  | |   d         }| |   }||   }t        j                  | t
              }d|d<   |dd |dd k7  |dd |dd k7  z  |dd t        j                  |j                  t              }t        j                  |      dz
  ||<   ||   ||   |fS )	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_2dr;   6   s    
 77agg#agg,!"333JJqME"**QuXH56EhGhG--6!&qr{gcrl:wqr{gVYWYl?Z[
((7<<s
+C./!3CJ&'1D)EsJJr   c                    t        | j                         |j                               \  }}}t        j                  ||      |   j	                  | j
                        S )z
    This function reduces the log Gaussian probability mass computation by avoiding the
    duplicated evaluations using the np.unique_inverse(...) equivalent operation.
    )r;   ravelr   _log_gauss_massreshaper*   )r4   r5   a_uniqb_uniqr:   s        r   _log_gauss_mass_uniquerB   I   sJ    
 -QWWY	BFFC%%ff5c:BB177KKr   c                  2    e Zd ZU ded<   ded<   ddZd	dZy)
_MixtureOfProductDistributionr	   r
   zlist[_BatchedDistributions]distributionsc           
        |j                  t        | j                        | j                  |      }t        j                  |t        | j
                        ft              }g g g }}}g }g g }
}	t        | j
                        D ]6  \  }}t        |t              r|j                  |d d f   }|j                  |      }t        j                  |d      }t        j                  |d d df   d      j                         sJ d|d d df<   t        j                  ||d d t        j                  f   k  d      |d d |f<   t        |t               rZ|j#                  |       |j#                  |       |	j#                  |j$                         |
j#                  |j&                         )t        |t(              r|j#                  |       |j#                  |       |j#                  |       |	j#                  t        j*                  |j$                               |
j#                  t        j*                  |j&                               t        |t,              r|j#                  |       |j#                  |       |j#                  |       |	j#                  |j$                  |j.                  dz  z
         |
j#                  |j&                  |j.                  dz  z          et        |t0              r|j#                  |       |j#                  |       |j#                  |       |j#                  |       |	j#                  t        j*                  |j$                  |j.                  dz  z
               |
j#                  t        j*                  |j&                  |j.                  dz  z                7J  t        |      r t        j2                  |D cg c]  }|j4                  |    c}      }t        j2                  |D cg c]  }|j6                  |    c}      }t        j8                  |D cg c]  }|j$                   c}      }t        j8                  |D cg c]  }|j&                   c}      }t        j8                  |D cg c]  }t;        |dd       c}      }t=        j>                  t        j2                  |	      d d t        j                  f   |z
  |z  t        j2                  |
      d d t        j                  f   |z
  |z  |||	      j@                  |d d |f<   t        jB                  |d d |f         |d d |f<   t        jD                  |dk7        d
   }||   ||   ||   }}}t        jF                  |t        jH                  |d d |f   |z
  |z        |z  z   ||      |d d |f<   |S c c}w c c}w c c}w c c}w c c}w )N)pr1   r'   r)   axisr$      r   g        )r4   r5   locscalerandom_stater   )%choicer+   r
   r,   r0   rE   r   	enumerate
isinstancer   randr3   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   samplez$_MixtureOfProductDistribution.sampleV   s   C$5JWhh
C(:(:$;<EJ.0"b8>	  	 ')"md001 !	DAq!=>!">1+<!="xx
3IIn2>	zz)ArE"2A6::<<<#$	!R% FF9|ArzzM/J#JQSTAqD	A=>&&q)%%a(##AEE*$$QVV,A@A&&q)%%a("##BFF155M2$$RVVAFF^4AEF  #&&q)%%a(##AEEAFFQJ$67$$QVVaffqj%89AHI  #&&q)%%a("##BFF155166A:+=$>?$$RVVAFFQVVaZ,?%@AuC!	F ?$SaQTT.%9$STJJJ'YA(?'YZM88O<qQUU<=DHHo>aff>?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   WW<W)WWc           
     r   t        j                  t        |      t        | j                        ft         j                        }g }g }g }g }t        | j                        D ]n  \  }}t        |t              r|d d |t         j                  t         j                  f   j                  t         j                        }	|t        j                  t        j                  |j                  t         j                     |	d            d   z  }t        |t              ra|j                  |       |j                  |d d |f          |j                  |j                          |j                  |j"                         t        |t$              r|j                  |       |j                  t        j                  |d d |f                |j                  t        j                  |j                                |j                  t        j                  |j"                               t        |t&              rt        j(                  |d d |f   d      \  }
}t+        |j,                  |j.                        \  }}}|t1        |
|j2                  dz  z
  d d t         j                  f   |z
  |z  |
|j2                  dz  z   d d t         j                  f   |z
  |z        t        j4                  ||         z  }|t7        j8                  |j                   |j2                  dz  z
  |z
  |z  |j"                  |j2                  dz  z   |z
  |z        |   z  }t        |t:              rkt        j(                  |d d |f   d      \  }
}t+        |j,                  |j.                        \  }}}|t1        t        j                  |
|j2                  dz  z
        d d t         j                  f   |z
  |z  t        j                  |
|j2                  dz  z         d d t         j                  f   |z
  |z        t        j4                  ||         z  }|t7        j8                  t        j                  |j                   |j2                  dz  z
        |z
  |z  t        j                  |j"                  |j2                  dz  z         |z
  |z        |   z  }oJ  t        |      rt        j<                  |D cg c]  }|j,                   c}      j>                  }t        j<                  |D cg c]  }|j.                   c}      j>                  }|t7        j@                  t        j<                  |      j>                  d d t         j                  d d f   t        j<                  |      |z
  |z  t        j<                  |      |z
  |z  ||      jC                  d      z  }|t        j                  | j                  t         j                           z  }|jE                  d	      }d
|t        jF                  |      <   t        jH                  d      5  t        j                  t        jJ                  ||d d d f   z
        jC                  d	            |z   cd d d        S c c}w c c}w # 1 sw Y   y xY w)Nr'   r)   rH   ).r   T)return_inverserJ   )r4   r5   rK   rL   r$   r   ignore)divide)&r,   zerosr+   r
   float64rO   rE   rP   r   rU   astypeint64rW   take_along_axisr   rV   r   r   r   r   uniquer;   r   r   rB   r   ix_r   r>   r"   rX   r\   logpdfrT   maxisneginferrstater]   )ra   xweighted_log_pdf
cont_distsx_cont	lows_cont
highs_contrl   rm   xixi_uniqxi_invmu_uniq
sigma_uniqmu_sigma_invmus_contsigmas_contmax_s                     r   log_pdfz%_MixtureOfProductDistribution.log_pdf   si   88SVS->$?rzzR
 	 	
 	
d001 )	DAq!=>q!RZZ34;;BHHE BFF2+=+=aii

>SUW^`+a$b%   A=>!!!$a1g&  '!!!&&)A@A!!!$bffQq!tWo.  /!!"&&.1AE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"$))AadGD"I4FqttQWW4U1\ $:VVGaffqj01!RZZ-@7JjXVVGaffqj01!RZZ-@7JjX% &&.%0 0 
 !J$>$>VVAEEAFFQJ./'9ZGVVAFFQVVaZ/07:jH% %    
 uS)	V v;zz"<A144"<=??H**z%B!agg%BCEEK
 1 1

6"$$Q

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

#;<<###+"#R[[[[) 	W66"&&!1DDM!ABFFAFNORVV	W 	W #=%B	W 	Ws   2Z#)Z(AZ--Z6N)rb   znp.random.RandomStaterc   r2   returnr	   )r   r	   r   r	   )r   r   r   r   rz   r   r   r   r   rD   rD   R   s    ..BHEWr   rD   )r4   r	   r5   r	   r   z)tuple[np.ndarray, np.ndarray, np.ndarray])r4   r	   r5   r	   r   r	   )
__future__r   typingr   r   numpyr,   optuna.samplers._tper   r   r   r   r   r"   _BatchedDistributionsr;   rB   rD   r   r   r   <module>r      s    "    +z Z 
 Z 
  $"%*-	/ K&LMWJ MWr   