code: def set_temperature(self, temperature):
          
          # mean 0 variance 1
          velocities = np.random.randn(len(self.structure), 3)
  
          # in AMU, (N,1) array
          atomic_masses = np.array([site.specie.atomic_mass.to("kg")
                                    for site in self.structure])
          dof = 3 * len(self.structure) - 3
  
          # scale velocities due to atomic masses
          # mean 0 std proportional to sqrt(1/m)
          velocities /= atomic_masses[:, np.newaxis] ** (1 / 2)
  
          # remove linear drift (net momentum)
          velocities -= np.average(atomic_masses[:, np.newaxis] * velocities,
                                   axis=0) / np.average(atomic_masses)
  
          # scale velocities to get correct temperature
          energy = np.sum(1 / 2 * atomic_masses *
                          np.sum(velocities ** 2, axis=1))
          scale = (temperature * dof / (2 * energy / const.k)) ** (1 / 2)
  
          velocities *= scale * 1e-5  # these are in A/fs
  
          self.temperature = temperature
          try:
              del self.structure.site_properties["selective_dynamics"]
          except KeyError:
              pass
  
          try:
              del self.structure.site_properties["predictor_corrector"]
          except KeyError:
              pass
          # returns as a list of lists to be consistent with the other
          # initializations
  
          self.structure.add_site_property("velocities", velocities.tolist())
docs: Initializes the velocities based on Maxwell-Boltzmann distribution.
          Removes linear, but not angular drift (same as VASP)
  
          Scales the energies to the exact temperature (microcanonical ensemble)
          Velocities are given in A/fs. This is the vasp default when
          direct/cartesian is not specified (even when positions are given in
          direct coordinates)
  
          Overwrites imported velocities, if any.
  
          Args:
              temperature (float): Temperature in Kelvin.