class_docstr: Create a molecule object that stores molecular information and default basis set parameters.
  
  The molecule object can be passed to functions that perform a Hartree-Fock calculation.
  
  Args:
      symbols (list[str]): Symbols of the atomic species in the molecule. Currently, atoms with
          atomic numbers 1-10 are supported.
      coordinates (array[float]): 1D array with the atomic positions in Cartesian coordinates. The
          coordinates must be given in atomic units and the size of the array should be ``3*N``
          where ``N`` is the number of atoms.
      charge (int): net charge of the molecule
      mult (int): Spin multiplicity :math:`\mathrm{mult}=N_\mathrm{unpaired} + 1` for
          :math:`N_\mathrm{unpaired}` unpaired electrons occupying the HF orbitals. Currently,
          openshell systems are not supported; ``mult`` must be equal to :math:`1`.
      basis_name (str): Atomic basis set used to represent the molecular orbitals. Currently, the
          only supported basis sets are 'STO-3G', '6-31G', '6-311G' and 'CC-PVDZ'.
      load_data (bool): flag to load data from the basis-set-exchange library
      l (tuple[int]): angular momentum quantum numbers of the basis function
      alpha (array[float]): exponents of the primitive Gaussian functions
      coeff (array[float]): coefficients of the contracted Gaussian functions
      r (array[float]): positions of the Gaussian functions
      normalize (bool): if True, the basis functions get normalized
  
  **Example**
  
  >>> symbols  = ['H', 'H']
  >>> geometry = np.array([[0.0, 0.0, -0.694349],
  >>>                      [0.0, 0.0,  0.694349]], requires_grad = True)
  >>> mol = Molecule(symbols, geometry)
  >>> print(mol.n_electrons)
  2
docstr: Return a function that evaluates a molecular orbital at a given position.
  
  Args:
      index (int): index of the molecular orbital
  
  Returns:
      function: function to evaluate the molecular orbital
  
  **Example**
  
  >>> symbols  = ['H', 'H']
  >>> geometry = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 1.0]], requires_grad = False)
  >>> mol = qml.qchem.Molecule(symbols, geometry)
  >>> qml.qchem.scf(mol)() # run scf to obtain the optimized molecular orbitals
  >>> mo = mol.molecular_orbital(1)
  >>> mo(0.0, 0.0, 0.0)
  0.01825128
docstr_tok: ["Return","a","function","that","evaluates","a","molecular","orbital","at","a","given","position",".","Args",":","index","(","int",")",":","index","of","the","molecular","orbital","Returns",":","function",":","function","to","evaluate","the","molecular","orbital","*","*","Example","*","*",">",">",">","symbols","=","[","'","H","'",",","'","H","'","]",">",">",">","geometry","=","np.array","(","[","[","0.0",",","0.0",",","0.0","]",",","[","0.0",",","0.0",",","1.0","]","]",",","requires_grad","=","False",")",">",">",">","mol","=","qml.qchem.Molecule","(","symbols",",","geometry",")",">",">",">","qml.qchem.scf","(","mol",")","(",")","#","run","scf","to","obtain","the","optimized","molecular","orbitals",">",">",">","mo","=","mol.molecular_orbital","(","1",")",">",">",">","mo","(","0.0",",","0.0",",","0.0",")","0.01825128"]
code: def molecular_orbital(self, index):
      r"""Return a function that evaluates a molecular orbital at a given position.
  
      Args:
          index (int): index of the molecular orbital
  
      Returns:
          function: function to evaluate the molecular orbital
  
      **Example**
  
      >>> symbols  = ['H', 'H']
      >>> geometry = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 1.0]], requires_grad = False)
      >>> mol = qml.qchem.Molecule(symbols, geometry)
      >>> qml.qchem.scf(mol)() # run scf to obtain the optimized molecular orbitals
      >>> mo = mol.molecular_orbital(1)
      >>> mo(0.0, 0.0, 0.0)
      0.01825128
      """
      # molecular coefficients are set by other modules
      c = self.mo_coefficients[
          index
      ]  # pylint:disable=unsubscriptable-object
  
      def orbital(x, y, z):
          r"""Evaluate a molecular orbital at a given position.
  
          Args:
              x (float): x component of the position
              y (float): y component of the position
              z (float): z component of the position
  
          Returns:
              array[float]: value of a molecular orbital
          """
          m = 0.0
          for i in range(self.n_orbitals):
              m = m + c[i] * self.atomic_orbital(i)(x, y, z)
          return m
  
      return orbital
  
file_path: pennylane/pennylane/qchem/molecule.py
imports: import itertools
  import collections
  from pennylane import numpy
  from .basis_data import atomic_numbers
  from .basis_set import BasisFunction, mol_basis_data
  from .integrals import contracted_norm, primitive_norm
label_desc: Use image node_id 4 for calling the Molecule obj's underlying member method code with example usage: obj.molecular_orbital(index) and returns: orbital, m