code: def set(self, value, pos=None):
          
          f = self._set if value else self._unset
          if pos is None:
              pos = xrange(self.len)
          try:
              length = self.len
              for p in pos:
                  if p < 0:
                      p += length
                  if not 0 <= p < length:
                      raise IndexError("Bit position {0} out of range.".format(p))
                  f(p)
          except TypeError:
              # Single pos
              if pos < 0:
                  pos += self.len
              if not 0 <= pos < length:
                  raise IndexError("Bit position {0} out of range.".format(pos))
              f(pos)
docs: Set one or many bits to 1 or 0.
  
          value -- If True bits are set to 1, otherwise they are set to 0.
          pos -- Either a single bit position or an iterable of bit positions.
                 Negative numbers are treated in the same way as slice indices.
                 Defaults to the entire bitstring.
  
          Raises IndexError if pos < -self.len or pos >= self.len.