class_docstr: This class enables to initialize electron's position using gauss distribution around a nucleus and update using Markov Chain Monte-Carlo(MCMC) moves.
  
  Using the probability obtained from the square of magnitude of wavefunction of a molecule/atom, MCMC steps can be performed to get the electron's positions and further update the wavefunction.
  This method is primarily used in methods like Variational Monte Carlo to sample electrons around the nucleons.
  Sampling can be done in 2 ways:
  -Simultaneous: All the electrons' positions are updated all at once.
  
  -Single-electron: MCMC steps are performed only a particular electron, given their index value.
  
  Further these moves can be done in 2 methods:
  -Symmetric: In this configuration, the standard deviation for all the steps are uniform.
  
  -Asymmetric: In this configuration, the standard deviation are not uniform and typically the standard deviation is obtained a function like harmonic distances, etc.
  
  Irrespective of these methods, the initialization is done uniformly around the respective nucleus and the number of electrons specified.
  
  Example
  -------
  >>> from deepchem.utils.electron_sampler import ElectronSampler
  >>> test_f = lambda x: 2*np.log(np.random.uniform(low=0,high=1.0,size=np.shape(x)[0]))
  >>> distribution=ElectronSampler(central_value=np.array([[1,1,3],[3,2,3]]),f=test_f,seed=0,batch_no=2,steps=1000,)
  >>> distribution.gauss_initialize_position(np.array([[1],[2]]))
  
  >> print(distribution.x)
  [[[[1.03528105 1.00800314 3.01957476]]
  
    [[3.01900177 1.99697286 2.99793562]]
  
    [[3.00821197 2.00288087 3.02908547]]]
  
  
  [[[1.04481786 1.03735116 2.98045444]]
  
    [[3.01522075 2.0024335  3.00887726]]
  
    [[3.00667349 2.02988158 2.99589683]]]]
  >>> distribution.move()
  0.5115
  
  >> print(distribution.x)
  [[[[-0.32441754  1.23330263  2.67927645]]
  
    [[ 3.42250997  2.23617126  3.55806632]]
  
    [[ 3.37491385  1.54374006  3.13575241]]]
  
  
  [[[ 0.49067726  1.03987841  3.70277884]]
  
    [[ 3.5631939   1.68703947  2.5685874 ]]
  
    [[ 2.84560249  1.73998364  3.41274181]]]]
docstr: Initializes the position around a central value as mean sampled from a gauss distribution and updates self.x.
  Parameters
  ----------
  no_sample: np.ndarray,
      Contains the number of samples to initialize under each mean. should be in the form [[3],[2]..], where here it means 3 samples and 2 samples around the first entry and second entry,respectively in self.central_value is taken.
  stddev: float, optional (default 0.02)
      contains the stddev with which the electrons' coordinates are initialized
docstr_tok: ["Initializes","the","position","around","a","central","value","as","mean","sampled","from","a","gauss","distribution","and","updates","self.x",".","Parameters","--","--","--","--","--","no_sample",":","np.ndarray",",","Contains","the","number","of","samples","to","initialize","under","each","mean",".","should","be","in","the","form","[","[","3","]",",","[","2","]","..","]",",","where","here","it","means","3","samples","and","2","samples","around","the","first","entry","and","second","entry",",","respectively","in","self.central_value","is","taken",".","stddev",":","float",",","optional","(","default","0.02",")","contains","the","stddev","with","which","the","electrons","'","coordinates","are","initialized"]
code: def gauss_initialize_position(
      self, no_sample: np.ndarray, stddev: float = 0.02
  ):
      """Initializes the position around a central value as mean sampled from a gauss distribution and updates self.x.
      Parameters
      ----------
      no_sample: np.ndarray,
          Contains the number of samples to initialize under each mean. should be in the form [[3],[2]..], where here it means 3 samples and 2 samples around the first entry and second entry,respectively in self.central_value is taken.
      stddev: float, optional (default 0.02)
          contains the stddev with which the electrons' coordinates are initialized
      """
  
      mean = self.central_value[0]
      specific_sample = no_sample[0][0]
      ndim = np.shape(self.central_value)[1]
      self.x = np.random.normal(
          mean, stddev, (self.batch_no, specific_sample, 1, ndim)
      )
  
      end = np.shape(self.central_value)[0]
      for i in range(1, end):
          mean = self.central_value[i]
          specific_sample = no_sample[i][0]
          self.x = np.append(
              self.x,
              np.random.normal(
                  mean,
                  stddev,
                  (self.batch_no, specific_sample, 1, ndim),
              ),
              axis=1,
          )
  
file_path: deepchem/deepchem/utils/electron_sampler.py
imports: import numpy
  from typing import Optional, Callable
label_desc: Use image node_id 4 for calling the ElectronSampler obj's underlying member method code with example usage: obj.gauss_initialize_position(no_sample, stddev) without return types