docs: def makesubatoffset(self, bitoffset, *, _offsetideal=None):
          """Create a copy of this promise with an offset, and use it as this promise's child.
  
          If this promise's primitive is being merged with another
          primitive, a new subpromise may be required to keep track of
          the new offset of data coming from the new primitive.
  
  
          Args:
              bitoffset: An integer offset of the data in the new primitive.
          _offsetideal: integer offset of the data if terms of bits actually used for promises. Used to calculate the start index to read if the associated primitive has arbitrary TDO control.
  
          Returns:
              A TDOPromise registered with this promise, and with the
              correct offset.
  
          """
          if _offsetideal is None:
              _offsetideal = bitoffset
          if bitoffset is 0:
              return self
          newpromise = TDOPromise(
              self._chain,
              self._bitstart + bitoffset,
              self._bitlength,
              _parent=self,
              bitstartselective=self._bitstartselective+_offsetideal
          )
          self._addsub(newpromise, 0)
          return newpromise