
    J-j}                     n    d Z ddlZddl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
y)a)	  VD-CMA and VkD-CMA

Usage examples, VD-CMA:

    >>> import cma
    >>> from cma import restricted_gaussian_sampler as rgs
    >>> es = cma.CMAEvolutionStrategy(20 * [1], 1,
    ...          rgs.GaussVDSampler.extend_cma_options({
    ...             'seed': 6,
    ...             'ftarget': 1e-8,
    ...             'verbose': -9,  # helpful for automatic testing
    ...     }))
    >>> es = es.optimize(cma.fitness_transformations.Rotated(cma.ff.cigar, seed=6), iterations=None)
    >>> assert es.result.fbest <= 1e-8
    >>> assert es.result.evaluations <= 6780, es.result.evaluations  # was: == 6480 6372 6480 6144

It is recommended to always use `extend_cma_options()` to set the options
appropriately, even when no other options are passed through.

    >>> len(rgs.GaussVDSampler.extend_cma_options())
    2
    >>> len(rgs.GaussVkDSampler.extend_cma_options())
    3

The use case for VkD-CMA looks identical:

    >>> es = cma.CMAEvolutionStrategy(20 * [1], 1,
    ...          rgs.GaussVkDSampler.extend_cma_options({
    ...             'seed': 7,
    ...             'ftarget': 1e-8,
    ...             'verbose': -9,  # helpful for automatic testing
    ...     }))
    >>> es = es.optimize(cma.fitness_transformations.Rotated(cma.ff.cigar, seed=3), iterations=None)
    >>> assert es.result.fbest <= 1e-8
    >>> assert es.result.evaluations < 6210, es.result.evaluations  # was == 6204


TODO: correct the interface of __init__, remove unnecessaries

TODO:
2017/05/10: pass the option to sampler
2017/05/10: how to give sigma to update?

MEMO: 
2017/05/08: line 2958 of evolution_strategy.py: cc is assigned from sp.cc
2017/05/08: line 3021 of evolution_strategy.py: `weights` are multiplied by c1 and cmu
2017/05/08: line 3021 of evolution_strategy.py: first element of `vectors` is pc
2017/05/07: hsig interface
2017/05/07: `CMAAdaptSigmaNone` not working
2017/05/07: `dimension` passed to __init__ in not int.
2017/05/06: 'AdaptSigma = CMAAdaptSigmaTPA' won't work. AssertionError happens in `_update_ps`.
2017/05/06: `correlation_matrix` is not declared in `StatisticalModelSamplerWithZeroMeanBaseClass`. However, it is used in `evolution_strategy.py`.
2017/05/06: the following line of code in `ask_geno` assumes that the result of `sample` is an ndarray, rather than list. ary = self.sigma_vec * self.sm.sample(Niid)/

    N   ),StatisticalModelSamplerWithZeroMeanBaseClassc                       e Zd ZdZedd       Zej                  j                  dfdZ	ddZ
ddZed        Zedd	       Zed
        Zd Zd Zd ZddZd Zed        Zed        Zed        Zed        Zd Zd ZddZddZd Zd Zy)GaussVDSamplera  Restricted Gaussian Sampler for VD-CMA
    VD-CMA: Linear Time/Space Comparison-based Natural Gradient Optimization
    The covariance matrix is limited as C = D * (I + v*v^t) * D,
    where D is a diagonal, v is a vector.

    Reference
    ---------
    Youhei Akimoto, Anne Auger, and Nikolaus Hansen.
    Comparison-Based Natural Gradient Optimization in High Dimension.
    In Proc. of GECCO 2014, pp. 373 -- 380 (2014)
    Nc                 B    | xs i } | j                  dt        d       | S )zreturn correct options to run `cma.fmin` or initialize
        `cma.CMAEvolutionStrategy` using the `GaussVDSampler` AKA VD-CMA-ES
        F)
