code: def _add_metadata_element(self, md, subsection, mdtype, mode="mdwrap", **kwargs):
          
          # HELP how handle multiple amdSecs?
          # When adding *MD which amdSec to add to?
          if mode.lower() == "mdwrap":
              othermdtype = kwargs.get("othermdtype")
              mdsec = MDWrap(md, mdtype, othermdtype)
          elif mode.lower() == "mdref":
              loctype = kwargs.get("loctype")
              label = kwargs.get("label")
              otherloctype = kwargs.get("otherloctype")
              mdsec = MDRef(md, mdtype, loctype, label, otherloctype)
          subsection = SubSection(subsection, mdsec)
          if subsection.subsection == "dmdSec":
              self.dmdsecs.append(subsection)
          else:
              try:
                  amdsec = self.amdsecs[0]
              except IndexError:
                  amdsec = AMDSec()
                  self.amdsecs.append(amdsec)
              amdsec.subsections.append(subsection)
          return subsection
docs: :param md: Value to pass to the MDWrap/MDRef
          :param str subsection: Metadata tag to create.  See :const:`SubSection.ALLOWED_SUBSECTIONS`
          :param str mdtype: Value for mdWrap/mdRef @MDTYPE
          :param str mode: 'mdwrap' or 'mdref'
          :param str loctype: Required if mode is 'mdref'. LOCTYPE of a mdRef
          :param str label: Optional. Label of a mdRef
          :param str otherloctype: Optional. OTHERLOCTYPE of a mdRef.
          :param str othermdtype: Optional. OTHERMDTYPE of a mdWrap.