code: def find_write_predecessors(self, address):
          predecessors = set()
          enclosing_writer = None
          node_stream = self._tree.walk(address)
          address_len = len(address)
          try:
              for node_address, node in node_stream:
                  if node is not None:
                      predecessors.update(node.readers)
                      if node.writer is not None:
                          enclosing_writer = node.writer
                      if len(node_address) >= address_len:
                          break
          except AddressNotInTree as err:
              if err.match is not None:
                  return self.find_write_predecessors(err.match)
              return predecessors
          finally:
              if enclosing_writer is not None:
                  predecessors.add(enclosing_writer)
          for _, node in node_stream:
              if node is not None:
                  if node.writer is not None:
                      predecessors.add(node.writer)
                  predecessors.update(node.readers)
          return predecessors