CMA_activeCMA_sampler)updater   optss    m/Users/jameslopez/projects/TradingBot25/.venv/lib/python3.12/site-packages/cma/restricted_gaussian_sampler.pyextend_cma_optionsz!GaussVDSampler.extend_cma_optionsJ   s*    
 zr5$24 	5     Fc                    	 t        |      | _        t        j                  |d      }| j                  dk  rt        d       || _        || _        | j                  | j                        t        j                  | j                        z  | _        t        j                  | j                  | j                        | _        t        j                  | j                        | _        | j                  | j                  z  | _        | j                  dz  | _        t        j"                  | j                        | _        || _        y# t        $ r* || _        t        j
                  | j                        }Y Kw xY w)6pass dimension of the underlying sample space
        Tcopy
   z6Warning: Not advised to use VD-CMA for dimension < 10.   N)lenNnparray	TypeErroronesprintrandndvecmathsqrtvvecdotnorm_v2norm_vvnvnnzerospc_debug)self	dimensionr   debugstd_vecs        r   __init__zGaussVDSampler.__init__U   s   	&^DFhhyt4G 66B;JK
	JJtvv&466)::	vvdii3ggdll+))dkk)77A:((466"  	&DFggdffoG	&s   'E /E54E5c           
          t        j                  t        |      D cg c],  }| j                  | j	                  | j
                              . c}      }|S c c}w )return list of i.i.d. samples.

        :param number: is the number of samples.
        :param update: controls a possibly lazy update of the sampler.
        )r   asarrayrange	transformr   r   )r*   numberr
   iXs        r   samplezGaussVDSampler.samplej   sJ     JJ9>vGAT^^DJJtvv./GI Hs   1Ac                    t        j                  |d      }t        j                  |dk\        sJ |dd t        j                  t        j                  |dd             z  }| j                  |      \  }}}t        j                  |dkD  t              }dt        j                  ||      z  }	t        j                  |      ddd	   }
t        j                  |      |
d| dz      }||
d|    }d|z
  | j                  z  |t        j                  |d
|z
  z  |	z        z  t        j                  ||      z  z   | _
        | j                  | j                  | j                        \  }}}}|dk(  r?t        j                   | j"                        }t        j                   | j"                        }n8| j%                  | j&                  | j                  || j(                  z  |      \  }}|dk(  r?t        j                   | j"                        }t        j                   | j"                        }nA| j%                  | j&                  | j                  | j                  | j(                  z        \  }}||z  ||z  |z  z   }||z  ||z  |z  z   }||z   dkD  r| j+                  | j(                  | j&                  | j                  | j,                  | j                  ||||||      \  }}d}t/        |d| j,                  z  t        j                  t        j                  ||            z        }t/        |d| j(                  t        j                  |      z  j/                         z        }n@t        j                   | j"                        }t        j                   | j"                        }d}| xj0                  ||z  z  c_        | xj(                  ||z  z  c_        t        j                  | j0                  | j0                        | _        t        j                  | j                        | _        | j0                  | j,                  z  | _        | j&                  dz  | _        y)d``vectors`` is a list of samples, ``weights`` a corrsponding
        list of learning rates
        Tr           r   Nr   dtype      ?       @gffffff?r   )r   r   allsumabs_get_paramsintr"   argsortr1   r(   r   r    _alpha_avec_bsca_invavnnr&   r#   r'   r   _pvec_and_qvecr%   r   _ngv_ngdr$   minr!   )r*   vectorsweightshsigwwccconecmumumueffidxsarywalphaavecbscainvavnnpvec_muqvec_mupvec_oneqvec_onepvecqvecngvngdupfactors                             r   r
   zGaussVDSampler.updatet   s   
 XXgD)vvbCi   VbffRVVBqrF^,,((,D#VVBF#&bffRn$jjnTrT"zz'"3s8a<0s3BxL 7dgg%tyyG:: 0 ) "q$)0 0 &*%B%BHHdll&$"tT7 !8hhtvv&Ghhtvv&G#22477DLL37$))3CQ HGW 19xx'Hxx'H!%!4!4TWWdll59WWtyy5H"JHh W}td{X55W}td{X55:>}}TYY4;;%)\\5$g%)41HC H8,tyyS9I/JJLH8SDIIs,C+H+H+J%JKH((466"C((466"CH		X^#			X^#	vvdii3ii-))dkk)77A:r   c                 F   dt        j                  d|z         z  }t        j                  |dz  d|z   t        |       z  d|z
  z  z         d|z   z  }|dk  r!dd|z
  t        |       z  z
  dd|z  z   dz  z  }nd}d}d|dz  z  |z
  }d|d|dz  z  z   | z  z
  }| |z  }||||fS )Nr=   r   r?         @r   )r   r    max)r&   r#   gammarV   betarX   rW   rY   s           r   rF   z'GaussVDSampler._alpha_avec_bsca_invavnn   s    diig..		'1*gS'A%K(   7],3;3;#c(22sS7]7JQ6NNDEDUAX~$dS5!8^+s22*dD'))r   c                    t        j                  ||       }t        |t              r:|dk(  r5|dz  |d|z   z  ||| z  z  z  z
  dz
  }||z  |dz  dz   |z   dz  | z  z
  }||fS t        j                  ||dz  |d|z   z  ||| z  j                  z  j                  z  z
  dz
        }t        j                  |||j                  z  j                  t        j
                  |dz  dz   |z   dz  |       z
        }||fS )Nr   r   r=   r?   )r   r"   
