code: def __new__(cls, arg):
      if isinstance(arg, str):
          return Logic.__new__(cls, arg)
  
      elif isinstance(arg, bool):
          return not arg
      elif isinstance(arg, Not):
          return arg.args[0]
  
      elif isinstance(arg, Logic):
          # XXX this is a hack to expand right from the beginning
          arg = arg._eval_propagate_not()
          return arg
  
      else:
          raise ValueError("Not: unknown argument %r" % (arg,))
  
imports: from __future__ import annotations
  from typing import Optional
label_desc: Use image node_id 1 for calling the Not obj's underlying member method code with example usage: obj.__new__(cls, arg) and returns: Logic, unknown, arg, arg