code: def pushdown_not(self):
          
          node = self.node.pushdown_not()
          if node is self.node:
              return self
          else:
              return _expr(node)
docs: Return an expression with NOT operators pushed down thru dual ops.
  
          Specifically, perform the following transformations:
              ~(a | b | c ...) <=> ~a & ~b & ~c ...
              ~(a & b & c ...) <=> ~a | ~b | ~c ...
              ~(s ? d1 : d0) <=> s ? ~d1 : ~d0