code: def _intersection_with_si(self, si):
          
  
          new_si_set = set()
          for si_ in self._si_set:
              r = si_.intersection(si)
              new_si_set.add(r)
  
          if len(new_si_set):
              ret = DiscreteStridedIntervalSet(bits=self.bits, si_set=new_si_set)
  
              if ret.should_collapse(): return ret.collapse()
              else: return ret
  
          else:
              # There is no intersection between two operands
              return StridedInterval.empty(self.bits)
docs: Intersection with another :class:`StridedInterval`.
  
          :param si: The other operand
          :return: