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: Calculates the harmonic mean of the value 'y' from the self.central value. The numpy array returned is typically scaled up to get the standard deviation matrix.
  
  Parameters
  ----------
  y: np.ndarray
      Containing the data distribution. Shape of y should be (batch,no_of_electron,1,3)
  
  Returns
  -------
  np.ndarray
      Contains the harmonic mean of the data distribution of each batch. Shape of the array obtained (batch_no, no_of_electrons,1,1)
docstr_tok: ["Calculates","the","harmonic","mean","of","the","value","'","y","'","from","the","self.central","value",".","The","numpy","array","returned","is","typically","scaled","up","to","get","the","standard","deviation","matrix",".","Parameters","--","--","--","--","--","y",":","np.ndarray","Containing","the","data","distribution",".","Shape","of","y","should","be","(","batch",",","no_of_electron,1,3",")","Returns","--","--","--","-","np.ndarray","Contains","the","harmonic","mean","of","the","data","distribution","of","each","batch",".","Shape","of","the","array","obtained","(","batch_no",",","no_of_electrons,1,1",")"]
code: def harmonic_mean(self, y: np.ndarray) -> np.ndarray:
      """Calculates the harmonic mean of the value 'y' from the self.central value. The numpy array returned is typically scaled up to get the standard deviation matrix.
  
      Parameters
      ----------
      y: np.ndarray
          Containing the data distribution. Shape of y should be (batch,no_of_electron,1,3)
  
      Returns
      -------
      np.ndarray
          Contains the harmonic mean of the data distribution of each batch. Shape of the array obtained (batch_no, no_of_electrons,1,1)
      """
  
      diff = y - self.central_value
      distance = np.linalg.norm(diff, axis=-1, keepdims=True)
      return 1.0 / np.mean(1.0 / distance, axis=-2, keepdims=True)
  
file_path: deepchem/deepchem/utils/electron_sampler.py
imports: import numpy
  from typing import Optional, Callable
label_desc: Use image node_id 2 for calling the ElectronSampler obj's underlying member method code with example usage: obj.harmonic_mean(y) and returns: unknown