code: def adsorb_both_surfaces(self, molecule, repeat=None, min_lw=5.0,
                               reorient=True, find_args={}):
          
  
          # Get the adsorbed surfaces first
          adslabs = self.generate_adsorption_structures(molecule, repeat=repeat,
                                                        min_lw=min_lw,
                                                        reorient=reorient,
                                                        find_args=find_args)
  
          new_adslabs = []
          for adslab in adslabs:
  
              # Find the adsorbate sites and indices in each slab
              symmetric, adsorbates, indices = False, [], []
              for i, site in enumerate(adslab.sites):
                  if site.surface_properties == "adsorbate":
                      adsorbates.append(site)
                      indices.append(i)
  
              # Start with the clean slab
              adslab.remove_sites(indices)
              slab = adslab.copy()
  
              # For each site, we add it back to the slab along with a
              # symmetrically equivalent position on the other side of
              # the slab using symmetry operations
              for adsorbate in adsorbates:
                  p2 = adslab.get_symmetric_site(adsorbate.frac_coords)
                  slab.append(adsorbate.specie, p2,
                              properties={"surface_properties": "adsorbate"})
                  slab.append(adsorbate.specie, adsorbate.frac_coords,
                              properties={"surface_properties": "adsorbate"})
              new_adslabs.append(slab)
  
          return new_adslabs
docs: Function that generates all adsorption structures for a given
          molecular adsorbate on both surfaces of a slab. This is useful
          for calculating surface energy where both surfaces need to be
          equivalent or if we want to calculate nonpolar systems.
  
          Args:
              molecule (Molecule): molecule corresponding to adsorbate
              repeat (3-tuple or list): repeat argument for supercell generation
              min_lw (float): minimum length and width of the slab, only used
                  if repeat is None
              reorient (bool): flag on whether or not to reorient adsorbate
                  along the miller index
              find_args (dict): dictionary of arguments to be passed to the
                  call to self.find_adsorption_sites, e.g. {"distance":2.0}