code: def intersect(self, *sets):
          
          sets_ = set()
          for set_ in sets:
              if isinstance(set_, (list, set)):
                  set_ = tuple(set_)
              elif isinstance(set_, MultiValuesField) and not getattr(set_, '_instance', None):
                  raise ValueError('%s passed to "intersect" must be bound'
                                   % set_.__class__.__name__)
              elif not isinstance(set_, (tuple, str, MultiValuesField, _StoredCollection)):
                  raise ValueError('%s is not a valid type of argument that can '
                                   'be used as a set. Allowed are: string (key '
                                   'of a redis set, sorted set or list), '
                                   'limpyd multi-values field ('
                                   'SetField, ListField or SortedSetField), or '
                                   'real python set, list or tuple' % set_)
              if isinstance(set_, SortedSetField):
                  self._has_sortedsets = True
              sets_.add(set_)
  
          self._lazy_collection['intersects'].update(sets_)
          return self
docs: Add a list of sets to the existing list of sets to check. Returns self
          for chaining.
          Each "set" represent a list of pk, the final goal is to return only pks
          matching the intersection of all sets.
          A "set" can be:
          - a string: considered as the name of a redis set, sorted set or list
              (if a list, values will be stored in a temporary set)
          - a list, set or tuple: values will be stored in a temporary set
          - a SetField: we will directly use it's content on redis
          - a ListField or SortedSetField: values will be stored in a temporary
              set (except if we want a sort or values and it's the only "set" to
              use)