isinstancerD   Touter)r%   r#   yrK   y_vnr^   r_   s          r   rG   zGaussVDSampler._pvec_and_qvec   s   vva}gs#1a4'S7]3tq2vGG#MD!8a# 73>"DDD Tz	 66'1a4'S7]*C1r6**,//+0 $025$6 7D66'D133J>>BHHq3(C/55 $5 6DTzr   c                 \   |	|d|z   z  d|z   |
|z  z  |t        j                  ||
      z  |z  z
  z  z
  }||z  |t        j                  ||      z  d|t        j                  ||      z  z   z  |z  z
  }|
|z  ||z  d|z   ||z  z  t        j                  ||      |z  z
  z  z
  }| |z  }||fS )Nr=   r?   )r   r"   )r   r%   r&   r$   r#   rV   rW   rX   rY   r^   r_   rvecsvecr`   ra   s                  r   rH   zGaussVDSampler._ngv_ngd   s     esW}-7]tby)GbffR6F,F,LLN Nd{TBFF4$99$W---/189 9Vmefn7]rDy)BFF4,=,BBD DTkCxr   c           
         |j                  dt        | j                  dz
  dz  d            }|j                  dd|| j                  z  z   | j                  dz   d|z  | j                  z  z   z        }|j                  d|dz  | j                  d	z   d
z  |z   z        }|j                  dt        d|z
  |d
z  |dz
  d|z  z   z  | j                  dz   d
