code: def populate(self):
      super(NestedDataset, self).populate()
      ds = SubmoduleDataset()
      ds.create()
      kw = dict(expect_stderr=True)
      self.repo.call_git(
          ["submodule", "add", ds.url, "sub dataset1"], **kw
      )
      self.repo.call_git(
          [
              "-C",
              opj(self.path, "sub dataset1"),
              "submodule",
              "add",
              ds.url,
              "sub sub dataset1",
          ],
          **kw,
      )
      GitRepo(opj(self.path, "sub dataset1")).commit(
          "Added sub dataset."
      )
      self.repo.commit("Added subdatasets.", options=["-a"])
      self.repo.call_git(
          ["submodule", "update", "--init", "--recursive"], **kw
      )
      # init all annexes
      for s in (
          "",
          "sub dataset1",
          opj("sub dataset1", "sub sub dataset1"),
      ):
          AnnexRepo(opj(self.path, s), init=True)
  
imports: import os
  import tempfile
  from abc import ABCMeta, abstractmethod
  from os.path import exists
  from os.path import join
  from datalad import cfg
  from datalad.customremotes.base import init_datalad_remote
  from ..None import __version__
  from ..support.annexrepo import AnnexRepo
  from ..support.external_versions import external_versions
  from ..support.gitrepo import GitRepo
  from ..support.network import get_local_file_url
  from ..utils import swallow_logs, swallow_outputs
  from .None import _TEMP_PATHS_GENERATED
  from .utils_pytest import get_tempfile_kwargs
label_desc: Use image node_id 1 for calling the NestedDataset obj's underlying member method code with example usage: obj.populate() without return types