<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update_elements(self, line, column, charcount, docdelta=0):
 """Updates all the element instances that are children of this module to have new start and end charindex values based on an operation that was performed on the module source code. :arg line: the line number of the *start* of the operation. :arg column: the column number of the start of the operation. :arg charcount: the total character length change from the operation. :arg docdelta: the character length of changes made to types/execs that are children of the module whose docstrings external to their definitions were changed. """

        target = self.charindex(line, column) + charcount

        #We are looking for all the instances whose *start* attribute lies
        #after this target. Then we update them all by that amount.
        #However, we need to be careful because of docdelta. If an elements
        #docstring contains the target, we don't want to update it.
        if line < self.contains_index:
            for t in self.types:
                if self._update_char_check(self.types[t], target, docdelta):
                    self._element_charfix(self.types[t], charcount)

            for m in self.members:
                if self.members[m].start > target:
                    self.members[m].start += charcount
                    self.members[m].end += charcount

            self._contains_index = None
        else:
            for iexec in self.executables:
                if self._update_char_check(self.executables[iexec], target, docdelta):
                    self._element_charfix(self.executables[iexec], charcount)