z  |z   z              }|||fS )Ncfactorg      @g      @      ?rN   rd   r?   rO   g?r   rP   r=   )getre   r   rI   )r*   rR   kwargsrr   rN   rO   rP   s          r   _get_params2zGaussVDSampler._get_params2   s    **YTVVb[C,?(EFZZrEDFFN2"rEzDFF'::< =zz&'B,466C<!2Ce2K"LMjjR$Y$q[EBJe,CD"&&&2+!1E!9;<= 4}r   c                     t        j                  |      }dt        j                  ||      z  } | j                  |fi |S Nr=   )r   r1   r"   rv   )r*   rK   ru   rU   rR   s        r   rC   zGaussVDSampler._get_params   s<    JJwbffQl" t  1&11r   c                     	 t        j                  | j                  |k(        r| j                  S 	 t        j
                  |d      | _        | j                  |      \  }}}t        |||      | _        | j                  S # t        $ r Y [w xY wireturn `dict` with (default) parameters, e.g., `c1` and `cmu`.

        :See also: `RecombinationWeights`Tr   rN   c1rP   )r   r@   rK   _parametersAttributeErrorr   rC   dictr*   rK   rN   r}   rP   s        r   parameters_oldzGaussVDSampler.parameters_old   s    	vvdllg-.''' / xxd3&&w/B2"#6  		s   -B 	BBc                     t        | d      r|| j                  k(  s|| j                  S || _        | j                  |      \  }}}t	        |||      | _        | j                  S )r{   _mueffr|   )hasattrr   r~   rv   r   r*   rR   ru   rN   r}   rP   s         r   
parameterszGaussVDSampler.parameters   sd     D(#$++%###''.B2"#6r   c                 B    t        | j                  |      dz        dz  S z;return Mahalanobis norm of `x` w.r.t. the statistical modelr   rs   )rA   transform_inverser*   xs     r   normzGaussVDSampler.norm  s"    4))!,a/0#55r   c                     t         NNotImplementedErrorr*   s    r   condition_numberzGaussVDSampler.condition_number      !!r   c                     | j                   rVt        j                  | j                  dz        }| j                  | j                  z  }|t        j
                  ||      z  }|S y )Nr   )r)   r   diagr   r!   rk   )r*   Cdvs      r   covariance_matrixz GaussVDSampler.covariance_matrix  sN    ;;		1%ATYY&B"b!!AHr   c                 J    | j                   dz  d| j                  dz  z   z  }|S ).vector of coordinate-wise (marginal) variancesr   r=   )r   r!   )r*   dCs     r   	varianceszGaussVDSampler.variances  s(     YY\S499a</0	r   c                     | j                   r=| j                  }t        j                  | j                        }||z  j
                  |z  S y r   r)   r   r   r    r   rj   r*   r   sqrtdCs      r   correlation_matrixz!GaussVDSampler.correlation_matrix  s<    ;;&&AWWT^^,FJ>>F**r   c                     | j                   |t        j                  d| j                  z         dz
  t	        j
                  || j                        z  | j                  z  z   z  }|S );transform ``x`` as implied from the distribution parametersr=   r   r   r    r#   r   r"   r%   r*   r   rl   s      r   r3   zGaussVDSampler.transform'  s[    IIdiidll(:;cARVVtwwF ''" " #r   c                     || j                   z  }|dt        j                  d| j                  z         z  dz
  t	        j
                  || j                        z  | j                  z  z  }|S rx   r   r   s      r   r   z GaussVDSampler.transform_inverse-  sa    		M	cDIIcDLL011C7266tww< ''" 	"r   c                     t         z2return inverse of associated linear transformationr   r*   resets     r    to_linear_transformation_inversez/GaussVDSampler.to_linear_transformation_inverse3  r   r   c                     t         z'return associated linear transformationr   r   s     r   to_linear_transformationz'GaussVDSampler.to_linear_transformation7  r   r   c                     t         zreturn scalar correction ``alpha`` such that ``X`` and ``f``
        fit to ``f(x) = (x-mean) (alpha * C)**-1 (x-mean)``
        r   r*   meanr6   fs       r   !inverse_hessian_scalar_correctionz0GaussVDSampler.inverse_hessian_scalar_correction;  
     "!r   c                 V    | xj                   t        j                  |      z  c_         | S r   )r   r   r    r*   factors     r   __imul__zGaussVDSampler.__imul__A  s    		TYYv&&	r   r   )T)r   F)__name__
__module____qualname____doc__staticmethodr   r   randomr   r.   r7   r
   rF   rG   rH   rv   rC   r   r   r   propertyr   r   r   r   r3   r   r   r   r   r    r   r   r   r   >   s    
   )+		u *<| * * 
 
 	 		2
 
 6 " "    
  """r   r   c                       e Zd ZdZedd       Zej                  j                  dfdZ	ddZ
d Zd Zd	 Zd
 ZddZd Zed        Zed        Zed        Zed        Zd Zd ZddZddZd Zd Zd Zd Zy)GaussVkDSamplera  Restricted Gaussian Sampler for VkD-CMA
    O(N*k^2 + k^3) Time/Space Variant of CMA-ES with C = D * (I + V * V^T) * D

    References
    ----------
    [1] Youhei Akimoto and Nikolaus Hansen.
    Online Model Selection for Restricted Covariance Matrix Adaptation.
    In Proc. of PPSN 2016, pp. 3--13 (2016)
    [2] Youhei Akimoto and Nikolaus Hansen.
    Projection-Based Restricted Covariance Matrix Adaptation for High
    Dimension. In Proc. of GECCO 2016, pp. 197--204 (2016)
    Nc                 D    | xs i } | j                  ddt        d       | S )zreturn correct options to run `cma.fmin` or initialize
        `cma.CMAEvolutionStrategy` using the `GaussVkDSampler` AKA VkD-CMA-ES
        F)r   
AdaptSigmar	   )r
   r   r   s    r   r   z"GaussVkDSampler.extend_cma_optionsT  s-    
 zr5#($35 	6 r   Tc                    	 t        |      | _        t        j                  |d      }|| _        d| _        d| _        || _	        |j                  dd      | _        d| _        | j                  r5|j                  dd      | _        |j                  d| j                  dz
        | _        d| j                  cxk  r | j                  cxk  r| j                  k  sJ  J |j                  d	d
      | _        |j                  d| j                        | _        |j                  dd      | _        |j                  dd      | _        |j                  dd      | _        t)        d| j                  dz        | _        d| j                  z  | _        d| j,                  z  dz
  | _        |j                  dd      | _        |j                  ddd| j                  z  z
        | _        d| _        d| _        |j                  dd      | _        || _        t        j<                  | j                  | j                  f      | _        t        j<                  | j                        | _         t        j<                  | j                        | _!        t        j<                  | j                        | _"        d| _#        y# t        $ r* || _        t        j
                  | j                        }Y w xY w)r   Tr   r=   k_initr   kminkmaxr   
k_inc_condg      >@
k_dec_condk_adapt_factorg9v?factor_sigma_slopeg?factor_diag_sloper   g      $@r?   csg333333?dsrd   g      @Fr:   r,   N)$r   r   r   r   r   r   r   sigma	sigma_fackadaptrt   kk_activer   r   r   r   r   r   r   re   accepted_slowdownk_adapt_decayk_adapt_waitr   r   flg_injectionpsr)   Dr'   VSr(   dxU)r*   r+   r   r   ru   r-   s         r   r.   zGaussVkDSampler.__init___  sC   	&^DFhhyt4G 

Ha(;;

61-DI

6466A:6DI8dii8$&&89898$jjt<DO$jjtGDO"(**-=u"ED&,jj1Es&KD#%+ZZ#Q&(D"%(T__s-B%CD"!$tvvD #d&8&8 81 <D **T3'**T2TVV#34"jj%0 466466*+$&&!((466"((466"M  	&DFggdffoG	&s   'J3 3/K&%K&c                 ^   | j                   r| j                  | j                        }t        j                  j                  | j                  | j                              |z  | j                  z  }t        j                  || gt        |dz
        D cg c],  }| j                  | j                  | j                              . c}z         }|S t        j                  t        |      D cg c],  }| j                  | j                  | j                              . c}      }|S c c}w c c}w )r0   r   )
r   r   r   r   linalgr   r   r1   r2   r3   )r*   r4   r
   mnormdyr5   r6   s          r   r7   zGaussVkDSampler.sample  s     IIdgg&E))..DFF!34u<GB

B9<A&1*<M(<Mqtzz$&&12<M(  A  

=B6]K]

466 23]KMA(
 Ls   1D%
+1D*c                 `$   | j                   }| j                  }t        j                  |d      }|dd t        j                  t        j
                  |dd             z  }t        j                  |dk\        sJ | j                  ||      \  }}}t        j                  |dkD  t              }	dt        j                  ||      z  }
t        j                  |      ddd	   }t        j                  |      |d|	 dz      | j                  z  }||d|	    }t        |      dz
  }| j                  r"t        | d
      sdt!        dt#        |      | j$                  z        z  | _        t        j(                  | j                        | _        dt        j(                  | j,                        z  | _        t        j0                  | j$                        | _        t5        | j&                  | j6                  z  d      | _        t5        | j:                  | j$                        | _        t5        | j:                  | j$                        | _        d| _         | jB                  rOt        j                  tE        |      D cg c]I  }t        j                  |||   dz            t        jF                  jI                  |||   dz            z  K c}      }| jJ                  t        jF                  jI                  | jJ                        z  }ddk  r~tE        |      D ]0  }t        jL                  ||   |      r n||dz
  k(  s'tO        d       tE        |      D ]1  }t        jL                  ||   |       r n||dz
  k(  s(tO        d       n|D cg c]  }t        j                  ||       }}t        jV                  |      }t        jX                  |      }||   dk  rtQ        jR                  dtT               ||   dkD  rtQ        jR                  dtT               z
  }|t#        |dz
        z  }| xjZ                  | j\                  || jZ                  z
  z  z  c_-        | xj                  t_        j`                  | jZ                  | jb                  z        z  c_        | jZ                  dk  }n	d| _!        d}t        j                  ||      | _%        d|z
  | jd                  z  |t_        jf                  |d|z
  z  |
z        z  | jJ                  z  z   | _2        t        j0                  | j$                  | j                  |	z   dz   f      | _4        |dk(  r|dz   }t_        jf                  t        d|z
  |z
  |d|z
  z  |z  d|z
  z  z               }| jj                  d| jl                  t        jf                  | jn                  d|       |z  z  | jh                  ddd|f<   t_        jf                  |      | jd                  | j,                  z  z  | jh                  dd|dz
  f<   n|dk(  r||	z   }t_        jf                  t        d|z
  |z
  |d|z
  z  |z  d|z
  z  z               }| jj                  d| jl                  t        jf                  | jn                  d|       |z  z  | jh                  ddd|f<   t        jf                  ||z        || j,                  z  jl                  z  | jh                  dd||f<   n||	z   dz   }t_        jf                  t        d|z
  |z
  |d|z
  z  |z  d|z
  z  z               }| jj                  d| jl                  t        jf                  | jn                  d|       |z  z  | jh                  ddd|f<   t        jf                  ||z        || j,                  z  jl                  z  | jh                  dd||dz
  f<   t_        jf                  |      | jd                  | j,                  z  z  | jh                  dd|dz
  f<   | j$                  |kD  rbt        jF                  jq                  t        j                  | jh                  ddd|f   jl                  | jh                  ddd|f               \  }}t        j                  |      ddd	   }||k  rdn%|||d    j	                         | j$                  |z
  z  }||z  |z   }t!        t        j                  |dk\        |      x| _         }||d|    |z
  |z  | jn                  d| t        j                  | jh                  ddd|f   |dd|d| f         t        jf                  ||d|          z  jl                  | jj                  d| nt        jF                  jq                  t        j                  | jh                  ddd|f   | jh                  ddd|f   jl                              \  }}t        j                  |      ddd	   }||k  rdn%|||d    j	                         | j$                  |z
  z  }||z  |z   }t!        t        j                  |dk\        |      x| _         }||d|    |z
  |z  | jn                  d| |dd|d| f   jl                  | jj                  d| | xj,                  t        jf                  ||z  t        j                  | jh                  ddd|f   | jh                  ddd|f   z  d      z   dt        j                  | jn                  d| | jj                  d| | jj                  d| z        z   z        z  c_        t        j`                  | js                         | j$                  z  dz        } | xj,                  | z  c_        | xjd                  | z  c_2        | j                  du ry| xj@                  dz  c_         | j8                  ju                  t_        j(                  | j                  | jv                  z        | j*                  z
         | j8                  jx                  | j&                  | j6                  z  z  | _=        t_        j(                  | j                  | jv                  z        | _        | j<                  ju                  dt        j(                  | j,                        z  t        j(                  dt        j                  | jn                  d| j                   | jj                  d| j                   dz        z         z   | j.                  z
         | j<                  jx                  ||z   z  | _>        dt        j(                  | j,                        z  t        j(                  dt        j                  | jn                  d| j                   | jj                  d| j                   dz        z         z   | _        | j>                  ju                  t        j(                  d| jn                  z         | j2                  z
         | j>                  jx                  ||z   z  | _?        t        j(                  d| jn                  z         | _        | j@                  | j                  kD  }!|!| j                  | j                  k  z  }!|!t        j                  d| jn                  d| j                   z   | j                  kD        z  }!|!t        j
                  | jz                        | j                  k  z  }!|!t        j                  t        j
                  | j|                        | j                  k        z  }!| j                  | j                  kD  d| jn                  d| j                   z   | j                  k  z  }"|"| j~                  d| j                   dk  z  }"| j@                  | j                  kD  r|!r
|| _         t!        t        t        t_        j                  | j                  | j                  z              | j                  dz         | j                        x| _        }#t        j                  | jj                  t        j0                  |#|z
  | j$                  f      f      | _5        t        j                  | j$                  |#|	z   dz   f      | _4        | j                  || j                        \  }}}d| _         n| j@                  || j                  z  kD  rt        j                  |"      rt        j                  |"      }$t        t        j                  |$      | j                        }%| jj                  |$   | _5        | jn                  d|$j                  d    |$   | jn                  d|% d| jn                  |%d |%x| _        | _         | j                  || j                        \  }}}t_        j`                  | js                         | j$                  z  dz        } | xj,                  | z  c_        | xjd                  | z  c_2        yc c}w c c}w )r9   Tr   r   Nr:   r   r;   r=   r>   opt_convrs   r?   )decaydim      z&no first mirrored vector found for TPAz'no second mirrored vector found for TPAgGz?gGzr   )axisF)Pr   r   r   r   rA   rB   r@   rC   rD   r"   rE   r1   r   r   r   r   rI   floatr   r   loglast_log_sigmar   
last_log_dr'   last_log_cond_corrExponentialMovingAverager   ema_log_sigmar   	ema_log_d	ema_log_sitr_after_k_incr   r2   r   r   r   allcloseRuntimeErrorwarningswarnRuntimeWarningargmaxargminr   r   r   expr   r(   r    r   r   rj   r   eigh_get_log_determinant_of_covr
   r   Mlnsigma_changelndiag_changelnlambda_changer   r   r   r   r   r   r   re   ceilr   vstackemptyanylogical_notcount_nonzeroshape)&r*   rJ   rK   kar   rM   rN   rO   rP   rQ   rR   rS   rT   rU   lamr5   nlistndxipimnyinner	alpha_actrL   rankUrV   DDRidxeigrf   rg   L	gmean_eigflg_k_increaseflg_k_decreasenewkflg_keepnew_ks&                                         r   r
   zGaussVkDSampler.update  s   
 ]]FFXXgD)VbffRVVBqrF^,,vvbCi   ((Q/D#VVBF#&bffRn$jjnTrT"zz'"3s8a<04::=s3BxL'lQ;;wtZ8#b%*tvv*=">>DM"$&&"4D!BFF466N2DO&(hhtvv&6D#!9mmd&<&<<!"ED5((dff6DN5((dff6DN#$D  JJ=B3Z =G Q!,-		ws1vz234=G  E ''BIINN47733CAv*B{{59c2S1W}*+STT	 %  *B{{59sd3S1W}*+TUU	 % 4995RC59YYu%YYu%9t#MM"J"029u$MM"K"02RIsQw'IGGtww)dgg"566GJJ$((477TWW#455J77S=D!%DD&&D/ 7dgg%tyyrBw9>:? 0@ )@BF'')J J 466466B;?34 #:FEIIAGdNTQX%6%;q2v%FFGIE"ffSbkmmrwwtvvcr{/Ce/KLDFF1crc6N#'99T?dgg6F#GDFF1eai< S[GEIIAGdNTQX%6%;q2v%FFGIE"ffSbkmmrwwtvvcr{/Ce/KLDFF1crc6N"$''#'"2dTVVm5F5F"FDFF1bh;GaKEIIAGdNTQX%6%;q2v%FFGIE"ffSbkmmrwwtvvcr{/Ce/KLDFF1crc6N&(ggcAg&6$-9J9J&JDFF1bl?##'99T?dgg6F#GDFF1eai< 66E>IINNtvva%i(**DFF1fuf9,=>@EBZZ^DbD)F!AF12J););)=!)LE5=5(D!$RVVB!G_a!88DMBfSbk?U2d:DFF3BK66$&&FUF"3Qq&"+~5FG772fSbk?3456Q FF3BK
 IINNtvva%i($&&FUF*;*=*=>@EBZZ^DbD)F!AF12J););)=!)LE5=5(D!$RVVB!G_a!88DMBfSbk?U2d:DFF3BKAvcr{N+--DFF3BK"''U]RVVq&5&y!DFF1fuf9$55A? ?266$&&"+tvvcr{TVVCR['@AACD 	D FF4;;=FLM	)9 ;;%! 	!!$((4::+F"G$J]J]"]^"0022dmm6:6L6L7M N"hhtzzDNN'BCb266$&&>1BFF1rvvFF7DFFOTVVGTVV_a/@1 <1 52 248OOD 	E!^^--t<rvvFF  ffQw!9K!LLMNbffQZ043J3JJK#~~//3:>"$&&TVV"4 --0A0AA$&&499,,"&&!dffWdffo"5!HIIFF4&&'$*A*AA	C"&&FF4%%&)?)??A 	A &&499,w$//134//82=>  4#4#44.DMC		$&&4+>+>">?@$&&1*M		 DFT YY$(DFF1C(DEFDFXXtvvtby1}56DF"..q$&&9OT3#$D !!A(9(9$99bff?  ~~n5H((2DII>EVVH%DF"ff%7hnnQ&78(CDFF6ENDFF56N%**DFT]"..q$&&9OT3 HHT==?$&&H3NO	)9Q * :s   <AAH&AH+c                     t        j                  |      }t        j                  ||dkD           dz  t        j                  ||dkD     ||dkD           z  }| j	                  ||      S )a  Return the learning rate cone, cmu, cc depending on k

        Parameters
        ----------
        weights : list of float
            the weight values for vectors used to update the distribution
        k : int
            the number of vectors for covariance matrix

        Returns
        -------
        cone, cmu, cc : float in [0, 1]. Learning rates for rank-one, rank-mu,
         and the cumulation factor for rank-one.
        r:   r   )r   r   rA   r"   rv   )r*   rK   r   rU   rR   s        r   rC   zGaussVkDSampler._get_paramsp  s`     HHWqRy!1$rvvaBi1r6'CC  **r   c                     | j                   |dz   z  }d|| j                   z   d|dz   z  z   |z   z  }t        j                  |      }t        d|z
  d|dz
  d|z  z   z  |d|dz   z  z   |z   z        }|||fS )Nr   r?   r   r=      )r   r   r    rI   )r*   rR   r   nelemrO   rN   rP   s          r   rv   zGaussVkDSampler._get_params2  s    !a% edffnqAE{2U:; YYt_!d(C519sU{#:;1A;&.0 14}r   c                 6   	 t        j                  | j                  |k(        r| j                  S 	 t        j
                  |d      | _        | j                  || j                        \  }}}t        |||      | _        | j                  S # t        $ r Y fw xY wrz   )	r   r@   rK   r~   r   r   rC   r   r   r   s        r   r   zGaussVkDSampler.parameters_old  s    	vvdllg-.''' / xxd3&&w7B2"#6  		s   -B 	BBc                     ||| _         t        | d      st        d       | j                  | j                   | j                        \  }}}t        |||      | _        | j                  S )r{   r   zqThe first call of `parameters` method must specify
    the `mueff` argument! Otherwise an except will be raised. r|   )r   r   r   rv   r   r   r~   r   s         r   r   zGaussVkDSampler.parameters  sg     DKtX& B C''TVV<B2"#6r   c                 V    t        j                  | j                  |      dz        dz  S r   )r   rA   r   r   s     r   r   zGaussVkDSampler.norm  s&    vvd,,Q/23S88r   c                     t         r   r   r   s    r   r   z GaussVkDSampler.condition_number  r   r   c                 ,   | j                   r| j                  }|dkD  rt        j                  | j                        t        j
                  | j                  d | j                  | j                  d | z  | j                  d |       z   }|| j                  z  j                  | j                  z  }n"t        j                  | j                  dz        }|| j                  dz  z  }|S t        j                  d      }t        j                  d      | _        |S )Nr   r   r   )r)   r   r   eyer   r"   r   rj   r   r   r   r   r   B)r*   r  r   s      r   r   z!GaussVkDSampler.covariance_matrix  s    ;;BAvFF466NRVVDFF3BKMMDFF3BK,G,0FF3BK&9 9ZNNTVV+GGDFFAI&QA
  
