code: def visit_and_update(self, visitor_fn):
          
          new_inner = self.inner_expression.visit_and_update(visitor_fn)
  
          if new_inner is not self.inner_expression:
              return visitor_fn(UnaryTransformation(self.operator, new_inner))
          else:
              return visitor_fn(self)
docs: Create an updated version (if needed) of UnaryTransformation via the visitor pattern.