code: def _graphviz_default_namer(thing, is_edge=True, is_to_splitmerge=False):
      
      if is_edge:
          if (thing.name is None or
                  thing.name.startswith('tmp') or
                  isinstance(thing, (Input, Output, Const, Register))):
              name = ''
          else:
              name = '/'.join([thing.name, str(len(thing))])
          penwidth = 2 if len(thing) == 1 else 6
          arrowhead = 'none' if is_to_splitmerge else 'normal'
          return '[label="%s", penwidth="%d", arrowhead="%s"]' % (name, penwidth, arrowhead)
  
      elif isinstance(thing, Const):
          return '[label="%d", shape=circle, fillcolor=lightgrey]' % thing.val
      elif isinstance(thing, (Input, Output)):
          return '[label="%s", shape=circle, fillcolor=none]' % thing.name
      elif isinstance(thing, Register):
          return '[label="%s", shape=square, fillcolor=gold]' % thing.name
      elif isinstance(thing, WireVector):
          return '[label="", shape=circle, fillcolor=none]'
      else:
          try:
              if thing.op == '&':
                  return '[label="and"]'
              elif thing.op == '|':
                  return '[label="or"]'
              elif thing.op == '^':
                  return '[label="xor"]'
              elif thing.op == '~':
                  return '[label="not"]'
              elif thing.op == 'x':
                  return '[label="mux"]'
              elif thing.op in 'sc':
                  return '[label="", height=.1, width=.1]'
              elif thing.op == 'r':
                  name = thing.dests[0].name or ''
                  return '[label="%s.next", shape=square, fillcolor=gold]' % name
              elif thing.op == 'w':
                  return '[label="buf"]'
              else:
                  return '[label="%s"]' % (thing.op + str(thing.op_param or ''))
          except AttributeError:
              raise PyrtlError('no naming rule for "%s"' % str(thing))
docs: Returns a "good" graphviz label for thing.