AWWQZDFr   c                    | j                   }|dk(  r| j                  dz  | j                  dz  z  S | j                  dz  dt        j                  | j
                  d| | j                  d| dz        z   z  | j                  dz  z  S )r   r   r   r=   N)r   r   r   r   r"   r   r   )r*   r  s     r   r   zGaussVkDSampler.variances  s     ]]76619tzz1},,6619bffTVVCR[$&&"+q.99;=AZZ]K Kr   c                     | j                   r=| j                  }t        j                  | j                        }||z  j
                  |z  S y r   r   r   s      r   r   z"GaussVkDSampler.correlation_matrix  s<    ;;&&AWWT^^,FJ>>F**r   c           
      J   | j                   }|t        j                  t        j                  || j                  d| j                        t        j
                  d| j                  d| z         dz
  z  | j                  d|       z   }|| j                  | j                  z  z  }|S )r   Nr=   )	r   r   r"   r   rj   r    r   r   r   )r*   r   r  rl   s       r   r3   zGaussVkDSampler.transform  s     ]]FF1dffSbkmm$WWS466#2;&'#-/04s= = 	
TVVdjj  r   c                 ~   || j                   z  | j                  z  }| j                  dk(  r|S |t        j                  t        j                  | j
                  d | j                   |      dt        j                  d| j                  d | j                   z         z  dz
  z  | j
                  d | j                         z   S )Nr   r=   )r   r   r   r   r"   r   r    r   r   s      r   r   z!GaussVkDSampler.transform_inverse  s    J#==AHrvvtvvnt}}-q1rwwsTVVNT]]%;;<<sBFF>DMM*, , ,r   c                     t         r   r   r   s     r   r   z0GaussVkDSampler.to_linear_transformation_inverse  r   r   c                     t         r   r   r   s     r   r   z(GaussVkDSampler.to_linear_transformation  r   r   c                     t         r   r   r   s       r   r   z1GaussVkDSampler.inverse_hessian_scalar_correction  r   r   c                     | xj                   t        j                  |      z  c_         | xj                  t        j                  |      z  c_        | S r   )r   r   r    r   r   s     r   r   zGaussVkDSampler.__imul__  s5    

