code: def wirevector_subset(self, cls=None, exclude=tuple()):
          
          if cls is None:
              initial_set = self.wirevector_set
          else:
              initial_set = (x for x in self.wirevector_set if isinstance(x, cls))
          if exclude == tuple():
              return set(initial_set)
          else:
              return set(x for x in initial_set if not isinstance(x, exclude))
docs: Return set of wirevectors, filtered by the type or tuple of types provided as cls.
  
          If no cls is specified, the full set of wirevectors associated with the Block are
          returned.  If cls is a single type, or a tuple of types, only those wirevectors of
          the matching types will be returned.  This is helpful for getting all inputs, outputs,
          or registers of a block for example.