dii''
$))F++r   c           	          dt        j                  t        j                  | j                              z  t        j                  t        j                  d| j                  d | j
                   z               z   S )Nr?   r=   )r   rA   r   r   r   r   r   s    r   r   z+GaussVkDSampler._get_log_determinant_of_cov  sT    RVVBFF466N++bffFF3//0/2 2 	2r   c                     t        j                  | j                        t        j                  | j                        z  dz  t        j                  d| j                  d| j
                   z         fS )a  get the condition numbers of D**2 and (I + VV')
        
        Theoretically, the condition number of the covariance matrix can be
        at most the product of the return values. It might be safe to stop 
        a run if the product of the return values reaches 1e14.

        Returns
        -------
        float
            condition number of D
        float 
            condition number of I + VV'
        r   r   N)r   re   r   rI   r   r   r   s    r   get_condition_numbersz%GaussVkDSampler.get_condition_numbers  sM     tvv/A5rvva$&&$&&/>Q7RRRr   r   r   )r   r   r   r   r   r   r   r   r   r.   r7   r
   rC   rv   r   r   r   r   r   r   r   r   r3   r   r   r   r   r   r   r5  r   r   r   r   r   F  s       yy0d$KZ+&  9 " "  " K K  	,"""
2Sr   r   c                       e Zd ZdZddZd Zy)r   zExponential Moving Average, Variance, and SNR (Signal-to-Noise Ratio)

    See http://www-uxsup.csx.cam.ac.uk/~fanf2/hermes/doc/antiforgery/stats.pdf
    c                     || _         t        j                  |      | _        t        j                  |      | _        | | _        y)zs

        The latest N steps occupy approximately 86% of the information when
        decay = 2 / (N - 1).
        N)r   r   r'   r  r   flg_init)r*   r   r   flg_init_with_datas       r   r.   z!ExponentialMovingAverage.__init__  s3     
##++r   c                     | j                   r| j                  nd}| xj                  |d|z
  || j                  z
  dz  z  | j                  z
  z  z  c_        | xj                  ||| j                  z
  z  z  c_        y )Nr=   r   r   )r8  r   r   r  )r*   datumas      r   r
   zExponentialMovingAverage.update&  s`    --DJJR!A%$&&.1!44tvv=>>!utvv~&&r   Nr   )r   r   r   r   r.   r
   r   r   r   r   r     s    
	,'r   r   )r   r   r   numpyr   
interfacesr   r   r   objectr   r   r   r   <module>r@     sG   6n    DEA EPMSB MS^'v 'r   